diff --git a/commands/core/site_install.drush.inc b/commands/core/site_install.drush.inc
index 61b037b..545b4df 100644
--- a/commands/core/site_install.drush.inc
+++ b/commands/core/site_install.drush.inc
@@ -12,7 +12,6 @@ function drush_core_site_install_validate() {
     }
     // Make sure that we will bootstrap to the 'sites-subdir' site.
     drush_set_option('uri', $sites_subdir);
-    _drush_bootstrap_select_drupal_site();
   }
 }
 
diff --git a/includes/bootstrap.inc b/includes/bootstrap.inc
index 3dcde40..d4fac07 100644
--- a/includes/bootstrap.inc
+++ b/includes/bootstrap.inc
@@ -181,6 +181,9 @@ function drush_bootstrap($phase, $phase_max = FALSE) {
   }
   static $phase_index = 0;
 
+  // Adjust as necessary if the selected Drupal site changes mid-bootstrap
+  _drush_bootstrap_select_drupal_site();
+
   drush_set_context('DRUSH_BOOTSTRAPPING', TRUE);
   while ($phase >= $phase_index && isset($phases[$phase_index])) {
     if (drush_bootstrap_validate($phase_index)) {
@@ -546,15 +549,21 @@ function _drush_bootstrap_drush() {
  * site to be bootstrapped.
  */
 function _drush_bootstrap_select_drupal_site() {
-  $drupal_root = drush_get_option(array('r', 'root'));
-  if (!isset($drupal_root)) {
-    $drupal_root = drush_locate_root();
+  if (drush_get_context('DRUSH_BOOTSTRAP_PHASE', 0) < DRUSH_BOOTSTRAP_DRUPAL_ROOT) {
+    $drupal_root = drush_get_option(array('r', 'root'));
+    if (!isset($drupal_root)) {
+      $drupal_root = drush_locate_root();
+    }
+    drush_set_context('DRUSH_SELECTED_DRUPAL_ROOT', $drupal_root);
+  }
+  else {
+    $drupal_root = drush_get_context('DRUSH_SELECTED_DRUPAL_ROOT');
+  }
+  if (drush_get_context('DRUSH_BOOTSTRAP_PHASE', 0) < DRUSH_BOOTSTRAP_DRUPAL_SITE) {
+    $uri = _drush_bootstrap_selected_uri();
+    drush_set_context('DRUSH_SELECTED_URI', $uri);
+    drush_set_context('DRUSH_SELECTED_DRUPAL_SITE_ROOT', drush_conf_path($uri));
   }
-  drush_set_context('DRUSH_SELECTED_DRUPAL_ROOT', $drupal_root);
-  $uri = _drush_bootstrap_selected_uri();
-  drush_set_context('DRUSH_SELECTED_URI', $uri);
-  drush_set_context('DRUSH_SELECTED_DRUPAL_SITE_ROOT', drush_conf_path($uri));
-
   if (!empty($drupal_root) && !empty($uri)) {
     // Create an alias '@self'
     _drush_sitealias_cache_alias('self', array('root' => $drupal_root, 'uri' => $uri));
