diff --git a/includes/destination.inc b/includes/destination.inc
index 1323862..fa6b6f4 100644
--- a/includes/destination.inc
+++ b/includes/destination.inc
@@ -73,6 +73,20 @@ abstract class MigrateDestination {
    */
 
   /**
+   * Helper for hook_views_data_alter().
+   *
+   * Derived classes that are able to add to views data may implement this.
+   *
+   * @param $data
+   *  The views data array.
+   * @param $map_table
+   *  The SQLMap map table.
+   *  @todo: Find a way to not need to pass this in.
+   */
+  public function hook_views_data_alter(&$data, $map_table) {
+  }
+
+  /**
    * Maintain stats on the number of destination objects created or updated.
    *
    * @var int
diff --git a/migrate.module b/migrate.module
index 7d9bf89..ba3d3ca 100644
--- a/migrate.module
+++ b/migrate.module
@@ -569,3 +569,13 @@ function migrate_module_implements_alter(&$implementation, $hook) {
     }
   }
 }
+
+/**
+ * Implements hook_views_api().
+ */
+function migrate_views_api() {
+  return array(
+    'api' => '3.0-alpha1',
+    'path' => drupal_get_path('module', 'migrate'),
+  );
+}
diff --git a/plugins/destinations/entity.inc b/plugins/destinations/entity.inc
index e14c5d1..7065872 100644
--- a/plugins/destinations/entity.inc
+++ b/plugins/destinations/entity.inc
@@ -206,4 +206,25 @@ abstract class MigrateDestinationEntity extends MigrateDestination {
       }
     }
   }
+
+  /**
+   * Helper for hook_views_data_alter().
+   *
+   * Derived classes that are able to add to views data may implement this.
+   */
+  public function hook_views_data_alter(&$data, $map_table) {
+    $entity_info = entity_get_info($this->entityType);
+    $id_field = $entity_info['entity keys']['id'];
+    $data[$entity_info['base table']]['migrate_map_' . $map_table] = array(
+      'real field' => $id_field,
+      // @todo: get the migration name in here.
+      'title' => t('Migration map ' . $map_table),
+      'help' => t('Related this entity to a migration map table.'),
+      'relationship' => array(
+        'base' => $map_table,
+        'base field' => 'destid1',
+      ),
+    );
+  }
+
 }
diff --git a/plugins/sources/sqlmap.inc b/plugins/sources/sqlmap.inc
index 8899fc1..07f3c7d 100644
--- a/plugins/sources/sqlmap.inc
+++ b/plugins/sources/sqlmap.inc
@@ -54,6 +54,103 @@ class MigrateSQLMap extends MigrateMap {
   }
 
   /**
+   * Helper for hook_views_data_alter().
+   *
+   * Derived classes that are able to add to views data may implement this.
+   */
+  public function hook_views_data_alter(&$data) {
+    $data[$this->mapTable] = array(
+      'table' => array(
+        'group' => t('Migrate'),
+        'base' => array(
+          'field' => 'sourceid1',
+          'title' => $this->mapTable,
+          'help' => t('Migrate map.'),
+        ),
+      ),
+      'sourceid1' => array(
+        'title' => 'source id 1',
+        'help' => 'source id 1',
+        'field' => array(
+          'handler' => 'views_handler_field',
+        ),
+        'sort' => array(
+          'handler' => 'views_handler_sort',
+        ),
+        'filter' => array(
+          'handler' => 'views_handler_filter_string',
+        ),
+      ),
+      'destid1' => array(
+        'title' => 'destiny id 1',
+        'help' => 'destiny id 1',
+        'field' => array(
+          'handler' => 'views_handler_field',
+        ),
+        'sort' => array(
+          'handler' => 'views_handler_sort',
+        ),
+        'filter' => array(
+          'handler' => 'views_handler_filter_string',
+        ),
+      ),
+      'needs_update' => array(
+        'title' => 'needs update',
+        'help' => 'needs update',
+        'field' => array(
+          'handler' => 'views_handler_field_numeric',
+        ),
+        'sort' => array(
+          'handler' => 'views_handler_sort',
+        ),
+        'filter' => array(
+          'handler' => 'views_handler_filter_numeric',
+        ),
+      ),
+      'rollback_action' => array(
+        'title' => 'rollback action',
+        'help' => 'rollback action',
+        'field' => array(
+          'handler' => 'views_handler_field_numeric',
+        ),
+        'sort' => array(
+          'handler' => 'views_handler_sort',
+        ),
+        'filter' => array(
+          'handler' => 'views_handler_filter_numeric',
+        ),
+      ),
+      'last_imported' => array(
+        'title' => 'last imported',
+        'help' => 'last imported',
+        'field' => array(
+          'handler' => 'views_handler_field_date',
+        ),
+        'sort' => array(
+          'handler' => 'views_handler_sort_date',
+        ),
+        'filter' => array(
+          'handler' => 'views_handler_filter_date',
+        ),
+      ),
+      'hash' => array(
+        'title' => 'hash',
+        'help' => 'hash',
+        'field' => array(
+          'handler' => 'views_handler_field',
+        ),
+        'sort' => array(
+          'handler' => 'views_handler_sort',
+        ),
+        'filter' => array(
+          'handler' => 'views_handler_filter_string',
+        ),
+      ),
+    );
+
+  }
+
+  /**
    * Drupal connection object on which to create the map/message tables
    * @var DatabaseConnection
    */
@@ -84,7 +181,7 @@ class MigrateSQLMap extends MigrateMap {
    * @param array $destination_key
    *   The database schema for the destination key.
    * @param string $connection_key
-   *   Optional - The connection used to create the mapping tables. By default 
+   *   Optional - The connection used to create the mapping tables. By default
    *   this is the destination (Drupal). If it's not possible to make joins
    *   between the destination database and your source database you can specify
    *   a different connection to create the mapping tables on.
