diff --git a/imagecrop.module b/imagecrop.module
index a1b0f14..d19f7ba 100644
--- a/imagecrop.module
+++ b/imagecrop.module
@@ -190,7 +190,7 @@ function imagecrop_form_file_entity_edit_alter(&$form, $form_state) {
 
   if (isset($form['preview']['#file']) && $form['preview']['#file']->type == 'image' && in_array('media', variable_get('imagecrop_modules', array()))) {
 
-    $imagecrop = new Imagecrop();
+    $imagecrop = imagecrop_get_instance();
     $imagecrop->setFile($form['preview']['#file']);
 
     global $user;
@@ -268,7 +268,7 @@ function imagecrop_form_user_profile_form_alter(&$form, $form_state, $form_id) {
       $file = new stdClass();
       $file->uid = $form['#user']->uid;
 
-      $imagecrop = new Imagecrop();
+      $imagecrop = imagecrop_get_instance();
       $imagecrop->setFile($file);
 
       global $user;
@@ -306,6 +306,15 @@ function imagecrop_media_update_updated($file) {
 }
 
 /**
+ * Returns an instance of the class acting as imagecropper.
+ */
+function imagecrop_get_instance() {
+  $class = 'ImageCrop';
+  drupal_alter('imagecrop_class', $class);
+  return new $class();
+}
+
+/**
  * Process function for imagecrop-enabled fields.
  */
 function imagecrop_process_form_element($element) {
@@ -315,7 +324,7 @@ function imagecrop_process_form_element($element) {
     return $element;
   }
 
-  $imagecrop = new ImageCrop();
+  $imagecrop = imagecrop_get_instance();
   $file = NULL;
   $fid = 0;
   $media_field = ($element['#type'] == 'media');
diff --git a/includes/imagecrop.admin.inc b/includes/imagecrop.admin.inc
index 70eaaec..980df1f 100644
--- a/includes/imagecrop.admin.inc
+++ b/includes/imagecrop.admin.inc
@@ -127,7 +127,7 @@ function imagecrop_settings_form() {
  */
 function imagecrop_image_styles_overview($fid, $style_name, $entity_type = NULL, $bundle = NULL, $field_name = NULL) {
 
-  $imagecrop = new ImageCrop();
+  $imagecrop = imagecrop_get_instance();
   try {
 
     $styles = imagecrop_get_enabled_styles_for_crop($entity_type, $bundle, $field_name);
@@ -203,7 +203,7 @@ function imagecrop_cropping_page($fid, $style_name, $entity_type = NULL, $bundle
     $styles = imagecrop_get_enabled_styles_for_crop($entity_type, $bundle, $field_name);
 
     global $user;
-    $imagecrop = new ImageCrop();
+    $imagecrop = imagecrop_get_instance();
     $imagecrop->loadFile($fid);
     $imagecrop->setImageStyle($style_name);
     $imagecrop->setEntityType($entity_type);
@@ -515,7 +515,7 @@ function imagecrop_generate_cropready_image() {
       throw new Exception('Required fields are empty');
     }
 
-    $imagecrop = new ImageCrop();
+    $imagecrop = imagecrop_get_instance();
     $imagecrop->loadFile($_POST['fid']);
     $imagecrop->setImageStyle($_POST['style']);
     $imagecrop->setCropDestinations();
diff --git a/includes/imagecrop.class.inc b/includes/imagecrop.class.inc
index 1dcccbd..99c5609 100644
--- a/includes/imagecrop.class.inc
+++ b/includes/imagecrop.class.inc
@@ -45,7 +45,7 @@ class ImageCrop {
   public static function getInstance($image = NULL) {
 
     if (!isset(self::$instance) && $image) {
-      $imagecrop = new ImageCrop();
+      $imagecrop = imagecrop_get_instance();
       $imagecrop->loadFile($image->source, FALSE);
 
       // if a global presetid is been set, it meens the image is generated from the imagecrop module
