     /**
     Performs the block passed in parameter and waits until the DaisyChain is resumed.
     */
-    private mutating func performAndWait(completion: () -> Void) {
+    private func performAndWait(completion: () -> Void) {
         dispatch_async(queue) {
             dispatch_async(dispatch_get_main_queue(), completion)
             dispatch_semaphore_wait(self.semaphore, DISPATCH_TIME_FOREVER)

                            this block is performed at the beginning of the next run loop cycle.
                            This parameter may be `NULL`.
    */
    internal mutating func animateWithDuration(duration: NSTimeInterval, delay: NSTimeInterval, options: UIViewAnimationOptions, animations: () -> Void, completion: ((Bool) -> Void)?) {
        performAndWait {
            UIView.animateWithDuration(duration, delay: delay, options: options, animations: animations, completion: { finished in
                self.resume(completion, finished: finished)

                            in your view hierarchy. This block takes no parameters and has no return
                            value. This parameter must not be `NULL`.
    */
    internal func animateWithDuration(duration: NSTimeInterval, animations: () -> Void) {
        performAndWait {
            UIView.animateWithDuration(duration, animations: animations, completion: { finished -> Void in
                self.resume(nil, finished: finished)
