         }
 
         didSet {
-            switch state {
-            case .finished:
+            switch (oldValue, state) {
+
+            case (.ready, .ready):
+                invalidTransition(from: oldValue, to: state)
+
+            case (.ready, .animating):
+                break
+
+            case (.ready, .finished):
+                break
+
+            case (.animating, .ready):
+                invalidTransition(from: oldValue, to: state)
+
+            case (.animating, .animating):
+                invalidTransition(from: oldValue, to: state)
+
+            case (.animating, .finished):
                 queue?.animationDidFinish(task: self)
-            case .ready, .animating:
+
+            case (.finished, .ready):
+                invalidTransition(from: oldValue, to: state)
+
+            case (.finished, .animating):
+                invalidTransition(from: oldValue, to: state)
+
+            case (.finished, .finished):
                 break
             }
         }

                break

            case (.animating, .ready):
                invalidTransition(from: newValue, to: state)

            case (.animating, .animating):
                break

            switch (state, newValue) {

            case (.ready, .ready):
                invalidTransition(from: state, to: newValue)

            case (.ready, .animating):
                triggerAnimation()
