diff --git a/migrate.module b/migrate.module
index f48ae7c..26dd92d 100644
--- a/migrate.module
+++ b/migrate.module
@@ -387,6 +387,9 @@ function migrate_hook_info() {
   $hooks['migrate_api'] = array(
     'group' => 'migrate',
   );
+  $hook['migrate_api_alter'] = array(
+    'group' => 'migrate',
+  );
   return $hooks;
 }
 
@@ -403,15 +406,10 @@ function migrate_get_module_apis($reset = FALSE) {
     foreach (module_implements('migrate_api') as $module) {
       $function = $module . '_migrate_api';
       $info = $function();
+      // Allow modules to alter the migration information.
+      drupal_alter('migrate_api', $info, $module);
       if (isset($info['api']) && $info['api'] == MIGRATE_API_VERSION) {
         $cache[$module] = $info;
-        // Register any migrations defined via the hook.
-        if (isset($info['migrations']) && is_array($info['migrations'])) {
-          foreach ($info['migrations'] as $machine_name => $arguments) {
-            MigrationBase::registerMigration($arguments['class_name'],
-              $machine_name, $arguments);
-          }
-        }
       }
       else {
         drupal_set_message(t('%function supports Migrate API version %modversion,
@@ -420,6 +418,19 @@ function migrate_get_module_apis($reset = FALSE) {
                 '%version' => MIGRATE_API_VERSION)));
       }
     }
+
+    // Allow modules to alter the migration information.
+    drupal_alter('migrate_api', $cache);
+
+    foreach ($cache as $module => $info) {
+      // Register any migrations defined via the hook.
+      if (isset($info['migrations']) && is_array($info['migrations'])) {
+        foreach ($info['migrations'] as $machine_name => $arguments) {
+          MigrationBase::registerMigration($arguments['class_name'],
+            $machine_name, $arguments);
+        }
+      }
+    }
   }
 
   return $cache;
