     }
     
     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()

                strokeStart = previousFraction.layer.strokeEnd
            }
            
            if let _displayLink = self.displayLink {
                if (timeFraction.started) { timeFraction.duration += elapsedTime! }
                timeFraction.layer.strokeStart = strokeStart
                timeFraction.layer.strokeEnd = strokeStart + CGFloat(Float(timeFraction.duration) / Float(self.duration))

    }

    deinit {
        displayLink!.removeFromRunLoop(NSRunLoop.mainRunLoop(), forMode: NSRunLoopCommonModes)
        displayLink = nil
        
        for timeFraction in fractions {
            if (layer.superlayer != nil) {
                timeFraction.removeObserver(self, forKeyPath: KVOStartedKey, context: nil)
