diff --git a/apachesolr.admin.inc b/apachesolr.admin.inc
index dd3425e..9fd810a 100644
--- a/apachesolr.admin.inc
+++ b/apachesolr.admin.inc
@@ -877,7 +877,6 @@ function apachesolr_index_action_form_delete_confirm_submit($form, &$form_state)
 
 /**
  * Submit a batch job to index the remaining, unindexed content.
- * @todo Make the env_id have an impact if we want multi environment indexing
  */
 function apachesolr_index_batch_index_remaining($env_id) {
   $batch = array(
diff --git a/apachesolr.info b/apachesolr.info
index a34f6ba..4234361 100644
--- a/apachesolr.info
+++ b/apachesolr.info
@@ -16,5 +16,7 @@ files[] = plugins/facetapi/query_type_date.inc
 files[] = plugins/facetapi/query_type_term.inc
 files[] = plugins/facetapi/query_type_numeric_range.inc
 files[] = tests/Dummy_Solr.php
+files[] = tests/apachesolr_base.test
 files[] = tests/solr_index_and_search.test
 files[] = tests/solr_base_query.test
+files[] = tests/solr_document.test
diff --git a/tests/apachesolr_base.test b/tests/apachesolr_base.test
new file mode 100644
index 0000000..204b45b
--- /dev/null
+++ b/tests/apachesolr_base.test
@@ -0,0 +1,145 @@
+<?php
+/**
+ * @file
+ *   Unit test class that provides tests for base functionality of the Apachesolr
+ *   Module without having the need of a Solr Server
+ */
+class DrupalSolrOfflineWebTestCase extends DrupalWebTestCase {
+  /**
+   * A global basic user who can search.
+   */
+  var $basic_user;
+
+  /**
+   * A global administrative user who can administer search.
+   */
+  var $admin_user;
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Solr Base Framework Tests 1/2',
+      'description' => 'Tests Base functionality of the Solr module',
+      'group' => 'ApacheSolr',
+    );
+  }
+  /**
+   * Implementation of setUp().
+   */
+  function setUp() {
+    parent::setUp('apachesolr', 'apachesolr_search', 'search');
+    // Create a basic user, which is subject to moderation.
+    $permissions = array(
+      'access content',
+      'search content',
+    );
+    $basic_user = $this->drupalCreateUser($permissions);
+
+    // Create an admin user that can bypass revision moderation.
+    $permissions = array(
+      'access content',
+      'search content',
+      'administer nodes',
+      'administer search',
+    );
+    $admin_user = $this->drupalCreateUser($permissions);
+
+    // Assign users to their test suite-wide properties.
+    $this->basic_user = $basic_user;
+    $this->admin_user = $admin_user;
+  }
+
+  /**
+   *	Asserts that the module was installed and that a notice appears that the server is offline
+   */
+  function testAssertServerOffline() {
+    // Load the default server.
+    $env_id = apachesolr_default_environment();
+    $environment = apachesolr_environment_load($env_id);
+    $environment['url'] = 'http://localhost/solr/core_that_should_not_exist';
+    apachesolr_environment_save($environment);
+    $status = apachesolr_server_status($environment['url']);
+    $this->assertFalse($status, t('A false URL could not be loaded and is offline'));
+    $this->drupalLogin($this->admin_user);
+    $this->drupalGet('admin/config/search/apachesolr');
+    $text = t('The server seems to be unavailable. Please verify the server settings');
+    $this->assertText($text, t('When checking the status of the server it gives the correct message to inform the user that the server is not reachable'));
+  }
+
+  function tearDown() {
+    parent::tearDown();
+  }
+}
+
+
+class DrupalSolrOfflineUnitTestCase extends DrupalUnitTestCase {
+  public static function getInfo() {
+    return array(
+      'name' => 'Solr Base Framework Tests 2/2',
+      'description' => 'Tests Base functionality of the Solr module',
+      'group' => 'ApacheSolr',
+    );
+  }
+
+  protected function setUp() {
+    parent::setUp();
+    require_once dirname(dirname(realpath(__FILE__))) . '/apachesolr.module';
+
+    $this->script_content = <<<EOF
+<p>GOOD_CONTENT</p>
+<script type="text/javascript" >
+$(document).ready(function(){
+  $('.accordion_teachers').accordion({ collapsible:true, autoHeight:false });
+});
+</script>
+
+EOF;
+
+    $this->embed_content = <<<EOF
+<p>GOOD_CONTENT</p>
+<object width="425" height="349"><param name="movie" value="http://www.youtube.com/v/8Vmnq5dBF7Y?version=3&amp;hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/8Vmnq5dBF7Y?version=3&amp;hl=en_US" type="application/x-shockwave-flash" width="425" height="349" allowscriptaccess="always" allowfullscreen="true"></embed></object>
+OTHER_CONTENT
+
+EOF;
+
+    $this->iframe_content = <<<EOF
+<iframe width="425" height="349" src="http://www.youtube.com/embed/8Vmnq5dBF7Y" frameborder="0" allowfullscreen></iframe>
+<p><a href="#">GOOD_CONTENT</a></p><iframe></iframe>
+
+EOF;
+
+    $this->comment_content = <<<EOF
+<p><em>GOOD_CONTENT</em></p><!-- COMMENT -->
+OTHER_CONTENT
+
+EOF;
+  }
+
+  /**
+   * Test ordering of parsed filter positions.
+   *
+   * Regression test for http://drupal.org/node/891962
+   */
+  function testContentFilters() {
+    $cleaned = apachesolr_clean_text($this->script_content);
+    $this->assertFalse(strpos($cleaned, 'script'), 'Script tags removed');
+    $this->assertFalse(strpos($cleaned, 'accordion_teachers'), 'Script tags conent removed');
+    $this->assertTrue(strpos(trim($cleaned), 'GOOD_CONTENT') === 0, 'Real content retained');
+
+    $cleaned = apachesolr_clean_text($this->embed_content);
+    $this->assertFalse(strpos($cleaned, 'object'), 'object tags removed');
+    $this->assertFalse(strpos($cleaned, 'embed'), 'embed tags removed');
+    $this->assertFalse(strpos($cleaned, '8Vmnq5dBF7Y'), 'object tags conent removed');
+    $this->assertFalse(strpos($cleaned, 'shockwave-flash'), 'embed tags conent removed');
+    $this->assertTrue(strpos(trim($cleaned), 'GOOD_CONTENT') === 0, 'Real content retained');
+    $this->assertTrue(strpos($cleaned, 'OTHER_CONTENT') > 0, 'Other content retained');
+
+    $cleaned = apachesolr_clean_text($this->iframe_content);
+    $this->assertFalse(strpos($cleaned, 'iframe'), 'iframe tags removed');
+    $this->assertFalse(strpos($cleaned, '8Vmnq5dBF7Y'), 'iframe tags conent removed');
+    $this->assertTrue(strpos(trim($cleaned), 'GOOD_CONTENT') === 0, 'Real content retained');
+
+    $cleaned = apachesolr_clean_text($this->comment_content);
+    $this->assertFalse(strpos($cleaned, 'COMMENT'), 'html comment content removed ');
+    $this->assertTrue(strpos(trim($cleaned), 'GOOD_CONTENT') === 0, 'Real content retained');
+  }
+}
\ No newline at end of file
diff --git a/tests/solr_base_query.test b/tests/solr_base_query.test
index 5968b60..3ae2492 100644
--- a/tests/solr_base_query.test
+++ b/tests/solr_base_query.test
@@ -1,86 +1,6 @@
 <?php
 
 /**
- * @file
- *   Unit tests for query object methods.
- *
- *
- */
-class SolrIndexHelperTests extends DrupalUnitTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Indexing helper functionality',
-      'description' => 'Unit test of text parsing/cleaning',
-      'group' => 'ApacheSolr',
-    );
-  }
-
-  protected function setUp() {
-    parent::setUp();
-    require_once dirname(dirname(realpath(__FILE__))) . '/apachesolr.module';
-
-    $this->script_content = <<<EOF
-<p>GOOD_CONTENT</p>
-<script type="text/javascript" >
-$(document).ready(function(){
-  $('.accordion_teachers').accordion({ collapsible:true, autoHeight:false });
-});
-</script>
-
-EOF;
-
-    $this->embed_content = <<<EOF
-<p>GOOD_CONTENT</p>
-<object width="425" height="349"><param name="movie" value="http://www.youtube.com/v/8Vmnq5dBF7Y?version=3&amp;hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/8Vmnq5dBF7Y?version=3&amp;hl=en_US" type="application/x-shockwave-flash" width="425" height="349" allowscriptaccess="always" allowfullscreen="true"></embed></object>
-OTHER_CONTENT
-
-EOF;
-
-    $this->iframe_content = <<<EOF
-<iframe width="425" height="349" src="http://www.youtube.com/embed/8Vmnq5dBF7Y" frameborder="0" allowfullscreen></iframe>
-<p><a href="#">GOOD_CONTENT</a></p><iframe></iframe>
-
-EOF;
-
-    $this->comment_content = <<<EOF
-<p><em>GOOD_CONTENT</em></p><!-- COMMENT -->
-OTHER_CONTENT
-
-EOF;
-  }
-
-  /**
-   * Test ordering of parsed filter positions.
-   *
-   * Regression test for http://drupal.org/node/891962
-   */
-  function testContentFilters() {
-    $cleaned = apachesolr_clean_text($this->script_content);
-    $this->assertFalse(strpos($cleaned, 'script'), 'Script tags removed');
-    $this->assertFalse(strpos($cleaned, 'accordion_teachers'), 'Script tags conent removed');
-    $this->assertTrue(strpos(trim($cleaned), 'GOOD_CONTENT') === 0, 'Real content retained');
-
-    $cleaned = apachesolr_clean_text($this->embed_content);
-    $this->assertFalse(strpos($cleaned, 'object'), 'object tags removed');
-    $this->assertFalse(strpos($cleaned, 'embed'), 'embed tags removed');
-    $this->assertFalse(strpos($cleaned, '8Vmnq5dBF7Y'), 'object tags conent removed');
-    $this->assertFalse(strpos($cleaned, 'shockwave-flash'), 'embed tags conent removed');
-    $this->assertTrue(strpos(trim($cleaned), 'GOOD_CONTENT') === 0, 'Real content retained');
-    $this->assertTrue(strpos($cleaned, 'OTHER_CONTENT') > 0, 'Other content retained');
-
-    $cleaned = apachesolr_clean_text($this->iframe_content);
-    $this->assertFalse(strpos($cleaned, 'iframe'), 'iframe tags removed');
-    $this->assertFalse(strpos($cleaned, '8Vmnq5dBF7Y'), 'iframe tags conent removed');
-    $this->assertTrue(strpos(trim($cleaned), 'GOOD_CONTENT') === 0, 'Real content retained');
-
-    $cleaned = apachesolr_clean_text($this->comment_content);
-    $this->assertFalse(strpos($cleaned, 'COMMENT'), 'html comment content removed ');
-    $this->assertTrue(strpos(trim($cleaned), 'GOOD_CONTENT') === 0, 'Real content retained');
-  }
-
-}
-
-/**
  * Unit tests for query object methods.
  */
 class SolrBaseQueryTests extends DrupalWebTestCase {
diff --git a/tests/solr_document.test b/tests/solr_document.test
new file mode 100644
index 0000000..7c08f4e
--- /dev/null
+++ b/tests/solr_document.test
@@ -0,0 +1,86 @@
+<?php
+
+/**
+ * @file
+ *   Unit tests for query object methods.
+ *
+ *
+ */
+class DrupalSolrDocumentTest extends DrupalUnitTestCase {
+  public static function getInfo() {
+    return array(
+      'name' => 'Unit test of ApacheSolrDocument',
+      'description' => 'Unit test of ApacheSolrDocument',
+      'group' => 'ApacheSolr',
+    );
+  }
+
+  protected function setUp() {
+    parent::setUp();
+    require_once dirname(dirname(realpath(__FILE__))) . '/apachesolr.module';
+    require_once dirname(dirname(realpath(__FILE__))) . '/Apache_Solr_Document.php';
+  }
+
+  function testSolrDocument() {
+    $document = new ApacheSolrDocument();
+    
+    $document->addField('ss_testing', 'testingvalue');
+    $field_value = $document->getField('ss_testing');
+    $this->assertEqual($field_value['value'][0], 'testingvalue', t('The field was correctly added and verified'));
+    $document->clear();
+
+    $document->addField('ss_testing', 'testingvalue', 10);
+    $field_value = $document->getField('ss_testing');
+    $this->assertEqual($field_value['value'][0], 'testingvalue', t('The field and boost were correctly added and verified'));
+    $field_boost = $document->getFieldBoost('ss_testing');
+    $this->assertEqual($field_boost, 10, t('The field boost was correctly added and verified'));
+    $document->clear();
+
+    $document->setMultiValue('sm_testing', 'testingvalue1');
+    $document->setMultiValue('sm_testing', 'testingvalue2');
+    $field_value = $document->getField('sm_testing');
+    $this->assertTrue(in_array('testingvalue1', $field_value['value']), t('The multivalued field value was correctly added and verified'));
+    $this->assertTrue(in_array('testingvalue2', $field_value['value']), t('The second multivalued field value was correctly added and verified'));
+    $document->clear();
+
+    $document->setMultiValue('sm_testing', 'testingvalue1', 10);
+    $document->setMultiValue('sm_testing', 'testingvalue2', 20);
+    $field_value = $document->getField('sm_testing');
+    $this->assertTrue(in_array('testingvalue1', $field_value['value']), t('The multivalued field value and boost were correctly added and verified'));
+    $this->assertTrue(in_array('testingvalue2', $field_value['value']), t('The second multivalued field value and boost were correctly added and verified'));
+    $field_boost = $document->getFieldBoost('sm_testing');
+    $this->assertEqual($field_boost, 200, t('The field boost was correctly multiplied and retrieved'));
+
+    $document_field_names = $document->getFieldNames();
+    $this->assertTrue(in_array('sm_testing', $document_field_names), t('The field name was found in the document'));
+
+    $document_field_names = $document->getFieldValues();
+    $this->assertTrue(in_array('testingvalue1', $document_field_names[0]), t('The field value was found in the document'));
+
+    // Clear the complete document
+    $document->clear();
+
+    // Set and Get the document boost
+    $document->setBoost('10');
+    $document_boost = $document->getBoost();
+    $this->assertEqual($document_boost, 10, t('The document boost was correctly added and verified'));
+
+    $document->clear();
+    $document_boost = $document->getBoost();
+    $document_fields = $document->getFieldNames();
+    $document_field_boosts = $document->getFieldBoosts();
+    $this->assertFalse($document_boost, t('Document boost was succesfully emptied'));
+    $this->assertFalse($document_fields, t('Document fields were succesfully emptied'));
+    $this->assertFalse($document_field_boosts, t('Document field boosts were succesfully emptied'));
+
+    // Verify if we do not use ctrl characters
+    $string_with_ctrl = "Some text \n\r\t";
+    $string_without_ctrl = $document->stripCtrlChars($string_with_ctrl);
+    // Todo
+    //$this->assertNotEqual($string_with_ctrl, $string_without_ctrl, t('succesfully stripped the contril characters'));
+  }
+
+  function tearDown() {
+    parent::tearDown();
+  }
+}
diff --git a/tests/solr_index_and_search.test b/tests/solr_index_and_search.test
index 0f74516..8d278a6 100755
--- a/tests/solr_index_and_search.test
+++ b/tests/solr_index_and_search.test
@@ -1,12 +1,6 @@
 <?php
 
-/**
- * @file
- *   Unit test class that provides the setUp and tearDown of a solr core on the
- *   default localhost server. This server must be configured for multiple cores
- *   with a solr.xml file.
- */
-class DrupalSolrWebTestCase extends DrupalWebTestCase {
+class DrupalSolrOnlineWebTestCase extends DrupalWebTestCase {
   /**
    * Implementation of setUp().
    */
@@ -105,7 +99,7 @@ class DrupalSolrWebTestCase extends DrupalWebTestCase {
   }
 }
 
-class DrupalSolrMatchTestCase extends DrupalSolrWebTestCase {
+class DrupalSolrMatchTestCase extends DrupalSolrOnlineWebTestCase {
   public static function getInfo() {
     return array(
       'name' => 'Solr Index Queries',
