Index: classes/Engine.class.php
===================================================================
--- classes/Engine.class.php	(revision 979)
+++ classes/Engine.class.php	(working copy)
@@ -121,14 +121,39 @@
 				$oProfiler=ProfilerSimple::getInstance();
 				$iTimeId=$oProfiler->Start('InitModule',get_class($oModule));
 
-				$oModule->Init();
-				$oModule->SetInit();
+				$this->InitModule($oModule);
 
 				$oProfiler->Stop($iTimeId);
 			}
 		}
 	}
 	
+	protected function InitModule($oModule){
+		$sOrigClassName = $sClassName = get_class($oModule);		
+		$bRunHooks = false;
+		
+		$aModuleHook = $this->GetModule('Hook_x');		
+		if($aModuleHook[0]->isInit()){
+			$bRunHooks = true;
+			while(preg_match('#^Plugin#i', $sClassName)){
+				$sParentClassName = get_parent_class($sClassName);
+				if($sParentClassName == 'Module'){
+					break;
+				}
+				$sClassName = $sParentClassName;
+			}
+		}
+		
+		if($bRunHooks){
+			$this->Hook_Run('module_init_'.$sClassName.'_before');
+		}
+		$oModule->Init();
+		$oModule->SetInit();
+		if($bRunHooks || $sClassName == 'ModuleHook'){
+			$this->Hook_Run('module_init_'.$sClassName.'_after');
+		}
+	}
+	
 	/**
 	 * Завершаем работу всех модулей
 	 *
@@ -160,11 +185,10 @@
 		 * Создаем объект модуля
 		 */		
 		$oModule=new $sModuleName($this);
-		if ($bInit or $sModuleName=='Cache') {
-			$oModule->Init();
-			$oModule->SetInit();
-		}
 		$this->aModules[$sModuleName]=$oModule;
+		if ($bInit or $sModuleName=='ModuleCache') {
+			$this->InitModule($oModule);
+		}		
 		$tm2=microtime(true);
 		$this->iTimeLoadModule+=$tm2-$tm1;
 		dump("load $sModuleName - \t\t".($tm2-$tm1)."");

