         completionObservers.append(observer)
         return observer
     }
-    
+
+    ///  Removes a specified observer from an animation.
+    ///
+    ///  - parameter observer: the observer object to remove.
     public func removeCompletionObserver(observer: AnyObject) {
         let nc = NSNotificationCenter.defaultCenter()
         nc.removeObserver(observer, name: C4AnimationCompletedEvent, object: self)
     }
-    
+
+    ///  Posts a completion event.
+    ///
+    ///  This method is triggered when an animation completes. This can be used in place of `addCompletionObserver` for objects outside the scope of the context in which the animation is created.
     public func postCompletedEvent() {
         dispatch_async(dispatch_get_main_queue()) {
             NSNotificationCenter.defaultCenter().postNotificationName(C4AnimationCompletedEvent, object: self)
         }
     }
 
+    ///  Adds a cancel observer to an animation.
+    ///
+    ///  The cancel observer listens for when an animation is canceled then executes a specified block of code.
+    ///
+    ///  - parameter action: a block of code to be executed when an animation is canceled.
+    ///
+    ///  - returns: the observer object.
     public func addCancelObserver(action: () -> Void) -> AnyObject {
         let nc = NSNotificationCenter.defaultCenter()
         let observer = nc.addObserverForName(C4AnimationCancelledEvent, object: self, queue: NSOperationQueue.currentQueue(), usingBlock: { notification in

private let C4AnimationCompletedEvent = "C4AnimationCompleted"
private let C4AnimationCancelledEvent = "C4AnimationCancelled"

public class C4Animation {
    public enum Curve {
        case Linear
        case EaseOut
        case EaseIn
        case EaseInOut
    }
    
    public var autoreverses = false
    public var repeatCount = 0.0
    public var repeats: Bool {
        get {
            return repeatCount > 0

            nc.removeObserver(observer)
        }
    }

    ///  Adds a completion observer to an animation.
    ///
    ///  The completion observer listens for the end of the animation then executes a specified block of code.
    ///
    ///  - parameter action: a block of code to be executed at the end of an animation.
    ///
    ///  - returns: the observer object.
    public func addCompletionObserver(action: () -> Void) -> AnyObject {
        let nc = NSNotificationCenter.defaultCenter()
        let observer = nc.addObserverForName(C4AnimationCompletedEvent, object: self, queue: NSOperationQueue.currentQueue(), usingBlock: { notification in
