diff --git a/includes/image.inc b/includes/image.inc
index b04943b..c1f2f8e 100644
--- a/includes/image.inc
+++ b/includes/image.inc
@@ -147,8 +147,7 @@ function image_get_info($filepath, $toolkit = FALSE) {
  * Scales an image to the exact width and height given.
  *
  * This function achieves the target aspect ratio by cropping the original image
- * equally on both sides, or equally on the top and bottom. This function is
- * useful to create uniform sized avatars from larger images.
+ * according to the selected anchor type.
  *
  * The resulting image always has the exact target dimensions.
  *
@@ -158,6 +157,8 @@ function image_get_info($filepath, $toolkit = FALSE) {
  *   The target width, in pixels.
  * @param $height
  *   The target height, in pixels.
+ * @param $anchor
+ *   The anchor type to use when cropping. Default is 'center-center'.
  *
  * @return
  *   TRUE or FALSE, based on success.
@@ -166,10 +167,13 @@ function image_get_info($filepath, $toolkit = FALSE) {
  * @see image_resize()
  * @see image_crop()
  */
-function image_scale_and_crop(stdClass $image, $width, $height) {
+function image_scale_and_crop(stdClass $image, $width, $height, $anchor = 'center-center') {
   $scale = max($width / $image->info['width'], $height / $image->info['height']);
-  $x = ($image->info['width'] * $scale - $width) / 2;
-  $y = ($image->info['height'] * $scale - $height) / 2;
+
+  // Set the top left coordinates of the crop area, based on the anchor type.
+  list($x, $y) = explode('-', $anchor);
+  $x = image_filter_keyword($x, $image->info['width'] * $scale, $width);
+  $y = image_filter_keyword($y, $image->info['height'] * $scale, $height);
 
   if (image_resize($image, $image->info['width'] * $scale, $image->info['height'] * $scale)) {
     return image_crop($image, $x, $y, $width, $height);
diff --git a/modules/image/image.effects.inc b/modules/image/image.effects.inc
index 122af6c..0ac15ea 100644
--- a/modules/image/image.effects.inc
+++ b/modules/image/image.effects.inc
@@ -26,10 +26,10 @@ function image_image_effect_info() {
     ),
     'image_scale_and_crop' => array(
       'label' => t('Scale and crop'),
-      'help' => t('Scale and crop will maintain the aspect-ratio of the original image, then crop the larger dimension. This is most useful for creating perfectly square thumbnails without stretching the image.'),
+      'help' => t('Scale and crop will maintain the aspect-ratio of the original image, then crop the larger dimension based on the type of anchor selected.'),
       'effect callback' => 'image_scale_and_crop_effect',
-      'form callback' => 'image_resize_form',
-      'summary theme' => 'image_resize_summary',
+      'form callback' => 'image_crop_form',
+      'summary theme' => 'image_crop_summary',
     ),
     'image_crop' => array(
       'label' => t('Crop'),
@@ -158,12 +158,13 @@ function image_crop_effect(&$image, $data) {
  *   with the following items:
  *   - "width": An integer representing the desired width in pixels.
  *   - "height": An integer representing the desired height in pixels.
+ *   - "anchor": An anchor type, such as "center-center", used to set the top left coordinates of the crop area
  * @return
  *   TRUE on success. FALSE on failure to scale and crop image.
  * @see image_scale_and_crop()
  */
 function image_scale_and_crop_effect(&$image, $data) {
-  if (!image_scale_and_crop($image, $data['width'], $data['height'])) {
+  if (!image_scale_and_crop($image, $data['width'], $data['height'], $data['anchor'])) {
     watchdog('image', 'Image scale and crop failed using the %toolkit toolkit on %path (%mimetype, %dimensions)', array('%toolkit' => $image->toolkit, '%path' => $image->source, '%mimetype' => $image->info['mime_type'], '%dimensions' => $image->info['width'] . 'x' . $image->info['height']), WATCHDOG_ERROR);
     return FALSE;
   }
