         }
     }
     
+    func checkBoundsAfterScale()  {
+        dispatch_async(dispatch_get_main_queue()) {
+            self.checkBounds()
+        }
+    }
+
     func scale(sender:UISlider){
         dispatch_async(context.dispatchQueue) { () -> Void in
-            self.transformFilter.scale(factor: sender.value + 1 )
+            
+            var scale = sender.value * 2
+            
+            if scale < 1 {
+                //
+                // scale can't be less then 1 while we try to crop 
+                //
+                scale = 1
+            }
+            
+            self.transformFilter.scale(factor: scale)
             self.updateCrop()
             
             dispatch_async(dispatch_get_main_queue(), {
                 if self.timer != nil {
                     self.timer?.invalidate()
                 }
-                self.timer = NSTimer.scheduledTimerWithTimeInterval(0.03, target: self, selector: #selector(self.checkBoundsAfterRotation), userInfo: nil, repeats: false)
+                self.timer = NSTimer.scheduledTimerWithTimeInterval(0.03, target: self, selector: #selector(self.checkBoundsAfterScale), userInfo: nil, repeats: false)
             })
         }
     }

    }
    
    func updateCrop()  {
        self.cropFilter.region = currentCropRegion(model: transformFilter.model)
    }
    
    override func viewDidLoad() {

        slider.value = 0.5
        rotate(slider)
        
        scaleSlider.value = 0.5
        scale(scaleSlider)
        
        transformFilter.translation = float2(0)
        
        warpFilter.sourceQuad = IMPQuad()
