diff --git a/system/database/DB_export.php b/system/database/DB_export.php
index a217ad1..8d6446c 100644
--- a/system/database/DB_export.php
+++ b/system/database/DB_export.php
@@ -39,6 +39,8 @@
 		log_message('debug', "Database Export Class Initialized");
 	}
 
+	// --------------------------------------------------------------------
+
 	/**
 	 * Generate CVS from a query result object
 	 *
@@ -48,7 +50,7 @@
 	 * @param	string	The newline character - \n by default
 	 * @return	string
 	 */
-	function generate_cvs($query, $delim = "\t", $newline = "\n")
+	function cvs_from_result($query, $delim = "\t", $newline = "\n")
 	{
 		if ( ! is_object($query) OR ! method_exists($query, 'field_names'))
 		{
@@ -62,6 +64,8 @@
 		{
 			$out .= $name.$delim;
 		}
+		
+		$out = rtrim($out);
 		$out .= $newline;
 		
 		// Next blast through the result array and build out the rows
@@ -71,7 +75,7 @@
 			{
 				$out .= $item.$delim;			
 			}
-			
+			$out = rtrim($out);
 			$out .= $newline;
 		}
 
@@ -81,6 +85,78 @@
 	// --------------------------------------------------------------------
 
 
+	/**
+	 * Generate XML data from a query result object
+	 *
+	 * @access	public
+	 * @param	object	The query result object
+	 * @param	array	Any preferences
+	 * @return	string
+	 */
+	function xml_from_result($query, $params = array())
+	{
+		if ( ! is_object($query) OR ! method_exists($query, 'field_names'))
+		{
+			show_error('You must submit a valid result object');
+		}
+		
+		// Set our default values
+		foreach (array('root' => 'root', 'element' => 'element', 'newline' => "\n", 'tab' => "\t") as $key => $val)
+		{
+			if ( ! isset($params[$key]))
+			{
+				$params[$key] = $val;
+			}
+		}
+		
+		// Create variables for convenience
+		extract($params);
+			
+		// Generate the result
+		
+		$xml = "<{$root}/>".$newline;
+		foreach ($query->result_array() as $row)
+		{
+			$xml .= $tab."<{$element}/>".$newline;
+			
+			foreach ($row as $key => $val)
+			{
+				$xml .= $tab.$tab."<{$key}>".$this->_xml_convert($val)."</{$key}>".$newline;
+			}
+			$xml .= $tab."</{$element}>".$newline;
+		}
+		$xml .= "</$root>".$newline;  
+		
+		return $xml;
+	}
+
+	
+	// ------------------------------------------------------------------------
+	
+	/**
+	 * Convert Reserved XML characters to Entities
+	 *
+	 * @access	public
+	 * @param	string
+	 * @return	string
+	 */	
+	function _xml_convert($str)
+	{
+		$temp = '__TEMP_AMPERSANDS';
+		
+		$str = preg_replace("/&#(\d+);/", "$temp\\1;", $str);
+		$str = preg_replace("/&(\w+);/",  "$temp\\1;", $str);
+		
+		$str = str_replace(array("&","<",">","\"", "'", "-"),
+						   array("&amp;", "&lt;", "&gt;", "&quot;", "&#39;", "&#45;"),
+						   $str);
+			
+		$str = preg_replace("/$temp(\d+);/","&#\\1;",$str);
+		$str = preg_replace("/$temp(\w+);/","&\\1;", $str);
+			
+		return $str;
+	}    
+
 }
 
 ?>
\ No newline at end of file