diff --git a/system/libraries/Calendar.php b/system/libraries/Calendar.php
index 013f067..b77dd1b 100644
--- a/system/libraries/Calendar.php
+++ b/system/libraries/Calendar.php
@@ -263,7 +263,7 @@
 		}
 		else
 		{
-			$month_names = array('01' => 'cal_january', '02' => 'cal_february', '03' => 'cal_march', '04' => 'cal_april', '05' => 'cal_mayl', '06' => 'cal_june', '07' => 'cal_july', '08' => 'cal_august', '09' => 'cal_september', '10' => 'cal_october', '11' => 'cal_novermber', '12' => 'cal_december');
+			$month_names = array('01' => 'cal_january', '02' => 'cal_february', '03' => 'cal_march', '04' => 'cal_april', '05' => 'cal_mayl', '06' => 'cal_june', '07' => 'cal_july', '08' => 'cal_august', '09' => 'cal_september', '10' => 'cal_october', '11' => 'cal_november', '12' => 'cal_december');
 		}
 		
 		$month = $month_names[$month];
diff --git a/system/libraries/Loader.php b/system/libraries/Loader.php
index e2467fa..3d2501f 100644
--- a/system/libraries/Loader.php
+++ b/system/libraries/Loader.php
@@ -478,7 +478,7 @@
 		if ($path == '')
 		{
 			$ext = pathinfo($view, PATHINFO_EXTENSION);
-			$file = ($ext == '') ? $view.EXT : $view;
+			$file = ($ext != EXT) ? $view.EXT : $view;
 			$path = $this->view_path.$file;
 		}
 		else
diff --git a/system/libraries/Router.php b/system/libraries/Router.php
index 6781454..b28ead9 100644
--- a/system/libraries/Router.php
+++ b/system/libraries/Router.php
@@ -87,25 +87,31 @@
 
 		// Fetch the URI string Depending on the server, 
 		// the URI will be available in one of two globals
-		switch ($this->config->item('uri_protocol'))
+		if ($this->config->item('uri_protocol') == 'auto')
 		{
-			case 'path_info'	: $this->uri_string = (isset($_SERVER['PATH_INFO'])) ? $_SERVER['PATH_INFO'] : @getenv('PATH_INFO');	
-				break;
-			case 'query_string' : $this->uri_string = (isset($_SERVER['QUERY_STRING'])) ? $_SERVER['QUERY_STRING'] : @getenv('QUERY_STRING'); 
-				break;
-			default : 
-						$path_info = (isset($_SERVER['PATH_INFO'])) ? $_SERVER['PATH_INFO'] : @getenv('PATH_INFO');
-						
-						if ($path_info != '' AND $path_info != "/".SELF)
-						{
-							$this->uri_string = $path_info;
-						}
-						else
-						{
-							$this->uri_string = (isset($_SERVER['QUERY_STRING'])) ? $_SERVER['QUERY_STRING'] : @getenv('QUERY_STRING');
-						}
-				break;
+			$path_info = getenv('PATH_INFO');
+			if ($path_info != '' AND $path_info != "/".SELF)
+			{
+				$this->uri_string = $path_info;
+			}
+			else
+			{
+				$path_info = getenv('ORIG_PATH_INFO');
+				if ($path_info != '' AND $path_info != "/".SELF)
+				{
+					$this->uri_string = $path_info;
+				}
+				else
+				{
+					$this->uri_string = getenv('QUERY_STRING');
+				}
+			}
 		}
+		else
+		{
+			$this->uri_string = getenv(strtoupper($this->config->item('uri_protocol')));		
+		}
+		
 	
 		// Is there a URI string? If not, the default controller specified 
 		// by the admin in the "routes" file will be shown.
@@ -291,10 +297,7 @@
 				
 		// Loop through the route array looking for wildcards
 		foreach (array_slice($this->routes, 1) as $key => $val)
-		{
-			if (count(explode('/', $key)) != $num)
-				continue;
-						
+		{						
 			// Convert wildcards to RegEx
 			$key = str_replace(':any', '.+', str_replace(':num', '[0-9]+', $key));
 			
diff --git a/system/libraries/URI.php b/system/libraries/URI.php
index 4c2fa9c..c5fd462 100644
--- a/system/libraries/URI.php
+++ b/system/libraries/URI.php
@@ -28,7 +28,7 @@
  */
 class CI_URI {
 
-	var $uri;
+	var $router;
 	var	$keyval	= array();
 
 	/**
@@ -42,7 +42,7 @@
 	 */		
 	function CI_URI()
 	{
-		$this->uri =& _load_class('CI_Router');		
+		$this->router =& _load_class('CI_Router');	
 		log_message('debug', "URI Class Initialized");
 	}
 	
@@ -60,7 +60,7 @@
 	 */
 	function segment($n, $no_result = FALSE)
 	{
-		return ( ! isset($this->uri->segments[$n])) ? $no_result : $this->uri->segments[$n];
+		return ( ! isset($this->router->segments[$n])) ? $no_result : $this->router->segments[$n];
 	}
 
 	// --------------------------------------------------------------------
@@ -196,7 +196,7 @@
 			$leading	= '/';
 			$trailing	= '/';
 		}
-		return ( ! isset($this->uri->segments[$n])) ? '' : $leading.$this->uri->segments[$n].$trailing;
+		return ( ! isset($this->router->segments[$n])) ? '' : $leading.$this->router->segments[$n].$trailing;
 	}
 	
 	// --------------------------------------------------------------------
@@ -209,7 +209,7 @@
 	 */
 	function segment_array()
 	{
-		return $this->uri->segments;
+		return $this->router->segments;
 	}
 	
 	// --------------------------------------------------------------------
@@ -222,7 +222,7 @@
 	 */
 	function total_segments()
 	{
-		return count($this->uri->segments);
+		return count($this->router->segments);
 	}
 	
 	// --------------------------------------------------------------------
@@ -235,7 +235,7 @@
 	 */
 	function uri_string()
 	{
-		return $this->uri->uri_string;
+		return $this->router->uri_string;
 	}
 
 }