diff --git a/provision.api.php b/provision.api.php
index 0eb222a01963ea0b594db46610770927bfacc187..9d0ec6020e27b28693a65f681cf06d270b4cf477 100644
--- a/provision.api.php
+++ b/provision.api.php
@@ -82,6 +82,22 @@ function hook_provision_services() {
   return array('db' => NULL);
 }
 
+/**
+ * Alter a Context immediately after it is loaded and the 'init' methods are run.
+ *
+ * If replacing the context with a new object, be sure to implement the methods
+ * $context->method_invoke('init) and $context->type_invoke('init');
+ *
+ * @param $context \Provision_Context|\Provision_Context_server|\Provision_Context_site|\Provision_Context_platform
+ *
+ * @see provision.context.inc#72
+ */
+function hook_provision_context_alter(&$context) {
+  $context = new Provision_Context_Server_alternate($context->name);
+  $context->method_invoke('init');
+  $context->type_invoke('init');
+}
+
 /**
  * Append PHP code to Drupal's settings.php file.
  *
diff --git a/provision.context.inc b/provision.context.inc
index 5455e474803cc397dff6627beead38e9da978177..ac7d676129080230c472f76377acf6027e1ea86f 100644
--- a/provision.context.inc
+++ b/provision.context.inc
@@ -69,6 +69,10 @@ function & d($name = NULL, $_root_object = FALSE, $allow_creation = TRUE) {
     if (!is_null($instances[$name])) {
       $instances[$name]->method_invoke('init');
       $instances[$name]->type_invoke('init');
+
+      // Allow drush modules to alter the class being loaded.
+      drush_command_invoke_all_ref('provision_context_alter', $instances[$name]);
+
     }
     return $instances[$name];
   }