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

        }
        
        
        scaleSlider.value = 0.0
        scaleSlider.addTarget(self, action: #selector(ViewController.scale(_:)), forControlEvents: .ValueChanged)
        view.addSubview(scaleSlider)
        

    ///  Check bounds of inscribed Rectangular
    func checkBounds() {
        
        let aspect   = transformFilter.aspect
        let model    = transformFilter.model
        //
        // Model of Cropped Quad
        //
        let cropQuad = IMPQuad(region:currentCropRegion, aspect: aspect)
        
        //
        // Model of
        //
        let transformedQuad = IMPPlate(aspect: aspect).quad(model: model)
        
        //
        // Offset for transformed quad which should be inscribed croped quad
        //
        // NOTE: 
        // 1. quads should be rectangle
        // 2. scale of transformed quad should be greate then of equal scaleFactorFor for the transformed model:
        //    IMPPlate(aspect: transformFilter.aspect).scaleFactorFor(model: model)
        //
        let offset   = transformedQuad.translation(quad: cropQuad)
        
        animateTranslation(-offset)
    }
