diff --git a/system/drivers/DB_driver.php b/system/drivers/DB_driver.php
index b05cd7c..a1ec14b 100644
--- a/system/drivers/DB_driver.php
+++ b/system/drivers/DB_driver.php
@@ -316,7 +316,7 @@
 	 * @access	public
 	 * @return	void		 
 	 */	
-	function trans_start()
+	function trans_start($test_mode = FALSE)
 	{	
 		if ( ! $this->trans_enabled)
 		{
@@ -330,9 +330,7 @@
 			return;
 		}
 		
-		// Reset the transaction failure flag
-		$this->_trans_failure = FALSE;		
-		$this->trans_begin();
+		$this->trans_begin($test_mode);
 	}
 
 	// --------------------------------------------------------------------
@@ -376,6 +374,20 @@
 	// --------------------------------------------------------------------
 
 	/**
+	 * Lets you retrieve the transaction flag to determine if it has failed
+	 * 
+	 * @access	public
+	 * @return	bool		 
+	 */	
+	function trans_status()
+	{
+		return $this->_trans_failure;
+	}
+
+
+	// --------------------------------------------------------------------
+
+	/**
 	 * Enables a native PHP function to be run, using a platform agnostic wrapper.
 	 * 
 	 * @access	public
diff --git a/system/drivers/DB_mssql.php b/system/drivers/DB_mssql.php
index 3fbfa6a..32c0537 100644
--- a/system/drivers/DB_mssql.php
+++ b/system/drivers/DB_mssql.php
@@ -106,7 +106,7 @@
 	 * @access	public
 	 * @return	bool		 
 	 */	
-	function trans_begin()
+	function trans_begin($test_mode = FALSE)
 	{
 		if ( ! $this->trans_enabled)
 		{
@@ -119,6 +119,11 @@
 			return TRUE;
 		}
 
+		// Reset the transaction failure flag.
+		// If the $test_mode flag is set to TRUE transactions will be rolled back 
+		// even if the queries produce a successful result. 
+		$this->_trans_failure = ($test_mode === TRUE) ? TRUE : FALSE;
+
 		$this->simple_query('BEGIN TRAN');
 		return TRUE;
 	}
diff --git a/system/drivers/DB_mysql.php b/system/drivers/DB_mysql.php
index 69a6db0..208f09c 100644
--- a/system/drivers/DB_mysql.php
+++ b/system/drivers/DB_mysql.php
@@ -123,7 +123,7 @@
 	 * @access	public
 	 * @return	bool		 
 	 */	
-	function trans_begin()
+	function trans_begin($test_mode = FALSE)
 	{
 		if ( ! $this->trans_enabled)
 		{
@@ -136,6 +136,11 @@
 			return TRUE;
 		}
 
+		// Reset the transaction failure flag.
+		// If the $test_mode flag is set to TRUE transactions will be rolled back 
+		// even if the queries produce a successful result. 
+		$this->_trans_failure = ($test_mode === TRUE) ? TRUE : FALSE;
+		
 		$this->simple_query('SET AUTOCOMMIT=0');
 		$this->simple_query('START TRANSACTION'); // can also be BEGIN or BEGIN WORK
 		return TRUE;
diff --git a/system/drivers/DB_mysqli.php b/system/drivers/DB_mysqli.php
index a5237c8..288f552 100644
--- a/system/drivers/DB_mysqli.php
+++ b/system/drivers/DB_mysqli.php
@@ -127,7 +127,7 @@
 	 * @access	public
 	 * @return	bool		 
 	 */	
-	function trans_begin()
+	function trans_begin($test_mode = FALSE)
 	{
 		if ( ! $this->trans_enabled)
 		{
@@ -140,6 +140,11 @@
 			return TRUE;
 		}
 
+		// Reset the transaction failure flag.
+		// If the $test_mode flag is set to TRUE transactions will be rolled back 
+		// even if the queries produce a successful result. 
+		$this->_trans_failure = ($test_mode === TRUE) ? TRUE : FALSE;
+
 		$this->simple_query('SET AUTOCOMMIT=0');
 		$this->simple_query('START TRANSACTION'); // can also be BEGIN or BEGIN WORK
 		return TRUE;
diff --git a/system/drivers/DB_oci8.php b/system/drivers/DB_oci8.php
index 2f936da..a88b474 100644
--- a/system/drivers/DB_oci8.php
+++ b/system/drivers/DB_oci8.php
@@ -245,7 +245,7 @@
 	 * @access	public
 	 * @return	bool		 
 	 */	
-	function trans_begin()
+	function trans_begin($test_mode = FALSE)
 	{
 		if ( ! $this->trans_enabled)
 		{
@@ -258,6 +258,11 @@
 			return TRUE;
 		}
 		
+		// Reset the transaction failure flag.
+		// If the $test_mode flag is set to TRUE transactions will be rolled back 
+		// even if the queries produce a successful result. 
+		$this->_trans_failure = ($test_mode === TRUE) ? TRUE : FALSE;
+		
 		$this->_commit = OCI_DEFAULT;
 		return TRUE;
 	}
diff --git a/system/drivers/DB_odbc.php b/system/drivers/DB_odbc.php
index a32e9e0..cdd2f45 100644
--- a/system/drivers/DB_odbc.php
+++ b/system/drivers/DB_odbc.php
@@ -107,7 +107,7 @@
 	 * @access	public
 	 * @return	bool		 
 	 */	
-	function trans_begin()
+	function trans_begin($test_mode = FALSE)
 	{
 		if ( ! $this->trans_enabled)
 		{
@@ -120,6 +120,11 @@
 			return TRUE;
 		}
 
+		// Reset the transaction failure flag.
+		// If the $test_mode flag is set to TRUE transactions will be rolled back 
+		// even if the queries produce a successful result. 
+		$this->_trans_failure = ($test_mode === TRUE) ? TRUE : FALSE;
+
 		return odbc_autocommit($this->conn_id, FALSE);
 	}
 
diff --git a/system/drivers/DB_postgre.php b/system/drivers/DB_postgre.php
index fe7c704..bd5fbac 100644
--- a/system/drivers/DB_postgre.php
+++ b/system/drivers/DB_postgre.php
@@ -111,7 +111,7 @@
 	 * @access	public
 	 * @return	bool		 
 	 */	
-	function trans_begin()
+	function trans_begin($test_mode = FALSE)
 	{
 		if ( ! $this->trans_enabled)
 		{
@@ -124,6 +124,11 @@
 			return TRUE;
 		}
 
+		// Reset the transaction failure flag.
+		// If the $test_mode flag is set to TRUE transactions will be rolled back 
+		// even if the queries produce a successful result. 
+		$this->_trans_failure = ($test_mode === TRUE) ? TRUE : FALSE;
+
 		return @pg_exec($this->conn_id, "begin");
 	}
 
diff --git a/system/drivers/DB_sqlite.php b/system/drivers/DB_sqlite.php
index 6d7b429..b21241a 100644
--- a/system/drivers/DB_sqlite.php
+++ b/system/drivers/DB_sqlite.php
@@ -128,7 +128,7 @@
 	 * @access	public
 	 * @return	bool		 
 	 */	
-	function trans_begin()
+	function trans_begin($test_mode = FALSE)
 	{
 		if ( ! $this->trans_enabled)
 		{
@@ -141,6 +141,11 @@
 			return TRUE;
 		}
 
+		// Reset the transaction failure flag.
+		// If the $test_mode flag is set to TRUE transactions will be rolled back 
+		// even if the queries produce a successful result. 
+		$this->_trans_failure = ($test_mode === TRUE) ? TRUE : FALSE;
+
 		$this->simple_query('BEGIN TRANSACTION');
 		return TRUE;
 	}