diff --git a/system/database/DB_driver.php b/system/database/DB_driver.php
index ef37967..3f7c826 100644
--- a/system/database/DB_driver.php
+++ b/system/database/DB_driver.php
@@ -190,11 +190,11 @@
         	
             if ($this->db_debug)
             {
-				log_message('error', 'Query error: '.$this->error_message());
+				log_message('error', 'Query error: '.$this->_error_message());
 				return $this->display_error(
 										array(
-												'Error Number: '.$this->error_number(), 
-												$this->error_message(),
+												'Error Number: '.$this->_error_number(), 
+												$this->_error_message(),
 												$sql
 											)
 										);
@@ -481,7 +481,81 @@
 		}		
 
 		return $str;
-	}	
+	}
+
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Generate an insert string
+	 * 
+	 * @access	public
+	 * @param	string	the table upon which the query will be performed
+	 * @param	array	an associative array data of key/values
+	 * @return	string		 
+	 */	
+	function insert_string($table, $data)
+	{
+		$fields = array();      
+		$values = array();
+		
+		foreach($data as $key => $val) 
+		{
+			$fields[] = $key;
+			$values[] = $this->escape($val);
+		}
+
+		return $this->_insert($this->dbprefix.$table, $fields, $values);
+	}
+	
+	// --------------------------------------------------------------------
+
+	/**
+	 * Generate an update string
+	 * 
+	 * @access	public
+	 * @param	string	the table upon which the query will be performed
+	 * @param	array	an associative array data of key/values
+	 * @param	mixed	the "where" statement
+	 * @return	string		 
+	 */	
+	function update_string($table, $data, $where)
+	{
+		if ($where == '')
+			return false;
+					
+		$fields = array();
+		foreach($data as $key => $val) 
+		{
+			$fields[$key] = $this->escape($val);
+		}
+
+		if ( ! is_array($where))
+		{
+			$dest = array($where);
+		}
+		else
+		{
+			$dest = array();
+			foreach ($where as $key => $val)
+			{
+				$prefix = (count($dest) == 0) ? '' : ' AND ';
+	
+				if ($val != '')
+				{
+					if ( ! $this->_has_operator($key))
+					{
+						$key .= ' =';
+					}
+				
+					$val = ' '.$this->escape($val);
+				}
+							
+				$dest[] = $prefix.$key.$val;
+			}
+		}		
+
+		return $this->_update($this->dbprefix.$table, $fields, $dest);
+	}    
 
 	// --------------------------------------------------------------------
 
diff --git a/system/database/DB_utility.php b/system/database/DB_utility.php
index a4d4eb0..39dc2cc 100644
--- a/system/database/DB_utility.php
+++ b/system/database/DB_utility.php
@@ -202,79 +202,42 @@
 		return current($fields);
 	}
 
-	// --------------------------------------------------------------------
 
-	/**
-	 * Generate an insert string
-	 * 
-	 * @access	public
-	 * @param	string	the table upon which the query will be performed
-	 * @param	array	an associative array data of key/values
-	 * @return	string		 
-	 */	
-	function insert_string($table, $data)
+
+
+	
+	function create_database()
 	{
-		$fields = array();      
-		$values = array();
-		
-		foreach($data as $key => $val) 
-		{
-			$fields[] = $key;
-			$values[] = $this->escape($val);
-		}
-
-		return $this->_insert($this->dbprefix.$table, $fields, $values);
 	}
 	
-	// --------------------------------------------------------------------
-
-	/**
-	 * Generate an update string
-	 * 
-	 * @access	public
-	 * @param	string	the table upon which the query will be performed
-	 * @param	array	an associative array data of key/values
-	 * @param	mixed	the "where" statement
-	 * @return	string		 
-	 */	
-	function update_string($table, $data, $where)
+	function drop_database()
 	{
-		if ($where == '')
-			return false;
-					
-		$fields = array();
-		foreach($data as $key => $val) 
-		{
-			$fields[$key] = $this->escape($val);
-		}
-
-		if ( ! is_array($where))
-		{
-			$dest = array($where);
-		}
-		else
-		{
-			$dest = array();
-			foreach ($where as $key => $val)
-			{
-				$prefix = (count($dest) == 0) ? '' : ' AND ';
+	}
 	
-				if ($val != '')
-				{
-					if ( ! $this->_has_operator($key))
-					{
-						$key .= ' =';
-					}
-				
-					$val = ' '.$this->escape($val);
-				}
-							
-				$dest[] = $prefix.$key.$val;
-			}
-		}		
+	function show_databases()
+	{
+	}
+	
+	function create_table()
+	{
+	}
+	
+	function alter_table()
+	{
+	}
+	
+	function create_index()
+	{
+	}
+	
+	function drop_index()
+	{
+	}
+	
+	function optimize()
+	{
+	}
 
-		return $this->_update($this->dbprefix.$table, $fields, $dest);
-	}    
 
 
 }
diff --git a/system/database/drivers/mssql/mssql_driver.php b/system/database/drivers/mssql/mssql_driver.php
index 4f668f2..cd808da 100644
--- a/system/database/drivers/mssql/mssql_driver.php
+++ b/system/database/drivers/mssql/mssql_driver.php
@@ -251,10 +251,10 @@
 	/**
 	 * The error message string
 	 *
-	 * @access	public
+	 * @access	private
 	 * @return	string
 	 */
-	function error_message()
+	function _error_message()
 	{
 		// Are errros even supported in MS SQL?
 		return '';
@@ -265,10 +265,10 @@
 	/**
 	 * The error message number
 	 *
-	 * @access	public
+	 * @access	private
 	 * @return	integer
 	 */
-	function error_number()
+	function _error_number()
 	{
 		// Are error numbers supported?
 		return '';
@@ -282,11 +282,11 @@
 	 * This function adds backticks if the table name has a period
 	 * in it. Some DBs will get cranky unless periods are escaped
 	 *
-	 * @access	public
+	 * @access	private
 	 * @param	string	the table name
 	 * @return	string
 	 */
-	function escape_table($table)
+	function _escape_table($table)
 	{
 		if (stristr($table, '.'))
 		{
@@ -294,25 +294,7 @@
 		}
 		
 		return $table;
-	}
-	
-	// --------------------------------------------------------------------
-
-	/**
-	 * Field data query
-	 *
-	 * Generates a platform-specific query so that the column data can be retrieved
-	 *
-	 * @access	public
-	 * @param	string	the table name
-	 * @return	object
-	 */
-	function _field_data($table)
-	{
-		$sql = "SELECT TOP 1 FROM ".$this->escape_table($table);
-		$query = $this->query($sql);
-		return $query->field_data();
-	}
+	}	
 	
 	// --------------------------------------------------------------------
 
@@ -329,7 +311,7 @@
 	 */
 	function _insert($table, $keys, $values)
 	{	
-		return "INSERT INTO ".$this->escape_table($table)." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")";
+		return "INSERT INTO ".$this->_escape_table($table)." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")";
 	}
 	
 	// --------------------------------------------------------------------
@@ -352,7 +334,7 @@
 			$valstr[] = $key." = ".$val;
 		}
 	
-		return "UPDATE ".$this->escape_table($table)." SET ".implode(', ', $valstr)." WHERE ".implode(" ", $where);
+		return "UPDATE ".$this->_escape_table($table)." SET ".implode(', ', $valstr)." WHERE ".implode(" ", $where);
 	}
 	
 	// --------------------------------------------------------------------
@@ -369,9 +351,43 @@
 	 */	
 	function _delete($table, $where)
 	{
-		return "DELETE FROM ".$this->escape_table($table)." WHERE ".implode(" ", $where);
+		return "DELETE FROM ".$this->_escape_table($table)." WHERE ".implode(" ", $where);
 	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Limit string
+	 *
+	 * Generates a platform-specific LIMIT clause
+	 *
+	 * @access	public
+	 * @param	string	the sql query string
+	 * @param	integer	the number of rows to limit the query to
+	 * @param	integer	the offset value
+	 * @return	string
+	 */
+	function _limit($sql, $limit, $offset)
+	{
+		$i = $limit + $offset;
 	
+		return preg_replace('/(^\SELECT (DISTINCT)?)/i','\\1 TOP '.$i.' ', $sql);		
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Close DB Connection
+	 *
+	 * @access	public
+	 * @param	resource
+	 * @return	void
+	 */
+	function _close($conn_id)
+	{
+		mssql_close($conn_id);
+	}
+
 	// --------------------------------------------------------------------
 
 	/**
@@ -413,43 +429,28 @@
 	 */
 	function _show_columns($table = '')
 	{
-		return "SELECT * FROM INFORMATION_SCHEMA.Columns WHERE TABLE_NAME = '".$this->escape_table($table)."'";	
-	}
-	
-	// --------------------------------------------------------------------
-
-	/**
-	 * Limit string
-	 *
-	 * Generates a platform-specific LIMIT clause
-	 *
-	 * @access	public
-	 * @param	string	the sql query string
-	 * @param	integer	the number of rows to limit the query to
-	 * @param	integer	the offset value
-	 * @return	string
-	 */
-	function _limit($sql, $limit, $offset)
-	{
-		$i = $limit + $offset;
-	
-		return preg_replace('/(^\SELECT (DISTINCT)?)/i','\\1 TOP '.$i.' ', $sql);		
+		return "SELECT * FROM INFORMATION_SCHEMA.Columns WHERE TABLE_NAME = '".$this->_escape_table($table)."'";	
 	}
 
 	// --------------------------------------------------------------------
 
 	/**
-	 * Close DB Connection
+	 * Field data query
+	 *
+	 * Generates a platform-specific query so that the column data can be retrieved
 	 *
 	 * @access	public
-	 * @param	resource
-	 * @return	void
+	 * @param	string	the table name
+	 * @return	object
 	 */
-	function _close($conn_id)
+	function _field_data($table)
 	{
-		mssql_close($conn_id);
+		$sql = "SELECT TOP 1 FROM ".$this->_escape_table($table);
+		$query = $this->query($sql);
+		return $query->field_data();
 	}
 	
+	
 
 }
 
diff --git a/system/database/drivers/mysql/mysql_driver.php b/system/database/drivers/mysql/mysql_driver.php
index 8aa82da..fc7f678 100644
--- a/system/database/drivers/mysql/mysql_driver.php
+++ b/system/database/drivers/mysql/mysql_driver.php
@@ -269,10 +269,10 @@
 	/**
 	 * The error message string
 	 *
-	 * @access	public
+	 * @access	private
 	 * @return	string
 	 */
-	function error_message()
+	function _error_message()
 	{
 		return mysql_error($this->conn_id);
 	}
@@ -282,10 +282,10 @@
 	/**
 	 * The error message number
 	 *
-	 * @access	public
+	 * @access	private
 	 * @return	integer
 	 */
-	function error_number()
+	function _error_number()
 	{
 		return mysql_errno($this->conn_id);
 	}
@@ -298,11 +298,11 @@
 	 * This function adds backticks if the table name has a period
 	 * in it. Some DBs will get cranky unless periods are escaped
 	 *
-	 * @access	public
+	 * @access	private
 	 * @param	string	the table name
 	 * @return	string
 	 */
-	function escape_table($table)
+	function _escape_table($table)
 	{
 		if (stristr($table, '.'))
 		{
@@ -311,25 +311,7 @@
 		
 		return $table;
 	}
-	
-	// --------------------------------------------------------------------
-
-	/**
-	 * Field data query
-	 *
-	 * Generates a platform-specific query so that the column data can be retrieved
-	 *
-	 * @access	public
-	 * @param	string	the table name
-	 * @return	object
-	 */
-	function _field_data($table)
-	{
-		$sql = "SELECT * FROM ".$this->escape_table($table)." LIMIT 1";
-		$query = $this->query($sql);
-		return $query->field_data();
-	}
-	
+		
 	// --------------------------------------------------------------------
 
 	/**
@@ -345,7 +327,7 @@
 	 */
 	function _insert($table, $keys, $values)
 	{	
-		return "INSERT INTO ".$this->escape_table($table)." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")";
+		return "INSERT INTO ".$this->_escape_table($table)." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")";
 	}
 	
 	// --------------------------------------------------------------------
@@ -368,7 +350,7 @@
 			$valstr[] = $key." = ".$val;
 		}
 	
-		return "UPDATE ".$this->escape_table($table)." SET ".implode(', ', $valstr)." WHERE ".implode(" ", $where);
+		return "UPDATE ".$this->_escape_table($table)." SET ".implode(', ', $valstr)." WHERE ".implode(" ", $where);
 	}
 	
 	// --------------------------------------------------------------------
@@ -385,9 +367,50 @@
 	 */	
 	function _delete($table, $where)
 	{
-		return "DELETE FROM ".$this->escape_table($table)." WHERE ".implode(" ", $where);
+		return "DELETE FROM ".$this->_escape_table($table)." WHERE ".implode(" ", $where);
 	}
-	
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Limit string
+	 *
+	 * Generates a platform-specific LIMIT clause
+	 *
+	 * @access	public
+	 * @param	string	the sql query string
+	 * @param	integer	the number of rows to limit the query to
+	 * @param	integer	the offset value
+	 * @return	string
+	 */
+	function _limit($sql, $limit, $offset)
+	{	
+		if ($offset == 0)
+		{
+			$offset = '';
+		}
+		else
+		{
+			$offset .= ", ";
+		}
+		
+		return $sql."LIMIT ".$offset.$limit;
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Close DB Connection
+	 *
+	 * @access	public
+	 * @param	resource
+	 * @return	void
+	 */
+	function _close($conn_id)
+	{
+		mysql_close($conn_id);
+	}
+
 	// --------------------------------------------------------------------
 
 	/**
@@ -429,48 +452,25 @@
 	 */
 	function _show_columns($table = '')
 	{
-		return "SHOW COLUMNS FROM ".$this->escape_table($table);
-	}
-	
-	// --------------------------------------------------------------------
-
-	/**
-	 * Limit string
-	 *
-	 * Generates a platform-specific LIMIT clause
-	 *
-	 * @access	public
-	 * @param	string	the sql query string
-	 * @param	integer	the number of rows to limit the query to
-	 * @param	integer	the offset value
-	 * @return	string
-	 */
-	function _limit($sql, $limit, $offset)
-	{	
-		if ($offset == 0)
-		{
-			$offset = '';
-		}
-		else
-		{
-			$offset .= ", ";
-		}
-		
-		return $sql."LIMIT ".$offset.$limit;
+		return "SHOW COLUMNS FROM ".$this->_escape_table($table);
 	}
 
 	// --------------------------------------------------------------------
 
 	/**
-	 * Close DB Connection
+	 * Field data query
+	 *
+	 * Generates a platform-specific query so that the column data can be retrieved
 	 *
 	 * @access	public
-	 * @param	resource
-	 * @return	void
+	 * @param	string	the table name
+	 * @return	object
 	 */
-	function _close($conn_id)
+	function _field_data($table)
 	{
-		mysql_close($conn_id);
+		$sql = "SELECT * FROM ".$this->_escape_table($table)." LIMIT 1";
+		$query = $this->query($sql);
+		return $query->field_data();
 	}
 
 }
diff --git a/system/database/drivers/mysqli/mysqli_driver.php b/system/database/drivers/mysqli/mysqli_driver.php
index 8d28c2c..9593841 100644
--- a/system/database/drivers/mysqli/mysqli_driver.php
+++ b/system/database/drivers/mysqli/mysqli_driver.php
@@ -272,10 +272,10 @@
 	/**
 	 * The error message string
 	 *
-	 * @access	public
+	 * @access	private
 	 * @return	string
 	 */
-	function error_message()
+	function _error_message()
 	{
 		return mysqli_error($this->conn_id);
 	}
@@ -285,10 +285,10 @@
 	/**
 	 * The error message number
 	 *
-	 * @access	public
+	 * @access	private
 	 * @return	integer
 	 */
-	function error_number()
+	function _error_number()
 	{
 		return mysqli_errno($this->conn_id);
 	}
@@ -301,11 +301,11 @@
 	 * This function adds backticks if the table name has a period
 	 * in it. Some DBs will get cranky unless periods are escaped
 	 *
-	 * @access	public
+	 * @access	private
 	 * @param	string	the table name
 	 * @return	string
 	 */
-	function escape_table($table)
+	function _escape_table($table)
 	{
 		if (stristr($table, '.'))
 		{
@@ -314,25 +314,7 @@
 		
 		return $table;
 	}
-	
-	// --------------------------------------------------------------------
-
-	/**
-	 * Field data query
-	 *
-	 * Generates a platform-specific query so that the column data can be retrieved
-	 *
-	 * @access	public
-	 * @param	string	the table name
-	 * @return	object
-	 */
-	function _field_data($table)
-	{
-		$sql = "SELECT * FROM ".$this->escape_table($table)." LIMIT 1";
-		$query = $this->query($sql);
-		return $query->field_data();
-	}
-	
+		
 	// --------------------------------------------------------------------
 
 	/**
@@ -348,7 +330,7 @@
 	 */
 	function _insert($table, $keys, $values)
 	{	
-		return "INSERT INTO ".$this->escape_table($table)." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")";
+		return "INSERT INTO ".$this->_escape_table($table)." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")";
 	}
 	
 	// --------------------------------------------------------------------
@@ -371,7 +353,7 @@
 			$valstr[] = $key." = ".$val;
 		}
 	
-		return "UPDATE ".$this->escape_table($table)." SET ".implode(', ', $valstr)." WHERE ".implode(" ", $where);
+		return "UPDATE ".$this->_escape_table($table)." SET ".implode(', ', $valstr)." WHERE ".implode(" ", $where);
 	}
 	
 	// --------------------------------------------------------------------
@@ -388,9 +370,48 @@
 	 */	
 	function _delete($table, $where)
 	{
-		return "DELETE FROM ".$this->escape_table($table)." WHERE ".implode(" ", $where);
+		return "DELETE FROM ".$this->_escape_table($table)." WHERE ".implode(" ", $where);
 	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Limit string
+	 *
+	 * Generates a platform-specific LIMIT clause
+	 *
+	 * @access	public
+	 * @param	string	the sql query string
+	 * @param	integer	the number of rows to limit the query to
+	 * @param	integer	the offset value
+	 * @return	string
+	 */
+	function _limit($sql, $limit, $offset)
+	{	
+		$sql .= "LIMIT ".$limit;
 	
+		if ($offset > 0)
+		{
+			$sql .= " OFFSET ".$offset;
+		}
+		
+		return $sql;
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Close DB Connection
+	 *
+	 * @access	public
+	 * @param	resource
+	 * @return	void
+	 */
+	function _close($conn_id)
+	{
+		mysqli_close($conn_id);
+	}
+
 	// --------------------------------------------------------------------
 
 	/**
@@ -432,47 +453,27 @@
 	 */
 	function _show_columns($table = '')
 	{
-		return "SHOW COLUMNS FROM ".$this->escape_table($table);
-	}
-	
-	// --------------------------------------------------------------------
-
-	/**
-	 * Limit string
-	 *
-	 * Generates a platform-specific LIMIT clause
-	 *
-	 * @access	public
-	 * @param	string	the sql query string
-	 * @param	integer	the number of rows to limit the query to
-	 * @param	integer	the offset value
-	 * @return	string
-	 */
-	function _limit($sql, $limit, $offset)
-	{	
-		$sql .= "LIMIT ".$limit;
-	
-		if ($offset > 0)
-		{
-			$sql .= " OFFSET ".$offset;
-		}
-		
-		return $sql;
+		return "SHOW COLUMNS FROM ".$this->_escape_table($table);
 	}
 
 	// --------------------------------------------------------------------
 
 	/**
-	 * Close DB Connection
+	 * Field data query
+	 *
+	 * Generates a platform-specific query so that the column data can be retrieved
 	 *
 	 * @access	public
-	 * @param	resource
-	 * @return	void
+	 * @param	string	the table name
+	 * @return	object
 	 */
-	function _close($conn_id)
+	function _field_data($table)
 	{
-		mysqli_close($conn_id);
+		$sql = "SELECT * FROM ".$this->_escape_table($table)." LIMIT 1";
+		$query = $this->query($sql);
+		return $query->field_data();
 	}
+	
 
 }
 
diff --git a/system/database/drivers/oci8/oci8_driver.php b/system/database/drivers/oci8/oci8_driver.php
index 707394d..bfc38a4 100644
--- a/system/database/drivers/oci8/oci8_driver.php
+++ b/system/database/drivers/oci8/oci8_driver.php
@@ -393,10 +393,10 @@
     /**
      * The error message string
      *
-     * @access  public
+     * @access  private
      * @return  string
      */
-    function error_message()
+    function _error_message()
     {
         $error = ocierror($this->conn_id);
         return $error['message'];
@@ -407,10 +407,10 @@
     /**
      * The error message number
      *
-     * @access  public
+     * @access  private
      * @return  integer
      */
-    function error_number()
+    function _error_number()
     {
         $error = ocierror($this->conn_id);
         return $error['code'];
@@ -424,11 +424,11 @@
      * This function adds backticks if the table name has a period
      * in it. Some DBs will get cranky unless periods are escaped
      *
-     * @access  public
+     * @access  private
      * @param   string  the table name
      * @return  string
      */
-    function escape_table($table)
+    function _escape_table($table)
     {
         if (stristr($table, '.'))
         {
@@ -441,24 +441,6 @@
     // --------------------------------------------------------------------
 
     /**
-     * Field data query
-     *
-     * Generates a platform-specific query so that the column data can be retrieved
-     *
-     * @access  public
-     * @param   string  the table name
-     * @return  object
-     */
-    function _field_data($table)
-    {
-        $sql = "SELECT * FROM ".$this->escape_table($table)." where rownum = 1";
-        $query = $this->query($sql);
-        return $query->field_data();
-    }
-
-    // --------------------------------------------------------------------
-
-    /**
      * Insert statement
      *
      * Generates a platform-specific insert string from the supplied data
@@ -471,7 +453,7 @@
      */
     function _insert($table, $keys, $values)
     {
-    return "INSERT INTO ".$this->escape_table($table)." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")";
+    return "INSERT INTO ".$this->_escape_table($table)." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")";
     }
 
     // --------------------------------------------------------------------
@@ -494,7 +476,7 @@
             $valstr[] = $key." = ".$val;
         }
 
-        return "UPDATE ".$this->escape_table($table)." SET ".implode(', ', $valstr)." WHERE ".implode(" ", $where);
+        return "UPDATE ".$this->_escape_table($table)." SET ".implode(', ', $valstr)." WHERE ".implode(" ", $where);
     }
 
     // --------------------------------------------------------------------
@@ -511,7 +493,50 @@
      */
     function _delete($table, $where)
     {
-        return "DELETE FROM ".$this->escape_table($table)." WHERE ".implode(" ", $where);
+        return "DELETE FROM ".$this->_escape_table($table)." WHERE ".implode(" ", $where);
+    }
+
+    // --------------------------------------------------------------------
+
+    /**
+     * Limit string
+     *
+     * Generates a platform-specific LIMIT clause
+     *
+     * @access  public
+     * @param   string  the sql query string
+     * @param   integer the number of rows to limit the query to
+     * @param   integer the offset value
+     * @return  string
+     */
+    function _limit($sql, $limit, $offset)
+    {
+        $limit = $offset + $limit;
+        $newsql = "SELECT * FROM (select inner_query.*, rownum rnum FROM ($sql) inner_query WHERE rownum < $limit)";
+
+        if ($offset != 0)
+        {
+            $newsql .= " WHERE rnum >= $offset";
+        }
+
+        // remember that we used limits
+        $this->limit_used = TRUE;
+
+        return $newsql;
+    }	
+
+    // --------------------------------------------------------------------
+
+    /**
+     * Close DB Connection
+     *
+     * @access  public
+     * @param   resource
+     * @return  void
+     */
+    function _close($conn_id)
+    {
+        ocilogoff($conn_id);
     }
 
     // --------------------------------------------------------------------
@@ -562,46 +587,22 @@
     // --------------------------------------------------------------------
 
     /**
-     * Limit string
+     * Field data query
      *
-     * Generates a platform-specific LIMIT clause
+     * Generates a platform-specific query so that the column data can be retrieved
      *
      * @access  public
-     * @param   string  the sql query string
-     * @param   integer the number of rows to limit the query to
-     * @param   integer the offset value
-     * @return  string
+     * @param   string  the table name
+     * @return  object
      */
-    function _limit($sql, $limit, $offset)
+    function _field_data($table)
     {
-        $limit = $offset + $limit;
-        $newsql = "SELECT * FROM (select inner_query.*, rownum rnum FROM ($sql) inner_query WHERE rownum < $limit)";
-
-        if ($offset != 0)
-        {
-            $newsql .= " WHERE rnum >= $offset";
-        }
-
-        // remember that we used limits
-        $this->limit_used = TRUE;
-
-        return $newsql;
-    }	
-
-    // --------------------------------------------------------------------
-
-    /**
-     * Close DB Connection
-     *
-     * @access  public
-     * @param   resource
-     * @return  void
-     */
-    function _close($conn_id)
-    {
-        ocilogoff($conn_id);
+        $sql = "SELECT * FROM ".$this->_escape_table($table)." where rownum = 1";
+        $query = $this->query($sql);
+        return $query->field_data();
     }
 
+
 }
 
 
diff --git a/system/database/drivers/odbc/odbc_driver.php b/system/database/drivers/odbc/odbc_driver.php
index 1725ed7..c05abd0 100644
--- a/system/database/drivers/odbc/odbc_driver.php
+++ b/system/database/drivers/odbc/odbc_driver.php
@@ -252,10 +252,10 @@
 	/**
 	 * The error message string
 	 *
-	 * @access	public
+	 * @access	private
 	 * @return	string
 	 */
-	function error_message()
+	function _error_message()
 	{
 		return odbc_errormsg($this->conn_id);
 	}
@@ -265,10 +265,10 @@
 	/**
 	 * The error message number
 	 *
-	 * @access	public
+	 * @access	private
 	 * @return	integer
 	 */
-	function error_number()
+	function _error_number()
 	{
 		return odbc_error($this->conn_id);
 	}
@@ -281,11 +281,11 @@
 	 * This function adds backticks if the table name has a period
 	 * in it. Some DBs will get cranky unless periods are escaped
 	 *
-	 * @access	public
+	 * @access	private
 	 * @param	string	the table name
 	 * @return	string
 	 */
-	function escape_table($table)
+	function _escape_table($table)
 	{
 		if (stristr($table, '.'))
 		{
@@ -294,25 +294,7 @@
 		
 		return $table;
 	}
-	
-	// --------------------------------------------------------------------
-
-	/**
-	 * Field data query
-	 *
-	 * Generates a platform-specific query so that the column data can be retrieved
-	 *
-	 * @access	public
-	 * @param	string	the table name
-	 * @return	object
-	 */
-	function _field_data($table)
-	{
-		$sql = "SELECT TOP 1 FROM ".$this->escape_table($table);
-		$query = $this->query($sql);
-		return $query->field_data();
-	}
-	
+		
 	// --------------------------------------------------------------------
 
 	/**
@@ -328,7 +310,7 @@
 	 */
 	function _insert($table, $keys, $values)
 	{	
-		return "INSERT INTO ".$this->escape_table($table)." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")";
+		return "INSERT INTO ".$this->_escape_table($table)." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")";
 	}
 	
 	// --------------------------------------------------------------------
@@ -351,7 +333,7 @@
 			$valstr[] = $key." = ".$val;
 		}
 	
-		return "UPDATE ".$this->escape_table($table)." SET ".implode(', ', $valstr)." WHERE ".implode(" ", $where);
+		return "UPDATE ".$this->_escape_table($table)." SET ".implode(', ', $valstr)." WHERE ".implode(" ", $where);
 	}
 	
 	// --------------------------------------------------------------------
@@ -368,9 +350,42 @@
 	 */	
 	function _delete($table, $where)
 	{
-		return "DELETE FROM ".$this->escape_table($table)." WHERE ".implode(" ", $where);
+		return "DELETE FROM ".$this->_escape_table($table)." WHERE ".implode(" ", $where);
 	}
-	
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Limit string
+	 *
+	 * Generates a platform-specific LIMIT clause
+	 *
+	 * @access	public
+	 * @param	string	the sql query string
+	 * @param	integer	the number of rows to limit the query to
+	 * @param	integer	the offset value
+	 * @return	string
+	 */
+	function _limit($sql, $limit, $offset)
+	{
+		// Does ODBC doesn't use the LIMIT clause?
+		return $sql;
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Close DB Connection
+	 *
+	 * @access	public
+	 * @param	resource
+	 * @return	void
+	 */
+	function _close($conn_id)
+	{
+		odbc_close($conn_id);
+	}
+
 	// --------------------------------------------------------------------
 
 	/**
@@ -412,41 +427,27 @@
 	 */
 	function _show_columns($table = '')
 	{
-		return "SHOW COLUMNS FROM ".$this->escape_table($table);
-	}
-	
-	// --------------------------------------------------------------------
-
-	/**
-	 * Limit string
-	 *
-	 * Generates a platform-specific LIMIT clause
-	 *
-	 * @access	public
-	 * @param	string	the sql query string
-	 * @param	integer	the number of rows to limit the query to
-	 * @param	integer	the offset value
-	 * @return	string
-	 */
-	function _limit($sql, $limit, $offset)
-	{
-		// Does ODBC doesn't use the LIMIT clause?
-		return $sql;
+		return "SHOW COLUMNS FROM ".$this->_escape_table($table);
 	}
 
 	// --------------------------------------------------------------------
 
 	/**
-	 * Close DB Connection
+	 * Field data query
+	 *
+	 * Generates a platform-specific query so that the column data can be retrieved
 	 *
 	 * @access	public
-	 * @param	resource
-	 * @return	void
+	 * @param	string	the table name
+	 * @return	object
 	 */
-	function _close($conn_id)
+	function _field_data($table)
 	{
-		odbc_close($conn_id);
+		$sql = "SELECT TOP 1 FROM ".$this->_escape_table($table);
+		$query = $this->query($sql);
+		return $query->field_data();
 	}
+
 	
 }
 
diff --git a/system/database/drivers/postgre/postgre_driver.php b/system/database/drivers/postgre/postgre_driver.php
index 92767c4..0381718 100644
--- a/system/database/drivers/postgre/postgre_driver.php
+++ b/system/database/drivers/postgre/postgre_driver.php
@@ -279,10 +279,10 @@
 	/**
 	 * The error message string
 	 *
-	 * @access	public
+	 * @access	private
 	 * @return	string
 	 */
-	function error_message()
+	function _error_message()
 	{
 		return pg_last_error($this->conn_id);
 	}
@@ -292,10 +292,10 @@
 	/**
 	 * The error message number
 	 *
-	 * @access	public
+	 * @access	private
 	 * @return	integer
 	 */
-	function error_number()
+	function _error_number()
 	{
 		return '';
 	}
@@ -308,11 +308,11 @@
 	 * This function adds backticks if the table name has a period
 	 * in it. Some DBs will get cranky unless periods are escaped.
 	 *
-	 * @access	public
+	 * @access	private
 	 * @param	string	the table name
 	 * @return	string
 	 */
-	function escape_table($table)
+	function _escape_table($table)
 	{
 		if (stristr($table, '.'))
 		{
@@ -325,24 +325,6 @@
 	// --------------------------------------------------------------------
 
 	/**
-	 * Field data query
-	 *
-	 * Generates a platform-specific query so that the column data can be retrieved
-	 *
-	 * @access	public
-	 * @param	string	the table name
-	 * @return	object
-	 */
-	function _field_data($table)
-	{
-		$sql = "SELECT * FROM ".$this->escape_table($table)." LIMIT 1";
-		$query = $this->query($sql);
-		return $query->field_data();
-	}
-	
-	// --------------------------------------------------------------------
-
-	/**
 	 * Insert statement
 	 *
 	 * Generates a platform-specific insert string from the supplied data
@@ -355,7 +337,7 @@
 	 */
 	function _insert($table, $keys, $values)
 	{	
-		return "INSERT INTO ".$this->escape_table($table)." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")";
+		return "INSERT INTO ".$this->_escape_table($table)." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")";
 	}
 	
 	// --------------------------------------------------------------------
@@ -378,7 +360,7 @@
 			$valstr[] = $key." = ".$val;
 		}
 	
-		return "UPDATE ".$this->escape_table($table)." SET ".implode(', ', $valstr)." WHERE ".implode(" ", $where);
+		return "UPDATE ".$this->_escape_table($table)." SET ".implode(', ', $valstr)." WHERE ".implode(" ", $where);
 	}
 	
 	// --------------------------------------------------------------------
@@ -395,9 +377,48 @@
 	 */	
 	function _delete($table, $where)
 	{
-		return "DELETE FROM ".$this->escape_table($table)." WHERE ".implode(" ", $where);
+		return "DELETE FROM ".$this->_escape_table($table)." WHERE ".implode(" ", $where);
 	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Limit string
+	 *
+	 * Generates a platform-specific LIMIT clause
+	 *
+	 * @access	public
+	 * @param	string	the sql query string
+	 * @param	integer	the number of rows to limit the query to
+	 * @param	integer	the offset value
+	 * @return	string
+	 */
+	function _limit($sql, $limit, $offset)
+	{	
+		$sql .= "LIMIT ".$limit;
 	
+		if ($offset > 0)
+		{
+			$sql .= " OFFSET ".$offset;
+		}
+		
+		return $sql;
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Close DB Connection
+	 *
+	 * @access	public
+	 * @param	resource
+	 * @return	void
+	 */
+	function _close($conn_id)
+	{
+		pg_close($conn_id);
+	}
+
 	// --------------------------------------------------------------------
 
 	/**
@@ -437,48 +458,28 @@
 	 */
 	function _show_columns($table = '')
 	{
-		return "SELECT column_name FROM information_schema.columns WHERE table_name ='".$this->escape_table($table)."'"; 	
-	}
-	
-	// --------------------------------------------------------------------
-
-	/**
-	 * Limit string
-	 *
-	 * Generates a platform-specific LIMIT clause
-	 *
-	 * @access	public
-	 * @param	string	the sql query string
-	 * @param	integer	the number of rows to limit the query to
-	 * @param	integer	the offset value
-	 * @return	string
-	 */
-	function _limit($sql, $limit, $offset)
-	{	
-		$sql .= "LIMIT ".$limit;
-	
-		if ($offset > 0)
-		{
-			$sql .= " OFFSET ".$offset;
-		}
-		
-		return $sql;
+		return "SELECT column_name FROM information_schema.columns WHERE table_name ='".$this->_escape_table($table)."'"; 	
 	}
 
 	// --------------------------------------------------------------------
 
 	/**
-	 * Close DB Connection
+	 * Field data query
+	 *
+	 * Generates a platform-specific query so that the column data can be retrieved
 	 *
 	 * @access	public
-	 * @param	resource
-	 * @return	void
+	 * @param	string	the table name
+	 * @return	object
 	 */
-	function _close($conn_id)
+	function _field_data($table)
 	{
-		pg_close($conn_id);
+		$sql = "SELECT * FROM ".$this->_escape_table($table)." LIMIT 1";
+		$query = $this->query($sql);
+		return $query->field_data();
 	}
 
+
 }
 
 ?>
\ No newline at end of file
diff --git a/system/database/drivers/sqlite/sqlite_driver.php b/system/database/drivers/sqlite/sqlite_driver.php
index 634b72e..f8318b8 100644
--- a/system/database/drivers/sqlite/sqlite_driver.php
+++ b/system/database/drivers/sqlite/sqlite_driver.php
@@ -271,10 +271,10 @@
 	/**
 	 * The error message string
 	 *
-	 * @access	public
+	 * @access	private
 	 * @return	string
 	 */
-	function error_message()
+	function _error_message()
 	{
 		return sqlite_error_string(sqlite_last_error($this->conn_id));
 	}
@@ -284,27 +284,14 @@
 	/**
 	 * The error message number
 	 *
-	 * @access	public
+	 * @access	private
 	 * @return	integer
 	 */
-	function error_number()
+	function _error_number()
 	{
 		return sqlite_last_error($this->conn_id);
 	}
-	
-	// --------------------------------------------------------------------
-
-	/**
-	 * Version number query string
-	 *
-	 * @access	public
-	 * @return	string
-	 */
-	function version()
-	{
-		return sqlite_libversion();
-	}
-	
+		
 	// --------------------------------------------------------------------
 
 	/**
@@ -313,11 +300,11 @@
 	 * This function adds backticks if the table name has a period
 	 * in it. Some DBs will get cranky unless periods are escaped
 	 *
-	 * @access	public
+	 * @access	private
 	 * @param	string	the table name
 	 * @return	string
 	 */
-	function escape_table($table)
+	function _escape_table($table)
 	{
 		if (stristr($table, '.'))
 		{
@@ -326,25 +313,7 @@
 		
 		return $table;
 	}
-	
-	// --------------------------------------------------------------------
-
-	/**
-	 * Field data query
-	 *
-	 * Generates a platform-specific query so that the column data can be retrieved
-	 *
-	 * @access	public
-	 * @param	string	the table name
-	 * @return	object
-	 */
-	function _field_data($table)
-	{
-		$sql = "SELECT * FROM ".$this->escape_table($table)." LIMIT 1";
-		$query = $this->query($sql);
-		return $query->field_data();
-	}
-	
+		
 	// --------------------------------------------------------------------
 
 	/**
@@ -360,7 +329,7 @@
 	 */
 	function _insert($table, $keys, $values)
 	{	
-		return "INSERT INTO ".$this->escape_table($table)." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")";
+		return "INSERT INTO ".$this->_escape_table($table)." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")";
 	}
 	
 	// --------------------------------------------------------------------
@@ -383,7 +352,7 @@
 			$valstr[] = $key." = ".$val;
 		}
 	
-		return "UPDATE ".$this->escape_table($table)." SET ".implode(', ', $valstr)." WHERE ".implode(" ", $where);
+		return "UPDATE ".$this->_escape_table($table)." SET ".implode(', ', $valstr)." WHERE ".implode(" ", $where);
 	}
 	
 	// --------------------------------------------------------------------
@@ -400,41 +369,9 @@
 	 */	
 	function _delete($table, $where)
 	{
-		return "DELETE FROM ".$this->escape_table($table)." WHERE ".implode(" ", $where);
+		return "DELETE FROM ".$this->_escape_table($table)." WHERE ".implode(" ", $where);
 	}
-	
-	// --------------------------------------------------------------------
 
-	/**
-	 * Show table query
-	 *
-	 * Generates a platform-specific query string so that the table names can be fetched
-	 *
-	 * @access	public
-	 * @return	string
-	 */
-	function _show_tables()
-	{
-		return "SELECT name from sqlite_master WHERE type='table'";
-	}
-	
-	// --------------------------------------------------------------------
-
-	/**
-	 * Show columnn query
-	 *
-	 * Generates a platform-specific query string so that the column names can be fetched
-	 *
-	 * @access	public
-	 * @param	string	the table name
-	 * @return	string
-	 */
-	function _show_columns($table = '')
-	{
-		// Not supported
-		return FALSE;
-	}
-	
 	// --------------------------------------------------------------------
 
 	/**
@@ -476,6 +413,70 @@
 		sqlite_close($conn_id);
 	}
 
+	// --------------------------------------------------------------------
+
+	/**
+	 * Version number query string
+	 *
+	 * @access	public
+	 * @return	string
+	 */
+	function _version()
+	{
+		return sqlite_libversion();
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Show table query
+	 *
+	 * Generates a platform-specific query string so that the table names can be fetched
+	 *
+	 * @access	public
+	 * @return	string
+	 */
+	function _show_tables()
+	{
+		return "SELECT name from sqlite_master WHERE type='table'";
+	}
+	
+	// --------------------------------------------------------------------
+
+	/**
+	 * Show columnn query
+	 *
+	 * Generates a platform-specific query string so that the column names can be fetched
+	 *
+	 * @access	public
+	 * @param	string	the table name
+	 * @return	string
+	 */
+	function _show_columns($table = '')
+	{
+		// Not supported
+		return FALSE;
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Field data query
+	 *
+	 * Generates a platform-specific query so that the column data can be retrieved
+	 *
+	 * @access	public
+	 * @param	string	the table name
+	 * @return	object
+	 */
+	function _field_data($table)
+	{
+		$sql = "SELECT * FROM ".$this->_escape_table($table)." LIMIT 1";
+		$query = $this->query($sql);
+		return $query->field_data();
+	}
+
+
 }
 
 ?>
\ No newline at end of file