             self.endPercentage = percentage
         }
         
+        if drag == .start {
+            progressPosition = positionFromValue(value: self.startPercentage)
+            
+        } else {
+            if recognizer.state != .ended {
+                progressPosition = positionFromValue(value: self.endPercentage)
+            } else {
+                progressPosition = positionFromValue(value: self.startPercentage)
+            }
+        }
+        
+        progressIndicator.center = CGPoint(x: progressPosition , y: progressIndicator.center.y)
+        let progressPercentage = progressIndicator.center.x * 100 / self.frame.width
+        
+        if self.progressPercentage != progressPercentage {
+            let progressSeconds = secondsFromValue(value: progressPercentage)
+            self.delegate?.indicatorDidChangePosition(videoRangeSlider: self, position: progressSeconds)
+        }
+        
         self.progressPercentage = progressPercentage
         
         layoutSubviews()
     }
     
     func progressDragged(recognizer: UIPanGestureRecognizer){
+        if !isProgressIndicatorDraggable {
+            return
+        }
+        
+        updateGestureStatus(recognizer: recognizer)
+        
         let translation = recognizer.translation(in: self)
 
         let positionLimitStart  = positionFromValue(value: self.startPercentage)


        if self.progressPercentage != progressPercentage{
            let progressSeconds = secondsFromValue(value: progressPercentage)
            self.delegate? .indicatorDidChangePosition(videoRangeSlider: self, position: progressSeconds)
        }

        self.startPercentage = startPercentage

    public var maxSpace: Float = 0              // In Seconds
    
    public var isProgressIndicatorSticky: Bool = false
    public var isProgressIndicatorDraggable: Bool = true
    
    var isUpdatingThumbnails = false
    var isReceivingGesture: Bool = false
    
    public enum ABTimeViewPosition{
        case top
        case bottom
