diff --git a/acquia_search/Acquia_Search_Service.php b/acquia_search/Acquia_Search_Service.php
index 60fc7d5..07c73d5 100644
--- a/acquia_search/Acquia_Search_Service.php
+++ b/acquia_search/Acquia_Search_Service.php
@@ -35,10 +35,10 @@ class AcquiaSearchService extends DrupalApacheSolrService {
     }
     $url .= 'request_id=' . $id;
     if ($use_data && isset($options['data'])) {
-      list($cookie, $nonce) = acquia_search_auth_cookie($url, $options['data']);
+      list($cookie, $nonce) = acquia_search_auth_cookie($url, $options['data'], NULL, $this->env_id);
     }
     else {
-      list($cookie, $nonce) = acquia_search_auth_cookie($url);
+      list($cookie, $nonce) = acquia_search_auth_cookie($url, NULL, NULL, $this->env_id);
     }
     if (empty($cookie)) {
       throw new Exception('Invalid authentication string - subscription keys expired or missing.');
diff --git a/acquia_search/acquia_search.module b/acquia_search/acquia_search.module
index 8ce3ace..3ba06fb 100644
--- a/acquia_search/acquia_search.module
+++ b/acquia_search/acquia_search.module
@@ -5,19 +5,27 @@
  *   Integration between Acquia Drupal and Acquia's hosted solr search service.
  */
 
-define('ACQUIA_SEARCH_ENVIRONMENT_ID', 'acquia_search_server_1');
+define('ACQUIA_SEARCH_ENVIRONMENT_ID', 'acquia_search_server');
 
 /**
  * Predefined Acquia Search network environment
  */
-function acquia_search_get_environment() {
-  return array(
+function acquia_search_get_environment($values = NULL) {
+  if (!empty($values['subscription_id'])) {
+    $identifier = $values['subscription_id'];
+  }
+  else {
+    $identifier = acquia_agent_settings('acquia_identifier');
+  }
+  $environment = array(
     'env_id' => ACQUIA_SEARCH_ENVIRONMENT_ID,
     'name' => t('Acquia Search'),
     // @todo - server URL may depend on region info.
-    'url' => variable_get('acquia_search_url', 'http://search.acquia.com/solr/'. acquia_agent_settings('acquia_identifier')),
+    'url' => variable_get('acquia_search_url', 'http://search.acquia.com/solr/'. $identifier),
     'service_class' => 'AcquiaSearchService',
   );
+  $environment = array_merge($environment, $values);
+  return $environment;
 }
 
 /**
@@ -35,11 +43,8 @@ function acquia_search_enable() {
  * Implementation of hook_init().
  */
 function acquia_search_init() {
-  if (arg(0) == 'admin' && arg(1) == 'config' && arg(2) == 'search' && arg(3) == 'apachesolr'
-      && user_access('administer search')
-      && acquia_agent_subscription_is_active()
-      && variable_get('apachesolr_default_environment') == ACQUIA_SEARCH_ENVIRONMENT_ID
-      && empty($_POST)) {
+  if (strstr(arg(5), ACQUIA_SEARCH_ENVIRONMENT_ID) && user_access('administer search')
+      && acquia_agent_subscription_is_active() && empty($_POST)) {
     $as_link = l(t('Acquia Search'), 'http://acquia.com/products-services/acquia-search');
     drupal_set_message(t("Search is being provided by the !as network service.", array('!as' => $as_link)));
   }
@@ -53,7 +58,7 @@ function acquia_search_enable_acquia_solr_environment() {
   if ($environment != acquia_search_get_environment()) {
     apachesolr_environment_save(acquia_search_get_environment());
   }
-  // Only set the default if we just createdd the environment.
+  // Only set the default if we just created the environment.
   if (!$environment) {
     variable_set('apachesolr_default_environment', ACQUIA_SEARCH_ENVIRONMENT_ID);
   }
@@ -98,7 +103,7 @@ function acquia_search_cron() {
  * Delete environment page access.
  */
 function acquia_search_environment_delete_access($environment) {
-  if ($environment['env_id'] == ACQUIA_SEARCH_ENVIRONMENT_ID) {
+  if (strstr($environment['env_id'], ACQUIA_SEARCH_ENVIRONMENT_ID)) {
     return FALSE;
   }
   // Fall back to the original check.
@@ -111,7 +116,8 @@ function acquia_search_environment_delete_access($environment) {
 function acquia_search_form_apachesolr_settings_alter(&$form, $form_state) {
   // Don't alter the form if there is no subscription.
   if (acquia_agent_subscription_is_active()) {
-    // Don't show delete operation for the AS environment
+    // Don't show delete operation for the Default AS environment. This means
+    // that cloned acquia search environments can be deleted
     foreach ($form['apachesolr_host_settings']['table']['#rows'] as &$row) {
       if (isset($row['data'][2]['data']) && strpos($row['data'][2]['data'], 'search/apachesolr-env/' . ACQUIA_SEARCH_ENVIRONMENT_ID . '/delete') !== FALSE) {
         $row['data'][2]['data'] = '';
@@ -133,28 +139,66 @@ function acquia_search_form_apachesolr_settings_alter(&$form, $form_state) {
  * Implementation of hook_form_[form_id]_alter().
  */
 function acquia_search_form_apachesolr_environment_edit_form_alter(&$form, $form_state) {
-  // Do not allow editing of Acquia Search environment parameters
-  if (isset($form['env_id']['#default_value']) && $form['env_id']['#default_value'] == ACQUIA_SEARCH_ENVIRONMENT_ID ) {
+  // Do not allow editing of the Acquia Search environment parameters
+  $environment = apachesolr_environment_load($form['env_id']['#default_value']);
+  if (strstr($form['env_id']['#default_value'], ACQUIA_SEARCH_ENVIRONMENT_ID)) {
     $form['url']['#disabled'] = TRUE;
-    $form['name']['#disabled'] = TRUE;
     $form['env_id']['#disabled'] = TRUE;
-  }
+    // Don't allow modifications for the original subscription. But do allow
+    // this for cloned environments
+    if ($form['env_id']['#default_value'] != ACQUIA_SEARCH_ENVIRONMENT_ID) {
+      $form['acquia_override_subscription'] = array(
+        '#type' => 'fieldset',
+        '#title' => t('Configure a custom subscription for this environment'),
+        '#collapsed' => TRUE,
+        '#collapsible' => TRUE,
+      );
+      $form['acquia_override_subscription']['acquia_override_subscription_id'] = array(
+        '#type' => 'textfield',
+        '#title' => t('Enter your Acquia Subscription Identifier'),
+        '#default_value' => isset($environment['conf']['subscription_id']) ? $environment['conf']['subscription_id'] : '',
+      );
+      $form['acquia_override_subscription']['acquia_override_subscription_key'] = array(
+        '#type' => 'textfield',
+        '#title' => t('Enter your Acquia Subscription key'),
+        '#default_value' => isset($environment['conf']['subscription_key']) ? $environment['conf']['subscription_key'] : '',
+      );
+    }
+    else {
+      // Don't allow deletes for the default env
+      $form['actions']['delete']['#access'] = FALSE;
+    }
 
-  $form['actions']['delete']['#access'] = FALSE;
-  $form['actions']['save']['#validate'][] = 'acquia_search_environment_edit_form_validate';
+    $form['actions']['save']['#validate'][] = 'acquia_search_environment_edit_form_validate';
+  }
 }
 
 function acquia_search_environment_edit_form_validate($form, &$form_state) {
-  if ($form_state['values']['env_id'] == ACQUIA_SEARCH_ENVIRONMENT_ID) {
-    // make sure that the environment parameters have not been changed
-    $form_state['values'] = array_merge($form_state['values'], acquia_search_get_environment());
+  // make sure that the environment parameters have not been changed
+  if (strstr($form['env_id']['#default_value'], ACQUIA_SEARCH_ENVIRONMENT_ID)) {
+    $overrive_values = array();
+    $override_values['env_id'] = $form['env_id']['#default_value'];
+    $override_values['name'] = $form_state['values']['name'];
+    if (isset($form_state['values']['acquia_override_subscription_id']) && isset($form_state['values']['acquia_override_subscription_key'])) {
+      // Use the new values. On their own risk!
+      $override_values['subscription_id'] = $form_state['values']['acquia_override_subscription_id'];
+      $override_values['subscription_key'] = $form_state['values']['acquia_override_subscription_key'];
+      $form_state['values'] = array_merge($form_state['values'], acquia_search_get_environment($override_values));
+      // Save that to our confs per environment, anything outside of conf is
+      // ignored as extra value, so adding it to that array so it can be saved
+      $form_state['values']['conf']['subscription_id'] = $form_state['values']['acquia_override_subscription_id'];
+      $form_state['values']['conf']['subscription_key'] = $form_state['values']['acquia_override_subscription_key'];
+    }
+    else {
+      // Use our defaults
+      $form_state['values'] = array_merge($form_state['values'], acquia_search_get_environment($override_values));
+    }
   }
 }
 
 /**
  * Implementation of hook_acquia_subscription_status().
  */
-
 function acquia_search_acquia_subscription_status($active) {
   if ($active) {
     acquia_search_enable_acquia_solr_environment();
@@ -179,7 +223,7 @@ function acquia_search_acquia_subscription_status($active) {
  *  An array containing the string to be added as the content of the
  *  Cookie header to the request and the nonce.
  */
-function acquia_search_auth_cookie(&$url, $string = '', $derived_key = NULL) {
+function acquia_search_auth_cookie(&$url, $string = '', $derived_key = NULL, $env_id = NULL) {
   $uri = parse_url($url);
 
   // Add a scheme - should always be https if available.
@@ -199,10 +243,10 @@ function acquia_search_auth_cookie(&$url, $string = '', $derived_key = NULL) {
   $nonce = base64_encode(drupal_random_bytes(24));
 
   if ($string) {
-    $auth_header = acquia_search_authenticator($string, $nonce, $derived_key);
+    $auth_header = acquia_search_authenticator($string, $nonce, $derived_key, $env_id);
   }
   else {
-    $auth_header = acquia_search_authenticator($path . $query, $nonce, $derived_key);
+    $auth_header = acquia_search_authenticator($path . $query, $nonce, $derived_key, $env_id);
   }
   return array($auth_header, $nonce);
 }
@@ -210,12 +254,27 @@ function acquia_search_auth_cookie(&$url, $string = '', $derived_key = NULL) {
 /**
  * Derive a key for the solr hmac using the information shared with acquia.com.
  */
-function _acquia_search_derived_key() {
+function _acquia_search_derived_key($env_id = NULL) {
   static $derived_key;
   if (!isset($derived_key)) {
+    // If we set an explicit environment, check if this needs to overridden
+    // Use the default
+    $identifier = acquia_agent_settings('acquia_identifier');
     $key = acquia_agent_settings('acquia_key');
+    // See if we need to overwrite these values
+    if (!empty($env_id)) {
+      // Load the explicit environment
+      $environment = apachesolr_environment_load($env_id);
+      if (!empty($environment['conf']['subscription_id']) &&
+        !empty($environment['conf']['subscription_key'])) {
+        $identifier = $environment['conf']['subscription_id'];
+        $key = $environment['conf']['subscription_key'];
+      }
+    }
+    // In any case, this is equal for all subscriptions. Also
+    // even if the search sub is different, the main subscription should be
+    // active
     $subscription = acquia_agent_settings('acquia_subscription_data');
-    $identifier = acquia_agent_settings('acquia_identifier');
     // We use a salt from acquia.com in key derivation since this is a shared
     // value that we could change on the AN side if needed to force any
     // or all clients to use a new derived key.  We also use a string
@@ -237,9 +296,9 @@ function _acquia_search_derived_key() {
 /**
  * Creates an authenticator based on a data string and HMAC-SHA1.
  */
-function acquia_search_authenticator($string, $nonce, $derived_key = NULL) {
+function acquia_search_authenticator($string, $nonce, $derived_key = NULL, $env_id = NULL) {
   if (empty($derived_key)) {
-    $derived_key = _acquia_search_derived_key();
+    $derived_key = _acquia_search_derived_key($env_id);
   }
   if (empty($derived_key)) {
     // Expired or invalid subscription - don't continue.
