diff --git aat_legacy/aat_legacy.d5-migrate.inc aat_legacy/aat_legacy.d5-migrate.inc
new file mode 100644
index 0000000..2b11b52
--- /dev/null
+++ aat_legacy/aat_legacy.d5-migrate.inc
@@ -0,0 +1,66 @@
+<?php
+// $Id$
+/**
+ * @file
+ * Migration for the amazonnode and related item links from D5 amazontools.
+ */
+
+/**
+ * Batch Operation Callback
+ */
+function _aat_legacy_migrate_field_from_d5($item, &$context) {
+  if (!isset($context['sandbox']['progress'])) {
+    $context['sandbox']['progress'] = 0;
+    $context['sandbox']['current_node'] = 0;
+
+    if ($node = _aat_legacy_migrate_from_d5($item['nid'], $item['ntype'])) {
+      $context['results'][$node->nid] = $node->title;
+
+      $context['sandbox']['progress']++;
+      $context['sandbox']['current_node'] = $node->nid;
+      $context['message'] = t('Processing nid <a href="!url">%nid</a>, %title', array('!url' => url("node/$node->nid"), '%nid' => $node->nid, '%title' => $node->title));
+    }
+  }
+}
+/**
+ * Batch 'finished' callback
+ */
+function _aat_legacy_migrate_fields_finished($success, $results, $operations) {
+  if ($success) {
+    $message = t('%count legacy fields (amazonnodes and links) were imported.', array('%count' => count($results)));
+    $message .= theme('item_list', $results);
+  }
+  else {
+    // An error occurred.
+    // $operations contains the operations that remained unprocessed.
+    $error_operation = reset($operations);
+    $message = t('An error occurred while processing %op.  with arguments = %args.', array('%op' => $error_operation[0], '%args' => print_r($error_operation[0], TRUE)));
+  }
+  drupal_set_message($message);
+}
+
+/**
+ * Process one node.
+ * @param $nid
+ *   The nid to which we are to add values.
+ * @param $type
+ *   The ntype field from amazonnode table: the content type we're working with.
+ * @return
+ *   the updated node.
+ */
+function _aat_legacy_migrate_from_d5($nid, $type) {
+  $results = db_query("SELECT asin, ntype FROM {amazonnode} an WHERE an.nid = %d and an.ntype = '%s'", $nid, $type);
+  $dirty = FALSE;
+  $node = node_load($nid);
+
+  while ($asin = db_fetch_object($results)) {
+    // if (!in_array($asin->asin, array_keys(array_values($node->field_legacy_asin)))) {
+    $node->field_legacy_asin[]['asin'] = $asin->asin;
+    // }
+  }
+  node_save($node);
+  $sql = "DELETE FROM {amazonnode} WHERE nid = %d AND ntype = '%s'";
+  db_query($sql, $nid, $type);
+
+  return $node;
+}
\ No newline at end of file
diff --git aat_legacy/aat_legacy.info aat_legacy/aat_legacy.info
index 0cb5faa..ea7f0eb 100644
--- aat_legacy/aat_legacy.info
+++ aat_legacy/aat_legacy.info
@@ -1,7 +1,8 @@
 ; $Id$
-name = Amazon legacy support
-description = Provides an upgrade path for users of the Amazon Associates Tools module.
+name = Amazon legacy importer
+description = This module is used only to import legacy Drupal 5 Amazontools data. After upgrade it should be disabled.
 package = Amazon
 dependencies[] = amazon
+dependencies[] = asin
 core = 6.x
 php = 5.2
diff --git aat_legacy/aat_legacy.install aat_legacy/aat_legacy.install
index 90484fa..a76649e 100644
--- aat_legacy/aat_legacy.install
+++ aat_legacy/aat_legacy.install
@@ -1,20 +1,10 @@
 <?php
-// $Id$
+// $Id $
 
-// Migrate data from the old Amazon Associates Tools.
 function aat_legacy_install() {
-  if (db_table_exists('amazonnode')) {
-    $select  = "SELECT a.nid, a.asin FROM {amazonnode} a ";
-    $select .= "WHERE a.ntype IN ('amazon', 'amazon_node')";
+  drupal_set_message(t("The AAT Legacy module is only for importing legacy data. After data is imported, this module can be disabled."));
+}
 
-    $results = db_query($select);
+function aat_legacy_uninstall() {
 
-    $insert = "INSERT INTO {amazon_item_node} (nid, vid, asin, module) VALUES (%d, %d, '%s', '%s')";
-    $i = 0;
-    while ($asin = db_fetch_object($results)) {
-      db_query($insert, $asin->nid, -1, $asin->asin, 'aat_legacy');
-      $i++;
-    }
-    drupal_set_message(t("Imported %num records from legacy amazon_node table into amazon_item_node table", array('%num' => $i)));
-  }
-}
+}
\ No newline at end of file
diff --git aat_legacy/aat_legacy.module aat_legacy/aat_legacy.module
index 9e17200..0ffb08b 100644
--- aat_legacy/aat_legacy.module
+++ aat_legacy/aat_legacy.module
@@ -1,46 +1,169 @@
 <?php
 // $Id$
 
-function aat_legacy_node_info() {
-  return array(
-    'amazon' => array(
-      'name' => t('Amazon review'),
-      'module' => 'aat_legacy',
-      'description' => t('A review of an Amazon.com product.'),
-      'locked' => TRUE,
-    ),
-    'amazon_node' => array(
-      'name' => t('Amazon data'),
-      'module' => 'aat_legacy',
-      'description' => t('Legacy Amazon data created by the Amazon Associates Tools module.'),
-      'has_body' => FALSE,
-      'locked' => TRUE,
-    )
+/**
+ * Implementation of hook_menu.
+ */
+function aat_legacy_menu() {
+  $items['admin/settings/aat_legacy'] = array(
+    'title' => "Amazontools Legacy Import",
+    'page callback' => 'drupal_get_form',
+    'access arguments' => array('administer site configuration'),
+    'page arguments' => array('aat_legacy_import_form')
   );
+  return $items;
+}
 
+/**
+ * Form to start the import process.
+ */
+function aat_legacy_import_form() {
+  $form = array();
+  $form['explanation'] = array(
+    '#type' => 'markup',
+    '#prefix' => "<div>",
+    '#value' => t("Here you can import legacy Drupal 5 items from Amazon Tools. This may take a long time. It may be safely restarted."),
+    '#suffix' => "</div>",
+  );
+  $form['submit'] = array(
+    '#type' => 'submit',
+    '#value' => t("Start import"),
+  );
+  return $form;
 }
 
-function aat_legacy_load($node) {
-  $asins = array();
-  $sql = "SELECT * FROM {amazon_item_node} ain WHERE ain.nid = %d AND ain.module = 'aat_legacy'";
-  $results = db_query($sql, $node->nid);
-  while ($asin = db_fetch_array($results)) {
-    $asins[$asin['asin']] = $asin;
-  }
-  $node->aat_legacy_items = $asins;
+function aat_legacy_import_form_submit($form_state, &$form_value) {
+  aat_legacy_import_data();
 }
 
-function aat_legacy_view(&$node, $teaser = FALSE, $page = FALSE) {
-  $asins = amazon_item_lookup(array_keys($node->aat_legacy_items));
-  foreach ($asins as $asin) {
-    $node->content['aat_legacy_items'][] = array(
-      '#type' => 'markup',
-      '#value' => theme('amazon_item', $asin)
+
+/**
+ * Create a CCK field for each node type that had Amazon link in D5.
+ * Then populate it.
+ */
+function aat_legacy_import_data() {
+  $ret = array();
+  $result = db_query("SELECT DISTINCT type FROM node_type nt, amazonnode an where nt.type = an.ntype");
+  // Build a list of fields that need data updating.
+  module_load_install('content');
+  module_load_include('inc', 'content', 'includes/content.admin');
+  module_load_include('inc', 'content', 'includes/content.crud');
+
+  $field = aat_legacy_legacy_field_description();
+
+  // First attach the new field to the content type.
+  $types = array();
+  while ($type_ary = db_fetch_array($result)) {
+    $ntype = $type_ary['type'];
+    $types[] = $ntype;
+    $instance = content_field_instance_read(array('type_name' => $ntype, 'field_name' => 'field_legacy_asin'));
+    if (empty($instance)) {
+      drupal_set_message(t("Adding field_legacy_asin to node type %ntype", array('%ntype' => $ntype)));
+      $field['type_name'] = $ntype;
+      content_field_instance_create($field);
+    }
+    else {
+      drupal_set_message(t("field_legacy_asin already exists in node type %ntype; not creating it.", array('%ntype' => $ntype)));
+    }
+  }
+
+  // Now batch-import the data from those items.
+  if (!empty($types)) {
+    $operations = array();
+    $sql = "SELECT DISTINCT(nid) nid, ntype  FROM {amazonnode} WHERE ntype IN (" . db_placeholders($types, 'varchar') . ") ORDER BY nid ASC";
+    $result = db_query($sql, $types);
+    while ($item = db_fetch_object($result)) {
+      $operations[] = array('_aat_legacy_migrate_field_from_d5', array(array('nid' => $item->nid, 'ntype' => $item->ntype)));
+    }
+    $batch = array(
+      'title' => t('Migrating amazonnode field values into field_legacy_asin CCK fields'),
+      'operations' => $operations,
+      'finished' => '_aat_legacy_migrate_fields_finished',
+      'init_message' => t('Beginning migration of legacy_asin fields.'),
+      'progress_message' => t('Processed @current out of @total.'),
+      'error_message' => t('AAT Legacy field update encountered an error.'),
+      'file' => drupal_get_path('module', 'aat_legacy') .'/aat_legacy.d5-migrate.inc',
     );
+    batch_set($batch);
   }
-  return $node;
+  if (empty($operations)) {
+    drupal_set_message(t("You have no items remaining to import. You may now disable the Amazon Legacy Importer module (aat_legacy)."));
+  }
+
 }
 
-function aat_legacy_delete(&$node) {
-  amazon_item_node_delete(NULL, $node->nid, 'aat_legacy');
+/**
+ * Just returns field description for field_legacy_asin.
+ */
+function aat_legacy_legacy_field_description() {
+  return   array (
+    'label' => 'Legacy ASIN',
+    'field_name' => 'field_legacy_asin',
+    'type' => 'asin',
+    'widget_type' => 'asin_text',
+    'change' => 'Change basic information',
+    'weight' => '31',
+    'description' => '',
+    'default_value' =>
+  array (
+  0 =>
+  array (
+        'asin' => '',
+  ),
+  ),
+    'default_value_php' => '',
+    'default_value_widget' => NULL,
+    'required' => 0,
+    'multiple' => '1',
+    'op' => 'Save field settings',
+    'module' => 'asin',
+    'widget_module' => 'asin',
+    'columns' =>
+  array (
+      'asin' =>
+  array (
+        'type' => 'varchar',
+        'length' => 32,
+        'not null' => false,
+  ),
+  ),
+    'display_settings' =>
+  array (
+      'label' =>
+  array (
+        'format' => 'above',
+        'exclude' => 0,
+  ),
+  5 =>
+  array (
+        'format' => 'default',
+        'exclude' => 0,
+  ),
+      'teaser' =>
+  array (
+        'format' => 'default',
+        'exclude' => 0,
+  ),
+      'full' =>
+  array (
+        'format' => 'default',
+        'exclude' => 0,
+  ),
+  4 =>
+  array (
+        'format' => 'default',
+        'exclude' => 0,
+  ),
+  2 =>
+  array (
+        'format' => 'default',
+        'exclude' => 0,
+  ),
+  3 =>
+  array (
+        'format' => 'default',
+        'exclude' => 0,
+  ),
+  ),
+  );
 }
diff --git amazon.css amazon.css
index 140af32..760fa84 100644
--- amazon.css
+++ amazon.css
@@ -5,7 +5,9 @@ div.field-type-asin {
   border-top: 2px solid #DDD;
   padding-top: 3px;
 }
-
+div.amazon-item {
+  clear: both;
+}
 div.amazon-item img {
   float: left;
   padding-left: 3px;
