diff --git a/system/database/DB_driver.php b/system/database/DB_driver.php
index 275d51c..5102cc7 100644
--- a/system/database/DB_driver.php
+++ b/system/database/DB_driver.php
@@ -555,6 +555,95 @@
 
 	// --------------------------------------------------------------------
 
+	// --------------------------------------------------------------------
+
+	/**
+	 * List databases
+	 *
+	 * @access	public
+	 * @return	bool
+	 */
+	function list_databases()
+	{	
+		// Is there a cached result?
+		if (isset($this->cache['db_names']))
+		{
+			return $this->cache['db_names'];
+		}
+	
+		$query = $this->query($this->_list_database());
+		$dbs = array();
+		if ($query->num_rows() > 0)
+		{
+			foreach ($query->result_array() as $row)
+			{
+				$dbs[] = current($row);
+			}
+		}
+			
+		return $this->cache['db_names'] =& $dbs;
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Returns an array of table names
+	 * 
+	 * @access	public
+	 * @return	array		 
+	 */	
+	function list_tables()
+	{
+		// Is there a cached result?
+		if (isset($this->cache['table_names']))
+		{
+			return $this->cache['table_names'];
+		}
+	
+		if (FALSE === ($sql = $this->_list_tables()))
+		{
+            if ($this->db_debug)
+            {
+				return $this->display_error('db_unsupported_function');
+            }
+            return FALSE;        
+		}
+
+		$retval = array();
+		$query = $this->query($sql);
+		
+		if ($query->num_rows() > 0)
+		{
+			foreach($query->result_array() as $row)
+			{
+				if (isset($row['TABLE_NAME']))
+				{
+					$retval[] = $row['TABLE_NAME'];
+				}
+				else
+				{
+					$retval[] = array_shift($row);
+				}
+			}
+		}
+
+		return $this->cache['table_names'] =& $retval;
+	}
+	
+	// --------------------------------------------------------------------
+
+	/**
+	 * Determine if a particular table exists
+	 * @access	public
+	 * @return	boolean
+	 */
+	function table_exists($table_name)
+	{
+		return ( ! in_array($this->dbprefix.$table_name, $this->list_tables())) ? FALSE : TRUE;
+	}
+	
+	// --------------------------------------------------------------------
+
 	/**
 	 * Fetch MySQL Field Names
 	 *
@@ -562,7 +651,7 @@
 	 * @param	string	the table name
 	 * @return	array		 
 	 */
-    function field_names($table = '')
+    function list_fields($table = '')
     {
 		// Is there a cached result?
 		if (isset($this->cache['field_names'][$table]))
@@ -605,6 +694,16 @@
     	
 		return $this->cache['field_names'][$table] =& $retval;
     }
+    
+	// --------------------------------------------------------------------
+
+	/**
+	 * DEPRECATED - use list_fields()
+	 */
+    function field_names($table = '') 
+    {
+    	return $this->list_fields($table);
+    }
 	
 	// --------------------------------------------------------------------
 
diff --git a/system/database/DB_utility.php b/system/database/DB_utility.php
index ff9407e..dc56d65 100644
--- a/system/database/DB_utility.php
+++ b/system/database/DB_utility.php
@@ -87,93 +87,6 @@
 	// --------------------------------------------------------------------
 
 	/**
-	 * List databases
-	 *
-	 * @access	public
-	 * @return	bool
-	 */
-	function list_databases()
-	{	
-		// Is there a cached result?
-		if (isset($this->cache['db_names']))
-		{
-			return $this->cache['db_names'];
-		}
-	
-		$query = $this->db->query($this->_list_database());
-		$dbs = array();
-		if ($query->num_rows() > 0)
-		{
-			foreach ($query->result_array() as $row)
-			{
-				$dbs[] = current($row);
-			}
-		}
-			
-		return $this->cache['db_names'] =& $dbs;
-	}
-
-	// --------------------------------------------------------------------
-
-	/**
-	 * Returns an array of table names
-	 * 
-	 * @access	public
-	 * @return	array		 
-	 */	
-	function list_tables()
-	{
-		// Is there a cached result?
-		if (isset($this->cache['table_names']))
-		{
-			return $this->cache['table_names'];
-		}
-	
-		if (FALSE === ($sql = $this->_list_tables()))
-		{
-            if ($this->db->db_debug)
-            {
-				return $this->db->display_error('db_unsupported_function');
-            }
-            return FALSE;        
-		}
-
-		$retval = array();
-		$query = $this->db->query($sql);
-		
-		if ($query->num_rows() > 0)
-		{
-			foreach($query->result_array() as $row)
-			{
-				if (isset($row['TABLE_NAME']))
-				{
-					$retval[] = $row['TABLE_NAME'];
-				}
-				else
-				{
-					$retval[] = array_shift($row);
-				}
-			}
-		}
-
-		return $this->cache['table_names'] =& $retval;
-	}
-	
-	// --------------------------------------------------------------------
-
-	/**
-	 * Determine if a particular table exists
-	 * @access	public
-	 * @return	boolean
-	 */
-	function table_exists($table_name)
-	{
-		return ( ! in_array($this->db->dbprefix.$table_name, $this->list_tables())) ? FALSE : TRUE;
-	}
-	
-	// --------------------------------------------------------------------
-
-	/**
 	 * Optimize Table
 	 *
 	 * @access	public
@@ -372,12 +285,231 @@
 	 * @access	public
 	 * @return	void
 	 */
-	function export()
+	function backup($params = array())
 	{
-		// The individual driver overloads this method
+		// If the parameters have not been submitted as an
+		// array then we know that it is simply the table
+		// name, which is a valid short cut.
+		if (is_string($params))
+		{
+			$params = array('tables' => $params);
+		}
+		
+		// ------------------------------------------------------
+	
+		// Set up our default preferences
+		$prefs = array(
+							'tables'		=> array(),
+							'ignore'		=> array(),
+							'format'		=> 'gzip', // gzip, zip, txt
+							'action'		=> 'download', // download, archive, echo, return
+							'filename'		=> '',
+							'filepath'		=> '',
+							'add_drop'		=> TRUE,
+							'add_insert'	=> TRUE,
+							'newline'		=> "\n"
+						);
+
+		// Did the user submit any preferences? If so set them....
+		if (count($params) > 0)
+		{
+			foreach ($prefs as $key => $val)
+			{
+				if (isset($params[$key]))
+				{
+					$prefs[$key] = $params[$key];
+				}
+			}
+		}
+
+		// ------------------------------------------------------
+
+		// Are we backing up a complete database or individual tables?	
+		// If no table names were submitted we'll fetch the entire table list
+		if (count($prefs['tables']) == 0)
+		{
+			$prefs['tables'] = $this->list_tables();
+		}
+		
+		// ------------------------------------------------------
+
+		// Validate the format
+		if ( ! in_array($prefs['format'], array('gzip', 'zip', 'txt'), TRUE))
+		{
+			$prefs['format'] = 'txt';
+		}
+
+		// ------------------------------------------------------
+
+		// Is the encoder supported?  If not, we'll either issue an
+		// error or use plain text depending on the debug settings
+		if (($prefs['format'] == 'gzip' AND ! @function_exists('gzencode')) 
+		 OR ($prefs['format'] == 'zip'  AND ! @function_exists('gzcompress'))) 
+		{
+            if ($this->db->db_debug)
+            {
+				return $this->db->display_error('db_unsuported_compression');
+            }
+		
+			$prefs['format'] = 'txt';
+		}
+
+		// ------------------------------------------------------
+
+		// Set the filename if not provided
+		if ($prefs['filename'] == '')
+		{
+			$prefs['filename'] = (count($prefs['tables']) == 1) ? $prefs['tables'] : $this->db->database;
+			$prefs['filename'] .= '_'.date('Y-m-d_H-i', time());
+		}
+
+		// ------------------------------------------------------
+
+		// If we are archiving the export, does this filepath exist
+		// and resolve to a writable directory
+		if ($prefs['action'] == 'archive')
+		{
+			if ($prefs['filepath'] == '' OR ! is_writable($prefs['filepath']))
+			{
+				if ($this->db->db_debug)
+				{
+					return $this->db->display_error('db_filepath_error');
+				}
+			
+				$prefs['action'] = 'download';
+			}
+		}
+
+		// ------------------------------------------------------
+		
+		// Are we returning the backup data?  If so, we're done...
+		if ($prefs['action'] == 'return')
+		{
+			return $this->_backup($prefs);
+		}
+
+		// ------------------------------------------------------
+		
+		// Are we echoing the backup?  If so, format the data and spit it at the screen...
+		if ($prefs['action'] == 'echo')
+		{
+			echo '<pre>';
+			echo htmlspecialchars($this->_backup($prefs));
+			echo '</pre>';
+			
+			return TRUE;
+		}
+	
+		// ------------------------------------------------------
+
+		// Are we archiving the data to the server?
+		if ($prefs['action'] == 'archive')
+		{
+			// Make sure the filepath has a trailing slash
+			if (ereg("/$", $prefs['filepath']) === FALSE)
+			{
+				$prefs['filepath'] .= '/';
+			}
+
+			// Assemble the path and tack on the file extension
+			$ext = array('gzip' => 'gz', 'zip' => 'zip', 'txt' => 'sql');
+			$path = $prefs['filepath'].$prefs['filename'].$ext[$prefs['format']];
+			
+			// Load the file helper
+			$obj =& get_instance();
+			$obj->load->helper('file');
+			
+			// Write the file based on type
+			switch ($prefs['format'])
+			{
+				case 'gzip' : 	
+								write_file($path, gzencode($this->_backup($prefs)));
+								return TRUE;
+					break;
+				case 'txt'	: 	
+								write_file($path, $this->_backup($prefs));
+								return TRUE;
+					break;
+				default		:
+								require BASEPATH.'libraries/Zip.php';
+								$zip = new Zip;
+								$zip->add_file($this->_backup($prefs), $prefs['filename'].'.sql');
+								write_file($path, $zip->output_zipfile());
+								return TRUE;
+					break;			
+			}
+	
+		}
+
+		// ------------------------------------------------------
+				
+		// Set the mime type used in the server header
+		switch ($prefs['format'])
+		{
+			case 'zip'  : $mime = 'application/x-zip';	
+				break;
+			case 'gzip' : $mime = 'application/x-gzip';
+				break;
+			default     :						
+						if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE") || strstr($_SERVER['HTTP_USER_AGENT'], "OPERA")) 
+						{
+							$mime = 'application/octetstream';
+						}
+						else
+						{
+							$mime = 'application/octet-stream';
+						}
+				break;
+		}	
+		
+		// Grab the super object
+		$obj =& get_instance();
+		
+		// Remap the file extensions
+		$ext = array('gzip' => 'gz', 'zip' => 'zip', 'txt' => 'sql');	
+	
+		// Send headers
+		if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE"))
+		{
+			$obj->output->set_header('Content-Type: '.$mime);
+			$obj->output->set_header('Content-Disposition: inline; filename="'.$prefs['filename'].'.'.$ext[$prefs['format']].'"');
+			$obj->output->set_header('Expires: 0');
+			$obj->output->set_header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
+			$obj->output->set_header('Pragma: public');
+		} 
+		else 
+		{
+			$obj->output->set_header('Content-Type: '.$mime);
+			$obj->output->set_header('Content-Disposition: attachment; filename="'.$prefs['filename'].'.'.$ext[$prefs['format']].'"');
+			$obj->output->set_header('Expires: 0');
+			$obj->output->set_header('Pragma: no-cache');
+		}
+	
+	
+			// Write the file based on type
+			switch ($prefs['format'])
+			{
+				case 'gzip' : 	$obj->output->set_output(gzencode($this->_backup($prefs)));
+					break;
+				case 'txt'	: 	$obj->output->set_output($this->_backup($prefs));
+					break;
+				default		:
+								require BASEPATH.'libraries/Zip.php';
+							
+								$zip = new Zip;
+								$zip->add_file($this->_backup($prefs), $prefs['filename'].'.sql');
+								$obj->output->set_output($zip->output_zipfile());
+					break;			
+			}
+
+		return TRUE;
 	}
 
 
+
+
+
+
 }
 
 ?>
\ No newline at end of file
diff --git a/system/database/drivers/mssql/mssql_driver.php b/system/database/drivers/mssql/mssql_driver.php
index 3f5e533..8b82ee3 100644
--- a/system/database/drivers/mssql/mssql_driver.php
+++ b/system/database/drivers/mssql/mssql_driver.php
@@ -262,6 +262,34 @@
 	// --------------------------------------------------------------------
 
 	/**
+	 * List databases
+	 *
+	 * @access	private
+	 * @return	bool
+	 */
+	function _list_databases()
+	{
+		return "EXEC sp_helpdb"; // Can also be: EXEC sp_databases 
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * List table query
+	 *
+	 * Generates a platform-specific query string so that the table names can be fetched
+	 *
+	 * @access	private
+	 * @return	string
+	 */
+	function _list_tables()
+	{
+		return "SELECT name FROM sysobjects WHERE type = 'U' ORDER BY name";		
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
 	 * List columnn query
 	 *
 	 * Generates a platform-specific query string so that the column names can be fetched
diff --git a/system/database/drivers/mssql/mssql_utility.php b/system/database/drivers/mssql/mssql_utility.php
index 96b8180..ad13167 100644
--- a/system/database/drivers/mssql/mssql_utility.php
+++ b/system/database/drivers/mssql/mssql_utility.php
@@ -54,34 +54,6 @@
 	// --------------------------------------------------------------------
 
 	/**
-	 * List databases
-	 *
-	 * @access	private
-	 * @return	bool
-	 */
-	function _list_databases()
-	{
-		return "EXEC sp_helpdb"; // Can also be: EXEC sp_databases 
-	}
-
-	// --------------------------------------------------------------------
-
-	/**
-	 * List table query
-	 *
-	 * Generates a platform-specific query string so that the table names can be fetched
-	 *
-	 * @access	private
-	 * @return	string
-	 */
-	function _list_tables()
-	{
-		return "SELECT name FROM sysobjects WHERE type = 'U' ORDER BY name";		
-	}
-
-	// --------------------------------------------------------------------
-
-	/**
 	 * Drop Table
 	 *
 	 * @access	private
diff --git a/system/database/drivers/mysql/mysql_driver.php b/system/database/drivers/mysql/mysql_driver.php
index 792e023..ecab648 100644
--- a/system/database/drivers/mysql/mysql_driver.php
+++ b/system/database/drivers/mysql/mysql_driver.php
@@ -292,6 +292,34 @@
 		$row = $query->row();
 		return $row->numrows;
 	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * List databases
+	 *
+	 * @access	private
+	 * @return	bool
+	 */
+	function _list_databases()
+	{
+		return "SHOW DATABASES";
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * List table query
+	 *
+	 * Generates a platform-specific query string so that the table names can be fetched
+	 *
+	 * @access	private
+	 * @return	string
+	 */
+	function _list_tables()
+	{
+		return "SHOW TABLES FROM `".$this->database."`";		
+	}
 	
 	// --------------------------------------------------------------------
 
diff --git a/system/database/drivers/mysql/mysql_utility.php b/system/database/drivers/mysql/mysql_utility.php
index f432993..a81c915 100644
--- a/system/database/drivers/mysql/mysql_utility.php
+++ b/system/database/drivers/mysql/mysql_utility.php
@@ -53,34 +53,6 @@
 	// --------------------------------------------------------------------
 
 	/**
-	 * List databases
-	 *
-	 * @access	private
-	 * @return	bool
-	 */
-	function _list_databases()
-	{
-		return "SHOW DATABASES";
-	}
-
-	// --------------------------------------------------------------------
-
-	/**
-	 * Show table query
-	 *
-	 * Generates a platform-specific query string so that the table names can be fetched
-	 *
-	 * @access	private
-	 * @return	string
-	 */
-	function _list_tables()
-	{
-		return "SHOW TABLES FROM `".$this->db->database."`";		
-	}
-
-	// --------------------------------------------------------------------
-
-	/**
 	 * Drop Table
 	 *
 	 * @access	private
@@ -132,50 +104,22 @@
 	 * @param	array	Any preferences
 	 * @return	mixed
 	 */
-	function _export($params = array())
+	function _backup($params = array())
 	{
-		// Set up our default preferences
-		$prefs = array(
-							'tables'		=> array(),
-							'ignore'		=> array(),
-							'format'		=> 'gzip',
-							'action'		=> 'download', // download, archive, echo, return
-							'filename'		=> date('Y-m-d-H:i', time()),
-							'filepath'		=> '',
-							'add_drop'		=> TRUE,
-							'add_insert'	=> TRUE,
-							'newline'		=> "\n"
-						);
-
-		// Did the user submit any preference overrides? If so set them....
-		if (count($params) > 0)
+		if (count($params) == 0)
 		{
-			foreach ($prefs as $key => $val)
-			{
-				if (isset($params[$key]))
-				{
-					$prefs[$key] = $params[$key];
-				}
-			}
+			return FALSE;
 		}
 
 		// Extract the prefs for simplicity
-		extract($prefs);
-	
-		// Are we backing up a complete database or individual tables?	
-		if (count($tables) == 0)
-		{
-			$tables = $this->list_tables();
-		}
-	
-		// Start buffering the output
-		ob_start();
+		extract($params);
 	
 		// Build the output
-        foreach ($tables as $table)
+		$output = '';
+        foreach ((array)$tables as $table)
         { 
         	// Is the table in the "ignore" list?
-			if (in_array($table, $ignore))
+			if (in_array($table, (array)$ignore, TRUE))
 			{
         		continue;
         	}
@@ -190,11 +134,11 @@
         	}
         	
         	// Write out the table schema
-            echo $newline.$newline.'#'.$newline.'# TABLE STRUCTURE FOR: '.$table.$newline.'#'.$newline.$newline;
+            $output .= '#'.$newline.'# TABLE STRUCTURE FOR: '.$table.$newline.'#'.$newline.$newline;
                 
  			if ($add_drop == TRUE)
  			{
-            	echo 'DROP TABLE IF EXISTS '.$table.';'.$newline.$newline;
+            	$output .= 'DROP TABLE IF EXISTS '.$table.';'.$newline.$newline;
 			}
 			
 			$i = 0;
@@ -203,7 +147,7 @@
 			{
 			    if ($i++ % 2)
 			    { 			    	
-			    	echo $val.';'.$newline.$newline;
+			    	$output .= $val.';'.$newline.$newline;
 			    }
 			}
 			
@@ -270,27 +214,16 @@
 				}
 				
 				$val_str = preg_replace( "/, $/" , "" , $val_str);
-				
-				if ($action == 'echo')
-				{
-					$val_str = htmlspecialchars($val_str);
-				}
-				
+								
 				// Build the INSERT string
-				echo 'INSERT INTO '.$table.' ('.$field_str.') VALUES ('.$val_str.');'.$newline;
+				$output .= 'INSERT INTO '.$table.' ('.$field_str.') VALUES ('.$val_str.');'.$newline;
 	
 			}
 			
-			
-			
-			$buffer = ob_get_contents();
-			@ob_end_clean(); 
-			
-			echo $buffer;
-			
+			$output .= $newline.$newline;
 		}
 
-	
+		return $output;
 	}
 
 
diff --git a/system/database/drivers/mysqli/mysqli_driver.php b/system/database/drivers/mysqli/mysqli_driver.php
index b158cfe..a2c3803 100644
--- a/system/database/drivers/mysqli/mysqli_driver.php
+++ b/system/database/drivers/mysqli/mysqli_driver.php
@@ -284,7 +284,35 @@
 		$row = $query->row();
 		return $row->numrows;
 	}
-	
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * List databases
+	 *
+	 * @access	private
+	 * @return	bool
+	 */
+	function _list_databases()
+	{
+		return "SHOW DATABASES";
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * List table query
+	 *
+	 * Generates a platform-specific query string so that the table names can be fetched
+	 *
+	 * @access	private
+	 * @return	string
+	 */
+	function _list_tables()
+	{
+		return "SHOW TABLES FROM `".$this->database."`";		
+	}
+
 	// --------------------------------------------------------------------
 
 	/**
diff --git a/system/database/drivers/mysqli/mysqli_utility.php b/system/database/drivers/mysqli/mysqli_utility.php
index 754ffbd..f5b98b1 100644
--- a/system/database/drivers/mysqli/mysqli_utility.php
+++ b/system/database/drivers/mysqli/mysqli_utility.php
@@ -53,34 +53,6 @@
 	// --------------------------------------------------------------------
 
 	/**
-	 * List databases
-	 *
-	 * @access	private
-	 * @return	bool
-	 */
-	function _list_databases()
-	{
-		return "SHOW DATABASES";
-	}
-
-	// --------------------------------------------------------------------
-
-	/**
-	 * Show table query
-	 *
-	 * Generates a platform-specific query string so that the table names can be fetched
-	 *
-	 * @access	private
-	 * @return	string
-	 */
-	function _list_tables()
-	{
-		return "SHOW TABLES FROM `".$this->db->database."`";		
-	}
-
-	// --------------------------------------------------------------------
-
-	/**
 	 * Drop Table
 	 *
 	 * @access	private
diff --git a/system/database/drivers/oci8/oci8_driver.php b/system/database/drivers/oci8/oci8_driver.php
index bc0a100..b43b4c4 100644
--- a/system/database/drivers/oci8/oci8_driver.php
+++ b/system/database/drivers/oci8/oci8_driver.php
@@ -399,6 +399,34 @@
         return $row->NUMROWS;
     }
 
+	// --------------------------------------------------------------------
+
+	/**
+	 * List databases
+	 *
+	 * @access	private
+	 * @return	bool
+	 */
+	function _list_databases()
+	{
+		return FALSE;
+	}
+
+    // --------------------------------------------------------------------
+
+    /**
+     * Show table query
+     *
+     * Generates a platform-specific query string so that the table names can be fetched
+     *
+     * @access  private
+     * @return  string
+     */
+    function _list_tables()
+    {
+        return "SELECT TABLE_NAME FROM ALL_TABLES";
+    }
+
     // --------------------------------------------------------------------
 
     /**
diff --git a/system/database/drivers/oci8/oci8_utility.php b/system/database/drivers/oci8/oci8_utility.php
index 4d267dc..b6503de 100644
--- a/system/database/drivers/oci8/oci8_utility.php
+++ b/system/database/drivers/oci8/oci8_utility.php
@@ -54,34 +54,6 @@
 	// --------------------------------------------------------------------
 
 	/**
-	 * List databases
-	 *
-	 * @access	private
-	 * @return	bool
-	 */
-	function _list_databases()
-	{
-		return FALSE;
-	}
-
-    // --------------------------------------------------------------------
-
-    /**
-     * Show table query
-     *
-     * Generates a platform-specific query string so that the table names can be fetched
-     *
-     * @access  private
-     * @return  string
-     */
-    function _list_tables()
-    {
-        return "SELECT TABLE_NAME FROM ALL_TABLES";
-    }
-
-	// --------------------------------------------------------------------
-
-	/**
 	 * Drop Table
 	 *
 	 * @access	private
diff --git a/system/database/drivers/odbc/odbc_driver.php b/system/database/drivers/odbc/odbc_driver.php
index cdde2e2..0f002cc 100644
--- a/system/database/drivers/odbc/odbc_driver.php
+++ b/system/database/drivers/odbc/odbc_driver.php
@@ -259,6 +259,39 @@
 		$row = $query->row();
 		return $row->numrows;
 	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * List databases
+	 *
+	 * @access	private
+	 * @return	bool
+	 */
+	function _list_databases()
+	{
+		// Not sure if ODBC lets you list all databases...	
+		if ($this->db_debug)
+		{
+			return $this->display_error('db_unsuported_feature');
+		}
+		return FALSE;
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Show table query
+	 *
+	 * Generates a platform-specific query string so that the table names can be fetched
+	 *
+	 * @access	private
+	 * @return	string
+	 */
+	function _list_tables()
+	{
+		return "SHOW TABLES FROM `".$this->database."`";		
+	}
 	
 	// --------------------------------------------------------------------
 
diff --git a/system/database/drivers/odbc/odbc_utility.php b/system/database/drivers/odbc/odbc_utility.php
index 3d420f6..6d0fb79 100644
--- a/system/database/drivers/odbc/odbc_utility.php
+++ b/system/database/drivers/odbc/odbc_utility.php
@@ -36,9 +36,9 @@
 	{
 		// ODBC has no "create database" command since it's 
 		// designed to connect to an existing database
-		if ($this->db_debug)
+		if ($this->db->db_debug)
 		{
-			return $this->display_error('db_unsuported_feature');
+			return $this->db->display_error('db_unsuported_feature');
 		}
 		return FALSE;
 	}
@@ -56,9 +56,9 @@
 	{
 		// ODBC has no "drop database" command since it's 
 		// designed to connect to an existing database		
-		if ($this->db_debug)
+		if ($this->db->db_debug)
 		{
-			return $this->display_error('db_unsuported_feature');
+			return $this->db->display_error('db_unsuported_feature');
 		}
 		return FALSE;
 	}
@@ -66,39 +66,6 @@
 	// --------------------------------------------------------------------
 
 	/**
-	 * List databases
-	 *
-	 * @access	private
-	 * @return	bool
-	 */
-	function _list_databases()
-	{
-		// Not sure if ODBC lets you list all databases...	
-		if ($this->db_debug)
-		{
-			return $this->display_error('db_unsuported_feature');
-		}
-		return FALSE;
-	}
-
-	// --------------------------------------------------------------------
-
-	/**
-	 * Show table query
-	 *
-	 * Generates a platform-specific query string so that the table names can be fetched
-	 *
-	 * @access	private
-	 * @return	string
-	 */
-	function _list_tables()
-	{
-		return "SHOW TABLES FROM `".$this->db->database."`";		
-	}
-
-	// --------------------------------------------------------------------
-
-	/**
 	 * Drop Table
 	 *
 	 * @access	private
@@ -107,9 +74,9 @@
 	function _drop_table($table)
 	{
 		// Not a supported ODBC feature	
-		if ($this->db_debug)
+		if ($this->db->db_debug)
 		{
-			return $this->display_error('db_unsuported_feature');
+			return $this->db->display_error('db_unsuported_feature');
 		}
 		return FALSE;
 	}
@@ -128,9 +95,9 @@
 	function _optimize_table($table)
 	{
 		// Not a supported ODBC feature	
-		if ($this->db_debug)
+		if ($this->db->db_debug)
 		{
-			return $this->display_error('db_unsuported_feature');
+			return $this->db->display_error('db_unsuported_feature');
 		}
 		return FALSE;
 	}
@@ -149,9 +116,9 @@
 	function _repair_table($table)
 	{
 		// Not a supported ODBC feature	
-		if ($this->db_debug)
+		if ($this->db->db_debug)
 		{
-			return $this->display_error('db_unsuported_feature');
+			return $this->db->display_error('db_unsuported_feature');
 		}
 		return FALSE;
 	}
diff --git a/system/database/drivers/postgre/postgre_driver.php b/system/database/drivers/postgre/postgre_driver.php
index 0262841..f143956 100644
--- a/system/database/drivers/postgre/postgre_driver.php
+++ b/system/database/drivers/postgre/postgre_driver.php
@@ -286,6 +286,34 @@
 		$row = $query->row();
 		return $row->numrows;
 	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * List databases
+	 *
+	 * @access	private
+	 * @return	bool
+	 */
+	function _list_databases()
+	{
+		return "SELECT datname FROM pg_database";
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Show table query
+	 *
+	 * Generates a platform-specific query string so that the table names can be fetched
+	 *
+	 * @access	private
+	 * @return	string
+	 */
+	function _list_tables()
+	{	  
+		return "SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'";	
+	}
 	
 	// --------------------------------------------------------------------
 
diff --git a/system/database/drivers/postgre/postgre_utility.php b/system/database/drivers/postgre/postgre_utility.php
index 7b51c3f..46c98cc 100644
--- a/system/database/drivers/postgre/postgre_utility.php
+++ b/system/database/drivers/postgre/postgre_utility.php
@@ -54,34 +54,6 @@
 	// --------------------------------------------------------------------
 
 	/**
-	 * List databases
-	 *
-	 * @access	private
-	 * @return	bool
-	 */
-	function _list_databases()
-	{
-		return "SELECT datname FROM pg_database";
-	}
-
-	// --------------------------------------------------------------------
-
-	/**
-	 * Show table query
-	 *
-	 * Generates a platform-specific query string so that the table names can be fetched
-	 *
-	 * @access	private
-	 * @return	string
-	 */
-	function _list_tables()
-	{	  
-		return "SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'";	
-	}
-
-	// --------------------------------------------------------------------
-
-	/**
 	 * Drop Table
 	 *
 	 * @access	private
diff --git a/system/database/drivers/sqlite/sqlite_driver.php b/system/database/drivers/sqlite/sqlite_driver.php
index 45dd7a8..f57c4b8 100644
--- a/system/database/drivers/sqlite/sqlite_driver.php
+++ b/system/database/drivers/sqlite/sqlite_driver.php
@@ -278,7 +278,44 @@
 		$row = $query->row();
 		return $row->numrows;
 	}
-	
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * List databases
+	 *
+	 * I don't believe you can do a database listing with SQLite
+	 * since each database is its own file.  I suppose we could
+	 * try reading a directory looking for SQLite files, but 
+	 * that doesn't seem like a terribly good idea
+	 *
+	 * @access	private
+	 * @return	bool
+	 */
+	function _list_databases()
+	{
+		if ($this->db_debug)
+		{
+			return $this->display_error('db_unsuported_feature');
+		}
+		return array();
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * List table query
+	 *
+	 * Generates a platform-specific query string so that the table names can be fetched
+	 *
+	 * @access	private
+	 * @return	string
+	 */
+	function _list_tables()
+	{
+		return "SELECT name from sqlite_master WHERE type='table'";
+	}
+
 	// --------------------------------------------------------------------
 
 	/**
diff --git a/system/database/drivers/sqlite/sqlite_utility.php b/system/database/drivers/sqlite/sqlite_utility.php
index ae241db..801660d 100644
--- a/system/database/drivers/sqlite/sqlite_utility.php
+++ b/system/database/drivers/sqlite/sqlite_utility.php
@@ -52,9 +52,9 @@
 	{
 		if ( ! @file_exists($this->db->database) OR ! @unlink($this->db->database))
 		{
-			if ($this->db_debug)
+			if ($this->db->db_debug)
 			{
-				return $this->display_error('db_unable_to_drop');
+				return $this->db->display_error('db_unable_to_drop');
 			}
 			return FALSE;
 		}
@@ -64,44 +64,6 @@
 	// --------------------------------------------------------------------
 
 	/**
-	 * List databases
-	 *
-	 * I don't believe you can do a database listing with SQLite
-	 * since each database is its own file.  I suppose we could
-	 * try reading a directory looking for SQLite files, but 
-	 * that doesn't seem like a terribly good idea
-	 *
-	 * @access	private
-	 * @return	bool
-	 */
-	function _list_databases()
-	{
-	
-		if ($this->db_debug)
-		{
-			return $this->display_error('db_unsuported_feature');
-		}
-		return array();
-	}
-
-	// --------------------------------------------------------------------
-
-	/**
-	 * Show table query
-	 *
-	 * Generates a platform-specific query string so that the table names can be fetched
-	 *
-	 * @access	private
-	 * @return	string
-	 */
-	function _list_tables()
-	{
-		return "SELECT name from sqlite_master WHERE type='table'";
-	}
-
-	// --------------------------------------------------------------------
-
-	/**
 	 * Drop Table
 	 *
 	 *  Unsupported feature in SQLite
@@ -111,9 +73,9 @@
 	 */
 	function _drop_table($table)
 	{
-		if ($this->db_debug)
+		if ($this->db->db_debug)
 		{
-			return $this->display_error('db_unsuported_feature');
+			return $this->db->display_error('db_unsuported_feature');
 		}
 		return array();
 	}
diff --git a/system/language/english/db_lang.php b/system/language/english/db_lang.php
index 5be7d6e..3929901 100644
--- a/system/language/english/db_lang.php
+++ b/system/language/english/db_lang.php
@@ -14,6 +14,9 @@
 $lang['db_transaction_failure'] = 'Transaction failure: Rollback performed';
 $lang['db_unable_to_drop'] = 'Unable to drop the specified database.';
 $lang['db_unsuported_feature'] = 'Unsupported feature of the database platform you are using.';
+$lang['db_unsuported_compression'] = 'The file compression format you chose is not supported by your server.';
+$lang['db_filepath_error'] = 'Unable to write data to the file path you have submitted.';
+
 
 
 ?>
\ No newline at end of file
diff --git a/user_guide/database/fields.html b/user_guide/database/fields.html
index 5c872ec..260cd22 100644
--- a/user_guide/database/fields.html
+++ b/user_guide/database/fields.html
@@ -65,17 +65,14 @@
 <h1>Field Data</h1>

 

 

-<h2>Retrieving Field Names</h2>

-<p>Sometimes it's helpful to gather the field names for a particular table or with a paritcular query result.</p>

-

-<h2>$this->db->field_names();</h2>

+<h2>$this->db->list_fields();</h2>

 <p>Returns an array containing the field names. This query can be called two ways:</p>

 

 

 <p>1. You can supply the table name and call it from the <dfn>$this->db-></dfn> object:</p>

 

 <code>

-$fields = $this->db->field_names('table_name');<br /><br />

+$fields = $this->db->list_fields('table_name');<br /><br />

 

 foreach ($fields as $field)<br />

 {<br />

@@ -90,7 +87,7 @@
 $query = $this->db->query('SELECT * FROM some_table');

 <br /><br />

 

-foreach ($query->field_names() as $field)<br />

+foreach ($query->list_fields() as $field)<br />

 {<br />

 &nbsp;&nbsp;&nbsp;echo $field;<br />

 }

@@ -98,13 +95,10 @@
 

 

 

-

-

-<h2>Retrieving Field MetaData</h2>

-<p>Sometimes it's helpful to gather the field names or other metadata, like the column type, max length, etc.</p>

-

 <h2>$this->db->field_data();</h2>

 <p>Returns an array of objects containing field information.</p>

+<p>Sometimes it's helpful to gather the field names or other metadata, like the column type, max length, etc.</p>

+

 

 <p class="important">Note: Not all databases provide meta-data.</p>

 

diff --git a/user_guide/database/index.html b/user_guide/database/index.html
index 78f9047..3af6ede 100644
--- a/user_guide/database/index.html
+++ b/user_guide/database/index.html
@@ -76,6 +76,7 @@
 		<li><a href="helpers.html">Query Helper Functions</a></li>

 		<li><a href="active_record.html">Active Record Class</a></li>

 		<li><a href="transactions.html">Transactions</a></li>

+		<li><a href="table_data.html">Table MetaData</a></li>

 		<li><a href="fields.html">Field MetaData</a></li>

 		<li><a href="call_function.html">Custom Function Calls</a></li>

 		<li><a href="utilities.html">Database Utilities Class</a></li>

diff --git a/user_guide/database/table_data.html b/user_guide/database/table_data.html
index f3df176..299e6dc 100644
--- a/user_guide/database/table_data.html
+++ b/user_guide/database/table_data.html
@@ -62,15 +62,17 @@
 <!-- START CONTENT -->

 <div id="content">

 

+

+

 <h1>Table Data</h1>

 

 <p>These functions let you fetch table information.</p>

 

-<h2>$this->db->tables();</h2>

+<h2>$this->db->list_tables();</h2>

 

 <p>Returns an array containing the names of all the tables in the database you are currently connected to.  Example:</p>

 

-<code>$tables = $this->db->tables()<br />

+<code>$tables = $this->db->list_tables()<br />

 <br />

 foreach ($tables as $table)<br />

 {<br />

diff --git a/user_guide/database/utilities.html b/user_guide/database/utilities.html
index b064c79..2cc3f52 100644
--- a/user_guide/database/utilities.html
+++ b/user_guide/database/utilities.html
@@ -119,34 +119,6 @@
 

 

 

-<h2>$this->dbutil->list_tables();</h2>

-

-<p>Returns an array containing the names of all the tables in the database you are currently connected to.  Example:</p>

-

-<code>$tables = $this->dbutil->list_tables()<br />

-<br />

-foreach ($tables as $table)<br />

-{<br />

-&nbsp;&nbsp;&nbsp; echo $table;<br />

-}

-</code>

-

-

-<h2>$this->dbutil->table_exists();</h2>

-

-<p>Sometimes it's helpful to know whether a particular table exists before running an operation on it.

-Returns a boolean TRUE/FALSE.  Usage example:</p>

-

-<code>

-if ($this->dbutil->table_exists('table_name'))<br />

-{<br />

-&nbsp;&nbsp;&nbsp; // some code...<br />

-}

-</code>

-

-<p>Note:  Replace <em>table_name</em> with the name of the table you are looking for.</p>

-

-

 <h2>$this->dbutil->optimize_table('table_name');</h2>

 

 <p>Permits you to optimize a table using the table name specified in the first parameter. Returns TRUE/FALSE based on success or failure:</p>

@@ -245,6 +217,10 @@
 If you need to write the file use the <a href="../helpers/file_helper.html">File Helper</a>.</p>

 

 

+<h2>$this->dbutil->export()</h2>

+

+<p>Permits you to export your database or any desired tables.  Export data can be downloaded to your desktop, archived to your

+server, or simply displayed.  Archived files can be compressed.