diff --git CHANGELOG.txt CHANGELOG.txt
index 6b14ee9..b982e1b 100644
--- CHANGELOG.txt
+++ CHANGELOG.txt
@@ -1,5 +1,9 @@
 $Id$
 
+6.x-1.2 release
+===============
+- [#869286] by rfay: Add a configurable default image. Sponsored by 
+
 6.x-1.1 release
 ===============
 - [#848990] by rfay: Add feeds integration for ASIN field. Sponsored by Bobastream, LLC. Thanks!
diff --git amazon.admin.inc amazon.admin.inc
index ca1cb70..39bb9a6 100644
--- amazon.admin.inc
+++ amazon.admin.inc
@@ -53,6 +53,66 @@ function amazon_settings_form($form_state) {
     '#default_value' => variable_get('amazon_aws_secret_access_key',""),
     '#required' => TRUE,
   );
+  $form['default_image'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Default image to use when Amazon does not provide an image'),
+    '#collapsible' => TRUE,
+    '#collapsed' => TRUE,
+  );
+
+  if (module_exists('imagecache')) {
+    $form['#attributes'] = array('enctype' => "multipart/form-data");
+    $default_image = variable_get('amazon_default_image', '');
+    if (!empty($default_image)) {
+      $preset = variable_get('amazon_default_image_small_preset', '');
+      if (!empty($preset)) {
+        $themed_image = theme('imagecache', $preset, $default_image, t('Amazon default image'));
+      }
+      else {
+        $themed_image = theme('image', $default_image);
+      }
+      $form['default_image']['existing_image'] = array(
+        '#type' => 'markup',
+        '#value' => $themed_image,
+      );
+    }
+    $form['default_image']['amazon_default_image'] = array(
+      '#type' => 'file',
+      '#title' => t('Default image to be used when no image is available'),
+      '#size' => 20,
+      '#default_value' => $default_image,
+    );
+
+    $imagecache_presets = array('' => t('Select a preset'));
+    foreach(imagecache_presets() as $preset) {
+      $imagecache_presets[$preset['presetname']] = $preset['presetname'];
+    };
+    $form['default_image']['amazon_default_image_large_preset'] = array(
+      '#title' => 'Imagecache preset for "large" size',
+      '#type' => 'select',
+      '#options' => $imagecache_presets,
+      '#default_value' => variable_get('amazon_default_image_large_preset', ''),
+    );
+    $form['default_image']['amazon_default_image_medium_preset'] = array(
+      '#title' => 'Imagecache preset for "medium" size',
+      '#type' => 'select',
+      '#options' => $imagecache_presets,
+      '#default_value' => variable_get('amazon_default_image_medium_preset', ''),
+    );
+    $form['default_image']['amazon_default_image_small_preset'] = array(
+      '#title' => 'Imagecache preset for "small" size',
+      '#type' => 'select',
+      '#options' => $imagecache_presets,
+      '#default_value' => variable_get('amazon_default_image_small_preset', ''),
+    );
+
+  }
+  else {
+    $form['default_image']['if_imagecache'] = array(
+      '#type' => 'markup',
+      '#value' => t('If imagecache were installed you could set a default image'),
+    );
+  }
 
   // Now add the Javascript that does the fancy hide/show effects.
   drupal_add_js(drupal_get_path('module', 'amazon') .'/amazon.admin.js');
@@ -60,6 +120,34 @@ function amazon_settings_form($form_state) {
   return system_settings_form($form);
 }
 
+/**
+ * Validation handler for amazon_settings_form().
+ * Handles the file upload and making sure it happens correctly.
+ */
+function amazon_settings_form_validate($form, &$form_state) {
+
+  if ($file = file_save_upload('amazon_default_image')) {
+    $orig_picture = variable_get('amazon_default_image', '');
+    if (!empty($orig_picture) && file_exists($orig_picture)) {
+      file_delete($orig_picture);
+    }
+
+    // The image was saved using file_save_upload() and was added to the
+    // files table as a temporary file. We'll make a copy and let the garbage
+    // collector delete the original upload.
+    $info = image_get_info($file->filepath);
+    if (file_copy($file, 0, FILE_EXISTS_REPLACE)) {
+      $form_state['values']['amazon_default_image'] = $file->filepath;
+    }
+    else {
+      form_set_error('amazon_default_image', t("Failed to upload the picture image."));
+    }
+  }
+}
+
+/**
+ * Form to determine how often cache is refreshed, etc.
+ */
 function amazon_storage_settings_form() {
 
   $period = drupal_map_assoc(array(3600, 7200, 14400, 21600, 43200, 86400), 'format_interval');
@@ -89,7 +177,9 @@ function amazon_storage_settings_form() {
   return system_settings_form($form);
 }
 
-
+/**
+ * Form to allow debugging the actual retrieval from Amazon.
+ */
 function amazon_test_form($form_state) {
   $form = array();
 
diff --git amazon.css amazon.css
index 760fa84..e9d668c 100644
--- amazon.css
+++ amazon.css
@@ -20,3 +20,8 @@ div.amazon-item div {
   margin-left: 100px;
   height: 4em;
 }
+
+#edit-amazon-default-image-wrapper {
+  padding-left: 10px;
+  display: inline-block;
+}
\ No newline at end of file
diff --git amazon.install amazon.install
index 0854802..2cce35f 100644
--- amazon.install
+++ amazon.install
@@ -15,6 +15,10 @@ function amazon_uninstall() {
   drupal_uninstall_schema('amazon');
   $variables = preg_split('/\s+/',
     "amazon_media_data
+    amazon_default_image
+    amazon_default_image_large_preset
+    amazon_default_image_medium_preset
+    amazon_default_image_small_preset
     amazon_locale
     amazon_associate_setting
     amazon_custom_associate_id
@@ -321,10 +325,20 @@ function amazon_update_6012() {
  * @return unknown_type
  */
 function amazon_update_6013() {
-    db_change_field($ret, 'amazon_item', 'lowestpricecurrencycode', 'lowestpricecurrencycode',
-      array('type' => 'varchar', 'length' => 32));
-    db_change_field($ret, 'amazon_item', 'amazonpricecurrencycode', 'amazonpricecurrencycode',
-      array('type' => 'varchar', 'length' => 32));
-    return $ret;
+  db_change_field($ret, 'amazon_item', 'lowestpricecurrencycode', 'lowestpricecurrencycode',
+  array('type' => 'varchar', 'length' => 32));
+  db_change_field($ret, 'amazon_item', 'amazonpricecurrencycode', 'amazonpricecurrencycode',
+  array('type' => 'varchar', 'length' => 32));
+  return $ret;
 }
 
+/**
+ * Implementation of a default image requires that all the images be updated.
+ * Here we'll just set the timestamp to 0 and then let cron finish the job.
+ */
+function amazon_update_6014() {
+  // Force all data to be updated from Amazon so that images can be properly updated.
+  $ret[] = update_sql('UPDATE {amazon_item} SET timestamp = 0;');
+  drupal_set_message(t('If you have enabled a default image, you may need to wait for a few cron runs (or run cron a few times) before all images are properly set up.'));
+  return $ret;
+}
\ No newline at end of file
diff --git amazon.module amazon.module
index a0a0db5..8b51028 100644
--- amazon.module
+++ amazon.module
@@ -565,8 +565,38 @@ function amazon_item_insert($item) {
     }
   }
 
-  // Save the product images if they exist.
+
+  // Save the product images if they exist, or provide defaults
   if (in_array('images', variable_get('amazon_core_data', array('creators', 'images')))) {
+
+    // If we have no images, go get default images.
+    // TODO: This is pretty ugly. Find a better way. Store this information as
+    // variable, whatever.  No reason to do this every time.
+    if (empty($item['imagesets'])) {
+      $default_image = variable_get('amazon_default_image', '');
+      foreach (array('small', 'medium', 'large') as $key) {
+        $preset_name = variable_get('amazon_default_image_' . $key . '_preset', '');
+        if (!empty($preset_name)) {
+          $preset = imagecache_preset_by_name($preset_name);
+          $themed_image = theme('imagecache', $preset_name, $default_image, t('No image was provided'));
+          if ($key == 'medium') {
+            $themed_default_image = $themed_image;
+          }
+          preg_match_all('/(src|height|width)=("[^"]*")/i', $themed_image, $tags);
+          foreach ($tags[1] as $tag_index => $tag) {
+            if ($tag == 'src') {
+              $item['imagesets']["{$key}image"]['url'] = str_replace('"', '',$tags[2][$tag_index]);
+            }
+            if ($tag == 'width') {
+              $item['imagesets']["{$key}image"]['width'] = str_replace('"', '',$tags[2][$tag_index]);
+                          }
+            if ($tag == 'height') {
+              $item['imagesets']["{$key}image"]['height'] = str_replace('"', '',$tags[2][$tag_index]);
+            }
+          }
+        }
+      }
+    }
     if (isset($item['imagesets'])) {
       foreach($item['imagesets'] as $size => $data) {
         $image = array('asin' => $item['asin'], 'size' => $size, 'height' => $data['height'], 'width' => $data['width'], 'url' => $data['url']);
