diff --git a/includes/imagecrop.admin.inc b/includes/imagecrop.admin.inc
index 4254a6b..86fdd2c 100755
--- a/includes/imagecrop.admin.inc
+++ b/includes/imagecrop.admin.inc
@@ -230,6 +230,12 @@ function imagecrop_crop_settings_form($form, $form_state, $imagecrop) {
     '#attributes' => array('class' => 'edit-image-crop-height'),
   );
 
+  $form['image-crop-scale'] = array(
+    '#type' => 'hidden',
+    '#default_value' => $imagecrop->getScale(),
+    '#attributes' => array('class' => 'edit-image-crop-scale'),
+  );
+
   $form['fid'] = array(
     '#type' => 'hidden',
     '#value' => $imagecrop->getFile()->fid,
@@ -283,6 +289,7 @@ function imagecrop_crop_settings_form_submit($form, &$form_state) {
   $record->yoffset = $form_state['values']['image-crop-y'];
   $record->width = $form_state['values']['image-crop-width'];
   $record->height = $form_state['values']['image-crop-height'];
+  $record->scale = $form_state['values']['image-crop-scale'];
 
   drupal_write_record('image_crop_settings', $record);
 
@@ -304,8 +311,8 @@ function imagecrop_crop_settings_form_submit($form, &$form_state) {
 function imagecrop_scale_settings_form($form, $form_state, $imagecrop) {
 
   $step = variable_get('imagecrop_scale_step', 50);
-  $image_width = $scale_width = $imagecrop->getImageWidth();
-  $image_height = $imagecrop->getImageHeight();
+  $image_width = $scale_width = $imagecrop->getOriginalImageWidth();
+  $image_height = $imagecrop->getOriginalImageHeight();
   $aspect = $image_width / $image_height;
   $crop_width = $imagecrop->getWidth();
   $crop_height = $imagecrop->getHeight();
@@ -325,10 +332,11 @@ function imagecrop_scale_settings_form($form, $form_state, $imagecrop) {
 
   // only show when there are multiple scaling options available
   if (count($options) > 1) {
+    $current_width = $imagecrop->getScale();
     $form['scaling'] = array(
       '#type' => 'select',
       '#options' => $options,
-      '#default_value' => $imagecrop->getScale(),
+      '#default_value' => $current_width . 'x'. ($current_width / $aspect),
       '#title' => t('Scale image')
     );
   }
diff --git a/includes/imagecrop.class.inc b/includes/imagecrop.class.inc
index de9028a..e1e968f 100755
--- a/includes/imagecrop.class.inc
+++ b/includes/imagecrop.class.inc
@@ -20,6 +20,9 @@ class ImageCrop {
   private $fieldName;
   private $styleDestination;
   private $cropDestination;
+  private $imageWidth;
+  private $originalImageWidth;
+  private $originalImageHeight;
 
   private $isResizable = FALSE;
   private $downscalingAllowed = TRUE;
@@ -147,6 +150,13 @@ class ImageCrop {
   }
 
   /**
+   * Get the original width from the image to crop.
+   */
+  public function getOriginalImageWidth() {
+    return $this->originalImageWidth;
+  }
+
+  /**
    * Set the scaling width from the image to crop.
    */
   public function setScale($scale) {
@@ -168,6 +178,13 @@ class ImageCrop {
   }
 
   /**
+   * Get the original height from the image to crop.
+   */
+  public function getOriginalImageHeight() {
+    return $this->originalImageHeight;
+  }
+
+  /**
    * Set the status of cropping mode (TRUE = busy cropping).
    */
   public function setInCroppingMode($inCroppingMode) {
@@ -272,8 +289,8 @@ class ImageCrop {
   public function loadCropSettings() {
 
     $size = getimagesize(drupal_realpath($this->file->uri));
-    $this->imageWidth = $size[0];
-    $this->imageHeight = $size[1];
+    $this->imageWidth = $this->originalImageWidth = $size[0];
+    $this->imageHeight = $this->originalImageHeight = $size[1];
 
     $settings = db_select('image_crop_settings')
       ->fields('image_crop_settings')
@@ -294,6 +311,12 @@ class ImageCrop {
       $this->scale = $settings->scale;
       $this->hasSettings = TRUE;
 
+      if ($this->scale != 'original') {
+        $aspect = $this->originalImageWidth / $this->originalImageHeight;
+        $this->imageWidth = $this->scale;
+        $this->imageHeight = intval($this->imageWidth / $aspect);
+      }
+
     }
 
     if ($this->resizeAspectRatio == 'KEEP') {
@@ -315,6 +338,15 @@ class ImageCrop {
       return;
     }
 
+    // Scale first if requested
+    if ($this->scale != 'original') {
+      $data = array(
+        'width' => $this->scale,
+        'height' => PHP_INT_MAX,
+      );
+      image_scale_effect($image, $data);
+    }
+
     $data = array(
       'anchor' => $this->xoffset . '-' . $this->yoffset,
       'width' => $this->width,
diff --git a/js/imagecrop.ui.crop.js b/js/imagecrop.ui.crop.js
index b06306c..96891d1 100755
--- a/js/imagecrop.ui.crop.js
+++ b/js/imagecrop.ui.crop.js
@@ -13,6 +13,7 @@ Drupal.Imagecrop.imageCropWidthField = null;
 Drupal.Imagecrop.imageCropHeightField = null;
 Drupal.Imagecrop.imageCropXField = null;
 Drupal.Imagecrop.imageCropYField = null;
+Drupal.Imagecrop.imageCropScaleField = null;
 Drupal.Imagecrop.resizeMe = null;
 
 /**
@@ -20,11 +21,13 @@ Drupal.Imagecrop.resizeMe = null;
  */
 Drupal.Imagecrop.cropUi.initControls = function() {
   
-  Drupal.Imagecrop.imageCropWidthField = $('input[name="image-crop-width"]', '#imagecrop-crop-settings-form');
-  Drupal.Imagecrop.imageCropHeightField = $('input[name="image-crop-height"]', '#imagecrop-crop-settings-form');
-  Drupal.Imagecrop.imageCropXField = $('input[name="image-crop-x"]', '#imagecrop-crop-settings-form');
-  Drupal.Imagecrop.imageCropYField = $('input[name="image-crop-y"]', '#imagecrop-crop-settings-form');
-  
+  var $imagecropform = $('#imagecrop-crop-settings-form');
+  Drupal.Imagecrop.imageCropWidthField = $('input[name="image-crop-width"]', $imagecropform);
+  Drupal.Imagecrop.imageCropHeightField = $('input[name="image-crop-height"]', $imagecropform);
+  Drupal.Imagecrop.imageCropXField = $('input[name="image-crop-x"]', $imagecropform);
+  Drupal.Imagecrop.imageCropYField = $('input[name="image-crop-y"]', $imagecropform);
+  Drupal.Imagecrop.imageCropScaleField = $('input[name="image-crop-scale"]', $imagecropform);
+
   Drupal.Imagecrop.resizeMe = $('#resizeMe');
   
   if (Drupal.Imagecrop.resizeMe.resizable) { 
@@ -166,6 +169,7 @@ Drupal.Imagecrop.cropUi.scaleImage = function() {
       }      
  
       Drupal.Imagecrop.resizeMe.css({'background-image' : 'url(' + background + ')'})
+      Drupal.Imagecrop.imageCropScaleField.val(dimensions[0]);
       
     }
   })
