         self.performSelector(Selector("commitAnimation"), withObject: nil, afterDelay: 0.0)
     }
     
-    func postponeAnimation() {
+    func postponeAnimation() -> Animation {
         ongoingAnimations.remove(self)
         NSObject.cancelPreviousPerformRequestsWithTarget(
             self,
             selector: Selector("commitAnimation"),
             object: nil
         )
+        return self
     }
     
     func commitAnimation() {}

    var duration:NSTimeInterval { get }
    var delay:NSTimeInterval { get }
    func then(duration duration: NSTimeInterval, delay: NSTimeInterval, curve: Curve?, animation: Void -> Void, completion: ((finished: Bool) -> Void)?) -> Animation
}

protocol AnimationDelegate: class {


class ConcreteAnimation: NSObject, DelegatedAnimation {
    
    @objc(isAnimating) internal(set) var animating: Bool = false
    @objc(isComplete) internal(set) var complete: Bool = false
    @objc(isFinished) internal(set) var finished: Bool = true
    @objc internal(set) var duration: NSTimeInterval = 0.0
    @objc var delay: NSTimeInterval = 0.0
    
    weak var delegate: AnimationDelegate?
