diff --git a/apachesolr.admin.inc b/apachesolr.admin.inc
index 7329ebd..979636a 100644
--- a/apachesolr.admin.inc
+++ b/apachesolr.admin.inc
@@ -16,12 +16,18 @@ function apachesolr_environment_delete_form(&$form_state, $environment) {
     '#type' => 'value',
     '#value' => $environment['env_id'],
   );
+  if (isset($environment['export_type']) && $environment['export_type'] == 3) {
+    $verb = t('Revert');
+  }
+  else {
+    $verb = t('Delete');
+  }
   return confirm_form(
     $form,
-    t('Are you sure you want to delete search environment %name?', array('%name' => $environment['name'])),
+    t('Are you sure you want to !verb search environment %name?', array('%name' => $environment['name'], '!verb' => strtolower($verb))),
     'admin/settings/apachesolr',
     t('This action cannot be undone.'),
-    t('Delete'),
+    $verb,
     t('Cancel')
   );
 }
@@ -332,15 +338,28 @@ function apachesolr_settings(&$form_state) {
     if ($environment_id == $default_environment) {
       $env_name = t('!environment <em>(Default)</em>', array('!environment' => $env_name));
       $env_class_row = 'default-environment';
-      $ops['delete'] = '';
     }
     else {
       $env_class_row = '';
       // For every non-default we add a delete link
-      $ops['delete'] = array(
-        'class' => 'operation',
-        'data' => l(t('Delete'), 'admin/settings/apachesolr/settings/' . $data['env_id'] . '/delete'),
-      );
+      // Allow to revert a search environment or to delete it
+      $delete_value = '';
+      if (!isset($data['in_code_only'])) {
+        if ((isset($data['type']) && $data['type'] == 'Overridden')) {
+         $delete_value = array(
+            'class' => 'operation',
+            'data' => l(t('Revert'), 'admin/settings/apachesolr/settings/' . $data['env_id'] . '/delete'),
+          );
+        }
+        // don't allow the deletion of the default environment
+        elseif ($environment_id != $default_environment) {
+          $delete_value = array(
+            'class' => 'operation',
+            'data' => l(t('Delete'), 'admin/settings/apachesolr/settings/' . $data['env_id'] . '/delete'),
+          );
+        }
+      }
+      $ops['delete'] = $delete_value;
     }
 
     // When we are receiving a http POST (so the page does not show) we do not
@@ -1146,6 +1165,7 @@ function apachesolr_index_config_form_submit($form, &$form_state) {
 
   // Clear the content type cache, since we will be changing its data.
   content_clear_type_cache();
+  cache_clear_all('apachesolr:environments', 'cache_apachesolr');
   drupal_set_message(t('Your settings have been saved.'));
 }
 
diff --git a/apachesolr.module b/apachesolr.module
index 06fead0..3135c94 100644
--- a/apachesolr.module
+++ b/apachesolr.module
@@ -1144,6 +1144,11 @@ function apachesolr_load_all_environments($reset = FALSE) {
     $environments = array();
     cache_clear_all('apachesolr:environments', 'cache_apachesolr');
   }
+  // Sometimes this function is called when the 'apachesolr_index_bundles' is
+  // not created yet.
+  if (!db_table_exists('apachesolr_index_bundles')) {
+    return array();
+  }
   if (!db_table_exists('apachesolr_environment')) {
     return array();
   }
@@ -1153,30 +1158,29 @@ function apachesolr_load_all_environments($reset = FALSE) {
   }
   // Use cache_get to avoid DB when using memcache, etc.
   $cache = cache_get('apachesolr:environments', 'cache_apachesolr');
-
   if (!empty($cache->data)) {
     $environments = $cache->data;
   }
   else {
-    $environments = array();
-    $result = db_query('SELECT * FROM {apachesolr_environment}');
-    while($environment = db_fetch_array($result)) {
-      $environment['conf'] = array();
-      $result_conf = db_query("SELECT name, value FROM {apachesolr_environment_variable} WHERE env_id = '%s'", array($environment['env_id']));
-      while($environment_conf = db_fetch_array($result_conf)) {
-        $environment['conf'][$environment_conf['name']] = unserialize($environment_conf['value']);
-      }
-      $environments[$environment['env_id']] = $environment;
-    }
+    // If ctools is available use its crud functions to load the environments.
     if (module_exists('ctools')) {
       ctools_include('export');
-      $defaults = ctools_export_load_object('apachesolr_environment', 'all');
-      foreach ($defaults as $env_id => $default) {
-        if (!isset($environments[$env_id])) {
-          $environments[$env_id] = (array) $default;
-        }
+      $environments = ctools_export_load_object('apachesolr_environment', 'all');
+      // Convert environments to array.
+      foreach ($environments as &$environment) {
+        $environment = (array) $environment;
       }
     }
+    else {
+      $environments_results = db_query('SELECT * FROM {apachesolr_environment}');
+      while($environment_result = db_fetch_array($environments_results)) {
+        $environments[$environment_result['env_id']] = $environment_result;
+      }
+    }
+
+    // Load conf and index bundles. We don't use 'subrecords callback' property
+    // of ctools export API.
+    apachesolr_environment_load_subrecords($environments);
 
     // Allow overrides of environments from settings.php
     $conf_environments = variable_get('apachesolr_environments', array());
@@ -1236,6 +1240,8 @@ function apachesolr_environment_delete($env_id) {
     db_query($query, $env_id);
     $query = "DELETE FROM {apachesolr_environment_variable} WHERE env_id = '%s'";
     db_query($query, $env_id);
+    $query = "DELETE FROM {apachesolr_index_bundles} WHERE env_id = '%s'";
+    db_query($query, $env_id);
 
     module_invoke_all('apachesolr_environment_delete', $environment);
     cache_clear_all('apachesolr:environments', 'cache_apachesolr');
@@ -1315,12 +1321,16 @@ function apachesolr_environment_save($environment) {
   static $environments;
   static $solr_cache;
   $default = array('env_id' => NULL, 'name' => '', 'url' => '', 'service_class' => '', 'conf' => array('service_class_info' => array()));
-
   $old_environment = apachesolr_environment_load($environment['env_id'], $reset = TRUE);
   $is_new = FALSE;
   if (!$old_environment || isset($old_environment['in_code_only'])) {
     $is_new = TRUE;
   }
+  // No need to save if there are no changes
+  if ($old_environment == $environment) {
+    // No need to do anything
+    return;
+  }
 
   // Remove any unexpected fields.
   // @todo - get this from the schema?.
@@ -1845,18 +1855,8 @@ function apachesolr_content_extra_fields($content_type) {
  *   The bundles that should be indexed.
  */
 function apachesolr_get_index_bundles($env_id, $entity_type) {
-  // This could be called before the schema is installed so it is wise to
-  // Verify this
-  if (db_table_exists('apachesolr_index_bundles')) {
-    $bundles = array();
-    $query = "SELECT bundle FROM {apachesolr_index_bundles} WHERE env_id = '%s' AND entity_type = '%s'";
-    $result = db_query($query, array($env_id, $entity_type));
-    while ($bundle = db_fetch_array($result)) {
-      $bundles[] = $bundle['bundle'];
-    }
-    return $bundles;
-  }
-  return array();
+  $environment = apachesolr_environment_load($env_id);
+  return !empty($environment['index_bundles'][$entity_type]) ? $environment['index_bundles'][$entity_type] : array();
 }
 
 /**
@@ -2572,6 +2572,74 @@ function theme_apachesolr_settings_title($vars) {
 }
 
 /**
+ * Export callback to load the view subrecords, which are the index bundles.
+ */
+function apachesolr_environment_load_subrecords(&$environments) {
+  // This could be called before the schema is installed so it is wise to
+  // Verify this
+  if (db_table_exists('apachesolr_index_bundles')) {
+    $query = "SELECT env_id, entity_type, bundle
+      FROM {apachesolr_index_bundles}
+      WHERE env_id IN (". db_placeholders($environments, 'varchar') .")
+      ORDER BY env_id, entity_type, bundle";
+    $all_index_bundles_results = db_query($query, array_keys($environments));
+    $all_index_bundles_keyed = array();
+    while($all_index_bundles_result = db_fetch_array($all_index_bundles_results)) {
+      // bundle variable comes from the extract
+      extract($all_index_bundles_result);
+      $all_index_bundles_keyed[$env_id][$entity_type][] = $bundle;
+    }
+  }
+
+  if (db_table_exists('apachesolr_environment_variable')) {
+    $query = "SELECT env_id, name, value
+      FROM {apachesolr_environment_variable}
+      WHERE env_id IN (". db_placeholders($environments, 'varchar') .")
+      ORDER BY env_id, name, value";
+    $all_variables_results = db_query($query, array_keys($environments));
+    $variables = array();
+    while ($all_variables_result = db_fetch_array($all_variables_results)) {
+      extract($all_variables_result);
+      $variables[$env_id][$name] = unserialize($value);
+    }
+  }
+  
+  foreach ($environments as $env_id => &$environment) {
+    $index_bundles = !empty($all_index_bundles_keyed[$env_id]) ? $all_index_bundles_keyed[$env_id] : array();
+    $conf = !empty($variables[$env_id]) ? $variables[$env_id] : array();
+    if (is_array($environment)) {
+      // Environment is an array.
+      // If we have different values in the database compared with what we
+      // have in the given environment argument we allow the admin to revert
+      // the db values so we can stick with a consistent system
+      if (!empty($environment['index_bundles']) && !empty($index_bundles) && $environment['index_bundles'] !== $index_bundles) {
+        unset($environment['in_code_only']);
+        $environment['type'] = 'Overridden';
+      }
+      if (!empty($environment['conf']) && !empty($conf) && $environment['conf'] !== $conf) {
+        unset($environment['in_code_only']);
+        $environment['type'] = 'Overridden';
+      }
+      $environment['index_bundles'] = (empty($environment['index_bundles']) || !empty($index_bundles)) ? $index_bundles : $environment['index_bundles'];
+      $environment['conf'] = (empty($environment['conf']) || !empty($conf)) ? $conf : $environment['conf'];
+    }
+    elseif (is_object($environment)) {
+      // Environment is an object.
+      if ($environment->index_bundles !== $index_bundles && !empty($index_bundles)) {
+        unset($environment->in_code_only);
+        $environment->type = 'Overridden';
+      }
+      if ($environment->conf !== $conf && !empty($conf)) {
+        unset($environment->in_code_only);
+        $environment->type = 'Overridden';
+      }
+      $environment->index_bundles = (empty($environment->index_bundles) || !empty($index_bundles)) ? $index_bundles : $environment->index_bundles;
+      $environment->conf = (empty($environment->conf) || !empty($conf)) ? $conf : $environment->conf;
+    }
+  }
+}
+
+/**
  * Callback for saving Apache Solr environment CTools exportables.
  *
  * CTools uses objects, while Apache Solr uses arrays; turn CTools value into an
@@ -2614,7 +2682,13 @@ function apachesolr_ctools_environment_export($environment, $indent) {
   // Re-load the enviroment, since in some cases the conf
   // is stripped since it's not in the actual schema.
   $environment = (object) apachesolr_environment_load($environment->env_id);
+
+  $index_bundles = array();
+
+  if ($bundles = apachesolr_get_index_bundles($environment->env_id, 'node')) {
+    $index_bundles[$type] = $bundles;
+  }
   $additions_top = array();
-  $additions_bottom = array('conf' => $environment->conf);
+  $additions_bottom = array('conf' => $environment->conf, 'index_bundles' => $index_bundles);
   return ctools_export_object('apachesolr_environment', $environment, $indent, NULL, $additions_top, $additions_bottom);
-}
+}
\ No newline at end of file
diff --git a/apachesolr_search.admin.inc b/apachesolr_search.admin.inc
index 7de1932..5ef8019 100644
--- a/apachesolr_search.admin.inc
+++ b/apachesolr_search.admin.inc
@@ -208,8 +208,8 @@ function apachesolr_search_page_settings_form(&$form_state, $search_page = NULL)
     $options[$id] = $environment['name'];
   }
   // Validate the env_id.
-  if (!empty($search_page->env_id) && !apachesolr_environment_load($search_page->env_id)) {
-    $search_page->env_id = '';
+  if (!empty($search_page['env_id']) && !apachesolr_environment_load($search_page['env_id'])) {
+    $search_page['env_id'] = '';
   }
 
   // Initializes form with common settings.
@@ -225,7 +225,7 @@ function apachesolr_search_page_settings_form(&$form_state, $search_page = NULL)
     '#required' => TRUE,
     '#size' => 30,
     '#maxlength' => 32,
-    '#default_value' => !empty($search_page->label) ? $search_page->label : '',
+    '#default_value' => !empty($search_page['label']) ? $search_page['label'] : '',
     '#description' => t('The human-readable name of the search page configuration.'),
   );
 
@@ -236,14 +236,14 @@ function apachesolr_search_page_settings_form(&$form_state, $search_page = NULL)
     '#required' => TRUE,
     '#size' => 30,
     '#maxlength' => 32,
-    '#default_value' => !empty($search_page->page_id) ? $search_page->page_id : '',
+    '#default_value' => !empty($search_page['page_id']) ? $search_page['page_id'] : '',
     '#description' => t('A unique machine-readable identifier for the search page configuration. It must only contain lowercase letters, numbers, and underscores.'),
   );
 
   $form['description_enable'] = array(
     '#type' => 'checkbox',
     '#title' => t('Description'),
-    '#default_value' => !empty($search_page->description)  ? TRUE : FALSE
+    '#default_value' => !empty($search_page['description'])  ? TRUE : FALSE
   );
 
   $form['description'] = array(
@@ -251,7 +251,7 @@ function apachesolr_search_page_settings_form(&$form_state, $search_page = NULL)
     '#title' => t('Provide description'),
     '#title_display' => 'invisible',
     '#size' => 64,
-    '#default_value' => !empty($search_page->description) ? $search_page->description : '',
+    '#default_value' => !empty($search_page['description']) ? $search_page['description'] : '',
     '#dependency' => array(
       'edit-description-enable' => array(1),
     ),
@@ -259,7 +259,7 @@ function apachesolr_search_page_settings_form(&$form_state, $search_page = NULL)
 
   $is_default = FALSE;
   if (!empty($search_page)) {
-    $is_default = $search_page->page_id == apachesolr_search_default_search_page();
+    $is_default = $search_page['page_id'] == apachesolr_search_default_search_page();
   }
   $form['make_default'] = array(
     '#type' => 'checkbox',
@@ -278,7 +278,7 @@ function apachesolr_search_page_settings_form(&$form_state, $search_page = NULL)
   );
 
   $core_search = FALSE;
-  if (!empty($search_page->page_id) && ($search_page->page_id == 'core_search')) {
+  if (!empty($search_page['page_id']) && ($search_page['page_id'] == 'core_search')) {
     $core_search = TRUE;
   }
   if ($core_search) {
@@ -292,7 +292,7 @@ function apachesolr_search_page_settings_form(&$form_state, $search_page = NULL)
     '#title' => t('Search environment'),
     '#type' => 'select',
     '#options' => $options,
-    '#default_value' => !empty($search_page->env_id) ? $search_page->env_id : '',
+    '#default_value' => !empty($search_page['env_id']) ? $search_page['env_id'] : '',
     '#disabled' => $core_search,
     '#description' => $description,
   );
@@ -303,7 +303,7 @@ function apachesolr_search_page_settings_form(&$form_state, $search_page = NULL)
     '#required' => TRUE,
     '#maxlength' => 255,
     '#description' => 'You can use %value to place the search term in the title',
-    '#default_value' => !empty($search_page->page_title) ? $search_page->page_title : '',
+    '#default_value' => !empty($search_page['page_title']) ? $search_page['page_title'] : '',
   );
 
   $search_types = apachesolr_search_load_all_search_types();
@@ -316,7 +316,7 @@ function apachesolr_search_page_settings_form(&$form_state, $search_page = NULL)
     '#title' => t('Search Type'),
     '#type' => 'select',
     '#options' => $options,
-    '#default_value' => !empty($search_page->settings['apachesolr_search_search_type']) ? $search_page->settings['apachesolr_search_search_type'] : '',
+    '#default_value' => !empty($search_page['settings']['apachesolr_search_search_type']) ? $search_page['settings']['apachesolr_search_search_type'] : '',
     '#access' => !$core_search,
     '#description' => t('Use this only when filtering on a value from the search path.
       For example, select Taxonomy Term to filter on a term ID (search/taxonomy/%).'),
@@ -335,7 +335,7 @@ function apachesolr_search_page_settings_form(&$form_state, $search_page = NULL)
     '#required' => TRUE,
     '#maxlength' => 255,
     '#description' => t('For example: search/my-search-page. Search keywords will appear at the end of the path.'),
-    '#default_value' => !empty($search_page->search_path) ? $search_page->search_path : '',
+    '#default_value' => !empty($search_page['search_path']) ? $search_page['search_path'] : '',
   );
   if (!$core_search) {
     $form['info']['search_path']['#description'] .= ' ' . t('You can use one % to make the search page dynamic.');
@@ -344,7 +344,7 @@ function apachesolr_search_page_settings_form(&$form_state, $search_page = NULL)
   $form['info']['custom_filter_enable'] = array(
     '#type' => 'checkbox',
     '#title' => t('Custom Filter'),
-    '#default_value' => !empty($search_page->settings['apachesolr_search_custom_enable'])  ? TRUE : FALSE
+    '#default_value' => !empty($search_page['settings']['apachesolr_search_custom_enable'])  ? TRUE : FALSE
   );
 
   $form['info']['filters'] = array(
@@ -353,7 +353,7 @@ function apachesolr_search_page_settings_form(&$form_state, $search_page = NULL)
     '#required' => FALSE,
     '#maxlength' => 255,
     '#description' => t('A comma-separated list of lucene filter queries to apply by default.'),
-    '#default_value' => !empty($search_page->settings['fq'])  ? implode(', ', $search_page->settings['fq']) : '',
+    '#default_value' => !empty($search_page['settings']['fq'])  ? implode(', ', $search_page['settings']['fq']) : '',
     '#dependency' => array(
       'edit-custom-filter-enable' => array(1),
       'edit-search-type' => array('custom'),
@@ -371,7 +371,7 @@ function apachesolr_search_page_settings_form(&$form_state, $search_page = NULL)
   );
 
   // Results per page per search page
-  $default_value = isset($search_page->settings['apachesolr_search_per_page']) ? $search_page->settings['apachesolr_search_per_page'] : '10';
+  $default_value = isset($search_page['settings']['apachesolr_search_per_page']) ? $search_page['settings']['apachesolr_search_per_page'] : '10';
   $form['advanced']['apachesolr_search_per_page'] = array(
     '#type' => 'textfield',
     '#size' => 3,
@@ -381,7 +381,7 @@ function apachesolr_search_page_settings_form(&$form_state, $search_page = NULL)
   );
 
   // Enable/disable spellcheck on pages
-  $default_value = isset($search_page->settings['apachesolr_search_spellcheck']) ? $search_page->settings['apachesolr_search_spellcheck'] : TRUE;
+  $default_value = isset($search_page['settings']['apachesolr_search_spellcheck']) ? $search_page['settings']['apachesolr_search_spellcheck'] : TRUE;
   $form['advanced']['apachesolr_search_spellcheck'] = array(
     '#type' => 'checkbox',
     '#title' => t('Enable spell check'),
@@ -390,7 +390,7 @@ function apachesolr_search_page_settings_form(&$form_state, $search_page = NULL)
   );
 
   // Enable/disable search form on search page (replaced by a block perhaps)
-  $default_value = isset($search_page->settings['apachesolr_search_search_box']) ? $search_page->settings['apachesolr_search_search_box'] : TRUE;
+  $default_value = isset($search_page['settings']['apachesolr_search_search_box']) ? $search_page['settings']['apachesolr_search_search_box'] : TRUE;
   $form['advanced']['apachesolr_search_search_box'] = array(
     '#type' => 'checkbox',
     '#title' => t('Enable the search box on the page'),
@@ -400,7 +400,7 @@ function apachesolr_search_page_settings_form(&$form_state, $search_page = NULL)
   );
 
   // Enable/disable search form on search page (replaced by a block perhaps)
-  $default_value = isset($search_page->settings['apachesolr_search_allow_user_input']) ? $search_page->settings['apachesolr_search_allow_user_input'] : FALSE;
+  $default_value = isset($search_page['settings']['apachesolr_search_allow_user_input']) ? $search_page['settings']['apachesolr_search_allow_user_input'] : FALSE;
   $form['advanced']['apachesolr_search_allow_user_input'] = array(
     '#type' => 'checkbox',
     '#title' => t('Allow user input using the URL'),
@@ -409,7 +409,7 @@ function apachesolr_search_page_settings_form(&$form_state, $search_page = NULL)
   );
 
   // Use the main search page setting as the default for new pages.
-  $default_value = isset($search_page->settings['apachesolr_search_browse']) ? $search_page->settings['apachesolr_search_browse'] : 'browse';
+  $default_value = isset($search_page['settings']['apachesolr_search_browse']) ? $search_page['settings']['apachesolr_search_browse'] : 'browse';
   $form['advanced']['apachesolr_search_browse'] = _apachesolr_search_browse_form($default_value);
 
   // Button for the corresponding actions
@@ -520,14 +520,14 @@ function apachesolr_search_page_settings_form_submit($form, &$form_state) {
     variable_set('apachesolr_search_default_search_page', $form_state['values']['page_id']);
   }
 
-  $search_page = new stdClass();
-  $search_page->page_id = $form_state['values']['page_id'];
-  $search_page->label = $form_state['values']['label'];
-  $search_page->description = $form_state['values']['description'];
-  $search_page->env_id = $form_state['values']['env_id'];
-  $search_page->search_path = $form_state['values']['search_path'];
-  $search_page->page_title = $form_state['values']['page_title'];
-  $search_page->settings = $settings;
+  $search_page = array();
+  $search_page['page_id'] = $form_state['values']['page_id'];
+  $search_page['label'] = $form_state['values']['label'];
+  $search_page['description'] = $form_state['values']['description'];
+  $search_page['env_id'] = $form_state['values']['env_id'];
+  $search_page['search_path'] = $form_state['values']['search_path'];
+  $search_page['page_title'] = $form_state['values']['page_title'];
+  $search_page['settings'] = $settings;
   apachesolr_search_page_save($search_page);
 
   // Saves our values in the database, sets redirect path on success.
@@ -556,13 +556,20 @@ function apachesolr_search_page_settings_cancel($form, &$form_state) {
 function apachesolr_search_delete_search_page_confirm(&$form_state, $search_page) {
   $form = array();
   // Sets values required for deletion.
-  $form['page_id'] = array('#type' => 'value', '#value' => $search_page->page_id);
-  $form['label'] = array('#type' => 'value', '#value' => $search_page->label);
+  $form['page_id'] = array('#type' => 'value', '#value' => $search_page['page_id']);
+  $form['label'] = array('#type' => 'value', '#value' => $search_page['label']);
+
+  if (isset($search_page['export_type']) && $search_page['export_type'] == '3') {
+    $verb = t('Revert');
+  }
+  else {
+    $verb = t('Delete');
+  }
 
   // Sets the message, or the title of the page.
   $message = t(
-    'Are you sure you want to delete the %label search page configuration?',
-    array('%label' => $form['label']['#value'])
+    'Are you sure you want to !verb the %label search page configuration?',
+    array('%label' => $form['label']['#value'], '!verb' => strtolower($verb))
   );
 
   // Builds caption.
@@ -576,8 +583,8 @@ function apachesolr_search_delete_search_page_confirm(&$form_state, $search_page
 
   // Finalizes and returns the confirmation form.
   $return_path = 'admin/settings/apachesolr/search-pages';
-  $button_text = t('Delete page');
-  if (!isset($search_page->settings['apachesolr_search_not_removable'])) {
+  $button_text = $verb;
+  if (!isset($search_page['settings']['apachesolr_search_not_removable'])) {
     return confirm_form($form, filter_xss($message), $return_path, filter_xss($caption), check_plain($button_text));
   }
   else {
@@ -619,11 +626,11 @@ function apachesolr_search_clone_search_page_confirm(&$form_state, $search_page)
   $form = array();
   $form['page_id'] = array(
     '#type' => 'value',
-    '#value' => $search_page->page_id,
+    '#value' => $search_page['page_id'],
   );
   return confirm_form(
     $form,
-    t('Are you sure you want to clone search page %name?', array('%name' => $search_page->label)),
+    t('Are you sure you want to clone search page %name?', array('%name' => $search_page['label'])),
     'admin/settings/apachesolr',
     '',
     t('Clone'),
diff --git a/apachesolr_search.install b/apachesolr_search.install
index cd8899f..f8d1b69 100644
--- a/apachesolr_search.install
+++ b/apachesolr_search.install
@@ -31,14 +31,14 @@ function apachesolr_search_enable() {
       'apachesolr_search_not_removable' => TRUE,
       'apachesolr_search_search_box' => TRUE,
     );
-    $search_page = new stdClass();
-    $search_page->page_id = 'core_search';
-    $search_page->label = 'Core Search';
-    $search_page->description = 'Core Search';
-    $search_page->search_path = 'search/site';
-    $search_page->env_id = 'solr';
-    $search_page->page_title = 'Site';
-    $search_page->settings = $settings;
+    $search_page = array();
+    $search_page['page_id'] = 'core_search';
+    $search_page['label'] = 'Core Search';
+    $search_page['description'] = 'Core Search';
+    $search_page['search_path'] = 'search/site';
+    $search_page['env_id'] = 'solr';
+    $search_page['page_title'] = 'Site';
+    $search_page['settings'] = $settings;
     apachesolr_search_page_save($search_page);
   }
 
@@ -52,14 +52,14 @@ function apachesolr_search_enable() {
       'apachesolr_search_spellcheck' => FALSE,
       'apachesolr_search_search_box' => FALSE,
     );
-    $search_page = new stdClass();
-    $search_page->page_id = 'taxonomy_search';
-    $search_page->label = 'Taxonomy Search';
-    $search_page->description = 'Search all items with given term';
-    $search_page->search_path = 'taxonomy/term/%';
-    $search_page->env_id = '';
-    $search_page->page_title = '%value';
-    $search_page->settings = $settings;
+    $search_page = array();
+    $search_page['page_id'] = 'taxonomy_search';
+    $search_page['label'] = 'Taxonomy Search';
+    $search_page['description'] = 'Search all items with given term';
+    $search_page['search_path'] = 'taxonomy/term/%';
+    $search_page['env_id'] = '';
+    $search_page['page_title'] = '%value';
+    $search_page['settings'] = $settings;
     apachesolr_search_page_save($search_page);
   }
 
@@ -77,16 +77,23 @@ function apachesolr_search_schema() {
   $schema['apachesolr_search_page'] = array(
     'description' => 'Apache Solr Search search page settings.',
     'export' => array(
+      // Environment machine name.
       'key' => 'page_id',
+      // Description of key.
+      'key name' => 'search page machine name',
+      // Variable name to use in exported code.
       'identifier' => 'searcher',
+      // Use the same hook as the API name below.
       'default hook' => 'apachesolr_search_default_searchers',
       'status' => 'apachesolr_search_page_status',
+      // CTools API implementation.
       'api' => array(
         'owner' => 'apachesolr_search',
         'api' => 'apachesolr_search_defaults',
         'minimum_version' => 3,
         'current_version' => 3,
       ),
+      // Includes all search page specific configurations.
       'export callback' => 'apachesolr_search_page_settings_export',
     ),
     'fields' => array(
diff --git a/apachesolr_search.module b/apachesolr_search.module
index 66ee809..0027a3e 100644
--- a/apachesolr_search.module
+++ b/apachesolr_search.module
@@ -20,12 +20,12 @@ function apachesolr_search_init() {
     return;
   }
 
-  $show_facets = apachesolr_environment_variable_get($search_page->env_id, 'apachesolr_search_show_facets', 0);
+  $show_facets = apachesolr_environment_variable_get($search_page['env_id'], 'apachesolr_search_show_facets', 0);
   if ($show_facets && module_exists('facetapi')) {
 
     // Converts current path to lowercase for case insensitive matching.
     $path = drupal_strtolower(drupal_get_path_alias($_GET['q']));
-    $facet_pages = apachesolr_environment_variable_get($search_page->env_id, 'apachesolr_search_facet_pages', '');
+    $facet_pages = apachesolr_environment_variable_get($search_page['env_id'], 'apachesolr_search_facet_pages', '');
 
     // Iterates over each environment to check if an empty query should be run.
     if (!empty($facet_pages)) {
@@ -33,15 +33,15 @@ function apachesolr_search_init() {
       $patterns = drupal_strtolower($facet_pages);
       if (drupal_match_path($path, $patterns)) {
         try {
-          if (!empty($search_page->search_path)) {
-            $solr = apachesolr_get_solr($search_page->env_id);
+          if (!empty($search_page['search_path'])) {
+            $solr = apachesolr_get_solr($search_page['env_id']);
             // Initializes params for empty query.
             $params = array(
               'spellcheck' => 'false',
               'fq' => array(),
               'rows' => 1,
             );
-            apachesolr_search_run_empty('apachesolr', $params, $search_page->search_path, $solr);
+            apachesolr_search_run_empty('apachesolr', $params, $search_page['search_path'], $solr);
           }
         }
         catch (Exception $e) {
@@ -144,31 +144,31 @@ function apachesolr_search_menu_alter(&$items) {
 
     // Parses search path into it's various parts, builds menu items dependent
     // on whether %keys is in the path.
-    $parts = explode('/', $search_page->search_path);
+    $parts = explode('/', $search_page['search_path']);
     $keys_pos = count($parts);
     // Tests whether we are simulating a core search tab.
     $core_search = ($parts[0] == 'search');
-    $taxonomy_search = ($search_page->search_path == 'taxonomy/term/%');
+    $taxonomy_search = ($search_page['search_path'] == 'taxonomy/term/%');
     $position = array_search('%', $parts);
-    $page_title = isset($search_page->page_title) ? $search_page->page_title : 'Search Results';
+    $page_title = isset($search_page['page_title']) ? $search_page['page_title'] : 'Search Results';
 
     // Replace possible tokens [term:tid], [node:nid], [user:uid] with their
     // menu-specific variant
-    $items[$search_page->search_path] = array(
+    $items[$search_page['search_path']] = array(
       'title' => $page_title,
       'page callback' => 'apachesolr_search_custom_page',
-      'page arguments' => array($search_page->page_id, '', $position),
+      'page arguments' => array($search_page['page_id'], '', $position),
       'access arguments' => array('search content'),
       'type' => ($core_search) ? MENU_LOCAL_TASK : MENU_SUGGESTED_ITEM,
       'file' => 'apachesolr_search.pages.inc',
       'file path' => drupal_get_path('module', 'apachesolr_search'),
     );
 
-    $items[$search_page->search_path . '/%menu_tail'] = array(
+    $items[$search_page['search_path'] . '/%menu_tail'] = array(
       'title' => $page_title,
       'load arguments' => array('%map', '%index'),
       'page callback' => 'apachesolr_search_custom_page',
-      'page arguments' => array($search_page->page_id, $keys_pos, $position),
+      'page arguments' => array($search_page['page_id'], $keys_pos, $position),
       'access arguments' => array('search content'),
       'type' => ($taxonomy_search) ? MENU_DEFAULT_LOCAL_TASK : MENU_LOCAL_TASK,
       'file' => 'apachesolr_search.pages.inc',
@@ -176,20 +176,20 @@ function apachesolr_search_menu_alter(&$items) {
     );
 
     // If title has a certain callback for the selected type we use it
-    $search_type_id = !empty($search_page->settings['apachesolr_search_search_type']) ? $search_page->settings['apachesolr_search_search_type'] : FALSE;
+    $search_type_id = !empty($search_page['settings']['apachesolr_search_search_type']) ? $search_page['settings']['apachesolr_search_search_type'] : FALSE;
     $search_type = !empty($search_types[$search_type_id]) ? $search_types[$search_type_id] : FALSE;
 
     if ($search_type && !empty($position)) {
       $title_callback = $search_type['title callback'];
-      $items[$search_page->search_path]['title callback'] = $title_callback;
-      $items[$search_page->search_path]['title arguments'] = array($search_page->page_id, $position);
-      $items[$search_page->search_path . '/%menu_tail']['title callback'] = $title_callback;
-      $items[$search_page->search_path . '/%menu_tail']['title arguments'] = array($search_page->page_id, $position);
+      $items[$search_page['search_path']]['title callback'] = $title_callback;
+      $items[$search_page['search_path']]['title arguments'] = array($search_page['page_id'], $position);
+      $items[$search_page['search_path'] . '/%menu_tail']['title callback'] = $title_callback;
+      $items[$search_page['search_path'] . '/%menu_tail']['title arguments'] = array($search_page['page_id'], $position);
     }
     // If we have additional searches in the search/* path
     /*if ($core_search) {
-      $items[$search_page->search_path . '/%menu_tail']['tab_root'] = 'search/' . $default_info['path'] . '/%';
-      $items[$search_page->search_path . '/%menu_tail']['tab_parent'] = 'search/' . $default_info['path'];
+      $items[$search_page['search_path'] . '/%menu_tail']['tab_root'] = 'search/' . $default_info['path'] . '/%';
+      $items[$search_page['search_path'] . '/%menu_tail']['tab_parent'] = 'search/' . $default_info['path'];
     }*/
 
     if ($taxonomy_search) {
@@ -255,7 +255,7 @@ function apachesolr_search_get_taxonomy_term_title($search_page_id = NULL, $valu
    $page_title = 'Search results for %value';
    if (isset($value) && isset($search_page_id)) {
      $search_page = apachesolr_search_page_load($search_page_id);
-     $page_title = str_replace('%value', '!value', $search_page->page_title);
+     $page_title = str_replace('%value', '!value', $search_page['page_title']);
      $term = taxonomy_get_term($value);
      if (!$term) {
        return;
@@ -277,7 +277,7 @@ function apachesolr_search_get_user_title($search_page_id = NULL, $value = NULL)
   $title = '';
   if (isset($value) && isset($search_page_id)) {
     $search_page = apachesolr_search_page_load($search_page_id);
-    $page_title = str_replace('%value', '!value', $search_page->page_title);
+    $page_title = str_replace('%value', '!value', $search_page['page_title']);
     $user = user_load($value);
     if (!$user) {
        return;
@@ -298,7 +298,7 @@ function apachesolr_search_get_value_title($search_page_id = NULL, $value = NULL
   $page_title = 'Search results for %value';
   if (isset($value)  && isset($search_page_id)) {
     $search_page = apachesolr_search_page_load($search_page_id);
-    $page_title = str_replace('%value', '!value', $search_page->page_title);
+    $page_title = str_replace('%value', '!value', $search_page['page_title']);
     $title = $value;
   }
   return t($page_title, array('!value' => $title));
@@ -328,31 +328,11 @@ function apachesolr_search_default_search_page($page_id = NULL, $reset = FALSE)
  * @return array
  */
 function apachesolr_search_page_load($page_id, $reset = FALSE) {
-  static $pages = array();
-
-  if ($reset) {
-    $pages = array();
-  }
-
-  if (!isset($pages[$page_id]) && db_table_exists('apachesolr_search_page')) {
-      $page = db_fetch_object(db_query("SELECT * FROM {apachesolr_search_page} s WHERE s.page_id = '%s'", array($page_id)));
-    if ($page) {
-      $page->settings = unserialize($page->settings);
-      // Special case page - always uses the default environment.
-      if ($page->page_id == 'core_search') {
-        $page->env_id = apachesolr_default_environment();
-      }
-    }
-    elseif (module_exists('ctools')) {
-      // Try also loading the page from ctools exportables.
-      ctools_include('export');
-      if ($pages_from_code = ctools_export_load_object('apachesolr_search_page', 'names', array($page_id))) {
-        $page = array_shift($pages_from_code);
-      }
-    }
-    $pages[$page_id] = $page;
+  $search_pages = apachesolr_search_load_all_search_pages();
+  if (!empty($search_pages[$page_id])) {
+    return $search_pages[$page_id];
   }
-  return $pages[$page_id];
+  return FALSE;
 }
 
 function apachesolr_search_page_save($search_page) {
@@ -361,20 +341,20 @@ function apachesolr_search_page_save($search_page) {
       VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s')
       ON DUPLICATE KEY UPDATE page_id = '%s', label = '%s', description = '%s', env_id = '%s', search_path = '%s', page_title = '%s', settings = '%s'";
     $arguments = array(
-      $search_page->page_id,
-      $search_page->label,
-      $search_page->description,
-      $search_page->env_id,
-      $search_page->search_path,
-      $search_page->page_title,
-      serialize($search_page->settings),
-      $search_page->page_id,
-      $search_page->label,
-      $search_page->description,
-      $search_page->env_id,
-      $search_page->search_path,
-      $search_page->page_title,
-      serialize($search_page->settings),
+      $search_page['page_id'],
+      $search_page['label'],
+      $search_page['description'],
+      $search_page['env_id'],
+      $search_page['search_path'],
+      $search_page['page_title'],
+      serialize($search_page['settings']),
+      $search_page['page_id'],
+      $search_page['label'],
+      $search_page['description'],
+      $search_page['env_id'],
+      $search_page['search_path'],
+      $search_page['page_title'],
+      serialize($search_page['settings']),
     );
     db_query($query, $arguments);
   }
@@ -392,13 +372,13 @@ function apachesolr_search_page_clone($page_id) {
   // Get all search_pages
   $search_pages = apachesolr_search_load_all_search_pages();
   // Create an unique ID
-  $new_search_page_id = apachesolr_create_unique_id($search_pages, $search_page->page_id);
+  $new_search_page_id = apachesolr_create_unique_id($search_pages, $search_page['page_id']);
   // Set this id to the new search page
-  $search_page->page_id = $new_search_page_id;
-  $search_page->label = $search_page->label . ' [cloned]';
+  $search_page['page_id'] = $new_search_page_id;
+  $search_page['label'] = $search_page['label'] . ' [cloned]';
   // All cloned search pages should be removable
-  if (isset($search_page->settings['apachesolr_search_not_removable'])) {
-    unset($search_page->settings['apachesolr_search_not_removable']);
+  if (isset($search_page['settings']['apachesolr_search_not_removable'])) {
+    unset($search_page['settings']['apachesolr_search_not_removable']);
   }
   // Save our new search page in the database
   apachesolr_search_page_save($search_page);
@@ -477,11 +457,7 @@ function apachesolr_search_form_block_admin_display_form_alter(&$form) {
   foreach ($form as $key => $block) {
     if (isset($block['delta']['#value'])) {
       if ((strpos($key, "apachesolr_search_mlt-") === 0) && $block['module']['#value'] == 'apachesolr_search') {
-        $form['blocks'][$key]['delete'] = array(
-          '#type' => 'link',
-          '#title' => 'delete',
-          '#href' => 'admin/settings/apachesolr/search-pages/block/' . $block['delta']['#value'] . '/delete',
-        );
+        $form[$key]['delete']['#value'] = l(t('Delete'), 'admin/settings/apachesolr/search-pages/block/' . $block['delta']['#value'] . '/delete');
       }
     }
   }
@@ -529,10 +505,14 @@ function apachesolr_search_load_all_search_pages() {
       }
     }
     // Get all search_pages and their id
-    $search_pages_db = db_query('SELECT * FROM {apachesolr_search_page}');
-    while($search_page = db_fetch_array($search_pages_db)) {
-      $search_pages[$search_page['page_id']] = $search_page;
+    $search_pages_db = array();
+    $search_pages_db_results = db_query('SELECT * FROM {apachesolr_search_page}');
+    while($search_pages_db_result = db_fetch_array($search_pages_db_results)) {
+      $search_pages_db[$search_pages_db_result['page_id']] = $search_pages_db_result;
     }
+
+    $search_pages = $search_pages + $search_pages_db;
+
     // convert settings to an array
     foreach ($search_pages as $id => $search_page) {
       if (is_string($search_pages[$id]['settings'])) {
@@ -786,14 +766,14 @@ function apachesolr_search_search_page($results) {
  */
 function apachesolr_search_search_page_custom($results, $search_page, $build = array()) {
   // Retrieve suggestion
-  $suggestions = apachesolr_search_get_search_suggestions($search_page->env_id);
+  $suggestions = apachesolr_search_get_search_suggestions($search_page['env_id']);
   if ($search_page && !empty($suggestions)) {
-    $build['suggestions'] = theme('apachesolr_search_suggestions', array(l($suggestions[0], $search_page->search_path . '/' . $suggestions[0])));
+    $build['suggestions'] = theme('apachesolr_search_suggestions', array(l($suggestions[0], $search_page['search_path'] . '/' . $suggestions[0])));
   }
   // Retrieve expected results from searching
   if (!empty($results['apachesolr_search_browse'])) {
     // Show facet browsing blocks.
-    $build['search_results'] = apachesolr_search_page_browse($results['apachesolr_search_browse'], $search_page->env_id);
+    $build['search_results'] = apachesolr_search_page_browse($results['apachesolr_search_browse'], $search_page['env_id']);
   }
   elseif ($results) {
     $build['search_results'] = theme('search_results', $results, 'apachesolr_search', $search_page);
@@ -843,17 +823,17 @@ function apachesolr_search_search_results($keys = NULL, $conditions = NULL, $sea
     //   See This condition callback to find out how.
     $solrsort = isset($conditions['apachesolr_search_sort']) ? $conditions['apachesolr_search_sort'] : '';
     // What to do when we have an initial empty search
-    $empty_search_behavior = isset($search_page->settings['apachesolr_search_browse']) ? $search_page->settings['apachesolr_search_browse'] : '';
+    $empty_search_behavior = isset($search_page['settings']['apachesolr_search_browse']) ? $search_page['settings']['apachesolr_search_browse'] : '';
 
     $params = array();
     $results = array();
     try {
-      $solr = apachesolr_get_solr($search_page->env_id);
+      $solr = apachesolr_get_solr($search_page['env_id']);
       // Default parameters
       $params['fq'] = isset($conditions['fq']) ? $conditions['fq'] : array();
-      $params['rows'] = $search_page->settings['apachesolr_search_per_page'];
+      $params['rows'] = $search_page['settings']['apachesolr_search_per_page'];
 
-      if (empty($search_page->settings['apachesolr_search_spellcheck'])) {
+      if (empty($search_page['settings']['apachesolr_search_spellcheck'])) {
         // Spellcheck needs to have a string as false/true
         $params['spellcheck'] = 'false';
       }
@@ -865,12 +845,12 @@ function apachesolr_search_search_results($keys = NULL, $conditions = NULL, $sea
       if (!$keys && !isset($conditions['f']) && ($empty_search_behavior == 'browse' || $empty_search_behavior == 'blocks')) {
         // Pass empty search behavior as string on to apachesolr_search_search_page()
         // Hardcoded apachesolr name since we rely on this for the facets
-        apachesolr_search_run_empty('apachesolr', $params, $search_page->search_path, $solr);
+        apachesolr_search_run_empty('apachesolr', $params, $search_page['search_path'], $solr);
         $results['apachesolr_search_browse'] = $empty_search_behavior;
 
         if ($empty_search_behavior == 'browse') {
           // Hide sidebar blocks for content-area browsing instead.
-          apachesolr_suppress_blocks($search_page->env_id, TRUE);
+          apachesolr_suppress_blocks($search_page['env_id'], TRUE);
         }
       }
       // Full text behavior. Triggers with a text search or a facet
@@ -879,7 +859,7 @@ function apachesolr_search_search_results($keys = NULL, $conditions = NULL, $sea
         // Hardcoded apachesolr name since we rely on this for the facets
         $page = isset($_GET['page']) ? $_GET['page'] : '';
         $page = check_plain($page);
-        $results = apachesolr_search_run('apachesolr', $params, $solrsort, $search_page->search_path, $page, $solr);
+        $results = apachesolr_search_run('apachesolr', $params, $solrsort, $search_page['search_path'], $page, $solr);
       }
     }
     catch (Exception $e) {
@@ -892,11 +872,11 @@ function apachesolr_search_search_results($keys = NULL, $conditions = NULL, $sea
 
 function apachesolr_search_conditions_default($search_page) {
   $conditions = array();
-  $search_type = isset($search_page->settings['apachesolr_search_search_type']) ? $search_page->settings['apachesolr_search_search_type'] : '';
-  $allow_user_input = isset($search_page->settings['apachesolr_search_allow_user_input']) ? $search_page->settings['apachesolr_search_allow_user_input'] : FALSE;
-  $path_replacer = isset($search_page->settings['apachesolr_search_path_replacer']) ? $search_page->settings['apachesolr_search_path_replacer'] : '';
-  $set_custom_filter = isset($search_page->settings['apachesolr_search_custom_enable']) ? $search_page->settings['apachesolr_search_custom_enable'] : '';
-  $search_page_fq = !empty($search_page->settings['fq']) ? $search_page->settings['fq'] : '';
+  $search_type = isset($search_page['settings']['apachesolr_search_search_type']) ? $search_page['settings']['apachesolr_search_search_type'] : '';
+  $allow_user_input = isset($search_page['settings']['apachesolr_search_allow_user_input']) ? $search_page['settings']['apachesolr_search_allow_user_input'] : FALSE;
+  $path_replacer = isset($search_page['settings']['apachesolr_search_path_replacer']) ? $search_page['settings']['apachesolr_search_path_replacer'] : '';
+  $set_custom_filter = isset($search_page['settings']['apachesolr_search_custom_enable']) ? $search_page['settings']['apachesolr_search_custom_enable'] : '';
+  $search_page_fq = !empty($search_page['settings']['fq']) ? $search_page['settings']['fq'] : '';
 
   $conditions['fq'] = array();
   // We only allow this to happen if the search page explicitely allows it
@@ -1498,12 +1478,12 @@ function apachesolr_search_form_search_form_alter(&$form, $form_state) {
     // calling drupal_get_form('search_form').
     // Load core search page
     $search_page = apachesolr_search_page_load('core_search');
-    $apachesolr_has_searched = apachesolr_has_searched($search_page->env_id);
+    $apachesolr_has_searched = apachesolr_has_searched($search_page['env_id']);
 
     $searcher = NULL;
     $fq = NULL;
     if ($apachesolr_has_searched) {
-      $query = apachesolr_current_query($search_page->env_id);
+      $query = apachesolr_current_query($search_page['env_id']);
       $searcher = $query->getSearcher();
       // We use the presence of filter query params as a flag for the retain filters checkbox.
       $fq = $query->getParam('fq');
diff --git a/apachesolr_search.pages.inc b/apachesolr_search.pages.inc
index ee19e9f..fba50a0 100644
--- a/apachesolr_search.pages.inc
+++ b/apachesolr_search.pages.inc
@@ -16,10 +16,10 @@ function apachesolr_search_custom_page($page_id, $keys = '', $path_replacer = NU
   }
   // Add our replacement value in the conditions array
   if (!empty($path_replacer)) {
-    $search_page->settings['apachesolr_search_path_replacer'] = $path_replacer;
+    $search_page['settings']['apachesolr_search_path_replacer'] = $path_replacer;
   }
   // Replace dynamic path with current path
-  $search_page->search_path = str_replace('%', $path_replacer, $search_page->search_path);
+  $search_page['search_path'] = str_replace('%', $path_replacer, $search_page['search_path']);
   // Retrieve the conditions that apply to this page
   $conditions = apachesolr_search_conditions_default($search_page);
   // Retrieve the results of the search
@@ -27,7 +27,7 @@ function apachesolr_search_custom_page($page_id, $keys = '', $path_replacer = NU
   // Initiate our build array
   $build = array();
   // Add a custom search form if required
-  if (!empty($search_page->settings['apachesolr_search_search_box'])) {
+  if (!empty($search_page['settings']['apachesolr_search_search_box'])) {
     // Adds the search form to the page.
     $build['search_form'] = drupal_get_form('apachesolr_search_custom_page_search_form', $search_page, $keys);
   }
@@ -73,8 +73,8 @@ function apachesolr_search_custom_page_search_form(&$form_state, $search_page, $
 
   $fq = NULL;
 
-  if (apachesolr_has_searched($search_page->env_id)) {
-    $query = apachesolr_current_query($search_page->env_id);
+  if (apachesolr_has_searched($search_page['env_id'])) {
+    $query = apachesolr_current_query($search_page['env_id']);
     // We use the presence of filter query params as a flag for the retain filters checkbox.
     $fq = $query->getParam('fq');
   }
@@ -95,7 +95,7 @@ function apachesolr_search_custom_page_search_form(&$form_state, $search_page, $
  */
 function apachesolr_search_custom_page_search_form_submit(&$form, &$form_state) {
   $search_page = $form['#search_page'];
-  $redirect = $search_page->search_path;
+  $redirect = $search_page['search_path'];
   if (strlen($form_state['values']['keys'])) {
     $redirect .= '/' . $form_state['values']['keys'];
   }
diff --git a/tests/apachesolr_base.test b/tests/apachesolr_base.test
index 45102d4..0325be7 100644
--- a/tests/apachesolr_base.test
+++ b/tests/apachesolr_base.test
@@ -344,7 +344,7 @@ class DrupalSolrOfflineSearchPagesWebTestCase extends DrupalWebTestCase {
     // Note: the first delete link is for the taxonomy search page which is enabled by default.
     $this->clickLink(t('Delete'));
     $this->assertText(t('search page configuration will be deleted.This action cannot be undone.'), t('Delete confirmation page was succesfully loaded'));
-    $this->drupalPost($this->getUrl(), array(), t('Delete page'));
+    $this->drupalPost($this->getUrl(), array(), t('Delete'));
     $this->assertResponse(200);
 
     // Reset static var
diff --git a/tests/solr_index_and_search.test b/tests/solr_index_and_search.test
index bb66061..c119e10 100755
--- a/tests/solr_index_and_search.test
+++ b/tests/solr_index_and_search.test
@@ -2,6 +2,7 @@
 
 class DrupalSolrOnlineWebTestCase extends DrupalWebTestCase {
   public $solr_core_name;
+  public $environment = array();
 
   /**
    * Implementation of setUp().
@@ -11,18 +12,21 @@ class DrupalSolrOnlineWebTestCase extends DrupalWebTestCase {
     parent::setUp('content', 'search', 'apachesolr', 'apachesolr_search');
     // Load the default server.
     $env_id = apachesolr_default_environment();
-    $environment = apachesolr_environment_load($env_id);
+    $environment = apachesolr_environment_load($env_id, TRUE);
+    $this->environment = $environment;
 
     if (apachesolr_server_status($environment['url'])) {
       // We will use a core named after the simpletest prefix.
       // Normal base URL will be http://localhost:8983/solr
-      $base_url = $environment['url'];
+      $base_url = 'http://localhost:8983/solr';
       $this->solr_core_name = $this->randomString(8);
       $environment['url'] .= '/' . $this->solr_core_name;
       apachesolr_environment_save($environment);
+      // Update the environment with new values
+      $this->environment = $environment;
       $solr_url = $environment['url'];
       $core_admin_url = "$base_url/admin/cores";
-      $filesdir = variable_get('file_public_path', 'sites/default/files/');
+      $filesdir = file_directory_path();
 
       // Create our 'solr core dir'
       mkdir("$filesdir/solr", 0777, TRUE);
@@ -67,9 +71,7 @@ class DrupalSolrOnlineWebTestCase extends DrupalWebTestCase {
    */
   protected function coreAdmin($action, $return_response = FALSE) {
     // Load the default server.
-    $env_id = apachesolr_default_environment();
-    $environment = apachesolr_environment_load($env_id);
-
+    $environment = $this->environment;
     if (apachesolr_server_status($environment['url'])) {
       $query = array();
       $query['action'] = $action;
@@ -117,7 +119,7 @@ class DrupalSolrMatchTestCase extends DrupalSolrOnlineWebTestCase {
   function testMatching() {
     // Load the default server.
     $env_id = apachesolr_default_environment();
-    $environment = apachesolr_environment_load($env_id);
+    $environment = apachesolr_environment_load($env_id, TRUE);
     if (apachesolr_server_status($environment['url'])) {
       $solr = apachesolr_get_solr($env_id);
       $this->assertTrue($solr->ping(), "The Server could be Pinged");
