diff --git a/system/libraries/Benchmark.php b/system/libraries/Benchmark.php
index 9dd9d4a..d8dd903 100644
--- a/system/libraries/Benchmark.php
+++ b/system/libraries/Benchmark.php
@@ -31,15 +31,6 @@
 
 	var $marker = array();
 
-	/**
-	 * Constructor
-	 *
-	 * @access	public
-	 */
-    function CI_Benchmark()
-    {
-    }
-    // END CI_Benchmark()
     
 	// --------------------------------------------------------------------
 
diff --git a/system/libraries/Calendar.php b/system/libraries/Calendar.php
index bde9811..8c7d95a 100644
--- a/system/libraries/Calendar.php
+++ b/system/libraries/Calendar.php
@@ -13,11 +13,6 @@
  * @filesource
  */
  
-// INITIALIZE THE CLASS ---------------------------------------------------
-
-$obj =& get_instance();
-$obj->init_class('CI_Calendar');
-
 // ------------------------------------------------------------------------
 
 /**
diff --git a/system/libraries/Controller.php b/system/libraries/Controller.php
index 56b4d6f..aa7b87b 100644
--- a/system/libraries/Controller.php
+++ b/system/libraries/Controller.php
@@ -32,8 +32,6 @@
 	var $_ci_models			= array();
 	var $_ci_scaffolding	= FALSE;
 	var $_ci_scaff_table	= FALSE;
-	var $_ci_last_handle	= NULL;
-	var $_ci_last_params	= NULL;
 	
 	/**
 	 * Constructor
@@ -71,48 +69,6 @@
 	/**
 	 * Initialization Handler
 	 *
-	 * Designed to be called from the class files themselves.
-	 * See: http://www.codeigniter.com/user_guide/general/creating_libraries.html
-	 *
-	 * @access	public
-	 * @param 	string	class name
-	 * @param 	string	variable name
-	 * @param	mixed	any additional parameters
-	 * @return 	void
-	 */
-	function init_class($class, $varname = '', $params = NULL)
-	{
-		// First figure out what variable we're going to assign the class to
-		if ($varname == '')
-		{
-			$varname = ( ! is_null($this->_ci_last_handle)) ? $this->_ci_last_handle : strtolower(str_replace('CI_', '', $class));
-		}
-		
-		// Are there any parameters?
-		if ($params === NULL AND $this->_ci_last_params !== NULL)
-		{
-			$params = $this->_ci_last_params;
-		}
-		
-		// Instantiate the class
-		if ( ! is_null($params))
-		{
-			$this->$varname = new $class($params);
-		}
-		else
-		{
-			$this->$varname = new $class;
-		}	
-		
-		$this->_ci_last_params = NULL;
-		$this->_ci_last_handle = NULL;
-	}
-
-	// --------------------------------------------------------------------
-
-	/**
-	 * Initialization Handler
-	 *
 	 * This function loads the requested class.
 	 *
 	 * @access	private
@@ -120,15 +76,21 @@
 	 * @param	mixed	any additional parameters
 	 * @return 	void
 	 */
-	function _ci_init_class($class, $params = NULL)
+	function _ci_load_class($class, $params = NULL)
 	{	
 		// Prep the class name
 		$class = strtolower(str_replace(EXT, '', $class));
-		
-		// These are used by $this->init_class() above.
-		// They lets us dynamically set the object name and pass parameters
-		$this->_ci_last_handle = $class;		
-		$this->_ci_last_params = $params;
+
+		// Is this a class extension request?	
+		if (substr($class, 0, 3) == 'my_')
+		{
+			$class = preg_replace("/my_(.+)/", "\\1", $class);
+			$extend = TRUE;
+		}
+		else
+		{
+			$extend = FALSE;
+		}
 		
 		// Does THIS file (Controller.php) contain an initialization
 		// function that maps to the requested class?
@@ -150,30 +112,101 @@
 			return TRUE;
 		}
 		
-		// Lets search for the requested library file and load it.
-		// We'll assume that the file we load contains a call to
-		// $obj->init_class() so that the class can get instantiated.
-		// For backward compatibility we'll test for filenames that are
-		// both uppercase and lower.
-		foreach (array(ucfirst($class), $class) as $filename)
+		// Are we extending one of the base classes?
+		if ($extend == TRUE)
 		{
-			for ($i = 1; $i < 3; $i++)
+			// Load the requested library from the main system/libraries folder
+			if (file_exists(BASEPATH.'libraries/'.ucfirst($class).EXT))
 			{
-				$path = ($i % 2) ? APPPATH : BASEPATH;
+				include_once(BASEPATH.'libraries/'.ucfirst($class).EXT);
+			}
 			
-				if (file_exists($path.'libraries/'.$filename.EXT))
+			// Now look for a matching library
+			foreach (array(ucfirst($class), $class) as $filename)
+			{
+				if (file_exists(APPPATH.'libraries/'.$filename.EXT))
 				{
-					include_once($path.'libraries/'.$filename.EXT);
-					return TRUE;	
+					include_once(APPPATH.'libraries/'.$filename.EXT);	
 				}
 			}
-		
+			
+			return $this->_ci_init_class($filename, 'MY_', $params);
+		}
+		else
+		{		
+			// Lets search for the requested library file and load it.
+			// For backward compatibility we'll test for filenames that are
+			// both uppercase and lower.
+			foreach (array(ucfirst($class), $class) as $filename)
+			{
+				for ($i = 1; $i < 3; $i++)
+				{
+					$path = ($i % 2) ? APPPATH : BASEPATH;
+				
+					if (file_exists($path.'libraries/'.$filename.EXT))
+					{
+						include_once($path.'libraries/'.$filename.EXT);
+						return $this->_ci_init_class($filename, '', $params);
+					}
+				}
+			}
 		}
 		
 		// If we got this far we were unable to find the requested class
 		log_message('error', "Unable to load the requested class: ".$class);
 		show_error("Unable to load the class: ".$class);
 	}
+	
+	// --------------------------------------------------------------------
+
+	/**
+	 * Instantiates a class
+	 *
+	 * @access	private
+	 * @param	string
+	 * @param	string
+	 * @return	null
+	 */
+	function _ci_init_class($class, $prefix = '', $config = NULL)
+	{
+		// Is there an associated config file for this class?
+		
+		if ($config == NULL)
+		{
+			if (file_exists(APPPATH.'config/'.$class.EXT))
+			{
+				include_once(APPPATH.'config/'.$class.EXT);
+			}
+		}
+		
+		if ($prefix == '')
+		{
+			$name = ( ! class_exists($class)) ? 'CI_'.$class : $class;
+		}
+		else
+		{
+			$name = $prefix.ucfirst($class);
+		}
+		
+		$remap = array(
+						'DB_export'		=> 'dbexport',
+						'DB_utility'	=> 'dbutility',
+						'Encryption'	=> 'encrypt',
+						'Unit_test' 	=> 'unit'
+						);
+						
+		$varname = ( ! isset($remap[$class])) ? $class : $remap[$class];
+		
+		// Instantiate the class
+		if ($config !== NULL)
+		{
+			$this->$varname = new $name($config);
+		}
+		else
+		{
+			$this->$varname = new $name;
+		}	
+	}
   	
 	// --------------------------------------------------------------------
 
@@ -305,7 +338,7 @@
 		{
 			if ( ! in_array($item, $exceptions))
 			{
-				$this->_ci_init_class($item);
+				$this->_ci_load_class($item);
 			}
 			else
 			{
@@ -334,10 +367,10 @@
 		foreach (array('Config', 'Input', 'Benchmark', 'URI', 'Output') as $val)
 		{
 			$class = strtolower($val);
-			$this->$class =& _load_class('CI_'.$val);
+			$this->$class =& _load_class($val);
 		}
 		
-		$this->lang	=& _load_class('CI_Language');
+		$this->lang	=& _load_class('Language');
 	
 		// In PHP 4 the Controller class is a child of CI_Loader.
 		// In PHP 5 we run it as its own class.
@@ -529,7 +562,7 @@
 		}
 		
 		$this->_ci_init_database("", FALSE, TRUE);
-		$this->_ci_init_class('pagination');
+		$this->_ci_load_class('pagination');
 		require_once(BASEPATH.'scaffolding/Scaffolding'.EXT);
 		$this->scaff = new Scaffolding($this->_ci_scaff_table);
 		$this->scaff->$method();
diff --git a/system/libraries/Email.php b/system/libraries/Email.php
index fd3fb8f..5b991d1 100644
--- a/system/libraries/Email.php
+++ b/system/libraries/Email.php
@@ -13,17 +13,6 @@
  * @filesource
  */
  
-// INITIALIZE THE CLASS ---------------------------------------------------
-
-$config = array();
-if (file_exists(APPPATH.'config/email'.EXT))
-{
-	include_once(APPPATH.'config/email'.EXT);
-}
-
-$obj =& get_instance();
-$obj->init_class('CI_Email', 'email', $config);
-
 // ------------------------------------------------------------------------
 
 /**
diff --git a/system/libraries/Encrypt.php b/system/libraries/Encrypt.php
index 6a3ca17..abc7694 100644
--- a/system/libraries/Encrypt.php
+++ b/system/libraries/Encrypt.php
@@ -12,11 +12,6 @@
  * @since		Version 1.0
  * @filesource
  */
- 
-// INITIALIZE THE CLASS ---------------------------------------------------
-
-$obj =& get_instance();
-$obj->init_class('CI_Encrypt');
 
 // ------------------------------------------------------------------------
 
diff --git a/system/libraries/Hooks.php b/system/libraries/Hooks.php
index 7ff0592..69ca1a9 100644
--- a/system/libraries/Hooks.php
+++ b/system/libraries/Hooks.php
@@ -41,7 +41,7 @@
 	{
 		log_message('debug', "Hooks Class Initialized");
 	
-		$CFG =& _load_class('CI_Config');
+		$CFG =& _load_class('Config');
 		
 		// If hooks are not enabled in the config file
 		// there is nothing else to do
diff --git a/system/libraries/Image_lib.php b/system/libraries/Image_lib.php
index 4962760..18e3253 100644
--- a/system/libraries/Image_lib.php
+++ b/system/libraries/Image_lib.php
@@ -13,17 +13,6 @@
  * @filesource
  */
  
-// INITIALIZE THE CLASS ---------------------------------------------------
-
-$config = array();
-if (file_exists(APPPATH.'config/image_lib'.EXT))
-{
-	include_once(APPPATH.'config/image_lib'.EXT);
-}
-
-$obj =& get_instance();
-$obj->init_class('CI_Image_lib', '', $config);
-
 // ------------------------------------------------------------------------
 
 /**
diff --git a/system/libraries/Input.php b/system/libraries/Input.php
index dbf939b..ad7b0c5 100644
--- a/system/libraries/Input.php
+++ b/system/libraries/Input.php
@@ -42,7 +42,7 @@
 	 */	
 	function CI_Input()
 	{	
-		$CFG =& _load_class('CI_Config');
+		$CFG =& _load_class('Config');
 		$this->use_xss_clean	= ($CFG->item('global_xss_filtering') === TRUE) ? TRUE : FALSE;
 		$this->allow_get_array	= ($CFG->item('enable_query_strings') === TRUE) ? TRUE : FALSE;
 		
diff --git a/system/libraries/Loader.php b/system/libraries/Loader.php
index 90d8240..fff9e78 100644
--- a/system/libraries/Loader.php
+++ b/system/libraries/Loader.php
@@ -71,7 +71,7 @@
 			return;
 	
 		$obj =& get_instance();
-		$obj->_ci_init_class($class, $param);
+		$obj->_ci_load_class($class, $param);
 		$obj->_ci_assign_to_models();
 	}
 
diff --git a/system/libraries/Output.php b/system/libraries/Output.php
index 5a15824..1c3f0d6 100644
--- a/system/libraries/Output.php
+++ b/system/libraries/Output.php
@@ -237,8 +237,8 @@
 	 */	
 	function _display_cache(&$CFG, &$RTR)
 	{
-		$CFG =& _load_class('CI_Config');
-		$RTR =& _load_class('CI_Router');
+		$CFG =& _load_class('Config');
+		$RTR =& _load_class('Router');
 	
 		$cache_path = ($CFG->item('cache_path') == '') ? BASEPATH.'cache/' : $CFG->item('cache_path');
 			
diff --git a/system/libraries/Pagination.php b/system/libraries/Pagination.php
index cd55d56..867d214 100644
--- a/system/libraries/Pagination.php
+++ b/system/libraries/Pagination.php
@@ -12,17 +12,6 @@
  * @since		Version 1.0
  * @filesource
  */
- 
-// INITIALIZE THE CLASS ---------------------------------------------------
-
-$config = array();
-if (file_exists(APPPATH.'config/pagination'.EXT))
-{
-	include_once(APPPATH.'config/pagination'.EXT);
-}
-
-$obj =& get_instance();
-$obj->init_class('CI_Pagination', '', $config);
 
 // ------------------------------------------------------------------------
 
diff --git a/system/libraries/Parser.php b/system/libraries/Parser.php
index 7618227..42e78b0 100644
--- a/system/libraries/Parser.php
+++ b/system/libraries/Parser.php
@@ -12,11 +12,6 @@
  * @since		Version 1.0
  * @filesource
  */
- 
-// INITIALIZE THE CLASS ---------------------------------------------------
-
-$obj =& get_instance();
-$obj->init_class('CI_Parser');
 
 // ------------------------------------------------------------------------
 
diff --git a/system/libraries/Router.php b/system/libraries/Router.php
index 34a2512..c056530 100644
--- a/system/libraries/Router.php
+++ b/system/libraries/Router.php
@@ -33,6 +33,7 @@
 	var $segments		= array();
 	var $rsegments		= array();
 	var $routes 		= array();
+	var $error_routes	= array();
 	var $class			= '';
 	var $method			= 'index';
 	var $directory		= '';
@@ -47,7 +48,7 @@
 	 */
 	function CI_Router()
 	{
-		$this->config =& _load_class('CI_Config');
+		$this->config =& _load_class('Config');
 		$this->_set_route_mapping();
 		log_message('debug', "Router Class Initialized");
 	}
@@ -87,8 +88,8 @@
 
 		// Set the default controller so we can display it in the event
 		// the URI doesn't correlated to a valid controller.
-		$this->default_controller = ( ! isset($this->routes['default_controller']) OR $this->routes['default_controller'] == '') ? FALSE : strtolower($this->routes['default_controller']);		
-	
+		$this->default_controller = ( ! isset($this->routes['default_controller']) OR $this->routes['default_controller'] == '') ? FALSE : strtolower($this->routes['default_controller']);	
+		
 		// Fetch the complete URI string
 		$this->uri_string = $this->_get_uri_string();
 		
@@ -138,7 +139,6 @@
 		// Re-index the segment array so that it starts with 1 rather than 0
 		$this->_reindex_segments();
 	}
-	// END _set_route_mapping()
 	
 	// --------------------------------------------------------------------
 	
@@ -185,7 +185,6 @@
 		// identical to $this->segments
 		$this->rsegments = $segments;
 	}
-	// END _compile_segments()
 	
 	// --------------------------------------------------------------------
 	
@@ -240,7 +239,6 @@
 		// Can't find the requested controller...
 		show_404();	
 	}
-	// END _validate_segments()
 
 	// --------------------------------------------------------------------	
 	/**
@@ -280,7 +278,6 @@
 			unset($this->rsegments[0]);
 		}
 	}
-	// END _reindex_segments()
 	
 	// --------------------------------------------------------------------
 	
@@ -333,7 +330,6 @@
 			return getenv($uri);
 		}
 	}
-	// END _get_uri_string()
 
 	// --------------------------------------------------------------------
 	
@@ -381,7 +377,6 @@
 
 		return $parsed_uri;
 	}
-	// END _parse_request_uri()
 
 	// --------------------------------------------------------------------
 	
@@ -403,7 +398,6 @@
 		}	
 			return $str;
 	}
-	// END _filter_uri()
 	
 	// --------------------------------------------------------------------
 	
@@ -461,7 +455,6 @@
 		// matching route so we'll set the site default route
 		$this->_compile_segments($this->segments);
 	}
-	// END set_method()
 
 	// --------------------------------------------------------------------
 	
@@ -476,7 +469,6 @@
 	{
 		$this->class = $class;
 	}
-	// END set_class()
 	
 	// --------------------------------------------------------------------
 	
@@ -490,7 +482,6 @@
 	{
 		return $this->class;
 	}
-	// END fetch_class()
 	
 	// --------------------------------------------------------------------
 	
@@ -505,7 +496,6 @@
 	{
 		$this->method = $method;
 	}
-	// END set_method()
 
 	// --------------------------------------------------------------------
 	
@@ -519,7 +509,6 @@
 	{
 		return $this->method;
 	}
-	// END fetch_method()
 
 	// --------------------------------------------------------------------
 	
@@ -534,7 +523,6 @@
 	{
 		$this->directory = $dir.'/';
 	}
-	// END set_directory()
 
 	// --------------------------------------------------------------------
 	
@@ -548,7 +536,6 @@
 	{
 		return $this->directory;
 	}
-	// END fetch_directory()
 
 }
 // END Router Class
diff --git a/system/libraries/Session.php b/system/libraries/Session.php
index 76acbfe..28e469d 100644
--- a/system/libraries/Session.php
+++ b/system/libraries/Session.php
@@ -12,11 +12,6 @@
  * @since		Version 1.0
  * @filesource
  */
- 
-// INITIALIZE THE CLASS ---------------------------------------------------
-
-$obj =& get_instance();
-$obj->init_class('CI_Session');
 
 // ------------------------------------------------------------------------
 
diff --git a/system/libraries/Trackback.php b/system/libraries/Trackback.php
index 9b61384..8b6cce1 100644
--- a/system/libraries/Trackback.php
+++ b/system/libraries/Trackback.php
@@ -12,11 +12,6 @@
  * @since		Version 1.0
  * @filesource
  */
- 
-// INITIALIZE THE CLASS ---------------------------------------------------
-
-$obj =& get_instance();
-$obj->trackback =& new CI_Trackback();
 
 // ------------------------------------------------------------------------
 
diff --git a/system/libraries/URI.php b/system/libraries/URI.php
index 89ca42e..80b1126 100644
--- a/system/libraries/URI.php
+++ b/system/libraries/URI.php
@@ -42,7 +42,7 @@
 	 */		
 	function CI_URI()
 	{
-		$this->router =& _load_class('CI_Router');	
+		$this->router =& _load_class('Router');	
 		log_message('debug', "URI Class Initialized");
 	}
 	
diff --git a/system/libraries/Unit_test.php b/system/libraries/Unit_test.php
index 04c3c19..b2f4bf8 100644
--- a/system/libraries/Unit_test.php
+++ b/system/libraries/Unit_test.php
@@ -13,11 +13,6 @@
  * @filesource
  */
  
-// INITIALIZE THE CLASS ---------------------------------------------------
-
-$obj =& get_instance();
-$obj->init_class('CI_Unit_test');
-
 // ------------------------------------------------------------------------
 
 /**
diff --git a/system/libraries/Upload.php b/system/libraries/Upload.php
index 3a6a6fc..091c6c3 100644
--- a/system/libraries/Upload.php
+++ b/system/libraries/Upload.php
@@ -12,17 +12,6 @@
  * @since		Version 1.0
  * @filesource
  */
- 
-// INITIALIZE THE CLASS ---------------------------------------------------
-
-$config = array();
-if (file_exists(APPPATH.'config/upload'.EXT))
-{
-	include_once(APPPATH.'config/upload'.EXT);
-}
-
-$obj =& get_instance();
-$obj->init_class('CI_Upload', '', $config);
 
 // ------------------------------------------------------------------------
 
diff --git a/system/libraries/Validation.php b/system/libraries/Validation.php
index 34cacd5..80ee6a5 100644
--- a/system/libraries/Validation.php
+++ b/system/libraries/Validation.php
@@ -12,11 +12,6 @@
  * @since		Version 1.0
  * @filesource
  */
- 
-// INITIALIZE THE CLASS ---------------------------------------------------
-
-$obj =& get_instance();
-$obj->init_class('CI_Validation');
 
 // ------------------------------------------------------------------------
 
diff --git a/system/libraries/Xmlrpc.php b/system/libraries/Xmlrpc.php
index 24f79f2..f907854 100644
--- a/system/libraries/Xmlrpc.php
+++ b/system/libraries/Xmlrpc.php
@@ -18,10 +18,6 @@
     show_error('Your PHP installation does not support XML');
 }
 
-// INITIALIZE THE CLASS ---------------------------------------------------
-
-$obj =& get_instance();
-$obj->init_class('CI_Xmlrpc');
 
 // ------------------------------------------------------------------------
 
diff --git a/system/libraries/Xmlrpcs.php b/system/libraries/Xmlrpcs.php
index f414373..b471048 100644
--- a/system/libraries/Xmlrpcs.php
+++ b/system/libraries/Xmlrpcs.php
@@ -23,11 +23,6 @@
     show_error('You must load the Xmlrpc class before loading the Xmlrpcs class in order to create a server.');
 }
 
-// INITIALIZE THE CLASS ---------------------------------------------------
-
-$obj =& get_instance();
-$obj->init_class('CI_Xmlrpcs');
-
 // ------------------------------------------------------------------------
 
 /**