diff --git a/system/database/drivers/mysqli/mysqli_driver.php b/system/database/drivers/mysqli/mysqli_driver.php
index d295ca9..94a2993 100644
--- a/system/database/drivers/mysqli/mysqli_driver.php
+++ b/system/database/drivers/mysqli/mysqli_driver.php
@@ -446,27 +446,28 @@
 

 		// This function may get "item1 item2" as a string, and so

 		// we may need "`item1` `item2`" and not "`item1 item2`"

-		if (strpos($item, ' ') !== FALSE)

+		if (ctype_alnum($item) === FALSE)

 		{

 			// This function may get "field >= 1", and need it to return "`field` >= 1"

-			if ($first_word_only === TRUE)

-			{

-				return '`'.preg_replace('/ /', '` ', $item, 1);

-			}

+			$lbound = ($first_word_only === TRUE) ? '' : '|\s|\(';

 

-			$item = preg_replace('/(^|\s|\()([\w\d\-\_]+?)(\s|\)|$)/iS', '$1`$2`$3', $item);

+			$item = preg_replace('/(^'.$lbound.')([\w\d\-\_]+?)(\s|\)|$)/iS', '$1`$2`$3', $item);

+		}

+		else

+		{

+			return "`{$item}`";

 		}

 

 		$exceptions = array('AS', '/', '-', '%', '+', '*');

 		

 		foreach ($exceptions as $exception)

 		{

+		

 			if (stristr($item, " `{$exception}` ") !== FALSE)

 			{

 				$item = preg_replace('/ `('.preg_quote($exception).')` /i', ' $1 ', $item);

 			}

 		}

-		

 		return $item;

 	}

 			

diff --git a/system/database/drivers/oci8/oci8_driver.php b/system/database/drivers/oci8/oci8_driver.php
index 6d3b722..160a56d 100644
--- a/system/database/drivers/oci8/oci8_driver.php
+++ b/system/database/drivers/oci8/oci8_driver.php
@@ -557,27 +557,28 @@
 

 		// This function may get "item1 item2" as a string, and so

 		// we may need "`item1` `item2`" and not "`item1 item2`"

-		if (strpos($item, ' ') !== FALSE)

+		if (ctype_alnum($item) === FALSE)

 		{

 			// This function may get "field >= 1", and need it to return "`field` >= 1"

-			if ($first_word_only === TRUE)

-			{

-				return '`'.preg_replace('/ /', '` ', $item, 1);

-			}

+			$lbound = ($first_word_only === TRUE) ? '' : '|\s|\(';

 

-			$item = preg_replace('/(^|\s|\()([\w\d\-\_]+?)(\s|\)|$)/iS', '$1`$2`$3', $item);

+			$item = preg_replace('/(^'.$lbound.')([\w\d\-\_]+?)(\s|\)|$)/iS', '$1`$2`$3', $item);

+		}

+		else

+		{

+			return "`{$item}`";

 		}

 

 		$exceptions = array('AS', '/', '-', '%', '+', '*');

 		

 		foreach ($exceptions as $exception)

 		{

+		

 			if (stristr($item, " `{$exception}` ") !== FALSE)

 			{

 				$item = preg_replace('/ `('.preg_quote($exception).')` /i', ' $1 ', $item);

 			}

 		}

-		

 		return $item;

 	}

 			

diff --git a/system/database/drivers/odbc/odbc_driver.php b/system/database/drivers/odbc/odbc_driver.php
index 0bdfc41..c5c582d 100644
--- a/system/database/drivers/odbc/odbc_driver.php
+++ b/system/database/drivers/odbc/odbc_driver.php
@@ -422,27 +422,28 @@
 

 		// This function may get "item1 item2" as a string, and so

 		// we may need "`item1` `item2`" and not "`item1 item2`"

-		if (strpos($item, ' ') !== FALSE)

+		if (ctype_alnum($item) === FALSE)

 		{

 			// This function may get "field >= 1", and need it to return "`field` >= 1"

-			if ($first_word_only === TRUE)

-			{

-				return '`'.preg_replace('/ /', '` ', $item, 1);

-			}

+			$lbound = ($first_word_only === TRUE) ? '' : '|\s|\(';

 

-			$item = preg_replace('/(^|\s|\()([\w\d\-\_]+?)(\s|\)|$)/iS', '$1`$2`$3', $item);

+			$item = preg_replace('/(^'.$lbound.')([\w\d\-\_]+?)(\s|\)|$)/iS', '$1`$2`$3', $item);

+		}

+		else

+		{

+			return "`{$item}`";

 		}

 

 		$exceptions = array('AS', '/', '-', '%', '+', '*');

 		

 		foreach ($exceptions as $exception)

 		{

+		

 			if (stristr($item, " `{$exception}` ") !== FALSE)

 			{

 				$item = preg_replace('/ `('.preg_quote($exception).')` /i', ' $1 ', $item);

 			}

 		}

-		

 		return $item;

 	}

 			

diff --git a/system/database/drivers/postgre/postgre_driver.php b/system/database/drivers/postgre/postgre_driver.php
index 63a72f5..fa27f03 100644
--- a/system/database/drivers/postgre/postgre_driver.php
+++ b/system/database/drivers/postgre/postgre_driver.php
@@ -444,27 +444,28 @@
 

 		// This function may get "item1 item2" as a string, and so

 		// we may need ""item1" "item2"" and not ""item1 item2""

-		if (strpos($item, ' ') !== FALSE)

+		if (ctype_alnum($item) === FALSE)

 		{

 			// This function may get "field >= 1", and need it to return ""field" >= 1"

-			if ($first_word_only === TRUE)

-			{

-				return '"'.preg_replace('/ /', '" ', $item, 1);

-			}

+			$lbound = ($first_word_only === TRUE) ? '' : '|\s|\(';

 

-			$item = preg_replace('/(^|\s|\()([\w\d\-\_]+?)(\s|\)|$)/iS', '$1"$2"$3', $item);

+			$item = preg_replace('/(^'.$lbound.')([\w\d\-\_]+?)(\s|\)|$)/iS', '$1"$2"$3', $item);

+		}

+		else

+		{

+			return ""{$item}"";

 		}

 

 		$exceptions = array('AS', '/', '-', '%', '+', '*');

 		

 		foreach ($exceptions as $exception)

 		{

+		

 			if (stristr($item, " "{$exception}" ") !== FALSE)

 			{

 				$item = preg_replace('/ "('.preg_quote($exception).')" /i', ' $1 ', $item);

 			}

 		}

-		

 		return $item;

 	}

 			

diff --git a/system/database/drivers/sqlite/sqlite_driver.php b/system/database/drivers/sqlite/sqlite_driver.php
index 2d0ca15..110b208 100644
--- a/system/database/drivers/sqlite/sqlite_driver.php
+++ b/system/database/drivers/sqlite/sqlite_driver.php
@@ -438,27 +438,28 @@
 

 		// This function may get "item1 item2" as a string, and so

 		// we may need "`item1` `item2`" and not "`item1 item2`"

-		if (strpos($item, ' ') !== FALSE)

+		if (ctype_alnum($item) === FALSE)

 		{

 			// This function may get "field >= 1", and need it to return "`field` >= 1"

-			if ($first_word_only === TRUE)

-			{

-				return '`'.preg_replace('/ /', '` ', $item, 1);

-			}

+			$lbound = ($first_word_only === TRUE) ? '' : '|\s|\(';

 

-			$item = preg_replace('/(^|\s|\()([\w\d\-\_]+?)(\s|\)|$)/iS', '$1`$2`$3', $item);

+			$item = preg_replace('/(^'.$lbound.')([\w\d\-\_]+?)(\s|\)|$)/iS', '$1`$2`$3', $item);

+		}

+		else

+		{

+			return "`{$item}`";

 		}

 

 		$exceptions = array('AS', '/', '-', '%', '+', '*');

 		

 		foreach ($exceptions as $exception)

 		{

+		

 			if (stristr($item, " `{$exception}` ") !== FALSE)

 			{

 				$item = preg_replace('/ `('.preg_quote($exception).')` /i', ' $1 ', $item);

 			}

 		}

-		

 		return $item;

 	}