diff --git amazon.module amazon.module
index 1b5b07f..2c0f0c2 100644
--- amazon.module
+++ amazon.module
@@ -73,6 +73,9 @@ function amazon_perm() {
   return array('administer amazon');
 }
 
+/**
+ * Implementation of hook_theme().
+ */
 function amazon_theme() {
   $templates = array(
     'amazon_item' => array(
@@ -97,6 +100,9 @@ function amazon_theme() {
 }
 
 
+/**
+ * hook_preprocess: amazon_item.
+ */
 function amazon_preprocess_amazon_item(&$variables) {
 
   $item = $variables['item'];
@@ -566,6 +572,52 @@ function amazon_item_delete($asin) {
 }
 
 /**
+ * Try to turn a non-asin into an ASIN where possible.
+ *
+ * If the received input appears to be an EAN (ISBN-13) or an Amazon.com/de/uk
+ * link, then this tries to convert it into an ASIN.
+ * @param $input
+ * @return
+ *   An ASIN if possible. Otherwise whatever was passed in,
+ *   after removing dashes.
+ */
+function amazon_convert_to_asin($input) {
+  $input = preg_replace('/-/','',$input); // Remove dashes.
+  if (preg_match('/^https?:/', $input)) {
+    $parts = preg_split('/\//', $input);
+    $asin = $parts[5]; // 6th section of split, right after /dp/
+    return $asin;
+  }
+  // Attempt conversion of 13-digit ASIN by doing an Amazon lookup.
+  if (strlen($input) == 13 && is_numeric($input)) {
+    $asin = amazon_ean_to_asin($input);
+    return $asin;
+  }
+  return $input;
+}
+
+/**
+ * Given an EAN (ISBN-13), try to get Amazon to give it to us.
+ * @param $ean
+ *   The EAN, ISBN-13 value
+ * @return
+ *   The asin, or NULL if unsuccessful.
+ * @see https://affiliate-program.amazon.com/gp/associates/help/t5/a16?ie=UTF8&pf_rd_t=501&pf_rd_m=ATVPDKIKX0DER&pf_rd_p=&pf_rd_s=assoc-center-2&pf_rd_r=&pf_rd_i=assoc_glossary
+ */
+function amazon_ean_to_asin($ean) {
+  $asin = NULL;
+  $params = array(
+    'ItemId' => $ean,
+    'IdType' => 'EAN',
+    'SearchIndex' => 'Books',
+  );
+  $results = amazon_http_request('ItemLookup', $params);
+  if (!empty($results->Items->Item->ASIN)) {
+    $asin = (string)$results->Items->Item->ASIN;
+  }
+  return $asin;
+}
+/**
  * Utility functions for managing AmazonItem/Node relationships
  */
 
diff --git amazon_filter/amazon_filter.module amazon_filter/amazon_filter.module
index fd428df..292c30b 100644
--- amazon_filter/amazon_filter.module
+++ amazon_filter/amazon_filter.module
@@ -58,6 +58,7 @@ function _amazon_filter_process_text($text) {
     $replace = array();
     foreach ($matches[0] as $key => $value) {
       $asin = $matches[1][$key];
+      $asin = amazon_convert_to_asin($asin);
       $action = $matches[2][$key];
       $items = amazon_item_lookup($asin);
       $item = "";
diff --git asin/asin.module asin/asin.module
index d4689c4..987326e 100644
--- asin/asin.module
+++ asin/asin.module
@@ -135,11 +135,20 @@ function _asin_trim_items(&$items) {
     $items[$delta]['asin'] = trim($items[$delta]['asin']);
   }
 }
-function _asin_load_items($items) {
+
+/**
+ * Get an array of items from Amazon.com.
+ * @param $items
+ * @return unknown_type
+ */
+function _asin_load_items(&$items) {
   $asins = array();
   foreach ($items as $delta => $item) {
     if (!empty($item['asin'])) {
-      $asins[] = trim($item['asin']);
+      $asin = trim($item['asin']);
+      $asin = amazon_convert_to_asin($asin);
+      $asins[] = $asin;
+      $items[$delta]['asin'] = $asin; // Adjust in case we've changed it.
     }
   }
   return amazon_item_lookup($asins);
@@ -335,6 +344,7 @@ function asin_text_process($element, $edit, $form_state, $form) {
   $asin_key = $element['#columns'][0];
   if (!empty($element['#value'][$asin_key])) {
     $element['#value'][$asin_key] = trim($element['#value'][$asin_key]);
+    $element['#value'][$asin_key] = amazon_convert_to_asin($element['#value'][$asin_key]);
   }
   $element[$asin_key] = array(
     '#type' => 'textfield',
