diff --git a/system/libraries/Loader.php b/system/libraries/Loader.php
index ca4c4fe..1738438 100644
--- a/system/libraries/Loader.php
+++ b/system/libraries/Loader.php
@@ -28,15 +28,18 @@
  */
 class CI_Loader {
 
-	var $CI;
-	var $ob_level;
-	var $view_path		= '';
-	var $cached_vars	= array();
-	var $models			= array();
-	var $helpers		= array();
-	var $plugins		= array();
-	var $scripts		= array();
-	var $varmap			= array('unit_test' => 'unit', 'user_agent' => 'agent');
+	var $_ci_ob_level;
+	var $_ci_view_path		= '';
+	var $_ci_cached_vars	= array();
+	var $_ci_models			= array();
+	var $_ci_helpers		= array();
+	var $_ci_plugins		= array();
+	var $_ci_scripts		= array();
+	var $_ci_varmap			= array('unit_test' => 'unit', 'user_agent' => 'agent');
+	
+	var $_ci_use_instance 	= FALSE; 	// This variable determines whether we should 
+										// use $this or $CI =& get_instance()  
+										// throughout this class. Don't mess with it. 
 
 	/**
 	 * Constructor
@@ -47,11 +50,9 @@
 	 * @access	public
 	 */
 	function CI_Loader()
-	{
-		$this->CI =& get_instance();
-	
-		$this->view_path = APPPATH.'views/';
-		$this->ob_level = ob_get_level();
+	{	
+		$this->_ci_view_path = APPPATH.'views/';
+		$this->_ci_ob_level  = ob_get_level();
 				
 		log_message('debug', "Loader Class Initialized");
 	}
@@ -95,8 +96,7 @@
 		if ($model == '')
 			return;
 	
-		// Is the model in a sub-folder?
-		// If so, parse out the filename and path.
+		// Is the model in a sub-folder? If so, parse out the filename and path.
 		if (strpos($model, '/') === FALSE)
 		{
 			$path = '';
@@ -114,14 +114,25 @@
 			$name = $model;
 		}
 		
-		if (in_array($name, $this->models, TRUE))
+		if (in_array($name, $this->_ci_models, TRUE))
 		{
 			return;
-		}		
+		}
 		
-		if (isset($this->CI->$name))
+		if ($this->_ci_use_instance)
 		{
-			show_error('The model name you are loading is the name of a resource that is already being used: '.$name);
+			$CI =& get_instance();
+			if (isset($CI->$name))
+			{
+				show_error('The model name you are loading is the name of a resource that is already being used: '.$name);
+			}
+		}
+		else
+		{
+			if (isset($this->$name))
+			{
+				show_error('The model name you are loading is the name of a resource that is already being used: '.$name);
+			}
 		}
 	
 		$model = strtolower($model);
@@ -136,7 +147,14 @@
 			if ($db_conn === TRUE)
 				$db_conn = '';
 		
-			$this->CI->load->database($db_conn, FALSE, TRUE);
+			if ($this->_ci_use_instance)
+			{
+				$CI->load->database($db_conn, FALSE, TRUE);
+			}
+			else
+			{
+				$this->database($db_conn, FALSE, TRUE);
+			}
 		}
 	
 		if ( ! class_exists('Model'))
@@ -147,8 +165,17 @@
 		require_once(APPPATH.'models/'.$path.$model.EXT);
 
 		$model = ucfirst($model);
-		$this->CI->$name = new $model();
-		$this->models[] = $name;
+		
+		if ($this->_ci_use_instance)
+		{
+			$CI->$name = new $model();
+		}
+		else
+		{
+			$this->$name = new $model();
+		}
+		
+		$this->_ci_models[] = $name;
 		$this->_ci_assign_to_models();
 	}
 	
@@ -239,7 +266,7 @@
 		{
 			foreach ($vars as $key => $val)
 			{
-				$this->cached_vars[$key] = $val;
+				$this->_ci_cached_vars[$key] = $val;
 			}
 		}
 	}
@@ -264,7 +291,7 @@
 	
 		foreach ($helpers as $helper)
 		{
-			if (isset($this->helpers[$helper]))
+			if (isset($this->_ci_helpers[$helper]))
 			{
 				continue;
 			}
@@ -287,7 +314,7 @@
 				}
 			}
 
-			$this->helpers[$helper] = TRUE;
+			$this->_ci_helpers[$helper] = TRUE;
 		}
 		
 		log_message('debug', 'Helpers loaded: '.implode(', ', $helpers));
@@ -330,7 +357,7 @@
 	
 		foreach ($plugins as $plugin)
 		{
-			if (isset($this->plugins[$plugin]))
+			if (isset($this->_ci_plugins[$plugin]))
 			{
 				continue;
 			}
@@ -353,7 +380,7 @@
 				}
 			}
 			
-			$this->plugins[$plugin] = TRUE;
+			$this->_ci_plugins[$plugin] = TRUE;
 		}
 		
 		log_message('debug', 'Plugins loaded: '.implode(', ', $plugins));
@@ -400,7 +427,7 @@
 	
 		foreach ($scripts as $script)
 		{
-			if (isset($this->scripts[$script]))
+			if (isset($this->_ci_scripts[$script]))
 			{
 				continue;
 			}
@@ -414,7 +441,7 @@
 			
 			include_once(APPPATH.'scripts/'.$script.EXT);
 			
-			$this->scripts[$script] = TRUE;
+			$this->_ci_scripts[$script] = TRUE;
 		}
 		
 		log_message('debug', 'Scripts loaded: '.implode(', ', $scripts));
@@ -431,7 +458,15 @@
 	 */
 	function language($file = '', $lang = '', $return = FALSE)
 	{
-		return $this->CI->lang->load($file, $lang, $return);
+		if ($this->_ci_use_instance)
+		{
+			$CI =& get_instance();
+			return $CI->lang->load($file, $lang, $return);
+		}
+		else
+		{
+			return $this->lang->load($file, $lang, $return);
+		}
 	}
 	
 	// --------------------------------------------------------------------
@@ -444,8 +479,16 @@
 	 * @return	void
 	 */
 	function config($file = '')
-	{
-		$this->CI->config->load($file);
+	{		
+		if ($this->_ci_use_instance)
+		{
+			$CI =& get_instance();
+			$CI->config->load($file);
+		}
+		else
+		{
+			$this->config->load($file);
+		}
 	}
 
 	// --------------------------------------------------------------------
@@ -471,9 +514,18 @@
 		{
 			show_error('You must include the name of the table you would like access when you initialize scaffolding');
 		}
-			
-		$this->CI->_ci_scaffolding = TRUE;
-		$this->CI->_ci_scaff_table = $table;
+		
+		if ($this->_ci_use_instance)
+		{
+			$CI =& get_instance();
+			$CI->_ci_scaffolding = TRUE;
+			$CI->_ci_scaff_table = $table;
+		}
+		else
+		{
+			$this->_ci_scaffolding = TRUE;
+			$this->_ci_scaff_table = $table;
+		}
 	}
 
 	// --------------------------------------------------------------------
@@ -491,14 +543,20 @@
 	{
 		// This allows anything loaded using $this->load (viwes, files, etc.)
 		// to become accessible from within the Controller and Model functions.
-		foreach (get_object_vars($this->CI) as $key => $var)
+		// Only needed when running PHP 5
+		
+		if ($this->_ci_use_instance)
 		{
-			if (is_object($var))
+			$CI =& get_instance();
+			foreach (get_object_vars($CI) as $key => $var)
 			{
-				$this->$key =& $this->CI->$key;
+				if ( ! isset($this->$key))
+				{
+					$this->$key =& $CI->$key;
+				}
 			}
 		}
-				
+		
 		// Set the default data variables
 		foreach (array('view', 'vars', 'path', 'return') as $val)
 		{
@@ -515,16 +573,16 @@
 		 */	
 		if (is_array($vars))
 		{
-			$this->cached_vars = array_merge($this->cached_vars, $vars);
+			$this->_ci_cached_vars = array_merge($this->_ci_cached_vars, $vars);
 		}
-		extract($this->cached_vars);
+		extract($this->_ci_cached_vars);
 				
 		// Set the path to the requested file
 		if ($path == '')
 		{
 			$ext = pathinfo($view, PATHINFO_EXTENSION);
 			$file = ($ext == '') ? $view.EXT : $view;
-			$path = $this->view_path.$file;
+			$path = $this->_ci_view_path.$file;
 		}
 		else
 		{
@@ -572,14 +630,15 @@
 		 * it can be seen and included  properly by the first included 
 		 * template and any subsequent ones. Oy!
 		 *
-		 */		
-		if (ob_get_level() > $this->ob_level + 1)
+		 */	
+		if (ob_get_level() > $this->_ci_ob_level + 1)
 		{
 			ob_end_flush();
 		}
 		else
 		{
-			$this->CI->output->set_output(ob_get_contents());
+			global $OUT;
+			$OUT->set_output(ob_get_contents());
 			ob_end_clean();
 		}
 	}
@@ -682,18 +741,33 @@
 		else
 		{
 			$class = strtolower($class);			
-			$classvar = ( ! isset($this->varmap[$class])) ? $class : $this->varmap[$class];
+			$classvar = ( ! isset($this->_ci_varmap[$class])) ? $class : $this->_ci_varmap[$class];
 		}
 		
-		// Instantiate the class
-		if ($config !== NULL)
+		// Instantiate the class		
+		if ($this->_ci_use_instance)
 		{
-			$this->CI->$classvar = new $name($config);
+			$CI =& get_instance();
+			if ($config !== NULL)
+			{
+				$CI->$classvar = new $name($config);
+			}
+			else
+			{		
+				$CI->$classvar = new $name;
+			}	
 		}
 		else
-		{		
-			$this->CI->$classvar = new $name;
-		}	
+		{
+			if ($config !== NULL)
+			{
+				$this->$classvar = new $name($config);
+			}
+			else
+			{		
+				$this->$classvar = new $name;
+			}	
+		}
 	} 	
 	
 	// --------------------------------------------------------------------
@@ -719,10 +793,21 @@
 		
 		// Load any custome config file
 		if (count($autoload['config']) > 0)
-		{
-			foreach ($autoload['config'] as $key => $val)
+		{			
+			if ($this->_ci_use_instance)
 			{
-				$this->CI->config->load($val);
+				$CI =& get_instance();
+				foreach ($autoload['config'] as $key => $val)
+				{
+					$CI->config->load($val);
+				}
+			}
+			else
+			{
+				foreach ($autoload['config'] as $key => $val)
+				{
+					$this->config->load($val);
+				}			
 			}
 		}		
 
@@ -788,14 +873,26 @@
 	 */
 	function _ci_assign_to_models()
 	{
-		if (count($this->models) == 0)
+		if (count($this->_ci_models) == 0)
 		{
 			return;
 		}
-		foreach ($this->models as $model)
-		{			
-			$this->CI->$model->_assign_libraries();			
-		}		
+
+		if ($this->_ci_use_instance)
+		{
+			$CI =& get_instance();
+			foreach ($this->_ci_models as $model)
+			{			
+				$CI->$model->_assign_libraries();			
+			}
+		}
+		else
+		{
+			foreach ($this->_ci_models as $model)
+			{			
+				$this->$model->_assign_libraries();			
+			}
+		}
 	}  	
 
 	// --------------------------------------------------------------------