diff --git a/system/libraries/Config.php b/system/libraries/Config.php
index bd13833..f7f813f 100644
--- a/system/libraries/Config.php
+++ b/system/libraries/Config.php
@@ -36,8 +36,12 @@
 	 *
 	 * Sets the $config data from the primary config.php file as a class variable
 	 *
-	 * @access	public
-	 */
+     * @access   public
+     * @param   string    the config file name
+     * @param   boolean  if configuration values should be loaded into their own section
+     * @param   boolean  true if errors should just return false, false if an error message should be displayed
+     * @return  boolean  if the file was successfully loaded or not
+     */
 	function CI_Config()
 	{
 		$this->config =& _get_config();
@@ -55,7 +59,7 @@
 	 * @param	string	the config file name
 	 * @return	boolean	if the file was loaded correctly
 	 */	
-	function load($file = '')
+	function load($file = '', $use_sections = FALSE, $fail_gracefully = FALSE)
 	{
 		$file = ($file == '') ? 'config' : str_replace(EXT, '', $file);
 	
@@ -63,15 +67,42 @@
 		{                
 			return TRUE;
 		}
+
+		if ( ! file_exists(APPPATH.'config/'.$file.EXT))
+		{
+			if ($fail_gracefully === TRUE)
+			{
+				return FALSE;
+			}
+			show_error('The configuration file '.$file.EXT.' does not exist.');
+		}
 	
 		include_once(APPPATH.'config/'.$file.EXT);
 
 		if ( ! isset($config) OR ! is_array($config))
 		{
+			if ($fail_gracefully === TRUE)
+			{
+				return FALSE;
+			}		
 			show_error('Your '.$file.EXT.' file does not appear to contain a valid configuration array.');
 		}
 		
-		$this->config = array_merge($this->config, $config);
+		if ($use_sections === TRUE)
+		{
+			if (isset($this->config[$file]))
+			{
+				$this->config[$file] = array_merge($this->config[$file], $config);
+			}
+			else
+			{
+				$this->config[$file] = $config;
+			}
+		}
+		else
+		{
+			$this->config = array_merge($this->config, $config);
+		}
 
 		$this->is_loaded[] = $file;
 		unset($config);
@@ -86,6 +117,48 @@
 	/**
 	 * Fetch a config file item
 	 *
+	 *
+	 * @access	public
+	 * @param	string	the config item name
+	 * @param	string	the index name
+	 * @param	bool
+	 * @return	string
+	 */		
+	function item($item, $index = '')
+	{			
+		if ($index == '')
+		{	
+			if ( ! isset($this->config[$item])) 
+			{
+				return FALSE;
+			}
+		
+			$pref = $this->config[$item];
+		}
+		else
+		{
+			if ( ! isset($this->config[$index])) 
+			{
+				return FALSE;
+			}
+		
+			if ( ! isset($this->config[$index][$item]))
+			{
+				return FALSE;
+			}
+		
+			$pref = $this->config[$index][$item];
+		}
+
+        return $pref;
+	}
+  	// END item()
+  	
+  	// --------------------------------------------------------------------
+
+	/**
+	 * Fetch a config file item - adds slash after item
+	 *
 	 * The second parameter allows a slash to be added to the end of
 	 * the item, in the case of a path.
 	 *
@@ -94,7 +167,7 @@
 	 * @param	bool
 	 * @return	string
 	 */		
-	function item($item, $slash = FALSE)
+	function slash_item($item)
 	{
 		if ( ! isset($this->config[$item])) 
 		{
@@ -103,20 +176,20 @@
 		
 		$pref = $this->config[$item];
 		
-		if ($pref == '')
-		{
-			return $pref;
+		if ($pref != '')
+		{			
+			if (ereg("/$", $pref) === FALSE)
+			{
+				$pref .= '/';
+			}
 		}
-			
-        if ($slash !== FALSE AND ereg("/$", $pref) === FALSE)
-        {
-			$pref .= '/';
-        }
         
         return $pref;
 	}
   	// END item()
   	
+  	
+  	
 	// --------------------------------------------------------------------
 
 	/**