     }
     
     private func startDisplayLink() {
-        if (currentProgress() < 1.0 && displayLink == nil) {
+        if (currentProgress() < 1.0 && displayLink?.paused == true) {
             startTime = CACurrentMediaTime();
-            self.displayLink = CADisplayLink(target: self, selector: Selector("animateProgress:"))
-            self.displayLink!.addToRunLoop(NSRunLoop.mainRunLoop(), forMode: NSRunLoopCommonModes)
+            displayLink?.paused = false
         }
     }
     
     private func stopDisplayLink() {
-        if let _displayLink = self.displayLink {
-            self.displayLink!.removeFromRunLoop(NSRunLoop.mainRunLoop(), forMode: NSRunLoopCommonModes)
-            self.displayLink = nil
-        }
+        NSLog("stopped");
+        displayLink?.paused = true
     }
     
     @objc private func animateProgress(displayLink : CADisplayLink) {
+        NSLog("animate");
         if (currentProgress() >= 1.0 || hasStartedFractions() == false) {
             stopDisplayLink()
             stopFractions()

    }

    deinit {
        for timeFraction in fractions {
            if (layer.superlayer != nil) {
                timeFraction.removeObserver(self, forKeyPath: KVOStartedKey, context: nil)

    // MARK: Private Methods and Declarations
    //
    
    private lazy var displayLink : CADisplayLink? = {
        var instance = CADisplayLink(target: self, selector: Selector("animateProgress:"))
        instance.paused = true
        instance!.addToRunLoop(NSRunLoop.mainRunLoop(), forMode: NSRunLoopCommonModes)
        return instance
    }()
    private var startTime : CFTimeInterval?
    private var fractions : Array<TimeFraction> = Array()
    private let KVOStartedKey = "started"
