PHP 5.3.0 compatibility changes
diff --git a/system/libraries/Loader.php b/system/libraries/Loader.php
index d615a13..781c83c 100644
--- a/system/libraries/Loader.php
+++ b/system/libraries/Loader.php
@@ -252,7 +252,7 @@
 		require_once(BASEPATH.'database/drivers/'.$CI->db->dbdriver.'/'.$CI->db->dbdriver.'_utility'.EXT);
 		$class = 'CI_DB_'.$CI->db->dbdriver.'_utility';
 
-		$CI->dbutil =& new $class();
+		$CI->dbutil =& instantiate_class(new $class());
 
 		$CI->load->_ci_assign_to_models();
 	}
diff --git a/system/libraries/Profiler.php b/system/libraries/Profiler.php
index 98cec06..ecd0e70 100644
--- a/system/libraries/Profiler.php
+++ b/system/libraries/Profiler.php
@@ -103,11 +103,11 @@
 	function _compile_queries()
 	{
 		$dbs = array();
-		
+
 		// Let's determine which databases are currently connected to
 		foreach (get_object_vars($this->CI) as $CI_object)
 		{
-			if ( is_subclass_of(get_class($CI_object), 'CI_DB') )
+			if (is_object($CI_object) && is_subclass_of(get_class($CI_object), 'CI_DB') )
 			{
 				$dbs[] = $CI_object;
 			}
diff --git a/system/libraries/URI.php b/system/libraries/URI.php
index efc7a18..68b6780 100644
--- a/system/libraries/URI.php
+++ b/system/libraries/URI.php
@@ -186,7 +186,9 @@
 	{
 		if ($str != '' && $this->config->item('permitted_uri_chars') != '' && $this->config->item('enable_query_strings') == FALSE)
 		{
-			if ( ! preg_match("|^[".preg_quote($this->config->item('permitted_uri_chars'))."]+$|i", $str))
+			// preg_quote() in PHP 5.3 escapes -, so the str_replace() and addition of - to preg_quote() is to maintain backwards
+			// compatibility as many are unaware of how characters in the permitted_uri_chars will be parsed as a regex pattern
+			if ( ! preg_match("|^[".str_replace(array('\\-', '\-'), '-', preg_quote($this->config->item('permitted_uri_chars'), '-'))."]+$|i", $str))
 			{
 				show_error('The URI you submitted has disallowed characters.', 400);
 			}