             return
         }
         
-        self.tweenOperations.forEach {
+        func remove<T>(_ operation: Operation<T>) {
+            if removeTweenOperation(operation) {
+                expiry(operation)
+            }
+        }
+        
+        let copy = self.tweenOperations
+        
+        copy.forEach {
+            
             switch $0 {
             case let .cgfloat(operation):
-                progressOperation(timeStamp, operation: operation)
+                if progressOperation(timeStamp, operation: operation) {
+                    remove(operation)
+                }
             case let .float(operation):
-                progressOperation(timeStamp, operation: operation)
+                if progressOperation(timeStamp, operation: operation) {
+                    remove(operation)
+                }
             case let .double(operation):
-                progressOperation(timeStamp, operation: operation)
-            }
-        }
-        
-        let copy = self.tweenOperations
-        
-        copy.forEach {
-            switch $0 {
-            case let .cgfloat(operation) where operation.expired:
-                if removeTweenOperation(operation) {
-                    expiry(operation)
+                if progressOperation(timeStamp, operation: operation) {
+                    remove(operation)
                 }
-            case let .float(operation) where operation.expired:
-                if removeTweenOperation(operation) {
-                    expiry(operation)
-                }
-            case let .double(operation) where operation.expired:
-                if removeTweenOperation(operation) {
-                    expiry(operation)
-                }
-            default:
-                break
             }
         }
     }

        let diff = CACurrentMediaTime() - pausedTimeStamp
        
        func pause<T>(_ operation: Operation<T>, time: TimeInterval) {
            
            if let startTimeStamp = operation.period.startTimeStamp {
                
                operation.period.set(startTimeStamp: startTimeStamp + time)
            }
        }
        
        self.tweenOperations.forEach {
            switch $0 {
            case let .cgfloat(operation):
                pause(operation, time: diff)

        return self.tweenOperations.count > 0
    }
    
    fileprivate func progressOperation<T>(_ timeStamp: TimeInterval, operation: Operation<T>) -> Bool {
        
        let period = operation.period
        
        guard let startTimeStamp = period.startTimeStamp else {
            period.set(startTimeStamp: timeStamp)
            return false
        }
        
        guard period.hasStarted(timeStamp)
            else { return false }
        
        if !period.hasEnded(timeStamp) {
            
