Merge pull request #2800 from marcossffilho/develop

Store Hooks objects
diff --git a/system/core/Hooks.php b/system/core/Hooks.php
index aa7ac1e..9bcc23a 100644
--- a/system/core/Hooks.php
+++ b/system/core/Hooks.php
@@ -54,6 +54,13 @@
 	public $hooks =	array();
 
 	/**
+	 * Array with class objects to use hooks methods
+	 *
+	 * @var array
+	 */
+	protected $_objects = array();
+
+	/**
 	 * In progress flag
 	 *
 	 * Determines whether hook is in progress, used to prevent infinte loops
@@ -195,15 +202,31 @@
 		// Call the requested class and/or function
 		if ($class !== FALSE)
 		{
-			class_exists($class, FALSE) OR require_once($filepath);
-
-			if ( ! class_exists($class, FALSE) OR ! method_exists($class, $function))
+			// The object is stored?
+			if (isset($this->_objects[$class]))
 			{
-				return $this->_in_progress = FALSE;
+				if (method_exists($this->_objects[$class], $function))
+				{
+					$this->_objects[$class]->$function($params);
+				}
+				else
+				{
+					return $this->_in_progress = FALSE;
+				}
 			}
+			else
+			{
+				class_exists($class, FALSE) OR require_once($filepath);
 
-			$HOOK = new $class();
-			$HOOK->$function($params);
+				if ( ! class_exists($class, FALSE) OR ! method_exists($class, $function))
+				{
+					return $this->_in_progress = FALSE;
+				}
+
+				// Store the object and execute the method
+				$this->_objects[$class] = new $class();
+				$this->_objects[$class]->$function($params);
+			}
 		}
 		else
 		{