diff --git a/commands/pm/pm.drush.inc b/commands/pm/pm.drush.inc
index 4f0cdfc..8ba12a1 100644
--- a/commands/pm/pm.drush.inc
+++ b/commands/pm/pm.drush.inc
@@ -752,7 +752,7 @@ function drush_pm_find_project_from_extension($extension) {
 /**
  * Command callback. Enable one or more extensions from downloaded projects.
  */
-function drush_pm_enable() {
+function drush_pm_enable_validate() {
   $args = pm_parse_arguments(func_get_args());
 
   $extension_info = drush_get_extensions();
@@ -862,6 +862,33 @@ function drush_pm_enable() {
       }
     }
   }
+  
+  $searchpath = array();
+  foreach (array_merge($modules, $themes) as $name) {
+    $searchpath[] = dirname($extension_info[$name]->filename);
+  }
+  // Add all modules that were enabled to the drush
+  // list of commandfiles (if they have any).  This
+  // will allow these newly-enabled modules to participate
+  // in the pre_pm_enable and post_pm_enable hooks.
+  if (!empty($searchpath)) {
+    _drush_add_commandfiles($searchpath);
+  }
+  
+  drush_set_context('PM_ENABLE_EXTENSION_INFO', $extension_info);
+  drush_set_context('PM_ENABLE_MODULES', $modules);
+  drush_set_context('PM_ENABLE_THEMES', $themes);
+  
+  return TRUE;
+}
+
+function drush_pm_enable() {
+  $args = pm_parse_arguments(func_get_args());
+
+  // Get the data built during the validate phase
+  $extension_info = drush_get_context('PM_ENABLE_EXTENSION_INFO');
+  $modules = drush_get_context('PM_ENABLE_MODULES');
+  $themes = drush_get_context('PM_ENABLE_THEMES');
 
   // Inform the user which extensions will finally be enabled.
   $extensions = array_merge($modules, $themes);
@@ -889,23 +916,14 @@ function drush_pm_enable() {
   // Inform the user of final status.
   $rsc = drush_db_select('system', array('name', 'status'), 'name IN (:extensions)', array(':extensions' => $extensions));
   $problem_extensions = array();
-  $searchpath = array();
   while ($extension = drush_db_fetch_object($rsc)) {
     if ($extension->status) {
       drush_log(dt('!extension was enabled successfully.', array('!extension' => $extension->name)), 'ok');
-      $searchpath[] = dirname($extension_info[$extension->name]->filename);
     }
     else {
       $problem_extensions[] = $extension->name;
     }
   }
-  // Add all modules that were enabled to the drush
-  // list of commandfiles (if they have any).  This
-  // will allow these newly-enabled modules to participate
-  // in the post_pm_enable hook.
-  if (!empty($searchpath)) {
-    _drush_add_commandfiles($searchpath);
-  }
   if (!empty($problem_extensions)) {
     return drush_set_error('DRUSH_PM_ENABLE_EXTENSION_ISSUE', dt('There was a problem enabling !extension.', array('!extension' => implode(',', $problem_extensions))));
   }
