Index: core/install.php
===================================================================
--- core/install.php
+++ core/install.php
@@ -385,8 +385,8 @@
 
 					$next_preset = $this->Application->GetVar('next_preset');
 					if ($next_preset !== false) {
+						/** @var UserHelper $user_helper */
 						$user_helper = $this->Application->recallObject('UserHelper');
-						/* @var $user_helper UserHelper */
 
 						$username = $this->Application->GetVar('login');
 						$password = $this->Application->GetVar('password');
@@ -411,8 +411,8 @@
 								'domain' => base64_encode($_SERVER['HTTP_HOST']),
 							);
 
+							/** @var kCurlHelper $curl_helper */
 							$curl_helper = $this->Application->recallObject('CurlHelper');
-							/* @var $curl_helper kCurlHelper */
 
 							$curl_helper->SetRequestData($url_params);
 							$file_data = $curl_helper->Send(GET_LICENSE_URL);
@@ -473,8 +473,8 @@
 					fwrite($fp, "<?php\n\techo 'OK';\n");
 					fclose($fp);
 
+					/** @var kCurlHelper $curl_helper */
 					$curl_helper = $this->Application->recallObject('CurlHelper');
-					/* @var $curl_helper kCurlHelper */
 
 					$output = $curl_helper->Send($this->Application->BaseURL(WRITEBALE_BASE) . 'install_check.php');
 					unlink(WRITEABLE . '/install_check.php');
@@ -674,8 +674,8 @@
 						case 2: // Upload License File
 							$file_data = array_map('trim', file($_FILES['license_file']['tmp_name']));
 							if ((count($file_data) == 3) && $file_data[1]) {
+								/** @var kModulesHelper $modules_helper */
 								$modules_helper = $this->Application->recallObject('ModulesHelper');
-								/* @var $modules_helper kModulesHelper */
 
 								if ($modules_helper->verifyLicense($file_data[1])) {
 									$this->toolkit->systemConfig->set('License', 'Intechnic', $file_data[1]);
@@ -694,8 +694,8 @@
 						case 3: // Use Existing License
 							$license_hash = $this->toolkit->systemConfig->get('License', 'Intechnic');
 							if ($license_hash) {
+								/** @var kModulesHelper $modules_helper */
 								$modules_helper = $this->Application->recallObject('ModulesHelper');
-								/* @var $modules_helper kModulesHelper */
 
 								if (!$modules_helper->verifyLicense($license_hash)) {
 									$this->errorMessage = 'Invalid or corrupt license detected';
@@ -723,8 +723,8 @@
 					$license_password = $this->GetVar('password');
 					$license_id = $this->GetVar('licenses');
 
+					/** @var kCurlHelper $curl_helper */
 					$curl_helper = $this->Application->recallObject('CurlHelper');
-					/* @var $curl_helper kCurlHelper */
 
 					if (strlen($license_login) && strlen($license_password) && !$license_id) {
 						// Here we determine weather login is ok & check available licenses
@@ -795,8 +795,8 @@
 					break;
 
 				case 'select_domain':
+					/** @var kModulesHelper $modules_helper */
 					$modules_helper = $this->Application->recallObject('ModulesHelper');
-					/* @var $modules_helper kModulesHelper */
 
 					// get domain name as entered by user on the form
 					$domain = $this->GetVar('domain') == 1 ? $_SERVER['HTTP_HOST'] : str_replace(' ', '', $this->GetVar('other'));
@@ -841,8 +841,8 @@
 
 				case 'root_password':
 					// update root password in database
+					/** @var kPasswordFormatter $password_formatter */
 					$password_formatter = $this->Application->recallObject('kPasswordFormatter');
-					/* @var $password_formatter kPasswordFormatter */
 
 					$config_values = Array (
 						'RootPass' => $password_formatter->hashPassword($this->Application->GetVar('root_password')),
@@ -858,8 +858,8 @@
 
 					$this->toolkit->saveConfigValues($config_values);
 
+					/** @var UserHelper $user_helper */
 					$user_helper = $this->Application->recallObject('UserHelper');
-					/* @var $user_helper UserHelper */
 
 					// login as "root", when no errors on password screen
 					$user_helper->loginUser('root', $this->Application->GetVar('root_password'));
@@ -871,8 +871,8 @@
 					$this->Application->Session->SetField('Language', 1);
 
 					// set imported language as primary
+					/** @var LanguagesItem $lang */
 					$lang = $this->Application->recallObject('lang.-item', null, Array('skip_autoload' => true));
-					/* @var $lang LanguagesItem */
 
 					$lang->Load(1); // fresh install => ID=1
 					$lang->setPrimary(true); // for Front-End
@@ -891,8 +891,8 @@
 					}
 
 					// update category cache
+					/** @var kPermCacheUpdater $updater */
 					$updater = $this->Application->makeClass('kPermCacheUpdater');
-					/* @var $updater kPermCacheUpdater */
 
 					$updater->OneStepRun();
 					break;
@@ -922,8 +922,8 @@
 						$theme_name = $this->Conn->GetOne($sql);
 						$site_path = $this->toolkit->systemConfig->get('WebsitePath','Misc') . '/';
 
+						/** @var FileHelper $file_helper */
 						$file_helper = $this->Application->recallObject('FileHelper');
-						/* @var $file_helper FileHelper */
 
 						foreach ($this->Application->ModuleInfo as $module_name => $module_info) {
 							if ($module_name == 'In-Portal') {
@@ -998,8 +998,8 @@
 						}
 
 						// 3. update all theme language packs
+						/** @var kThemesHelper $themes_helper */
 						$themes_helper = $this->Application->recallObject('ThemesHelper');
-						/* @var $themes_helper kThemesHelper */
 
 						$themes_helper->synchronizeModule(false);
 
@@ -1026,11 +1026,11 @@
 					$this->toolkit->rebuildThemes();
 
 					// compile admin skin, so it will be available in 3 frames at once
+					/** @var SkinHelper $skin_helper */
 					$skin_helper = $this->Application->recallObject('SkinHelper');
-					/* @var $skin_helper SkinHelper */
 
+					/** @var kDBItem $skin */
 					$skin = $this->Application->recallObject('skin', null, Array ('skip_autoload' => true));
-					/* @var $skin kDBItem */
 
 					$skin->Load(1, 'IsPrimary');
 					$skin_helper->compile($skin);
@@ -1058,8 +1058,8 @@
 
 			if ($this->currentStep == -1) {
 				// step after last step -> redirect to admin
+                /** @var UserHelper $user_helper */
                 $user_helper = $this->Application->recallObject('UserHelper');
-                /* @var $user_helper UserHelper */
 
                 $user_helper->logoutUser();
 
@@ -1244,8 +1244,8 @@
 				$upgrade_classes[$module_path] = $upgrade_class;
 			}
 
+			/** @var CoreUpgrades $upgrade_object */
 			$upgrade_object = new $upgrade_classes[$module_path]();
-			/* @var $upgrade_object CoreUpgrades */
 
 			$upgrade_object->setToolkit($this->toolkit);
 
Index: core/install/install_toolkit.php
===================================================================
--- core/install/install_toolkit.php
+++ core/install/install_toolkit.php
@@ -114,8 +114,8 @@
 				return Array ();
 			}
 
+			/** @var InPortalPrerequisites $prerequisite_object */
 			$prerequisite_object =& $this->getPrerequisiteObject($module_path);
-			/* @var $prerequisite_object InPortalPrerequisites */
 
 			// some errors possible
 			return is_object($prerequisite_object) ? $prerequisite_object->CheckPrerequisites($versions, $mode) : Array ();
@@ -130,8 +130,8 @@
 		 */
 		function CallPrerequisitesMethod($module_path, $method)
 		{
+			/** @var InPortalPrerequisites $prerequisite_object */
 			$prerequisite_object =& $this->getPrerequisiteObject($module_path);
-			/* @var $prerequisite_object InPortalPrerequisites */
 
 			return is_object($prerequisite_object) ? $prerequisite_object->$method() : false;
 		}
@@ -161,8 +161,8 @@
 				$prerequisite_classes[$module_path] = $prerequisite_class;
 			}
 
+			/** @var InPortalPrerequisites $prerequisite_object */
 			$prerequisite_object = new $prerequisite_classes[$module_path]();
-			/* @var $prerequisite_object InPortalPrerequisites */
 
 			if ( method_exists($prerequisite_object, 'setToolkit') ) {
 				$prerequisite_object->setToolkit($this);
@@ -178,8 +178,8 @@
 		 */
 		function processLicense($file_data)
 		{
+			/** @var kModulesHelper $modules_helper */
 			$modules_helper = $this->Application->recallObject('ModulesHelper');
-			/* @var $modules_helper kModulesHelper */
 
 			$file_data = explode('Code==:', $file_data);
 			$file_data[0] = str_replace('In-Portal License File - do not edit!' . "\n", '', $file_data[0]);
@@ -413,8 +413,8 @@
 				return ;
 			}
 
+			/** @var LanguageImportHelper $language_import_helper */
 			$language_import_helper = $this->Application->recallObject('LanguageImportHelper');
-			/* @var $language_import_helper LanguageImportHelper */
 
 			$language_import_helper->performImport($lang_file, '|0|1|2|', '', $upgrade ? LANG_SKIP_EXISTING : LANG_OVERWRITE_EXISTING);
 		}
@@ -529,6 +529,7 @@
 			}
 
 			$ret = Array ();
+			/** @var SimpleXMLElement[] $module_info */
 			$module_info = simplexml_load_file($info_file);
 
 			if ( $module_info === false ) {
@@ -537,7 +538,6 @@
 			}
 
 			foreach ($module_info as $node) {
-				/* @var $node SimpleXMLElement */
 				$ret[strtolower($node->getName())] = trim($node);
 			}
 
@@ -602,15 +602,15 @@
 			static $fields = null;
 
 			if ( !isset($fields) ) {
+				/** @var kMultiLanguage $ml_formatter */
 				$ml_formatter = $this->Application->recallObject('kMultiLanguage');
-				/* @var $ml_formatter kMultiLanguage */
 
 				$fields['name'] = $ml_formatter->LangFieldName('Name');
 				$fields['description'] = $ml_formatter->LangFieldName('Description');
 			}
 
+			/** @var kDBItem $category */
 			$category = $this->Application->recallObject('c', null, Array ('skip_autoload' => true));
-			/* @var $category kDBItem */
 
 			$category_fields = Array (
 				$fields['name'] => $name, 'Filename' => $name, 'AutomaticFilename' => 1,
@@ -637,8 +637,8 @@
 
 			$category->Create();
 
+			/** @var kPriorityHelper $priority_helper */
 			$priority_helper = $this->Application->recallObject('PriorityHelper');
-			/* @var $priority_helper kPriorityHelper */
 
 			$event = new kEvent('c:OnListBuild');
 
@@ -708,8 +708,8 @@
 			$this->Application->UnitConfigReader->scanModules(MODULES_PATH . DIRECTORY_SEPARATOR . $module_folder);
 
 			// create correct columns in CustomData table
+			/** @var kMultiLanguageHelper $ml_helper */
 			$ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
-			/* @var $ml_helper kMultiLanguageHelper */
 
 			$ml_helper->createFields($prefix . '-cdata', true);
 		}
@@ -734,8 +734,8 @@
 
 				if ( $rebuild_mode == CategoryPermissionRebuild::SILENT ) {
 					// refresh permission without progress bar
+					/** @var kPermCacheUpdater $updater */
 					$updater = $this->Application->makeClass('kPermCacheUpdater');
-					/* @var $updater kPermCacheUpdater */
 
 					$updater->OneStepRun();
 				}
@@ -779,8 +779,8 @@
 				return ;
 			}
 
+			/** @var kThemesHelper $themes_helper */
 			$themes_helper = $this->Application->recallObject('ThemesHelper');
-			/* @var $themes_helper kThemesHelper */
 
 			// use direct query, since module isn't yet in kApplication::ModuleInfo array
 			$sql = 'SELECT Name
@@ -790,8 +790,8 @@
 
 			$themes_helper->synchronizeModule($module_name);
 
+			/** @var kMultiLanguageHelper $ml_helper */
 			$ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
-			/* @var $ml_helper kMultiLanguageHelper */
 
 			$ml_helper->massCreateFields();
 
@@ -870,8 +870,8 @@
 				return true;
 			}
 
+			/** @var kDBItem $primary_skin */
 			$primary_skin = $this->Application->recallObject('skin.primary', null, Array ('skip_autoload' => true));
-			/* @var $primary_skin kDBItem */
 
 			$primary_skin->Load(1, 'IsPrimary');
 
@@ -880,8 +880,8 @@
 				return false;
 			}
 
+			/** @var kTempTablesHandler $temp_handler */
 			$temp_handler = $this->Application->recallObject('skin_TempHandler', 'kTempTablesHandler');
-			/* @var $temp_handler kTempTablesHandler */
 
 			// clone current skin
 			$cloned_ids = $temp_handler->CloneItems('skin', '', Array ($primary_skin->GetID()));
@@ -891,8 +891,8 @@
 				return false;
 			}
 
+			/** @var kDBItem $skin */
 			$skin = $this->Application->recallObject('skin.tmp', null, Array ('skip_autoload' => true));
-			/* @var $skin kDBItem */
 
 			$skin->Load($cloned_ids[0]);
 
@@ -980,8 +980,8 @@
 					unset($cache_handlers[$class_prefix]);
 				}
 				else {
+					/** @var FakeCacheHandler $handler */
 					$handler = new $handler_class($cache_handler, 'localhost:11211');
-					/* @var $handler FakeCacheHandler */
 
 					if ( !$handler->isWorking() ) {
 						if ( $current == $class_prefix ) {
Index: core/install/upgrade_helper.php
===================================================================
--- core/install/upgrade_helper.php
+++ core/install/upgrade_helper.php
@@ -53,8 +53,8 @@
 					WHERE FieldName = "' . $prefix . '_ItemTemplate"';
 			$custom_field_id = $this->Conn->GetOne($sql);
 
+			/** @var kMultiLanguage $ml_formatter */
 			$ml_formatter = $this->Application->recallObject('kMultiLanguage');
-			/* @var $ml_formatter kMultiLanguage */
 
 			$field = $ml_formatter->LangFieldName('cust_' . $custom_field_id, true);
 
Index: core/install/upgrades.php
===================================================================
--- core/install/upgrades.php
+++ core/install/upgrades.php
@@ -70,8 +70,8 @@
 			}
 
 			if ($mode == 'after') {
+				/** @var kMultiLanguageHelper $ml_helper */
 				$ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
-				/* @var $ml_helper kMultiLanguageHelper */
 
 				$this->Application->UnitConfigReader->iterateConfigs(Array (&$this, 'updateTextFields'), $ml_helper->getLanguages());
 			}
@@ -658,8 +658,8 @@
 			// Tables: PageContent, Images
 			if ($this->Conn->TableFound('PageContent', true)) {
 				// 1. replaces "/kernel/user_files/" references in content blocks
+				/** @var kMultiLanguageHelper $ml_helper */
 				$ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
-				/* @var $ml_helper kMultiLanguageHelper */
 
 				$languages = $ml_helper->getLanguages();
 				$replace_sql = '%1$s = REPLACE(%1$s, "/kernel/user_files/", "/system/user_files/")';
@@ -844,8 +844,8 @@
 
 			// make sure, that all categories have valid value for Priority field
 
+			/** @var kPriorityHelper $priority_helper */
 			$priority_helper = $this->Application->recallObject('PriorityHelper');
-			/* @var $priority_helper kPriorityHelper */
 
 			$event = new kEvent('c:OnListBuild');
 
@@ -881,8 +881,8 @@
 		 */
 		function _fixSkinColors()
 		{
+			/** @var kDBItem $skin */
 			$skin = $this->Application->recallObject('skin', null, Array ('skip_autoload' => 1));
-			/* @var $skin kDBItem */
 
 			$skin->Load(1, 'IsPrimary');
 			if ($skin->isLoaded()) {
@@ -915,8 +915,8 @@
 					$skin->SetDBField('Options', serialize($skin_options));
 					$skin->Update();
 
+					/** @var SkinHelper $skin_helper */
 					$skin_helper = $this->Application->recallObject('SkinHelper');
-					/* @var $skin_helper SkinHelper */
 
 					$skin_file = $skin_helper->getSkinPath();
 					if (file_exists($skin_file)) {
@@ -1335,8 +1335,8 @@
 				}
 
 				// replace data in category custom fields used for category item template storage
+				/** @var kRewriteUrlProcessor $rewrite_processor */
 				$rewrite_processor = $this->Application->recallObject('kRewriteUrlProcessor');
-				/* @var $rewrite_processor kRewriteUrlProcessor */
 
 				foreach ($this->Application->ModuleInfo as $module_name => $module_info) {
 					$custom_field_id = $rewrite_processor->getItemTemplateCustomField($module_info['Var']);
@@ -1435,8 +1435,8 @@
 					}
 				}
 
+				/** @var kPermCacheUpdater $updater */
 				$updater = $this->Application->makeClass('kPermCacheUpdater');
-				/* @var $updater kPermCacheUpdater */
 
 				$updater->OneStepRun();
 			}
@@ -1481,16 +1481,16 @@
 				$this->Conn->Query($sql);
 
 				// create multilingual fields for phrases and email events
+				/** @var kMultiLanguageHelper $ml_helper */
 				$ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
-				/* @var $ml_helper kMultiLanguageHelper */
 
 				$ml_helper->createFields('phrases');
 				$ml_helper->createFields('email-template');
 				$languages = $ml_helper->getLanguages();
 
 				if ($this->Conn->TableFound(TABLE_PREFIX . 'EmailMessage', true)) {
+					/** @var kEmailTemplateHelper $email_template_helper */
 					$email_template_helper = $this->Application->recallObject('kEmailTemplateHelper');
-					/* @var $email_template_helper kEmailTemplateHelper */
 
 					foreach ($languages as $language_id) {
 						$sql = 'SELECT EmailMessageId, Template, EventId
@@ -1618,8 +1618,8 @@
 						ADD INDEX (StateCountryId)';
 			$this->Conn->Query($sql);
 
+			/** @var kMultiLanguageHelper $ml_helper */
 			$ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
-			/* @var $ml_helper kMultiLanguageHelper */
 
 			$ml_helper->createFields('country-state');
 			$languages = $ml_helper->getLanguages();
@@ -1649,8 +1649,8 @@
 		 */
 		function _replaceConfigurationValueSeparator()
 		{
+			/** @var InpCustomFieldsHelper $custom_field_helper */
 			$custom_field_helper = $this->Application->recallObject('InpCustomFieldsHelper');
-			/* @var $custom_field_helper InpCustomFieldsHelper */
 
 			$sql = 'SELECT ValueList, VariableName
 					FROM ' . TABLE_PREFIX . 'ConfigurationAdmin
@@ -1689,8 +1689,8 @@
 					WHERE FromUserId IS NOT NULL AND (FromUserId <> ' . USER_ROOT . ')';
 			$events = $this->Conn->Query($sql, 'EventId');
 
+			/** @var MInputHelper $minput_helper */
 			$minput_helper = $this->Application->recallObject('MInputHelper');
-			/* @var $minput_helper MInputHelper */
 
 			foreach ($events as $event_id => $event_data) {
 				$sql = 'SELECT Login
@@ -1949,8 +1949,8 @@
 			$source_phrases = $this->getPhrasesByMask($source_prefix . '%');
 			$target_phrases = $this->getPhrasesByMask($target_prefix . '%');
 
+			/** @var kMultiLanguageHelper $ml_helper */
 			$ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
-			/* @var $ml_helper kMultiLanguageHelper */
 
 			$delete_ids = Array ();
 			$ml_helper->createFields('phrases');
@@ -2068,8 +2068,8 @@
 				return;
 			}
 
+			/** @var kMultiLanguageHelper $ml_helper */
 			$ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
-			/* @var $ml_helper kMultiLanguageHelper */
 
 			$languages = $ml_helper->getLanguages();
 			$ml_helper->createFields('email-template');
@@ -2111,8 +2111,8 @@
 		 */
 		private function _migrateCommonFooter()
 		{
+			/** @var kMultiLanguageHelper $ml_helper */
 			$ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
-			/* @var $ml_helper kMultiLanguageHelper */
 
 			$languages = $ml_helper->getLanguages();
 
@@ -2174,8 +2174,8 @@
 				return;
 			}
 
+			/** @var kMultiLanguageHelper $ml_helper */
 			$ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
-			/* @var $ml_helper kMultiLanguageHelper */
 
 			// make some promo block fields translatable
 			$ml_helper->createFields('promo-block');
@@ -2331,8 +2331,8 @@
 
 			kUtil::setResourceLimit();
 
+			/** @var kPasswordFormatter $password_formatter */
 			$password_formatter = $this->Application->recallObject('kPasswordFormatter');
-			/* @var $password_formatter kPasswordFormatter */
 
 			foreach ($user_passwords as $user_id => $user_password) {
 				$fields_hash = Array (
Index: core/kernel/application.php
===================================================================
--- core/kernel/application.php
+++ core/kernel/application.php
@@ -450,8 +450,8 @@
 		}
 
 		// use makeClass over recallObject, since used before kApplication initialization during installation
+		/** @var kModulesHelper $modules_helper */
 		$modules_helper = $this->makeClass('ModulesHelper');
-		/* @var $modules_helper kModulesHelper */
 
 		$this->Conn->nextQueryCachable = true;
 		$sql = 'SELECT *
@@ -667,7 +667,7 @@
 
 		if ( !$this->siteDomain ) {
 			$this->siteDomain = $this->recallObject('site-domain.current', null, Array ('live_table' => true));
-			/* @var $site_domain kDBItem */
+			/** @var kDBItem $site_domain */
 		}
 
 		if ( $this->siteDomain->isLoaded() ) {
@@ -1033,8 +1033,8 @@
 			}
 		}
 		elseif ( $this->GetVar('admin') ) {
+			/** @var Session $admin_session */
 			$admin_session = $this->recallObject('Session.admin');
-			/* @var $admin_session Session */
 
 			// store Admin Console User's ID to Front-End's session for cross-session permission checks
 			$this->StoreVar('admin_user_id', (int)$admin_session->RecallVar('user_id'));
@@ -1055,8 +1055,8 @@
 		$t = $this->GetVar('render_template', $this->GetVar('t'));
 
 		if ( !$this->TemplatesCache->TemplateExists($t) && !$this->isAdmin ) {
+			/** @var CategoriesEventHandler $cms_handler */
 			$cms_handler = $this->recallObject('st_EventHandler');
-			/* @var $cms_handler CategoriesEventHandler */
 
 			$t = ltrim($cms_handler->GetDesignTemplate(), '/');
 
@@ -1335,8 +1335,8 @@
 	 */
 	public function GetSID()
 	{
+		/** @var Session $session */
 		$session = $this->recallObject('Session');
-		/* @var $session Session */
 
 		return $session->GetID();
 	}
@@ -1350,8 +1350,8 @@
 	 */
 	public function DestroySession()
 	{
+		/** @var Session $session */
 		$session = $this->recallObject('Session');
-		/* @var $session Session */
 
 		$session->Destroy();
 	}
@@ -1521,8 +1521,8 @@
 	 */
 	public function StoreVar($var, $val, $optional = false)
 	{
+		/** @var Session $session */
 		$session = $this->recallObject('Session');
-		/* @var $session Session */
 
 		$this->Session->StoreVar($var, $val, $optional);
 	}
@@ -1554,8 +1554,8 @@
 	 */
 	public function StoreVarDefault($var, $val, $optional = false)
 	{
+		/** @var Session $session */
 		$session = $this->recallObject('Session');
-		/* @var $session Session */
 
 		$this->Session->StoreVarDefault($var, $val, $optional);
 	}
@@ -1623,8 +1623,8 @@
 	 */
 	public function ProcessParsedTag($prefix, $tag, $params)
 	{
+		/** @var kDBTagProcessor $processor */
 		$processor = $this->Parser->GetProcessor($prefix);
-		/* @var $processor kDBTagProcessor */
 
 		return $processor->ProcessParsedTag($tag, $params, $prefix);
 	}
@@ -1919,8 +1919,8 @@
 
 		// session expiration is called from session initialization,
 		// that's why $this->Session may be not defined here
+		/** @var Session $session */
 		$session = $this->recallObject('Session');
-		/* @var $session Session */
 
 		if ( $this->InitDone ) {
 			// if redirect happened in the middle of application initialization don't call event,
@@ -2000,8 +2000,8 @@
 	 */
 	protected function ValidateLogin()
 	{
+		/** @var Session $session */
 		$session = $this->recallObject('Session');
-		/* @var $session Session */
 
 		$user_id = $session->GetField('PortalUserId');
 
@@ -2022,8 +2022,8 @@
 
 		if ( $this->GetVar('expired') == 1 ) {
 			// this parameter is set only from admin
+			/** @var UsersItem $user */
 			$user = $this->recallObject('u.login-admin', null, Array ('form_name' => 'login'));
-			/* @var $user UsersItem */
 
 			$user->SetError('UserLogin', 'session_expired', 'la_text_sess_expired');
 		}
@@ -2210,8 +2210,8 @@
 	 */
 	public function registerAggregateTag($tag_info)
 	{
+		/** @var kArray $aggregator */
 		$aggregator = $this->recallObject('TagsAggregator', 'kArray');
-		/* @var $aggregator kArray */
 
 		$tag_data = Array (
 			$tag_info['LocalPrefix'],
@@ -2535,8 +2535,8 @@
 	 */
 	protected function _email($email_template_name, $email_template_type, $to_user_id = null, $send_params = Array ())
 	{
+		/** @var kEmail $email */
 		$email = $this->makeClass('kEmail');
-		/* @var $email kEmail */
 
 		if ( !$email->findTemplate($email_template_name, $email_template_type) ) {
 			return false;
@@ -2570,8 +2570,8 @@
 	 */
 	public function CheckPermission($name, $type = 1, $cat_id = null)
 	{
+		/** @var kPermissionsHelper $perm_helper */
 		$perm_helper = $this->recallObject('PermissionsHelper');
-		/* @var $perm_helper kPermissionsHelper */
 
 		return $perm_helper->CheckPermission($name, $type, $cat_id);
 	}
@@ -2587,8 +2587,8 @@
 	 */
 	public function CheckAdminPermission($name, $type = 1, $cat_id = null)
 	{
+		/** @var kPermissionsHelper $perm_helper */
 		$perm_helper = $this->recallObject('PermissionsHelper');
-		/* @var $perm_helper kPermissionsHelper */
 
 		return $perm_helper->CheckAdminPermission($name, $type, $cat_id);
 	}
@@ -2609,8 +2609,8 @@
 			return;
 		}
 
+		/** @var kDBItem $visit */
 		$visit = $this->recallObject('visits', null, Array ('raise_warnings' => 0));
-		/* @var $visit kDBItem */
 
 		if ( $visit->isLoaded() ) {
 			$visit->SetDBField($field, $value);
@@ -2858,8 +2858,8 @@
 	 */
 	public function getCounter($name, $params = Array (), $query_name = null, $multiple_results = false)
 	{
+		/** @var kCountHelper $count_helper */
 		$count_helper = $this->recallObject('CountHelper');
-		/* @var $count_helper kCountHelper */
 
 		return $count_helper->getCounter($name, $params, $query_name, $multiple_results);
 	}
@@ -2877,8 +2877,8 @@
 			return;
 		}
 
+		/** @var kCountHelper $count_helper */
 		$count_helper = $this->recallObject('CountHelper');
-		/* @var $count_helper kCountHelper */
 
 		$count_helper->resetCounters($tables);
 	}
Index: core/kernel/db/cat_dbitem.php
===================================================================
--- core/kernel/db/cat_dbitem.php
+++ core/kernel/db/cat_dbitem.php
@@ -283,8 +283,8 @@
 					WHERE ResourceId = %s';
 			$ids = $this->Conn->GetCol(sprintf($sql, $id_field, $this->TableName, $resource_id));
 
+			/** @var kTempTablesHandler $temp_handler */
 			$temp_handler = $this->Application->recallObject($this->getPrefixSpecial() . '_TempHandler', 'kTempTablesHandler');
-			/* @var $temp_handler kTempTablesHandler */
 
 			$temp_handler->DeleteItems($this->Prefix, $this->Special, $ids);
 		}
@@ -313,8 +313,8 @@
 	 */
 	function stripDisallowed($filename)
 	{
+		/** @var kFilenamesHelper $filenames_helper */
 		$filenames_helper = $this->Application->recallObject('FilenamesHelper');
-		/* @var $filenames_helper kFilenamesHelper */
 
 		$table = $this->IsTempTable() ? $this->Application->GetTempName(TABLE_PREFIX.'CategoryItems', 'prefix:'.$this->Prefix) : TABLE_PREFIX.'CategoryItems';
 
@@ -517,8 +517,8 @@
 
 		if ( $this->raiseEvent('OnBeforeDeleteOriginal', null, Array ('original_id' => $original_id)) ) {
 			// delete original item, because changes made in pending copy (this item) got to be approved in this method
+			/** @var kTempTablesHandler $temp_handler */
 			$temp_handler = $this->Application->recallObject($this->getPrefixSpecial() . '_TempHandler', 'kTempTablesHandler');
-			/* @var $temp_handler kTempTablesHandler */
 
 			$temp_handler->DeleteItems($this->Prefix, $this->Special, Array ($original_id));
 
@@ -546,8 +546,8 @@
 		}
 
 		// delete this item, because changes made in pending copy (this item) will be declined in this method
+		/** @var kTempTablesHandler $temp_handler */
 		$temp_handler = $this->Application->recallObject($this->getPrefixSpecial() . '_TempHandler', 'kTempTablesHandler');
-		/* @var $temp_handler kTempTablesHandler */
 
 		$temp_handler->DeleteItems($this->Prefix, $this->Special, Array ($this->GetID()));
 
Index: core/kernel/db/cat_event_handler.php
===================================================================
--- core/kernel/db/cat_event_handler.php
+++ core/kernel/db/cat_event_handler.php
@@ -53,14 +53,14 @@
 	 */
 	protected function LoadItem(kEvent $event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$id = $this->getPassedID($event);
 
 		if ( $object->Load($id) ) {
+			/** @var Params $actions */
 			$actions = $this->Application->recallObject('kActions');
-			/* @var $actions Params */
 
 			$actions->Set($event->getPrefixSpecial() . '_id', $object->GetID());
 
@@ -99,8 +99,8 @@
 		if ( in_array($event->Name, $this->_getMassPermissionEvents()) ) {
 			$items = $this->_getPermissionCheckInfo($event);
 
+			/** @var kPermissionsHelper $perm_helper */
 			$perm_helper = $this->Application->recallObject('PermissionsHelper');
-			/* @var $perm_helper kPermissionsHelper */
 
 			if ( ($event->Name == 'OnSave') && array_key_exists(0, $items) ) {
 				// adding new item (ID = 0)
@@ -192,8 +192,8 @@
 	 */
 	function _getPermissionCheckInfo($event)
 	{
+		/** @var kPermissionsHelper $perm_helper */
 		$perm_helper = $this->Application->recallObject('PermissionsHelper');
-		/* @var $perm_helper kPermissionsHelper */
 
 		// when saving data from temp table to live table check by data from temp table
 		$item_ids = $this->_getPermissionCheckIDs($event);
@@ -231,8 +231,8 @@
 	{
 		$this->Application->RemoveVar('clipboard');
 
+		/** @var kClipboardHelper $clipboard_helper */
 		$clipboard_helper = $this->Application->recallObject('ClipboardHelper');
-		/* @var $clipboard_helper kClipboardHelper */
 
 		$clipboard_helper->setClipboard($event, 'copy', $this->StoreSelectedIDs($event));
 		$this->clearSelectedIDs($event);
@@ -248,8 +248,9 @@
 	protected function OnCut($event)
 	{
 		$this->Application->RemoveVar('clipboard');
+
+		/** @var kClipboardHelper $clipboard_helper */
 		$clipboard_helper = $this->Application->recallObject('ClipboardHelper');
-		/* @var $clipboard_helper kClipboardHelper */
 
 		$clipboard_helper->setClipboard($event, 'cut', $this->StoreSelectedIDs($event));
 		$this->clearSelectedIDs($event);
@@ -263,8 +264,8 @@
 	 */
 	function _checkPastePermission($event)
 	{
+		/** @var kPermissionsHelper $perm_helper */
 		$perm_helper = $this->Application->recallObject('PermissionsHelper');
-		/* @var $perm_helper kPermissionsHelper */
 
 		$category_id = $this->Application->GetVar('m_cat_id');
 		if ($perm_helper->AddCheckPermission($category_id, $event->Prefix) == 0) {
@@ -296,16 +297,16 @@
 		}
 
 		if ( $clipboard_data['copy'] ) {
+			/** @var kTempTablesHandler $temp */
 			$temp = $this->Application->recallObject($event->getPrefixSpecial() . '_TempHandler', 'kTempTablesHandler');
-			/* @var $temp kTempTablesHandler */
 
 			$this->Application->SetVar('ResetCatBeforeClone', 1); // used in "kCatDBEventHandler::OnBeforeClone"
 			$temp->CloneItems($event->Prefix, $event->Special, $clipboard_data['copy']);
 		}
 
 		if ( $clipboard_data['cut'] ) {
+			/** @var kCatDBItem $object */
 			$object = $this->Application->recallObject($event->getPrefixSpecial() . '.item', $event->Prefix, Array ('skip_autoload' => true));
-			/* @var $object kCatDBItem */
 
 			foreach ($clipboard_data['cut'] as $id) {
 				$object->Load($id);
@@ -336,13 +337,13 @@
 		$recycle_bin = $this->Application->ConfigValue('RecycleBinFolder');
 
 		if ( $recycle_bin ) {
+			/** @var CategoriesItem $rb */
 			$rb = $this->Application->recallObject('c.recycle', NULL, array ('skip_autoload' => true));
-			/* @var $rb CategoriesItem */
 
 			$rb->Load($recycle_bin);
 
+			/** @var kCatDBItem $object */
 			$object = $this->Application->recallObject($event->Prefix . '.recycleitem', NULL, Array ('skip_autoload' => true));
-			/* @var $object kCatDBItem */
 
 			foreach ($ids as $id) {
 				$object->Load($id);
@@ -358,8 +359,8 @@
 			$ids = $to_delete;
 		}
 
+		/** @var kTempTablesHandler $temp_handler */
 		$temp_handler = $this->Application->recallObject($event->getPrefixSpecial() . '_TempHandler', 'kTempTablesHandler');
-		/* @var $temp_handler kTempTablesHandler */
 
 		$event->setEventParam('ids', $ids);
 		$this->customProcessing($event, 'before');
@@ -441,8 +442,8 @@
 			$search_event = $event_mapping[$type];
 			$this->$search_event($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			/** @var kSearchHelper $search_helper */
 			$search_helper = $this->Application->recallObject('SearchHelper');
@@ -491,8 +492,8 @@
 				$processed_prefix = $this->Application->processPrefix($prefix_special);
 				if ($processed_prefix['prefix'] == $related_prefix) {
 					// printing related categories within list of items (not on details page)
+					/** @var kDBList $list */
 					$list = $this->Application->recallObject($prefix_special);
-					/* @var $list kDBList */
 
 					$id = $list->GetID();
 				}
@@ -508,8 +509,8 @@
 				}
 			}
 
+			/** @var kCatDBItem $p_item */
 			$p_item = $this->Application->recallObject($related_prefix.'.current', NULL, Array('skip_autoload' => true));
-			/* @var $p_item kCatDBItem */
 
 			$p_item->Load( (int)$id );
 
@@ -600,8 +601,8 @@
 	{
 		parent::SetCustomQuery($event);
 
+		/** @var kCatDBList $object */
 		$object = $event->getObject();
-		/* @var $object kCatDBList */
 
 		// add category filter if needed
 		if ($event->Special != 'showall' && $event->Special != 'user') {
@@ -663,8 +664,8 @@
 		$except_types = $event->getEventParam('except');
 		$type_clauses = $this->getTypeClauses($event);
 
+		/** @var kSearchHelper $search_helper */
 		$search_helper = $this->Application->recallObject('SearchHelper');
-		/* @var $search_helper kSearchHelper */
 
 		$search_helper->SetComplexFilter($event, $type_clauses, $types, $except_types);
 	}
@@ -689,8 +690,8 @@
 		}
 		else {
 			// for any real user item list view permission is checked instead of CATEGORY.VIEW
+			/** @var kCountHelper $count_helper */
 			$count_helper = $this->Application->recallObject('CountHelper');
-			/* @var $count_helper kCountHelper */
 
 			list ($view_perm, $view_filter) = $count_helper->GetPermissionClause($object->Prefix, 'perm');
 			$object->addFilter('perm_filter2', $view_filter);
@@ -773,8 +774,8 @@
 		$object->addCalculatedField('CachedNavbar', 'l' . $this->Application->GetVar('m_lang') . '_CachedNavbar');
 
 		if ( $event->Special == 'export' || $event->Special == 'import' ) {
+			/** @var kCatDBItemExportHelper $export_helper */
 			$export_helper = $this->Application->recallObject('CatItemExportHelper');
-			/* @var $export_helper kCatDBItemExportHelper */
 
 			$export_helper->prepareExportColumns($event);
 		}
@@ -878,8 +879,8 @@
 	{
 		parent::OnBeforeItemUpdate($event);
 
+		/** @var kCatDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kCatDBItem */
 
 		// update hits field
 		$property_map = $this->Application->getUnitOption($event->Prefix, 'ItemPropertyMappings');
@@ -917,8 +918,8 @@
 
 		$special = substr($event->Special, -6);
 
+		/** @var kCatDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kCatDBItem */
 
 		if ( $special == 'import' || $special == 'export' ) {
 			$image_data = $object->getPrimaryImageData();
@@ -956,14 +957,14 @@
 
 		if ( !$this->Application->isAdmin ) {
 			// linking existing images for item with virtual fields
+			/** @var ImageHelper $image_helper */
 			$image_helper = $this->Application->recallObject('ImageHelper');
-			/* @var $image_helper ImageHelper */
 
 			$image_helper->LoadItemImages($object);
 
 			// linking existing files for item with virtual fields
+			/** @var FileHelper $file_helper */
 			$file_helper = $this->Application->recallObject('FileHelper');
-			/* @var $file_helper FileHelper */
 
 			$file_helper->LoadItemFiles($object);
 		}
@@ -992,18 +993,18 @@
 			$this->setCustomExportColumns($event);
 		}
 
+		/** @var kCatDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kCatDBItem */
 
 		if ( !$this->Application->isAdmin ) {
+			/** @var ImageHelper $image_helper */
 			$image_helper = $this->Application->recallObject('ImageHelper');
-			/* @var $image_helper ImageHelper */
 
 			// process image upload in virtual fields
 			$image_helper->SaveItemImages($object);
 
+			/** @var FileHelper $file_helper */
 			$file_helper = $this->Application->recallObject('FileHelper');
-			/* @var $file_helper FileHelper */
 
 			// process file upload in virtual fields
 			$file_helper->SaveItemFiles($object);
@@ -1046,8 +1047,8 @@
 	{
 		parent::OnAfterItemCreate($event);
 
+		/** @var kCatDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kCatDBItem */
 
 		if ( substr($event->Special, -6) == 'import' ) {
 			$this->setCustomExportColumns($event);
@@ -1056,14 +1057,14 @@
 		$object->assignPrimaryCategory();
 
 		if ( !$this->Application->isAdmin ) {
+			/** @var ImageHelper $image_helper */
 			$image_helper = $this->Application->recallObject('ImageHelper');
-			/* @var $image_helper ImageHelper */
 
 			// process image upload in virtual fields
 			$image_helper->SaveItemImages($object);
 
+			/** @var FileHelper $file_helper */
 			$file_helper = $this->Application->recallObject('FileHelper');
-			/* @var $file_helper FileHelper */
 
 			// process file upload in virtual fields
 			$file_helper->SaveItemFiles($object);
@@ -1111,8 +1112,8 @@
 
 		$keywords = $this->Application->unescapeRequestVariable(trim($this->Application->GetVar('keywords')));
 
+		/** @var kHTTPQuery $query_object */
 		$query_object = $this->Application->recallObject('HTTPQuery');
-		/* @var $query_object kHTTPQuery */
 
 		/** @var kSearchHelper $search_helper */
 		$search_helper = $this->Application->recallObject('SearchHelper');
@@ -1139,8 +1140,8 @@
 
 		$event->setPseudoClass('_List');
 
+		/** @var kDBList $object */
 		$object = $event->getObject();
-		/* @var $object kDBList */
 
 		$this->Application->SetVar($event->getPrefixSpecial().'_Page', 1);
 		$lang = $this->Application->GetVar('m_lang');
@@ -1430,8 +1431,8 @@
 	 */
 	function OnAdvancedSearch($event)
 	{
+		/** @var kHTTPQuery $query_object */
 		$query_object = $this->Application->recallObject('HTTPQuery');
-		/* @var $query_object kHTTPQuery */
 
 		if ( !isset($query_object->Post['andor']) ) {
 			// used when navigating by pages or changing sorting in search results
@@ -1450,8 +1451,8 @@
 
 		$lang = $this->Application->GetVar('m_lang');
 
+		/** @var kDBList $object */
 		$object = $event->getObject();
-		/* @var $object kDBList */
 
 		$object->SetPage(1);
 
@@ -1803,9 +1804,9 @@
 	protected function getHuman($type, $search_data)
 	{
 		// all 3 variables are retrieved from $search_data array
-		/* @var $search_config Array */
-		/* @var $verb string */
-		/* @var $value string */
+		/** @var Array $search_config */
+		/** @var string $verb */
+		/** @var string $value */
 
 		$type = ucfirst(strtolower($type));
 		extract($search_data, EXTR_SKIP);
@@ -1861,8 +1862,8 @@
 	 */
 	protected function SetPagination(kEvent $event)
 	{
+		/** @var kDBList $object */
 		$object = $event->getObject();
-		/* @var $object kDBList */
 
 		// get PerPage (forced -> session -> config -> 10)
 		$object->SetPerPage($this->getPerPage($event));
@@ -1947,8 +1948,8 @@
 		$this->Application->StoreVar($event->Prefix . '_export_ids', $selected_ids ? implode(',', $selected_ids) : '');
 		$this->Application->StoreVar($event->Prefix . '_export_cats_ids', $selected_cats_ids);
 
+		/** @var kCatDBItemExportHelper $export_helper */
 		$export_helper = $this->Application->recallObject('CatItemExportHelper');
-		/* @var $export_helper kCatDBItemExportHelper */
 
 		$redirect_params = Array (
 			$this->Prefix . '.export_event' => 'OnNew',
@@ -1965,8 +1966,8 @@
 	 */
 	function OnExportProgress($event)
 	{
+		/** @var kCatDBItemExportHelper $export_object */
 		$export_object = $this->Application->recallObject('CatItemExportHelper');
-		/* @var $export_object kCatDBItemExportHelper */
 
 		$action_method = 'perform'.ucfirst($event->Special);
 		$field_values = $export_object->$action_method($event);
@@ -2030,8 +2031,8 @@
 	 */
 	protected function restorePrimaryImage($event)
 	{
+		/** @var kCatDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kCatDBItem */
 
 		if ( !$object->GetDBField('ThumbnailImage') && !$object->GetDBField('FullImage') ) {
 			return ;
@@ -2039,8 +2040,8 @@
 
 		$image_data = $object->getPrimaryImageData();
 
+		/** @var kDBItem $image */
 		$image = $this->Application->recallObject('img', NULL, Array ('skip_autoload' => true));
-		/* @var $image kDBItem */
 
 		if ( $image_data ) {
 			$image->Load($image_data['ImageId']);
@@ -2104,8 +2105,8 @@
 		parent::OnNew($event);
 
 		if ( $event->Special == 'import' || $event->Special == 'export' ) {
+			/** @var kCatDBItemExportHelper $export_helper */
 			$export_helper = $this->Application->recallObject('CatItemExportHelper');
-			/* @var $export_helper kCatDBItemExportHelper */
 
 			$export_helper->setRequiredFields($event);
 		}
@@ -2123,8 +2124,8 @@
 
 		if ( $dst_field == 'ItemCategory' ) {
 			// Item Edit -> Categories Tab -> New Categories
+			/** @var kCatDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kCatDBItem */
 
 			$category_ids = explode(',', $selected_ids['c']);
 			foreach ($category_ids as $category_id) {
@@ -2156,8 +2157,8 @@
 		if ( $items_info ) {
 			list($id, $field_values) = each($items_info);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject(Array ('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			$object->setID($id);
 			$object->SetFieldsFromHash($field_values);
@@ -2205,8 +2206,8 @@
 	 */
 	function cacheItemOwner($event, $id_field, $cached_field)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$object->SetDBField($cached_field, $object->GetField($id_field));
 	}
@@ -2228,24 +2229,24 @@
 		if ( $event->status == kEvent::erSUCCESS && $use_pending_editing ) {
 			// decision: clone or not clone
 
+			/** @var kCatDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kCatDBItem */
 
 			if ( $object->GetID() == 0 || $object->GetDBField('OrgId') > 0 ) {
 				// new items or cloned items shouldn't be cloned again
 				return ;
 			}
 
+			/** @var kPermissionsHelper $perm_helper */
 			$perm_helper = $this->Application->recallObject('PermissionsHelper');
-			/* @var $perm_helper kPermissionsHelper */
 
 			$owner_field = $this->getOwnerField($event->Prefix);
 
 			if ( $perm_helper->ModifyCheckPermission($object->GetDBField($owner_field), $object->GetDBField('CategoryId'), $event->Prefix) == 2 ) {
 
 				// 1. clone original item
+				/** @var kTempTablesHandler $temp_handler */
 				$temp_handler = $this->Application->recallObject($event->getPrefixSpecial() . '_TempHandler', 'kTempTablesHandler');
-				/* @var $temp_handler kTempTablesHandler */
 
 				$cloned_ids = $temp_handler->CloneItems($event->Prefix, $event->Special, Array ($object->GetID()), NULL, NULL, NULL, true);
 				$ci_table = $this->Application->GetTempName(TABLE_PREFIX . 'CategoryItems');
@@ -2301,8 +2302,8 @@
 			return ;
 		}
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$owner_field = $this->getOwnerField($event->Prefix);
 		$object->SetDBField($owner_field, $this->Application->RecallVar('user_id'));
@@ -2344,8 +2345,8 @@
 	{
 		parent::OnBeforeClone($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$object->SetDBField('ResourceId', 0); // this will reset it
 
@@ -2365,8 +2366,8 @@
 	{
 		parent::OnBeforeItemCreate($event);
 
+		/** @var kCatDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kCatDBItem */
 
 		$owner_field = $this->getOwnerField($event->Prefix);
 
@@ -2398,11 +2399,11 @@
 			return ;
 		}
 
+		/** @var kCatDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kCatDBItem */
 
+		/** @var kPermissionsHelper $perm_helper */
 		$perm_helper = $this->Application->recallObject('PermissionsHelper');
-		/* @var $perm_helper kPermissionsHelper */
 
 		$primary_category = $object->GetDBField('CategoryId') > 0 ? $object->GetDBField('CategoryId') : $this->Application->GetVar('m_cat_id');
 		$item_status = $perm_helper->AddCheckPermission($primary_category, $event->Prefix);
@@ -2503,21 +2504,21 @@
 			return ;
 		}
 
+		/** @var kCatDBItem $object */
 		$object = $event->getObject(Array('skip_autoload' => true));
-		/* @var $object kCatDBItem */
 
 		$items_info = $this->Application->GetVar($event->getPrefixSpecial(true));
 		if ($items_info) {
+			/** @var kPermissionsHelper $perm_helper */
 			$perm_helper = $this->Application->recallObject('PermissionsHelper');
-			/* @var $perm_helper kPermissionsHelper */
 
+			/** @var kTempTablesHandler $temp_handler */
 			$temp_handler = $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler');
-			/* @var $temp_handler kTempTablesHandler */
 
 			$owner_field = $this->getOwnerField($event->Prefix);
 
+			/** @var FileHelper $file_helper */
 			$file_helper = $this->Application->recallObject('FileHelper');
-			/* @var $file_helper FileHelper */
 
 			foreach ($items_info as $id => $field_values) {
 				$object->Load($id);
@@ -2597,8 +2598,8 @@
 		}
 
 		// prepare redirect template
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$is_active = ($object->GetDBField('Status') == STATUS_ACTIVE);
 
@@ -2645,8 +2646,8 @@
 			return ;
 		}
 
+		/** @var kCatDBItem $object */
 		$object = $event->getObject(Array ('skip_autoload' => true));
-		/* @var $object kCatDBItem */
 
 		$ids = $this->StoreSelectedIDs($event);
 
@@ -2695,8 +2696,8 @@
 	 */
 	protected function checkItemStatus(kEvent $event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		if ( !$object->isLoaded() ) {
 			if ( $event->Special != 'previous' && $event->Special != 'next' ) {
@@ -2737,8 +2738,8 @@
 		if ( in_array('search', $types) ) {
 			$event->setPseudoClass('_List');
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			// 1. no user sorting - sort by relevance
 			$default_sortings = parent::_getDefaultSorting($event);
@@ -2773,8 +2774,8 @@
 	 */
 	protected function _removeForcedSortings(kEvent $event)
 	{
+		/** @var Array $list_sortings */
 		$list_sortings = $this->Application->getUnitOption($event->Prefix, 'ListSortings', Array ());
-		/* @var $list_sortings Array */
 
 		foreach ($list_sortings as $special => $sortings) {
 			unset($list_sortings[$special]['ForcedSorting']);
@@ -2844,8 +2845,8 @@
 		}
 
 		if ( !$this->Application->isAdmin ) {
+			/** @var FileHelper $file_helper */
 			$file_helper = $this->Application->recallObject('FileHelper');
-			/* @var $file_helper FileHelper */
 
 			$file_helper->createItemFiles($event->Prefix, true); // create image fields
 			$file_helper->createItemFiles($event->Prefix, false); // create file fields
@@ -2864,8 +2865,8 @@
 		$this->Application->setUnitOption($this->Prefix, 'Grids', $grids);
 
 		// add options for CategoryId field (quick way to select item's primary category)
+		/** @var CategoryHelper $category_helper */
 		$category_helper = $this->Application->recallObject('CategoryHelper');
-		/* @var $category_helper CategoryHelper */
 
 		$virtual_fields = $this->Application->getUnitOption($event->Prefix, 'VirtualFields');
 
@@ -2904,8 +2905,8 @@
 			return $this;
 		}
 
+		/** @var Array $list_sortings */
 		$list_sortings = $this->Application->getUnitOption($event->Prefix, 'ListSortings', Array ());
-		/* @var $list_sortings Array */
 
 		foreach ($list_sortings as $special => $sorting_fields) {
 			foreach ($remove_sortings as $sorting_field) {
@@ -2935,8 +2936,8 @@
 			$join_clause = '';
 		}
 
+		/** @var array $list_sqls */
 		$list_sqls = $this->Application->getUnitOption($event->Prefix, 'ListSQLs');
-		/* @var $list_sqls array */
 
 		foreach ($list_sqls as $special => $list_sql) {
 			$list_sqls[$special] = str_replace('{PERM_JOIN}', $join_clause, $list_sql);
@@ -2954,8 +2955,8 @@
 	 */
 	function OnDownloadFile($event)
 	{
+		/** @var kCatDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kCatDBItem */
 
 		$event->status = kEvent::erSTOP;
 
@@ -2964,8 +2965,8 @@
 			return ;
 		}
 
+		/** @var FileHelper $file_helper */
 		$file_helper = $this->Application->recallObject('FileHelper');
-		/* @var $file_helper FileHelper */
 
 		$filename = $object->GetField($field, 'full_path');
 		$file_helper->DownloadFile($filename);
@@ -2985,11 +2986,11 @@
 			return ;
 		}
 
+		/** @var RatingHelper $rating_helper */
 		$rating_helper = $this->Application->recallObject('RatingHelper');
-		/* @var $rating_helper RatingHelper */
 
+		/** @var kCatDBItem $object */
 		$object = $event->getObject( Array ('skip_autoload' => true) );
-		/* @var $object kCatDBItem */
 
 		$object->Load( $this->Application->GetVar('id') );
 
@@ -3015,8 +3016,8 @@
 			return;
 		}
 
+		/** @var SpamHelper $spam_helper */
 		$spam_helper = $this->Application->recallObject('SpamHelper');
-		/* @var $spam_helper SpamHelper */
 
 		$spam_helper->InitHelper($review_id, 'ReviewHelpful', strtotime('+1 month') - strtotime('now'));
 		$field = (int)$this->Application->GetVar('helpful') ? 'HelpfulCount' : 'NotHelpfulCount';
@@ -3080,8 +3081,8 @@
 	 */
 	protected function OnAfterItemValidate(kEvent $event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$resource_id = $object->GetDBField('ResourceId');
 
Index: core/kernel/db/cat_tag_processor.php
===================================================================
--- core/kernel/db/cat_tag_processor.php
+++ core/kernel/db/cat_tag_processor.php
@@ -52,8 +52,8 @@
 				return $icons['default'];
 			}
 
+			/** @var kDBList $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBList */
 
 			$value = $object->GetDBField($status_fields[0]); // sets base status icon
 
@@ -100,8 +100,8 @@
 				$item_id = $this->Application->GetVar($this->Prefix . '_id');
 			}
 
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			$params['m_cat_page'] = 1;
 			$params['m_cat_id'] = $object->GetDBField('CategoryId');
@@ -119,11 +119,11 @@
 		 */
 		function PageBrowseLink($params)
 		{
+			/** @var kThemesHelper $themes_helper */
 			$themes_helper = $this->Application->recallObject('ThemesHelper');
-			/* @var $themes_helper kThemesHelper */
 
+			/** @var SiteConfigHelper $site_config_helper */
 			$site_config_helper = $this->Application->recallObject('SiteConfigHelper');
-			/* @var $site_config_helper SiteConfigHelper */
 
 			$settings = $site_config_helper->getSettings();
 
@@ -148,8 +148,8 @@
 				$params['cat_id'] = $object->GetDBField('CategoryId');
 			}
 
+			/** @var kNavigationBar $navigation_bar */
 			$navigation_bar = $this->Application->recallObject('kNavigationBar');
-			/* @var $navigation_bar kNavigationBar */
 
 			return $navigation_bar->build($params);
 		}
@@ -189,16 +189,16 @@
 		{
 			$prefix = $this->Prefix . '-rev';
 
+			/** @var kDBTagProcessor $review_tag_processor */
 			$review_tag_processor = $this->Application->recallObject($prefix . '.item_TagProcessor');
-			/* @var $review_tag_processor kDBTagProcessor */
 
 			return $review_tag_processor->PrintList($params);
 		}
 
 		function ReviewCount($params)
 		{
+			/** @var kDBTagProcessor $review_tag_processor */
 			$review_tag_processor = $this->Application->recallObject('rev.item_TagProcessor');
-			/* @var $review_tag_processor kDBTagProcessor */
 
 			return $review_tag_processor->TotalRecords($params);
 		}
@@ -304,12 +304,13 @@
 		 */
 		function HasPermission($params)
 		{
+			/** @var kPermissionsHelper $perm_helper */
 			$perm_helper = $this->Application->recallObject('PermissionsHelper');
-			/* @var $perm_helper kPermissionsHelper */
 
 			$params['raise_warnings'] = 0;
+
+			/** @var kCatDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kCatDBItem */
 
 			// 1. category restriction
 			$params['cat_id'] = $object->isLoaded() ? $object->GetDBField('ParentPath') : $this->Application->GetVar('m_cat_id');
@@ -353,8 +354,8 @@
 		 */
 		function HasAdditionalImages($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			$cache_key = $object->Prefix . '_additional_images[%' . $this->Application->incrementCacheSerial($object->Prefix, $object->GetID(), false) . '%]';
 			$ret = $this->Application->getCache($cache_key);
@@ -390,8 +391,8 @@
 		{
 			static $favorite_status = Array ();
 
+			/** @var kDBList $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBList */
 
 			if (!isset($favorite_status[$this->Special])) {
 				$resource_ids = $object->GetCol('ResourceId');
@@ -519,11 +520,11 @@
 		 */
 		function VotesIndicator($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
+			/** @var RatingHelper $rating_helper */
 			$rating_helper = $this->Application->recallObject('RatingHelper');
-			/* @var $rating_helper RatingHelper */
 
 			$small_style = array_key_exists('small_style', $params) ? $params['small_style'] : false;
 
@@ -657,8 +658,8 @@
 			$format = isset($params['format']) ? $params['format'] : '_regional_DateTimeFormat';
 
 			if ( preg_match("/_regional_(.*)/", $format, $regs) ) {
+				/** @var LanguagesItem $lang */
 				$lang = $this->Application->recallObject('lang.current');
-				/* @var $lang LanguagesItem */
 
 				if ( $regs[1] == 'DateTimeFormat' ) {
 					// combined format
@@ -681,8 +682,8 @@
 		 */
 		function ItemCount($params)
 		{
+			/** @var kCountHelper $count_helper */
 			$count_helper = $this->Application->recallObject('CountHelper');
-			/* @var $count_helper kCountHelper */
 
 			$today_only = isset($params['today']) && $params['today'];
 			return $count_helper->ItemCount($this->Prefix, $today_only);
@@ -758,8 +759,8 @@
 							c.l' . $this->Application->GetVar('m_lang') . '_CachedNavbar AS CachedNavbar
 					FROM ' . $this->Application->getUnitOption('c', 'TableName') . ' c';
 
+			/** @var kCountHelper $count_helper */
 			$count_helper = $this->Application->recallObject('CountHelper');
-			/* @var $count_helper kCountHelper */
 
 			list ($sql, $where_clause) = $count_helper->attachViewPermissionCheck('c', $sql, $where_clause);
 
@@ -768,8 +769,8 @@
 
 		function PrintMoreCategories($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			$category_ids = $this->Field($params);
 			if (!$category_ids) {
@@ -824,8 +825,8 @@
 		 */
 		function RegisterHit($params)
 		{
+			/** @var kCatDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kCatDBItem */
 
 			if ($object->isLoaded()) {
 				$object->RegisterHit();
@@ -870,8 +871,8 @@
 		 */
 		function ItemEditLink($params)
 		{
+			/** @var kDBList $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBList */
 
 			$edit_template = $this->Application->getUnitOption($this->Prefix, 'AdminTemplatePath') . '/' . $this->Application->getUnitOption($this->Prefix, 'AdminTemplatePrefix') . 'edit';
 
@@ -911,8 +912,8 @@
 
 			$field = $this->SelectParam($params, 'name,field');
 
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			foreach ($languages as $language_id) {
 				$check_field = 'l' . $language_id . '_' . $field;
@@ -936,18 +937,18 @@
 				$categories = true;
 			}
 			else {
+				/** @var kDBItem $object */
 				$object = $this->getObject($params);
-				/* @var $object kDBItem */
 
+				/** @var kPermissionsHelper $perm_helper */
 				$perm_helper = $this->Application->recallObject('PermissionsHelper');
-				/* @var $perm_helper kPermissionsHelper */
 
 				$perm_prefix = $this->Application->getUnitOption($this->Prefix, 'PermItemPrefix');
 				$categories = $perm_helper->getPermissionCategories($perm_prefix . '.' . ($object->IsNewItem() ? 'ADD' : 'MODIFY'));
 			}
 
+			/** @var JSONHelper $json_helper */
 			$json_helper = $this->Application->recallObject('JSONHelper');
-			/* @var $json_helper JSONHelper */
 
 			return $json_helper->encode($categories);
 		}
Index: core/kernel/db/db_connection.php
===================================================================
--- core/kernel/db/db_connection.php
+++ core/kernel/db/db_connection.php
@@ -583,8 +583,8 @@
 			$this->queryID = $this->connectionID->query($sql);
 
 			if ( is_object($this->queryID) ) {
+				/** @var kMySQLQuery $ret */
 				$ret = new $iterator_class($this->queryID, $key_field);
-				/* @var $ret kMySQLQuery */
 
 				// set 2nd checkpoint: begin
 				if ( $this->_captureStatistics ) {
@@ -1077,8 +1077,8 @@
 		$this->queryID = $this->connectionID->query($sql);
 
 		if ( is_object($this->queryID) ) {
+			/** @var kMySQLQuery $ret */
 			$ret = new $iterator_class($this->queryID, $key_field);
-			/* @var $ret kMySQLQuery */
 
 			// set 2nd checkpoint: begin
 			if ( $this->_profileSQLs ) {
Index: core/kernel/db/db_event_handler.php
===================================================================
--- core/kernel/db/db_event_handler.php
+++ core/kernel/db/db_event_handler.php
@@ -213,11 +213,11 @@
 			}
 
 			if ( $event->Special == 'previous' || $event->Special == 'next' ) {
+				/** @var kDBItem $object */
 				$object = $this->Application->recallObject($event->getEventParam('item'));
-				/* @var $object kDBItem */
 
+				/** @var ListHelper $list_helper */
 				$list_helper = $this->Application->recallObject('ListHelper');
-				/* @var $list_helper ListHelper */
 
 				$select_clause = $this->Application->getUnitOption($object->Prefix, 'NavigationSelectClause', NULL);
 
@@ -230,8 +230,8 @@
 
 			if ( preg_match('/^auto-(.*)/', $event->Special, $regs) && $this->Application->prefixRegistred($regs[1]) ) {
 				// <inp2:lang.auto-phrase_Field name="DateFormat"/> - returns field DateFormat value from language (LanguageId is extracted from current phrase object)
+				/** @var kDBItem $main_object */
 				$main_object = $this->Application->recallObject($regs[1]);
-				/* @var $main_object kDBItem */
 
 				$id_field = $this->Application->getUnitOption($event->Prefix, 'IDField');
 				return $main_object->GetDBField($id_field);
@@ -493,8 +493,8 @@
 			$status_field = array_shift($status_fields);
 
 			if ( $status_field == 'Status' || $status_field == 'Enabled' ) {
+				/** @var kDBItem $object */
 				$object = $event->getObject();
-				/* @var $object kDBItem */
 
 				if ( !$object->isLoaded() ) {
 					return true;
@@ -539,8 +539,8 @@
 		 */
 		protected function OnItemBuild(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$this->dbBuild($object, $event);
 
@@ -584,8 +584,8 @@
 				}
 			}
 
+			/** @var Params $actions */
 			$actions = $this->Application->recallObject('kActions');
-			/* @var $actions Params */
 
 			$actions->Set($event->getPrefixSpecial() . '_GoTab', '');
 			$actions->Set($event->getPrefixSpecial() . '_GoId', '');
@@ -645,11 +645,11 @@
 		 */
 		protected function OnTempHandlerBuild(kEvent $event)
 		{
+			/** @var kTempTablesHandler $object */
 			$object = $this->Application->recallObject($event->getPrefixSpecial() . '_TempHandler', 'kTempTablesHandler');
-			/* @var $object kTempTablesHandler */
 
+			/** @var kEvent $parent_event */
 			$parent_event = $event->getEventParam('parent_event');
-			/* @var $parent_event kEvent */
 
 			if ( is_object($parent_event) ) {
 				$object->setParentEvent($parent_event);
@@ -682,8 +682,8 @@
 		 */
 		protected function LoadItem(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$id = $this->getPassedID($event);
 
@@ -693,8 +693,8 @@
 			}
 
 			if ( $object->Load($id) ) {
+				/** @var Params $actions */
 				$actions = $this->Application->recallObject('kActions');
-				/* @var $actions Params */
 
 				$actions->Set($event->getPrefixSpecial() . '_id', $object->GetID());
 			}
@@ -713,8 +713,8 @@
 		 */
 		protected function OnListBuild(kEvent $event)
 		{
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			/*if ( $this->Application->isDebugMode() ) {
 				$event_params = http_build_query($event->getEventParams());
@@ -748,8 +748,8 @@
 			$this->SetPagination($event);
 			$this->SetSorting($event);
 
+			/** @var Params $actions */
 			$actions = $this->Application->recallObject('kActions');
-			/* @var $actions Params */
 
 			$actions->Set('remove_specials[' . $event->getPrefixSpecial() . ']', '0');
 			$actions->Set($event->getPrefixSpecial() . '_GoTab', '');
@@ -808,8 +808,8 @@
 			$event->SetRedirectParam('pass', 'all,' . $event->getPrefixSpecial());
 
 			if ( !$this->Application->isAdminUser ) {
+				/** @var ListHelper $list_helper */
 				$list_helper = $this->Application->recallObject('ListHelper');
-				/* @var $list_helper ListHelper */
 
 				$this->_passListParams($event, 'per_page');
 			}
@@ -845,8 +845,8 @@
 		{
 			$param_names = array_diff(Array ('page', 'per_page', 'sort_by'), Array ($skip_var));
 
+			/** @var ListHelper $list_helper */
 			$list_helper = $this->Application->recallObject('ListHelper');
-			/* @var $list_helper ListHelper */
 
 			foreach ($param_names as $param_name) {
 				$value = $this->Application->GetVar($param_name);
@@ -868,8 +868,9 @@
 
 					case 'sort_by':
 						$event->setPseudoClass('_List');
+
+						/** @var kDBList $object */
 						$object = $event->getObject(Array ('main_list' => 1));
-						/* @var $object kDBList */
 
 						if ( $list_helper->hasUserSorting($object) ) {
 							$event->SetRedirectParam('sort_by', $value);
@@ -889,8 +890,8 @@
 		 */
 		protected function SetPagination(kEvent $event)
 		{
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			// get PerPage (forced -> session -> config -> 10)
 			$object->SetPerPage($this->getPerPage($event));
@@ -946,8 +947,8 @@
 		 */
 		protected function getPerPage(kEvent $event)
 		{
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			$per_page = $event->getEventParam('per_page');
 
@@ -1004,8 +1005,8 @@
 
 			if ( !$per_page ) {
 				// per page wan't found in request/session/persistent session
+				/** @var ListHelper $list_helper */
 				$list_helper = $this->Application->recallObject('ListHelper');
-				/* @var $list_helper ListHelper */
 
 				// allow to override default per-page value from tag
 				$default_per_page = $event->getEventParam('default_per_page');
@@ -1032,8 +1033,8 @@
 		{
 			$event->setPseudoClass('_List');
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			if ( $object->isMainList() ) {
 				$sort_by = $this->Application->GetVar('sort_by');
@@ -1093,8 +1094,8 @@
 			}
 
 			// always add forced sorting before any user sorting fields
+			/** @var Array $forced_sorting */
 			$forced_sorting = getArrayValue($list_sortings, 'ForcedSorting');
-			/* @var $forced_sorting Array */
 
 			if ( $forced_sorting ) {
 				foreach ($forced_sorting as $field => $dir) {
@@ -1203,8 +1204,8 @@
 		 */
 		protected function AddFilters(kEvent $event)
 		{
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			$edit_mark = rtrim($this->Application->GetSID() . '_' . $this->Application->GetTopmostWid($event->Prefix), '_');
 
@@ -1248,8 +1249,8 @@
 			if ( $view_filter ) {
 				$view_filter = unserialize($view_filter);
 
+				/** @var kMultipleFilter $temp_filter */
 				$temp_filter = $this->Application->makeClass('kMultipleFilter');
-				/* @var $temp_filter kMultipleFilter */
 
 				$filter_menu = $this->Application->getUnitOption($event->Prefix, 'FilterMenu');
 
@@ -1296,8 +1297,8 @@
 				return;
 			}
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			$where_clause = Array (
 				'ItemPrefix = ' . $this->Conn->qstr($object->Prefix),
@@ -1414,11 +1415,11 @@
 					$event->setPseudoClass('_List');
 					$this->Application->SetVar('sort_by', $field . ',' . $dir);
 
+					/** @var kDBList $object */
 					$object = $event->getObject(Array ('main_list' => 1));
-					/* @var $object kDBList */
 
+					/** @var ListHelper $list_helper */
 					$list_helper = $this->Application->recallObject('ListHelper');
-					/* @var $list_helper ListHelper */
 
 					$this->_passListParams($event, 'sort_by');
 
@@ -1501,8 +1502,8 @@
 		 */
 		protected function ItemPrepareQuery(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$sqls = $object->getFormOption('ItemSQLs', Array ());
 			$special = isset($sqls[$event->Special]) ? $event->Special : '';
@@ -1524,8 +1525,8 @@
 		 */
 		protected function ListPrepareQuery(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$sqls = $object->getFormOption('ListSQLs', Array ());
 
@@ -1556,8 +1557,8 @@
 		 */
 		protected function OnCreate(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject(Array ('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			$items_info = $this->Application->GetVar($event->getPrefixSpecial(true));
 
@@ -1612,8 +1613,8 @@
 		 */
 		protected function _update(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject(Array ('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			$items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) );
 
@@ -1651,8 +1652,8 @@
 				return;
 			}
 
+			/** @var kTempTablesHandler $temp_handler */
 			$temp_handler = $this->Application->recallObject($event->getPrefixSpecial() . '_TempHandler', 'kTempTablesHandler', Array ('parent_event' => $event));
-			/* @var $temp_handler kTempTablesHandler */
 
 			$temp_handler->DeleteItems($event->Prefix, $event->Special, Array ($this->getPassedID($event)));
 		}
@@ -1671,8 +1672,8 @@
 			$ids = $this->Conn->GetCol($sql);
 
 			if ( $ids ) {
+				/** @var kTempTablesHandler $temp_handler */
 				$temp_handler = $this->Application->recallObject($event->getPrefixSpecial() . '_TempHandler', 'kTempTablesHandler', Array ('parent_event' => $event));
-				/* @var $temp_handler kTempTablesHandler */
 
 				$temp_handler->DeleteItems($event->Prefix, $event->Special, $ids);
 			}
@@ -1687,8 +1688,8 @@
 		 */
 		protected function OnNew(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject(Array ('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			$object->Clear(0);
 			$this->Application->SetVar($event->getPrefixSpecial() . '_SaveEvent', 'OnCreate');
@@ -1715,16 +1716,16 @@
 		 */
 		protected function OnCancel(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject(Array ('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			$items_info = $this->Application->GetVar($event->getPrefixSpecial(true));
 
 			if ( $items_info ) {
 				$delete_ids = Array ();
 
+				/** @var kTempTablesHandler $temp_handler */
 				$temp_handler = $this->Application->recallObject($event->getPrefixSpecial() . '_TempHandler', 'kTempTablesHandler', Array ('parent_event' => $event));
-				/* @var $temp_handler kTempTablesHandler */
 
 				foreach ($items_info as $id => $field_values) {
 					$object->Load($id);
@@ -1758,8 +1759,8 @@
 				return ;
 			}
 
+			/** @var kTempTablesHandler $temp_handler */
 			$temp_handler = $this->Application->recallObject($event->getPrefixSpecial() . '_TempHandler', 'kTempTablesHandler', Array ('parent_event' => $event));
-			/* @var $temp_handler kTempTablesHandler */
 
 			$ids = $this->StoreSelectedIDs($event);
 
@@ -1809,16 +1810,16 @@
 			$this->setTempWindowID($event);
 			$ids = $this->StoreSelectedIDs($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject(Array('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			$object->setPendingActions(null, true);
 
 			$changes_var_name = $this->Prefix . '_changes_' . $this->Application->GetTopmostWid($this->Prefix);
 			$this->Application->RemoveVar($changes_var_name);
 
+			/** @var kTempTablesHandler $temp_handler */
 			$temp_handler = $this->Application->recallObject($event->getPrefixSpecial() . '_TempHandler', 'kTempTablesHandler', Array ('parent_event' => $event));
-			/* @var $temp_handler kTempTablesHandler */
 
 			$temp_handler->PrepareEdit();
 
@@ -1850,8 +1851,9 @@
 			}
 
 			$skip_master = false;
+
+			/** @var kTempTablesHandler $temp_handler */
 			$temp_handler = $this->Application->recallObject($event->getPrefixSpecial() . '_TempHandler', 'kTempTablesHandler', Array ('parent_event' => $event));
-			/* @var $temp_handler kTempTablesHandler */
 
 			$changes_var_name = $this->Prefix . '_changes_' . $this->Application->GetTopmostWid($this->Prefix);
 
@@ -1870,8 +1872,8 @@
 					$this->StoreSelectedIDs($event, $live_ids);
 				}
 
+				/** @var kDBItem $object */
 				$object = $event->getObject();
-				/* @var $object kDBItem */
 
 				$this->SaveLoggedChanges($changes_var_name, $object->ShouldLogChanges());
 			}
@@ -1996,8 +1998,8 @@
 		 */
 		protected function OnCancelEdit(kEvent $event)
 		{
+			/** @var kTempTablesHandler $temp_handler */
 			$temp_handler = $this->Application->recallObject($event->getPrefixSpecial() . '_TempHandler', 'kTempTablesHandler', Array ('parent_event' => $event));
-			/* @var $temp_handler kTempTablesHandler */
 
 			$temp_handler->CancelEdit();
 			$this->clearSelectedIDs($event);
@@ -2019,8 +2021,8 @@
 		 */
 		public function isNewItemCreate(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject( Array ('raise_warnings' => 0) );
-			/* @var $object kDBItem */
 
 			return !$object->isLoaded();
 		}
@@ -2063,8 +2065,8 @@
 		 */
 		protected function OnPreSaveAjax(kEvent $event)
 		{
+			/** @var AjaxFormHelper $ajax_form_helper */
 			$ajax_form_helper = $this->Application->recallObject('AjaxFormHelper');
-			/* @var $ajax_form_helper AjaxFormHelper */
 
 			$ajax_form_helper->transitEvent($event, 'OnPreSave');
 		}
@@ -2082,8 +2084,8 @@
 
 			$event->CallSubEvent($not_created ? 'OnCreate' : 'OnUpdate');
 			if ( $event->status == kEvent::erSUCCESS ) {
+				/** @var kDBItem $object */
 				$object = $event->getObject();
-				/* @var $object kDBItem */
 
 				$this->Application->SetVar($event->getPrefixSpecial() . '_id', $object->GetID());
 			}
@@ -2163,11 +2165,11 @@
 			$this->clearSelectedIDs($event);
 			$this->Application->SetVar('m_lang', $this->Application->GetDefaultLanguageId());
 
+			/** @var kDBItem $object */
 			$object = $event->getObject(Array ('skip_autoload' => true));
-			/* @var $object kDBItem */
 
+			/** @var kTempTablesHandler $temp_handler */
 			$temp_handler = $this->Application->recallObject($event->Prefix . '_TempHandler', 'kTempTablesHandler', Array ('parent_event' => $event));
-			/* @var $temp_handler kTempTablesHandler */
 
 			$temp_handler->PrepareEdit();
 
@@ -2191,8 +2193,8 @@
 		 */
 		protected function OnPreSaveCreated(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject( Array('skip_autoload' => true) );
-			/* @var $object kDBItem */
 
 			$object->setID(0);
 			$field_values = $this->getSubmittedFields($event);
@@ -2222,8 +2224,8 @@
 			//do nothing - should reset :)
 			if ( $this->isNewItemCreate($event) ) {
 				// just reset id to 0 in case it was create
+				/** @var kDBItem $object */
 				$object = $event->getObject( Array ('skip_autoload' => true) );
-				/* @var $object kDBItem */
 
 				$object->setID(0);
 				$this->Application->SetVar($event->getPrefixSpecial() . '_id', 0);
@@ -2244,8 +2246,8 @@
 				return ;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject(Array ('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			$ids = $this->StoreSelectedIDs($event);
 
@@ -2299,8 +2301,8 @@
 				return;
 			}
 
+			/** @var kTempTablesHandler $temp_handler */
 			$temp_handler = $this->Application->recallObject($event->getPrefixSpecial() . '_TempHandler', 'kTempTablesHandler', Array ('parent_event' => $event));
-			/* @var $temp_handler kTempTablesHandler */
 
 			$ids = $this->StoreSelectedIDs($event);
 
@@ -2340,8 +2342,8 @@
 		 */
 		protected function OnPreSavePopup(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$this->RemoveRequiredFields($object);
 			$event->CallSubEvent('OnPreSave');
@@ -2400,8 +2402,8 @@
 		 */
 		protected function OnAfterItemCreate(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( !$object->IsTempTable() ) {
 				$this->_processPendingActions($event);
@@ -2429,8 +2431,8 @@
 		 */
 		protected function OnAfterItemUpdate(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( !$object->IsTempTable() ) {
 				$this->_processPendingActions($event);
@@ -2462,14 +2464,14 @@
 		 */
 		protected function OnAfterItemDelete(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			// 1. delete direct subscriptions to item, that was deleted
 			$this->_deleteSubscriptions($event->Prefix, 'ItemId', $object->GetID());
 
+			/** @var Array $sub_items */
 			$sub_items = $this->Application->getUnitOption($event->Prefix, 'SubItems', Array ());
-			/* @var $sub_items Array */
 
 			// 2. delete this item sub-items subscriptions, that reference item, that was deleted
 			foreach ($sub_items as $sub_prefix) {
@@ -2507,8 +2509,8 @@
 				return;
 			}
 
+			/** @var kTempTablesHandler $temp_handler */
 			$temp_handler = $this->Application->recallObject('system-event-subscription_TempHandler', 'kTempTablesHandler');
-			/* @var $temp_handler kTempTablesHandler */
 
 			$temp_handler->DeleteItems('system-event-subscription', '', $ids);
 		}
@@ -2587,8 +2589,8 @@
 		 */
 		protected function OnAfterCopyToLive(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject(array('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			$object->SwitchToLive();
 			$object->Load($event->getEventParam('id'));
@@ -2605,8 +2607,8 @@
 		 */
 		protected function _processPendingActions(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$update_required = false;
 			$temp_id = $event->getEventParam('temp_id');
@@ -2619,8 +2621,8 @@
 						break;
 
 					case 'make_live':
+						/** @var FileHelper $file_helper */
 						$file_helper = $this->Application->recallObject('FileHelper');
-						/* @var $file_helper FileHelper */
 
 						if ( !file_exists($data['file']) ) {
 							// file removal was requested too
@@ -2714,8 +2716,8 @@
 		{
 			$event->setPseudoClass('_List');
 
+			/** @var kSearchHelper $search_helper */
 			$search_helper = $this->Application->recallObject('SearchHelper');
-			/* @var $search_helper kSearchHelper */
 
 			$search_helper->performSearch($event);
 		}
@@ -2729,8 +2731,8 @@
 		 */
 		protected function OnSearchReset(kEvent $event)
 		{
+			/** @var kSearchHelper $search_helper */
 			$search_helper = $this->Application->recallObject('SearchHelper');
-			/* @var $search_helper kSearchHelper */
 
 			$search_helper->resetSearch($event);
 		}
@@ -2831,8 +2833,8 @@
 		{
 			$this->Application->SetVar('allow_translation', true);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$this->RemoveRequiredFields($object);
 			$event->CallSubEvent('OnPreSave');
@@ -2843,8 +2845,8 @@
 				if ( $resource_id ) {
 					$t_prefixes = explode(',', $this->Application->GetVar('translator_prefixes'));
 
+					/** @var kDBItem $cdata */
 					$cdata = $this->Application->recallObject($t_prefixes[1], NULL, Array ('skip_autoload' => true));
-					/* @var $cdata kDBItem */
 
 					$cdata->Load($resource_id, 'ResourceId');
 
@@ -2905,8 +2907,8 @@
 		 */
 		protected function OnSelectUser(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$items_info = $this->Application->GetVar('u');
 
@@ -2983,8 +2985,8 @@
 		protected function prepareObject(&$object, kEvent $event)
 		{
 			if ( $event->Special == 'export' || $event->Special == 'import' ) {
+				/** @var kCatDBItemExportHelper $export_helper */
 				$export_helper = $this->Application->recallObject('CatItemExportHelper');
-				/* @var $export_helper kCatDBItemExportHelper */
 
 				$export_helper->prepareExportColumns($event);
 			}
@@ -3011,8 +3013,8 @@
 		 */
 		protected function OnExportBegin(kEvent $event)
 		{
+			/** @var kCatDBItemExportHelper $export_helper */
 			$export_helper = $this->Application->recallObject('CatItemExportHelper');
-			/* @var $export_helper kCatDBItemExportHelper */
 
 			$export_helper->OnExportBegin($event);
 		}
@@ -3233,8 +3235,8 @@
 		 */
 		protected function OnValidateMInputFields(kEvent $event)
 		{
+			/** @var MInputHelper $minput_helper */
 			$minput_helper = $this->Application->recallObject('MInputHelper');
-			/* @var $minput_helper MInputHelper */
 
 			$minput_helper->OnValidateMInputFields($event);
 		}
@@ -3255,8 +3257,8 @@
 				return;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject(Array ('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			$items_info = $this->Application->GetVar($event->getPrefixSpecial(true));
 
@@ -3281,8 +3283,8 @@
 				$response['status'] = $object->GetErrorMsg($error_field, false);
 			}
 
+			/** @var AjaxFormHelper $ajax_form_helper */
 			$ajax_form_helper = $this->Application->recallObject('AjaxFormHelper');
-			/* @var $ajax_form_helper AjaxFormHelper */
 
 			$response['other_errors'] = $ajax_form_helper->getErrorMessages($object);
 			$response['uploader_info'] = $ajax_form_helper->getUploaderInfo($object, array_keys($field_values));
@@ -3359,8 +3361,8 @@
 		 */
 		protected function getAutoCompleteSuggestions(kEvent $event, $term)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$field = $this->Application->GetVar('field');
 
Index: core/kernel/db/db_load_balancer.php
===================================================================
--- core/kernel/db/db_load_balancer.php
+++ core/kernel/db/db_load_balancer.php
@@ -489,8 +489,8 @@
 		$debug_mode = $this->Application->isDebugMode();
 		$db_class = $debug_mode ? 'kDBConnectionDebug' : 'kDBConnection';
 
+		/** @var kDBConnection $db */
 		$db = $this->Application->makeClass($db_class, Array ($this->dbType, $this->errorHandler, $server['serverIndex']));
-		/* @var $db kDBConnection */
 
 		$db->debugMode = $debug_mode;
 		$db->Connect($server['DBHost'], $server['DBUser'], $server['DBUserPassword'], $this->servers[0]['DBName'], !$is_master);
Index: core/kernel/db/db_tag_processor.php
===================================================================
--- core/kernel/db/db_tag_processor.php
+++ core/kernel/db/db_tag_processor.php
@@ -374,8 +374,8 @@
 		$prefix_special = rtrim($this->Prefix . '.' . $special, '.');
 		$params['skip_counting'] = true;
 
+		/** @var kDBList $list */
 		$list = $this->Application->recallObject($prefix_special, $this->Prefix . '_List', $params);
-		/* @var $list kDBList */
 
 		if ( !array_key_exists('skip_quering', $params) || !$params['skip_quering'] ) {
 			if ( $requery ) {
@@ -546,8 +546,8 @@
 
 			if ( $this->Special && $this->Application->hasObject($this->Prefix) ) {
 				// object, produced by "kDBList::linkToParent" method, that otherwise would keep it's id
+				/** @var kDBBase $item */
 				$item = $this->Application->recallObject($this->Prefix);
-				/* @var $item kDBBase */
 
 				if ( $item instanceof kDBItem ) {
 					$this->Application->removeObject($this->Prefix);
@@ -603,11 +603,11 @@
 	 */
 	protected function PreviousResource($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
+		/** @var ListHelper $list_helper */
 		$list_helper = $this->Application->recallObject('ListHelper');
-		/* @var $list_helper ListHelper */
 
 		$select_clause = $this->Application->getUnitOption($object->Prefix, 'NavigationSelectClause', null);
 
@@ -624,11 +624,11 @@
 	 */
 	protected function NextResource($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
+		/** @var ListHelper $list_helper */
 		$list_helper = $this->Application->recallObject('ListHelper');
-		/* @var $list_helper ListHelper */
 
 		$select_clause = $this->Application->getUnitOption($object->Prefix, 'NavigationSelectClause', null);
 
@@ -687,8 +687,8 @@
 	{
 		static $default_per_page = Array ();
 
+		/** @var kDBList $object */
 		$object =& $this->GetList($params);
-		/* @var $object kDBList */
 
 		// process sorting
 		if ($object->isMainList()) {
@@ -729,8 +729,8 @@
 			list ($prefix, ) = explode('.', $prefix_special);
 
 			if (!array_key_exists($prefix, $default_per_page)) {
+				/** @var ListHelper $list_helper */
 				$list_helper = $this->Application->recallObject('ListHelper');
-				/* @var $list_helper ListHelper */
 
 				$default_per_page[$prefix] = $list_helper->getDefaultPerPage($prefix);
 			}
@@ -819,16 +819,16 @@
 	 */
 	function ConvertCurrency($value, $target_iso, $source_iso = 'PRIMARY')
 	{
+		/** @var CurrencyRates $converter */
 		$converter = $this->Application->recallObject('CurrencyRates');
-		/* @var $converter CurrencyRates */
 
 		return $converter->Convert($value, $source_iso, $target_iso);
 	}
 
 	function AddCurrencySymbol($value, $iso, $decimal_tag = '')
 	{
+		/** @var CurrencyRates $converter */
 		$converter = $this->Application->recallObject('CurrencyRates');
-		/* @var $converter CurrencyRates */
 
 		return $converter->AddCurrencySymbol($value, $iso, $decimal_tag);
 	}
@@ -849,8 +849,8 @@
 			$params['no_special'] = 'no_special';
 		}
 
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		if (array_key_exists('db', $params) && $params['db']) {
 			$value = $object->GetDBField($field);
@@ -955,8 +955,8 @@
 		$field = $this->SelectParam($params, 'name,field');
 
 		if ($field) {
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			$timestamp = $object->GetDBField($field);
 		}
@@ -990,8 +990,8 @@
 		$format = array_key_exists('format', $params) ? $params['format'] : false;
 
 		if (preg_match('/_regional_(.*)/', $format, $regs)) {
+			/** @var kDBItem $language */
 			$language = $this->Application->recallObject('lang.current');
-			/* @var $language kDBItem */
 
 			$format = $language->GetDBField($regs[1]);
 		}
@@ -1024,14 +1024,14 @@
 	{
 		// <inp2:SetField field="Value" src=p:cust_{$custom_name}"/>
 
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$dst_field = $this->SelectParam($params, 'name,field');
 		list($prefix_special, $src_field) = explode(':', $params['src']);
 
+		/** @var kDBItem $src_object */
 		$src_object = $this->Application->recallObject($prefix_special);
-		/* @var $src_object kDBItem */
 
 		$object->SetDBField($dst_field, $src_object->GetDBField($src_field));
 	}
@@ -1052,8 +1052,8 @@
 
 	function Error($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$field = $this->SelectParam($params, 'name,field');
 
@@ -1063,8 +1063,8 @@
 	function HasError($params)
 	{
 		if ($params['field'] == 'any') {
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			$skip_fields = array_key_exists('except', $params) ? $params['except'] : false;
 			$skip_fields = $skip_fields ? explode(',', $skip_fields) : Array();
@@ -1109,15 +1109,15 @@
 
 	function IsRequired($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$field = $params['field'];
 		$formatter_class = $object->GetFieldOption($field, 'formatter');
 
 		if ( $formatter_class == 'kMultiLanguage' ) {
+			/** @var kMultiLanguage $formatter */
 			$formatter = $this->Application->recallObject($formatter_class);
-			/* @var $formatter kMultiLanguage */
 
 			$field = $formatter->LangFieldName($field);
 		}
@@ -1143,8 +1143,8 @@
 	 */
 	protected function PredefinedOptions($params)
 	{
+		/** @var kDBList $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBList */
 
 		$field = $params['field'];
 		$value = array_key_exists('value', $params) ? $params['value'] : $object->GetDBField($field);
@@ -1230,8 +1230,8 @@
 
 	function PredefinedSearchOptions($params)
 	{
+		/** @var kDBList $object */
 		$object =& $this->GetList($params);
-		/* @var $object kDBList */
 
 		$params['value'] = $this->SearchField($params);
 
@@ -1243,8 +1243,8 @@
 		$field = $this->SelectParam($params, 'name,field');
 
         if ( !isset($object) ) {
+            /** @var kDBItem $object */
             $object = $this->getObject($params);
-            /* @var $object kDBItem */
         }
 
         $options = $object->GetFieldOptions($field);
@@ -1252,8 +1252,8 @@
 		$formatter_class = array_key_exists('formatter', $options) ? $options['formatter'] : false;
 
 		if ( $formatter_class ) {
+			/** @var kFormatter $formatter */
 			$formatter = $this->Application->recallObject($formatter_class);
-			/* @var $formatter kFormatter */
 
 			$human_format = array_key_exists('human', $params) ? $params['human'] : false;
 			$edit_size = array_key_exists('edit_size', $params) ? $params['edit_size'] : false;
@@ -1281,8 +1281,8 @@
 	 */
 	function PageInfo($params)
 	{
+		/** @var kDBList $object */
 		$object =& $this->GetList($params);
-		/* @var $object kDBList */
 
 		$type = $params['type'];
 		unset($params['type']); // remove parameters used only by current tag
@@ -1505,15 +1505,15 @@
 	 */
 	function prepareInputName($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$field = $this->SelectParam($params, 'name,field');
 		$formatter_class = $object->GetFieldOption($field, 'formatter');
 
 		if ($formatter_class == 'kMultiLanguage') {
+			/** @var kMultiLanguage $formatter */
 			$formatter = $this->Application->recallObject($formatter_class);
-			/* @var $formatter kMultiLanguage */
 
 			$force_primary = $object->GetFieldOption($field, 'force_primary');
 			$field = $formatter->LangFieldName($field, $force_primary);
@@ -1637,8 +1637,8 @@
 	{
 		$list =& $this->GetList($params);
 
+		/** @var ListHelper $list_helper */
 		$list_helper = $this->Application->recallObject('ListHelper');
-		/* @var $list_helper ListHelper */
 
 		return $list_helper->hasUserSorting($list);
 	}
@@ -1780,8 +1780,8 @@
 	 */
 	function FieldEquals($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		return $object->GetDBField( $this->SelectParam($params, 'name,field') ) == $params['value'];
 	}
@@ -1848,15 +1848,15 @@
 			return isset($icons[$icon_name]) ? $icons[$icon_name] : '';
 		}
 
+		/** @var Array $status_fields */
 		$status_fields = $this->Application->getUnitOption($this->Prefix, 'StatusField', Array ());
-		/* @var $status_fields Array */
 
 		if ( !$status_fields ) {
 			return $icons['default'];
 		}
 
+		/** @var kDBList $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBList */
 
 		$icon = '';
 
@@ -1903,7 +1903,7 @@
 
 		$prefixes = array_key_exists('prefixes', $title_info) ? $title_info['prefixes'] : false;
 		$all_tag_params = array_key_exists('tag_params', $title_info) ? $title_info['tag_params'] : false;
-		/* @var $prefixes Array */
+		/** @var Array $prefixes */
 
 		if ($prefixes) {
 			// extract tag_params passed directly to SectionTitle tag for specific prefix
@@ -1948,8 +1948,8 @@
 		// replace to section title
 		$section = array_key_exists('section', $params) ? $params['section'] : false;
 		if ($section) {
+			/** @var kSectionsHelper $sections_helper */
 			$sections_helper = $this->Application->recallObject('SectionsHelper');
-			/* @var $sections_helper kSectionsHelper */
 
 			$section_data =& $sections_helper->getSectionData($section);
 			$title = str_replace('#section_label#', '!' . $section_data['label'] . '!', $title);
@@ -2022,8 +2022,8 @@
 
 	function GridInfo($params)
 	{
+		/** @var kDBList $object */
 		$object =& $this->GetList($params);
-		/* @var $object kDBList */
 
 		switch ( $params['type'] ) {
 			case 'filtered':
@@ -2063,13 +2063,13 @@
 	 */
 	function ConfigFormElement($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$field = $params['field'];
 
+		/** @var InpCustomFieldsHelper $helper */
 		$helper = $this->Application->recallObject('InpCustomFieldsHelper');
-		/* @var $helper InpCustomFieldsHelper */
 
 		$element_type = $object->GetDBField($params['element_type_field']);
 
@@ -2287,8 +2287,8 @@
 				$formatter_class = $object->GetFieldOption($field, 'formatter');
 
 				if ( $formatter_class ) {
+					/** @var kFormatter $formatter */
 					$formatter = $this->Application->recallObject($formatter_class);
-					/* @var $formatter kFormatter */
 
 					$ret = $formatter->Format($ret, $field, $object);
 				}
@@ -2348,8 +2348,8 @@
 			$this->Application->RemoveVar($error_var_name);
 		}
 
+		/** @var kDBItem $object */
 		$object = $this->Application->recallObject($this->Prefix . '.' . $this->Special . '-item', null, Array ('skip_autoload' => true));
-		/* @var $object kDBItem */
 
 		$object->SetError($field, $pseudo);
 		return $object->GetErrorMsg($field, false);
@@ -2364,8 +2364,8 @@
 	 */
 	function getObject($params = Array())
 	{
+		/** @var kDBItem $object */
 		$object = $this->Application->recallObject($this->getPrefixSpecial(), $this->Prefix, $params);
-		/* @var $object kDBItem */
 
 		if ( isset($params['requery']) && $params['requery'] ) {
 			$this->Application->HandleEvent(new kEvent($this->getPrefixSpecial() . ':LoadItem', $params));
@@ -2421,8 +2421,8 @@
 	 */
 	function ExportStatus($params)
 	{
+		/** @var kCatDBItemExportHelper $export_object */
 		$export_object = $this->Application->recallObject('CatItemExportHelper');
-		/* @var $export_object kCatDBItemExportHelper */
 
 		$event = new kEvent($this->getPrefixSpecial().':OnDummy');
 
@@ -2501,8 +2501,8 @@
 	{
 		$editor_name = array_key_exists('name', $params) ? $params['name'] : $this->InputName($params);
 
+		/** @var fckFCKHelper $fck_helper */
 		$fck_helper = $this->Application->recallObject('FCKHelper');
-		/* @var $fck_helper fckFCKHelper */
 
 		if ( isset($params['mode']) && $params['mode'] == 'inline' ) {
 			return $fck_helper->CKEditorInlineTag($editor_name, $params);
@@ -2541,8 +2541,8 @@
 	 */
 	protected function ItemLink($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		if ( !isset($params['pass']) ) {
 			$params['pass'] = 'm';
@@ -2566,8 +2566,8 @@
 			return '';
 		}
 
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$item_prefix = isset($params['item_prefix']) ? $params['item_prefix'] : $this->Prefix;
 
@@ -2654,8 +2654,8 @@
 
 	function PrintSerializedFields($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$field = $this->SelectParam($params, 'field');
 		$data = unserialize($object->GetDBField($field));
@@ -2848,8 +2848,8 @@
 	 */
 	function RangeFiltersUsed($params)
 	{
+		/** @var kSearchHelper $search_helper */
 		$search_helper = $this->Application->recallObject('SearchHelper');
-		/* @var $search_helper kSearchHelper */
 
 		return $search_helper->rangeFiltersUsed($this->getPrefixSpecial(), $params['grid']);
 	}
@@ -2964,8 +2964,8 @@
 	 */
 	protected function OptionValue($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$value = $params['value'];
 		$field = $this->SelectParam($params, 'name,field');
@@ -2996,8 +2996,8 @@
 			$prefix = $this->getPrefixSpecial();
 
 			if ( $this->Application->hasObject( $this->getPrefixSpecial() ) ) {
+				/** @var kDBItem $object */
 				$object = $this->getObject($params);
-				/* @var $object kDBItem */
 
 				if ( $object->getFormName() != $form_name ) {
 					trigger_error('Setting form to "<strong>' . $form_name . '</strong>" failed, since object "<strong>' . $this->getPrefixSpecial() . '</strong>" is created before FormName tag (e.g. in event or another tag).', E_USER_WARNING);
@@ -3012,8 +3012,8 @@
 			return '';
 		}
 
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		return $object->getFormName();
 	}
@@ -3029,8 +3029,8 @@
 	{
 		$params['requery'] = 1;
 
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		return '';
 	}
Index: core/kernel/db/dbitem.php
===================================================================
--- core/kernel/db/dbitem.php
+++ core/kernel/db/dbitem.php
@@ -127,8 +127,8 @@
 		$formatter = $this->GetFieldOption($field_name, 'formatter');
 
 		if ( $formatter ) {
+			/** @var kFormatter $formatter */
 			$formatter = $this->Application->recallObject($formatter);
-			/* @var $formatter kFormatter */
 
 			$res = $formatter->Format($value, $field_name, $this, $format);
 		}
@@ -185,8 +185,8 @@
 
 		// kFormatter is always used, to make sure, that numeric value is converted to normal representation
 		// according to regional format, even when formatter is not set (try seting format to 1.234,56 to understand why)
+		/** @var kFormatter $formatter */
 		$formatter = $this->Application->recallObject(isset($options['formatter']) ? $options['formatter'] : 'kFormatter');
-		/* @var $formatter kFormatter */
 
 		$parsed = $formatter->Parse($value, $name, $this);
 
@@ -539,8 +539,8 @@
 
 		foreach ($this->Fields as $field => $options) {
 			if ( isset($options['formatter']) ) {
+				/** @var kFormatter $formatter */
 				$formatter = $this->Application->recallObject($options['formatter']);
-				/* @var $formatter kFormatter */
 
 				$formatter->UpdateMasterFields($field, $this->GetDBField($field), $options, $this);
 			}
@@ -1185,8 +1185,8 @@
 			$this->LogChanges($main_prefix, $mode);
 
 			if (!$this->IsTempTable()) {
+				/** @var kDBEventHandler $handler */
 				$handler = $this->Application->recallObject($this->Prefix . '_EventHandler');
-				/* @var $handler kDBEventHandler */
 
 				$ses_var_name = $main_prefix . '_changes_' . $this->Application->GetTopmostWid($this->Prefix);
 				$handler->SaveLoggedChanges($ses_var_name, $this->ShouldLogChanges());
@@ -1239,7 +1239,7 @@
 			// collect foreign key values (for serial reset)
 			$foreign_keys = $this->Application->getUnitOption($this->Prefix, 'ForeignKey', Array ());
 			$dependent_fields = $fields_hash['ParentId'] = $fields_hash['ParentPrefix'] = Array ();
-			/* @var $foreign_keys Array */
+			/** @var Array $foreign_keys */
 
 			if ( is_array($foreign_keys) ) {
 				foreach ($foreign_keys as $prefix => $field_name) {
@@ -1516,18 +1516,18 @@
 
 		$cdata_key = rtrim($this->Prefix . '-cdata.' . $this->Special, '.');
 
+		/** @var kDBItem $cdata */
 		$cdata = $this->Application->recallObject($cdata_key, null, Array ('skip_autoload' => true));
-		/* @var $cdata kDBItem */
 
 		$resource_id = $this->GetDBField('ResourceId');
 		$cdata->Load($resource_id, 'ResourceId');
 		$cdata->SetDBField('ResourceId', $resource_id);
 
+		/** @var kMultiLanguage $ml_formatter */
 		$ml_formatter = $this->Application->recallObject('kMultiLanguage');
-		/* @var $ml_formatter kMultiLanguage */
 
+		/** @var kMultiLanguageHelper $ml_helper */
 		$ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
-		/* @var $ml_helper kMultiLanguageHelper */
 
 		$languages = $ml_helper->getLanguages();
 
Index: core/kernel/db/dblist.php
===================================================================
--- core/kernel/db/dblist.php
+++ core/kernel/db/dblist.php
@@ -671,8 +671,8 @@
 		$formatter_class = $this->GetFieldOption($field, 'formatter');
 
 		if ( $formatter_class ) {
+			/** @var kFormatter $formatter */
 			$formatter = $this->Application->recallObject($formatter_class);
-			/* @var $formatter kFormatter */
 
 			$res = $formatter->Format($res, $field, $this);
 		}
@@ -748,8 +748,8 @@
 	 */
 	private function GetWhereClause($for_counting=false,$system_filters_only=false)
 	{
+		/** @var kMultipleFilter $where */
 		$where = $this->Application->makeClass('kMultipleFilter');
-		/* @var $where kMultipleFilter */
 
 		$where->addFilter(
 			'system_where',
@@ -798,8 +798,8 @@
 	private function GetHavingClause($for_counting=false, $system_filters_only=false, $aggregated = 0)
 	{
 		if ($for_counting) {
+			/** @var kMultipleFilter $aggregate_filter */
 			$aggregate_filter = $this->Application->makeClass('kMultipleFilter');
-			/* @var $aggregate_filter kMultipleFilter */
 
 			$aggregate_filter->addFilter('aggregate_system', $this->AggregateFilter[kDBList::FLT_SYSTEM]);
 			if (!$system_filters_only) {
@@ -808,8 +808,8 @@
 			return $this->extractCalculatedFields($aggregate_filter->getSQL(), 2);
 		}
 
+		/** @var kMultipleFilter $having */
 		$having = $this->Application->makeClass('kMultipleFilter');
-		/* @var $having kMultipleFilter */
 
 		$having->addFilter('system_having', $this->HavingFilter[kDBList::FLT_SYSTEM] );
 		if ($aggregated == 0) {
@@ -1317,8 +1317,8 @@
 				return ;
 			}
 
+			/** @var kDBItem $parent_object */
 			$parent_object = $this->Application->recallObject($parent_prefix.'.'.$special);
-			/* @var $parent_object kDBItem */
 
 			if (!$parent_object->isLoaded()) {
 				$this->addFilter('parent_filter', 'FALSE');
@@ -1359,8 +1359,8 @@
 		$ret = Array ();
 
 		if ($formatted && array_key_exists('formatter', $this->Fields[$field])) {
+			/** @var kFormatter $formatter */
 			$formatter = $this->Application->recallObject($this->Fields[$field]['formatter']);
-			/* @var $formatter kFormatter */
 
 			while ($i < $this->SelectedCount) {
 				$ret[] = $formatter->Format($this->Records[$i][$field], $field, $this, $format);
Index: core/kernel/event_handler.php
===================================================================
--- core/kernel/event_handler.php
+++ core/kernel/event_handler.php
@@ -149,8 +149,8 @@
 		 */
 		protected function wrapForAjax(kEvent $event)
 		{
+			/** @var AjaxFormHelper $ajax_form_helper */
 			$ajax_form_helper = $this->Application->recallObject('AjaxFormHelper');
-			/* @var $ajax_form_helper AjaxFormHelper */
 
 			$ajax_form_helper->transitEvent($event, $this->getAjaxSubEventName($event));
 		}
@@ -209,8 +209,8 @@
 		 */
 		public function CheckPermission(kEvent $event)
 		{
+			/** @var kPermissionsHelper $perm_helper */
 			$perm_helper = $this->Application->recallObject('PermissionsHelper');
-			/* @var $perm_helper kPermissionsHelper */
 
 			if ( !isset($this->permMapping[$event->Name]) ) {
 				$ajax_event_name = $this->getAjaxSubEventName($event);
Index: core/kernel/event_manager.php
===================================================================
--- core/kernel/event_manager.php
+++ core/kernel/event_manager.php
@@ -256,8 +256,8 @@
 			}
 		}
 
+		/** @var kEventHandler $event_handler */
 		$event_handler = $this->Application->recallObject($event->Prefix . '_EventHandler');
-		/* @var $event_handler kEventHandler */
 
 		$event_handler->processEvent($event);
 
@@ -316,8 +316,8 @@
 		try {
 			$category_ids = Array ();
 
+			/** @var kDBItem $category */
 			$category = $this->Application->recallObject('c');
-			/* @var $category kDBItem */
 
 			if ( $category->isLoaded() ) {
 				$category_ids = explode('|', substr($category->GetDBField('ParentPath'), 1, -1));
@@ -331,8 +331,8 @@
 		try {
 			$item_id = $parent_item_id = false;
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( $object->isLoaded() ) {
 				$item_id = $object->GetID();
@@ -423,8 +423,8 @@
 			return false;
 		}
 
+		/** @var kEventHandler $event_handler */
 		$event_handler = $this->Application->recallObject($event->Prefix . '_EventHandler');
-		/* @var $event_handler kEventHandler */
 
 		return $event_handler->getEventMethod($event) != '';
 	}
@@ -492,8 +492,8 @@
 	 */
 	public function setEvent($prefix_special,$event_name)
 	{
+		/** @var Params $actions */
 		$actions = $this->Application->recallObject('kActions');
-		/* @var $actions Params */
 
 		$actions->Set('events[' . $prefix_special . ']', $event_name);
 	}
Index: core/kernel/globals.php
===================================================================
--- core/kernel/globals.php
+++ core/kernel/globals.php
@@ -318,8 +318,8 @@
 	{
 		$application =& kApplication::Instance();
 
+		/** @var kCurlHelper $curl_helper */
 		$curl_helper = $application->recallObject('CurlHelper');
-		/* @var $curl_helper kCurlHelper */
 
 		if ($request_type == 'POST') {
 			$curl_helper->SetRequestMethod(kCurlHelper::REQUEST_METHOD_POST);
Index: core/kernel/kbase.php
===================================================================
--- core/kernel/kbase.php
+++ core/kernel/kbase.php
@@ -883,8 +883,8 @@
 		if ( $formatter_class ) {
 			$value = ($formatter_class == 'kMultiLanguage') && !preg_match('/^l[0-9]+_/', $name) ? '' : $this->GetDBField($name);
 
+			/** @var kFormatter $formatter */
 			$formatter = $this->Application->recallObject($formatter_class);
-			/* @var $formatter kFormatter */
 
 			return $formatter->Format($value, $name, $this, $format);
 		}
@@ -933,8 +933,8 @@
 
 		foreach ($fields as $field) {
 			if ( isset($this->Fields[$field]['formatter']) ) {
+				/** @var kFormatter $formatter */
 				$formatter = $this->Application->recallObject($this->Fields[$field]['formatter']);
-				/* @var $formatter kFormatter */
 
 				$formatter->UpdateSubFields($field, $this->GetDBField($field), $this->Fields[$field], $this);
 			}
@@ -955,8 +955,8 @@
 				continue;
 			}
 
+			/** @var kFormatter $formatter */
 			$formatter = $this->Application->recallObject( $this->Fields[$field_name]['formatter'] );
-			/* @var $formatter kFormatter */
 
 			$formatter->PrepareOptions($field_name, $this->Fields[$field_name], $this);
 		}
@@ -1083,8 +1083,8 @@
 				$table_info['ParentTableKey'] = getArrayValue($table_info, 'ParentTableKey', $parent_prefix);
 			}
 
+			/** @var kDBItem $main_object */
 			$main_object = $this->Application->recallObject($parent_prefix.'.'.$special, null, Array ('raise_warnings' => 0));
-			/* @var $main_object kDBItem */
 
 			if (!$main_object->isLoaded() && $guess_special) {
 				$main_object = $this->Application->recallObject($parent_prefix);
Index: core/kernel/languages/phrases_cache.php
===================================================================
--- core/kernel/languages/phrases_cache.php
+++ core/kernel/languages/phrases_cache.php
@@ -202,8 +202,8 @@
 			$this->LanguageId = $language_id;
 
 			if (!$this->Application->isAdmin && $this->Application->GetVar('admin')) {
+				/** @var Session $admin_session */
 				$admin_session = $this->Application->recallObject('Session.admin');
-				/* @var $admin_session Session */
 
 				$this->AdminLanguageId = $admin_session->GetField('Language');
 			}
Index: core/kernel/managers/cache_manager.php
===================================================================
--- core/kernel/managers/cache_manager.php
+++ core/kernel/managers/cache_manager.php
@@ -282,8 +282,8 @@
 
 			$this->Application->setFromCache($cache);
 
+			/** @var kArray $aggregator */
 			$aggregator = $this->Application->recallObject('TagsAggregator', 'kArray');
-			/* @var $aggregator kArray */
 
 			$aggregator->setFromCache($cache);
 			$this->setFromCache($cache);
@@ -330,8 +330,8 @@
 	 */
 	public function UpdateUnitCache()
 	{
+		/** @var kArray $aggregator */
 		$aggregator = $this->Application->recallObject('TagsAggregator', 'kArray');
-		/* @var $aggregator kArray */
 
 		$this->preloadConfigVars(); // preloading will put to cache
 
Index: core/kernel/managers/plain_url_processor.php
===================================================================
--- core/kernel/managers/plain_url_processor.php
+++ core/kernel/managers/plain_url_processor.php
@@ -114,8 +114,8 @@
 		$vars = Array ();
 		$prefix_special = array_shift($mixed_part); // l.pick, l
 
+		/** @var kHTTPQuery $http_query */
 		$http_query = $this->Application->recallObject('HTTPQuery');
-		/* @var $http_query kHTTPQuery */
 
 		$query_map = $http_query->discoverUnit($prefix_special); // from $_GET['env']
 
@@ -223,8 +223,9 @@
 	public function BuildModuleEnv($prefix_special, &$params, $pass_events = false)
 	{
 		list($prefix) = explode('.', $prefix_special);
+
+		/** @var Array $query_vars */
 		$query_vars = $this->Application->getUnitOption($prefix, 'QueryString', Array ());
-		/* @var $query_vars Array */
 
 		//if pass events is off and event is not implicitly passed
 		if ( !$pass_events && !isset($params[$prefix_special . '_event']) ) {
Index: core/kernel/managers/request_manager.php
===================================================================
--- core/kernel/managers/request_manager.php
+++ core/kernel/managers/request_manager.php
@@ -153,8 +153,8 @@
 		$event->SetRedirectParam('opener', 's'); // stay on same page after event is called
 		$event->setEventParam('top_prefix', $this->Application->GetTopmostPrefix($event->Prefix, true));
 
+		/** @var kEventHandler $event_handler */
 		$event_handler = $this->Application->recallObject($event->Prefix . '_EventHandler');
-		/* @var $event_handler kEventHandler */
 
 		if ( ($this->Application->RecallVar('user_id') == USER_ROOT) || $event_handler->CheckPermission($event) ) {
 			$this->Application->HandleEvent($event);
@@ -176,8 +176,8 @@
 		$event->redirect = $this->Application->isAdmin ? 'no_permission' : $this->Application->ConfigValue('NoPermissionTemplate');
 		$event->SetRedirectParam('pass', 'm');
 
+		/** @var kThemesHelper $themes_helper */
 		$themes_helper = $this->Application->recallObject('ThemesHelper');
-		/* @var $themes_helper kThemesHelper */
 
 		$event->SetRedirectParam( 'm_cat_id', $themes_helper->getPageByTemplate($event->redirect) );
 
@@ -320,8 +320,8 @@
 	 */
 	protected function processOpener()
 	{
+		/** @var kOpenerStack $opener_stack */
 		$opener_stack = $this->Application->makeClass('kOpenerStack');
-		/* @var $opener_stack kOpenerStack */
 
 		switch ( $this->Application->GetVar('m_opener') ) {
 			case 'r':
@@ -331,8 +331,8 @@
 			case 'd':
 				// "down/push" new template to opener stack, deeplevel++
 				if ( $this->Application->GetVar('front') ) {
+					/** @var Session $front_session */
 					$front_session = $this->Application->recallObject('Session.front');
-					/* @var $front_session Session */
 
 					$opener_stack->pushRaw( '../' . $front_session->RecallVar('last_template') );
 				}
@@ -353,8 +353,8 @@
 				$this->Application->StoreVar('last_wid', $popup_wid);
 				$this->Application->SetVar('m_wid', $popup_wid);
 
+				/** @var kOpenerStack $popup_opener_stack */
 				$popup_opener_stack = $this->Application->makeClass('kOpenerStack', Array ($popup_wid));
-				/* @var $popup_opener_stack kOpenerStack */
 
 				$popup_opener_stack->pushRaw( $this->getLastTemplate($parent_wid) );
 				$popup_opener_stack->save();
@@ -388,16 +388,16 @@
 	protected function getLastTemplate($window_id)
 	{
 		if ( $this->Application->GetVar('front') ) {
+			/** @var Session $front_session */
 			$front_session = $this->Application->recallObject('Session.front');
-			/* @var $front_session Session */
 
 			return '../' . $front_session->RecallVar( rtrim('last_template_popup_' . $window_id, '_') );
 		}
 
 		if ( $this->Application->GetVar('merge_opener_stack') ) {
 			// get last template from parent (that was closed) window opener stack
+			/** @var kOpenerStack $parent_opener_stack */
 			$parent_opener_stack = $this->Application->makeClass('kOpenerStack', Array ($window_id));
-			/* @var $parent_opener_stack kOpenerStack */
 
 			$last_template = $parent_opener_stack->pop(true);
 			$parent_opener_stack->save(true);
@@ -428,8 +428,8 @@
 		$window_relations = $window_relations ? unserialize($window_relations) : Array ();
 		$wid = isset($window_relations[$wid]) ? $window_relations[$wid] : false;*/
 
+		/** @var kOpenerStack $opener_stack */
 		$opener_stack = $this->Application->makeClass('kOpenerStack', Array ($wid));
-		/* @var $opener_stack kOpenerStack */
 
 		// change opener stack
 		$default_params = Array ('m_opener' => 'u');
@@ -460,8 +460,8 @@
 	 */
 	protected function openerStackChange($new_template = null, $new_params = null)
 	{
+		/** @var kOpenerStack $opener_stack */
 		$opener_stack = $this->Application->makeClass('kOpenerStack');
-		/* @var $opener_stack kOpenerStack */
 
 		list ($template, $params, $index_file) = $opener_stack->pop();
 
Index: core/kernel/managers/rewrite_url_processor.php
===================================================================
--- core/kernel/managers/rewrite_url_processor.php
+++ core/kernel/managers/rewrite_url_processor.php
@@ -700,8 +700,8 @@
 			return false;
 		}
 
+		/** @var kThemesHelper $themes_helper */
 		$themes_helper = $this->Application->recallObject('ThemesHelper');
-		/* @var $themes_helper kThemesHelper */
 
 		do {
 			$index_added = false;
@@ -749,8 +749,8 @@
 	{
 		list ($prefix) = explode('.', $prefix_special);
 
+		/** @var Array $query_vars */
 		$query_vars = $this->Application->getUnitOption($prefix, 'QueryString', Array ());
-		/* @var $query_vars Array */
 
 		if ( !$query_vars ) {
 			// given prefix doesn't use "env" variable to pass it's data
@@ -841,8 +841,8 @@
 		if ( !isset($this->_templateAliases) ) {
 			// when empty url OR mod-rewrite disabled
 
+			/** @var kThemesHelper $themes_helper */
 			$themes_helper = $this->Application->recallObject('ThemesHelper');
-			/* @var $themes_helper kThemesHelper */
 
 			$sql = 'SELECT TemplateAliases
 					FROM ' . TABLE_PREFIX . 'Themes
Index: core/kernel/managers/scheduled_task_manager.php
===================================================================
--- core/kernel/managers/scheduled_task_manager.php
+++ core/kernel/managers/scheduled_task_manager.php
@@ -118,8 +118,8 @@
 		$user_id = $this->Application->RecallVar('user_id');
 		$this->Application->StoreVar('user_id', USER_ROOT, true); // to prevent permission checking inside events, true for optional storage
 
+		/** @var SiteHelper $site_helper */
 		$site_helper = $this->Application->recallObject('SiteHelper');
-		/* @var $site_helper SiteHelper */
 
 		$site_domain_id = $site_helper->getDomainByName('DomainName', DOMAIN);
 
@@ -167,8 +167,8 @@
 			return false;
 		}
 
+		/** @var kCronHelper $cron_helper */
 		$cron_helper = $this->Application->recallObject('kCronHelper');
-		/* @var $cron_helper kCronHelper */
 
 		$start_time = adodb_mktime();
 
Index: core/kernel/managers/subscription_manager.php
===================================================================
--- core/kernel/managers/subscription_manager.php
+++ core/kernel/managers/subscription_manager.php
@@ -45,7 +45,7 @@
 	{
 		foreach ($this->subscriptions as $subscription) {
 			if ( !$subscription->getSubscription()->isLoaded() ) {
-				/* @var $subscription kSubscriptionItem */
+				/** @var kSubscriptionItem $subscription */
 
 				return false;
 			}
@@ -64,7 +64,7 @@
 	{
 		foreach ($this->subscriptions as $subscription) {
 			if ( !$subscription->subscribe() ) {
-				/* @var $subscription kSubscriptionItem */
+				/** @var kSubscriptionItem $subscription */
 
 				return false;
 			}
@@ -83,7 +83,7 @@
 	{
 		foreach ($this->subscriptions as $subscription) {
 			if ( !$subscription->unsubscribe() ) {
-				/* @var $subscription kSubscriptionItem */
+				/** @var kSubscriptionItem $subscription */
 
 				return false;
 			}
@@ -151,8 +151,8 @@
 	{
 		$special = kUtil::crc32(serialize($this->fields));
 
+		/** @var kDBItem $subscription */
 		$subscription = $this->Application->recallObject('system-event-subscription.' . $special, null, Array ('skip_autoload' => true));
-		/* @var $subscription kDBItem */
 
 		if ( !$subscription->isLoaded() || $reload ) {
 			$subscription->Load($this->fields);
@@ -194,11 +194,11 @@
 			return true;
 		}
 
+		/** @var kTempTablesHandler $temp_handler */
 		$temp_handler = $this->Application->recallObject($subscription->getPrefixSpecial() . '_TempHandler', 'kTempTablesHandler');
-		/* @var $temp_handler kTempTablesHandler */
 
 		$temp_handler->DeleteItems($subscription->Prefix, $subscription->Special, Array ($subscription->GetID()));
 
 		return true;
 	}
 }
\ No newline at end of file
Index: core/kernel/managers/url_manager.php
===================================================================
--- core/kernel/managers/url_manager.php
+++ core/kernel/managers/url_manager.php
@@ -132,8 +132,8 @@
 
 		$ssl = isset($params['__SSL__']) ? $params['__SSL__'] : NULL;
 		if ( $ssl !== NULL ) {
+			/** @var Session $session */
 			$session = $this->Application->recallObject('Session');
-			/* @var $session Session */
 
 			$target_url = rtrim($this->Application->BaseURL('', $ssl, false), '/');
 			$cookie_url = trim($session->CookieDomain . $session->CookiePath, '/.');
@@ -226,8 +226,8 @@
 	 */
 	protected function processPopupClose($prefix = '', $params = Array ())
 	{
+		/** @var kOpenerStack $opener_stack */
 		$opener_stack = $this->Application->makeClass('kOpenerStack');
-		/* @var $opener_stack kOpenerStack */
 
 		if ( $opener_stack->isEmpty() ) {
 			return false;
@@ -420,8 +420,8 @@
 	public function LoadStructureTemplateMapping()
 	{
 		if (!$this->Application->isAdmin) {
+			/** @var CategoryHelper $category_helper */
 			$category_helper = $this->Application->recallObject('CategoryHelper');
-			/* @var $category_helper CategoryHelper */
 
 			$this->structureTemplateMapping = $category_helper->getTemplateMapping();
 		}
Index: core/kernel/nparser/compiler.php
===================================================================
--- core/kernel/nparser/compiler.php
+++ core/kernel/nparser/compiler.php
@@ -121,7 +121,7 @@
 		$folder_path = preg_replace($reg_exp, '', $folder_path, 1); // this make sense, since $folderPath may NOT contain FULL_PATH
 
 		$iterator = new DirectoryIterator(FULL_PATH . $folder_path);
-		/* @var $file_info DirectoryIterator */
+		/** @var DirectoryIterator $file_info */
 
 		foreach ($iterator as $file_info) {
 			$filename = $file_info->getFilename();
Index: core/kernel/nparser/nparser.php
===================================================================
--- core/kernel/nparser/nparser.php
+++ core/kernel/nparser/nparser.php
@@ -327,9 +327,10 @@
 		if (class_exists('_Tag_'.$tag['name'])) { // block tags should have special handling class
 			if ($tag['opening'] == '<') {
 				$class = '_Tag_'.$tag['name'];
+
+				/** @var _BlockTag $instance */
 				$instance = new $class($tag);
 				$instance->Parser =& $this;
-				/* @var $instance _BlockTag */
 				$this->Stack[++$this->Level] =& $instance;
 				$this->Buffers[$this->Level] = '';
 				$this->Cachable[$this->Level] = true;
@@ -517,8 +518,8 @@
 
 	function &RunMainPage($pre_parsed)
 	{
+		/** @var kDBItem $page */
 		$page = $this->Application->recallObject('st.-virtual');
-		/* @var $page kDBItem */
 
 		if ($page->isLoaded()) {
 			// page found in database
@@ -757,8 +758,8 @@
 		$m_processor =& $this->GetProcessor('m');
 		$flag_values = $m_processor->PreparePostProcess($params);
 
+		/** @var Closure $f_name */
 		$f_name = $this->Elements[$params['name']];
-		/* @var $f_name Closure */
 
 		$ret = $f_name($this, $params);
 		$ret = $m_processor->PostProcess($ret, $flag_values);
@@ -1219,8 +1220,8 @@
 	 */
 	function CompressScript($data, $raw_script = false, $file_extension = '')
 	{
+		/** @var MinifyHelper $minify_helper */
 		$minify_helper = $this->Application->recallObject('MinifyHelper');
-		/* @var $minify_helper MinifyHelper */
 
 		if ($raw_script) {
 			$minify_helper->compressString($data, $file_extension);
Index: core/kernel/nparser/ntags.php
===================================================================
--- core/kernel/nparser/ntags.php
+++ core/kernel/nparser/ntags.php
@@ -370,8 +370,9 @@
 		unset($tag['NP']['elements']);
 
 		$class = '_Tag_RenderElement';
+
+		/** @var _Tag_RenderElement $instance */
 		$instance = new $class($tag);
-		/* @var $instance _Tag_RenderElement */
 
 		$instance->Parser =& $this->Parser;
 
Index: core/kernel/processors/main_processor.php
===================================================================
--- core/kernel/processors/main_processor.php
+++ core/kernel/processors/main_processor.php
@@ -20,8 +20,8 @@
 	{
 		parent::__construct();
 
+		/** @var Params $actions */
 		$actions = $this->Application->recallObject('kActions');
-		/* @var $actions Params */
 
 		$actions->Set('t', $this->Application->GetVar('t'));
 		$actions->Set('sid', $this->Application->GetSID());
@@ -478,8 +478,8 @@
 			$value_list = $this->Conn->GetOne($sql);
 
 			if ( $value_list ) {
+				/** @var InpCustomFieldsHelper $helper */
 				$helper = $this->Application->recallObject('InpCustomFieldsHelper');
-				/* @var $helper InpCustomFieldsHelper */
 
 				$options = $helper->GetValuesHash($value_list);
 				$ret = isset($options[$ret]) ? $options[$ret] : $ret;
@@ -518,8 +518,8 @@
 	 */
 	protected function DumpSystemInfo($params)
 	{
+		/** @var Params $actions */
 		$actions = $this->Application->recallObject('kActions');
-		/* @var $actions Params */
 
 		$actions->Set('t', $this->Application->GetVar('t'));
 
@@ -547,8 +547,8 @@
 
 		$form_fields = Array ();
 		if ( $this->Application->RewriteURLs() ) {
+			/** @var Session $session */
 			$session = $this->Application->recallObject('Session');
-			/* @var $session Session */
 
 			if ( $session->NeedQueryString() ) {
 				$form_fields['sid'] = $this->Application->GetSID();
@@ -614,14 +614,14 @@
 		$phrase_key = mb_strtoupper($phrase_name);
 
 		if ( $default_translation && strpos($translation, '!' . $phrase_key . '!') !== false ) {
+			/** @var kDBItem $phrase */
 			$phrase = $this->Application->recallObject('phrases.autocreate', null, Array ('skip_autoload' => true));
-			/* @var $phrase kDBItem */
 
 			if ( !$phrase->Load($phrase_key, 'PhraseKey') ) {
 				$phrase->SetDBField('Phrase', $phrase_name);
 
+				/** @var kMultiLanguageHelper $ml_helper */
 				$ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
-				/* @var $ml_helper kMultiLanguageHelper */
 
 				$languages = $ml_helper->getLanguages();
 
@@ -848,8 +848,8 @@
 	 */
 	function CheckPermission($params)
 	{
+		/** @var kPermissionsHelper $perm_helper */
 		$perm_helper = $this->Application->recallObject('PermissionsHelper');
-		/* @var $perm_helper kPermissionsHelper */
 
 		return $perm_helper->TagPermissionCheck($params);
 	}
@@ -873,8 +873,8 @@
 			(isset($params['perm_prefix']) && $params['perm_prefix']) ||
 			(isset($params['permissions']) && $params['permissions'])) {
 
+			/** @var kPermissionsHelper $perm_helper */
 			$perm_helper = $this->Application->recallObject('PermissionsHelper');
-			/* @var $perm_helper kPermissionsHelper */
 
 			$perm_status = $perm_helper->TagPermissionCheck($params);
 			if (!$perm_status) {
@@ -1015,8 +1015,8 @@
 			$require = $this->Application->ConfigValue('Require_AdminSSL');
 		}
 
+		/** @var kHTTPQuery $http_query */
 		$http_query = $this->Application->recallObject('HTTPQuery');
-		/* @var $http_query kHTTPQuery */
 
 		$pass = $http_query->getRedirectParams();
 		$pass['pass_events'] = 1; // to make sure all events are passed when redirect happens
@@ -1131,8 +1131,8 @@
 		$path = FULL_PATH . '/' . $params['path'];
 		$pseudo = isset($params['special']) ? 'EmailSender.' . $params['special'] : 'EmailSender';
 
+		/** @var kEmailSendingHelper $esender */
 		$esender = $this->Application->recallObject($pseudo);
-		/* @var $esender kEmailSendingHelper */
 
 		if ( file_exists($path) && is_file($path) ) {
 			$esender->AddAttachment($path);
@@ -1144,8 +1144,8 @@
 		$this->NoDebug($params);
 		$this->Application->SetVar('skip_last_template', 1);
 
+		/** @var kCaptchaHelper $captcha_helper */
 		$captcha_helper = $this->Application->recallObject('CaptchaHelper');
-		/* @var $captcha_helper kCaptchaHelper */
 
 		// generate captcha code
 		$code = $captcha_helper->prepareCode( $this->Application->GetVar('var') );
Index: core/kernel/processors/tag_processor.php
===================================================================
--- core/kernel/processors/tag_processor.php
+++ core/kernel/processors/tag_processor.php
@@ -62,8 +62,8 @@
 			}
 
 			if ( $this->Application->hasObject('TagsAggregator') ) {
+				/** @var kArray $aggregator */
 				$aggregator = $this->Application->recallObject('TagsAggregator');
-				/* @var $aggregator kArray */
 
 				$tmp = $this->Application->processPrefix($prefix);
 				$tag_mapping = $aggregator->GetArrayValue($tmp['prefix'], $method);
@@ -149,8 +149,9 @@
 		{
 			if ( $this->Application->hasObject('TagsAggregator') ) {
 				$Method = $tag;
+
+				/** @var kArray $aggregator */
 				$aggregator = $this->Application->recallObject('TagsAggregator');
-				/* @var $aggregator kArray */
 
 				$tmp = $this->Application->processPrefix($prefix);
 				$tag_mapping = $aggregator->GetArrayValue($tmp['prefix'], $Method);
@@ -160,8 +161,8 @@
 					$tmp = $this->Application->processPrefix($tag_mapping[0]);
 					$__tag_processor = $tmp['prefix'] . '_TagProcessor';
 
+					/** @var kTagProcessor $processor */
 					$processor = $this->Application->recallObject($__tag_processor);
-					/* @var $processor kTagProcessor */
 
 					$processor->Init($tmp['prefix'], getArrayValue($tag_mapping, 2) ? $tag_mapping[2] : $tmp['special']);
 
Index: core/kernel/session/session.php
===================================================================
--- core/kernel/session/session.php
+++ core/kernel/session/session.php
@@ -332,8 +332,8 @@
 			return false;
 		}
 
+		/** @var kHTTPQuery $http_query */
 		$http_query = $this->Application->recallObject('HTTPQuery');
-		/* @var $http_query kHTTPQuery */
 
 		$cookies_on = array_key_exists('cookies_on', $http_query->Cookie); // not good here
 
@@ -450,8 +450,8 @@
 
 	function getFlashSID()
 	{
+		/** @var kHTTPQuery $http_query */
 		$http_query = $this->Application->recallObject('HTTPQuery');
-		/* @var $http_query kHTTPQuery */
 
 		return getArrayValue($http_query->Post, 'flashsid');
 	}
@@ -466,8 +466,8 @@
 		$get_sid = $this->getFlashSID();
 
 		if (!$get_sid) {
+			/** @var kHTTPQuery $http_query */
 			$http_query = $this->Application->recallObject('HTTPQuery');
-			/* @var $http_query kHTTPQuery */
 
 			$get_sid = getArrayValue($http_query->Get, $this->GETName);
 		}
@@ -891,8 +891,8 @@
 
 					$admin_saved = true;
 
+					/** @var Session $admin_session */
 					$admin_session = $this->Application->recallObject('Session.admin');
-					/* @var $admin_session Session */
 
 					// save to admin last_template too, because when F5 is pressed in frameset Front-End frame should reload as well
 
Index: core/kernel/utility/debugger.php
===================================================================
--- core/kernel/utility/debugger.php
+++ core/kernel/utility/debugger.php
@@ -1305,8 +1305,8 @@
 					$this->ProfilerData[$key]['line'] = $trace_results[$i]['line'];
 
 					if ( isset($trace_results[$i + 1]['object']) && isset($trace_results[$i + 1]['object']->Prefix) ) {
+						/** @var kBase $object */
 						$object =& $trace_results[$i + 1]['object'];
-						/* @var $object kBase */
 
 						$prefix_special = rtrim($object->Prefix . '.' . $object->Special, '.');
 						$this->ProfilerData[$key]['prefix_special'] = $prefix_special;
Index: core/kernel/utility/email.php
===================================================================
--- core/kernel/utility/email.php
+++ core/kernel/utility/email.php
@@ -369,12 +369,12 @@
 					$this->fromEmail = $user_info['Email'];
 					$this->fromName = trim($user_info['FirstName'] . ' ' . $user_info['LastName']);
 
+					/** @var UsersItem $user */
 					$user = $this->Application->recallObject(
 						'u.email-from',
 						null,
 						array('live_table' => true, 'skip_autoload' => true)
 					);
-					/* @var $user UsersItem */
 
 					$user->Load($user_info['PortalUserId']);
 				}
@@ -473,8 +473,8 @@
 			return false;
 		}
 
+		/** @var MInputHelper $minput_helper */
 		$minput_helper = $this->Application->recallObject('MInputHelper');
-		/* @var $minput_helper MInputHelper */
 
 		// group recipients by type
 		$records = $minput_helper->parseMInputXML($xml);
@@ -543,12 +543,12 @@
 
 		array_unshift($this->recipients[EmailTemplate::RECIPIENT_TYPE_TO], $add_recipient);
 
+		/** @var UsersItem $user */
 		$user = $this->Application->recallObject(
 			'u.email-to',
 			null,
 			array('live_table' => true, 'skip_autoload' => true)
 		);
-		/* @var $user UsersItem */
 
 		$user->Load($this->recipientUserId);
 	}
@@ -727,8 +727,8 @@
 		$language_id = $restore ? $prev_language_id : $this->params['language_id'];
 		$this->Application->SetVar('m_lang', $language_id);
 
+		/** @var LanguagesItem $language */
 		$language = $this->Application->recallObject('lang.current');
-		/* @var $language LanguagesItem */
 
 		$language->Load($language_id);
 
@@ -779,8 +779,8 @@
 		$design_key = 'L' . $this->params['language_id'] . ':' . ($is_html ? 'html' : 'text');
 
 		if ( !isset($design_templates[$design_key]) ) {
+			/** @var LanguagesItem $language */
 			$language = $this->Application->recallObject('lang.current');
-			/* @var $language LanguagesItem */
 
 			$design_template = $language->GetDBField($is_html ? 'HtmlEmailTemplate' : 'TextEmailTemplate');
 
@@ -850,8 +850,8 @@
 		$text = $this->Application->Parser->Parse($this->_normalizeLineEndings($text), $template_name);
 		$this->Application->Parser->SetParams($parser_params); // restore parser params
 
+		/** @var CategoryHelper $category_helper */
 		$category_helper = $this->Application->recallObject('CategoryHelper');
-		/* @var $category_helper CategoryHelper */
 
 		return $category_helper->replacePageIds($is_html ? $this->_removeTrailingLineEndings($text) : $text);
 	}
Index: core/kernel/utility/event.php
===================================================================
--- core/kernel/utility/event.php
+++ core/kernel/utility/event.php
@@ -426,8 +426,8 @@
 			$section = $this->Application->getUnitOption($top_prefix.'.main', 'PermSection');
 
 			// 2. check if this section has perm_prefix mapping to other prefix
+			/** @var kSectionsHelper $sections_helper */
 			$sections_helper = $this->Application->recallObject('SectionsHelper');
-			/* @var $sections_helper kSectionsHelper */
 
 			$section_data =& $sections_helper->getSectionData($section);
 			if ($section_data && isset($section_data['perm_prefix']) && $section_data['perm_prefix'] != $top_prefix) {
Index: core/kernel/utility/formatters/formatter.php
===================================================================
--- core/kernel/utility/formatters/formatter.php
+++ core/kernel/utility/formatters/formatter.php
@@ -108,8 +108,8 @@
 		static $comma = null, $thousands = null;
 
 		if ( !isset($comma) || !isset($thousands) ) {
+			/** @var LanguagesItem $lang */
 			$lang = $this->Application->recallObject('lang.current');
-			/* @var $lang LanguagesItem */
 
 			$comma = $lang->GetDBField('DecimalPoint');
 			$thousands = $lang->GetDBField('ThousandSep');
@@ -192,8 +192,8 @@
 		}
 
 		if (preg_match('#int|integer|double|float|real|numeric#', $options['type'])) {
+			/** @var LanguagesItem $lang */
 			$lang = $this->Application->recallObject('lang.current');
-			/* @var $lang LanguagesItem */
 
 			return $lang->formatNumber($value);
 		}
Index: core/kernel/utility/formatters/multilang_formatter.php
===================================================================
--- core/kernel/utility/formatters/multilang_formatter.php
+++ core/kernel/utility/formatters/multilang_formatter.php
@@ -121,7 +121,7 @@
 			// substitute virtual field
 			$calculated_fields = $this->Application->getUnitOption($object->Prefix, 'CalculatedFields', Array ());
 			$calculated_field_special = array_key_exists($object->Special, $calculated_fields) ? $object->Special : (array_key_exists('', $calculated_fields) ? '' : false);
-			/* @var $calculated_fields Array */
+			/** @var Array $calculated_fields */
 
 			$tmp_field_options = $virtual_fields[$field_name];
 			$tmp_field_options['master_field'] = $field_name;
@@ -182,8 +182,8 @@
 		}
 
 		// substitute grid fields
+		/** @var Array $grids */
 		$grids = $this->Application->getUnitOption($object->Prefix, 'Grids', Array ());
-		/* @var $grids Array */
 
 		foreach ($grids as $name => $grid) {
 			if ( getArrayValue($grid, 'Fields', $field_name) ) {
Index: core/kernel/utility/formatters/unit_formatter.php
===================================================================
--- core/kernel/utility/formatters/unit_formatter.php
+++ core/kernel/utility/formatters/unit_formatter.php
@@ -29,8 +29,8 @@
 	{
 		if( !isset($field_options['master_field']) )
 		{
+			/** @var LanguagesItem $regional */
 			$regional = $this->Application->recallObject('lang.current');
-			/* @var $regional LanguagesItem */
 
 			$add_fields = Array();
 			$options_a =  Array('type' => 'int','error_field' => $field_name,'master_field' => $field_name,'format' => '%d' );
@@ -68,8 +68,8 @@
 			return ;
 		}
 
+		/** @var LanguagesItem $regional */
 		$regional = $this->Application->recallObject('lang.current');
-		/* @var $regional LanguagesItem */
 
 		if ( $regional->GetDBField('UnitSystem') == 2 ) {
 			// US/UK
@@ -108,8 +108,8 @@
 	public function UpdateSubFields($field, $value, &$options, &$object)
 	{
 		if ( !isset($options['master_field']) ) {
+			/** @var LanguagesItem $regional */
 			$regional = $this->Application->recallObject('lang.current');
-			/* @var $regional LanguagesItem */
 
 			if ( $regional->GetDBField('UnitSystem') == 2 ) {
 				// US/UK
Index: core/kernel/utility/formatters/upload_formatter.php
===================================================================
--- core/kernel/utility/formatters/upload_formatter.php
+++ core/kernel/utility/formatters/upload_formatter.php
@@ -222,8 +222,8 @@
 					$storage_format = isset($options['storage_format']) ? $options['storage_format'] : false;
 
 					if ( $storage_format ) {
+						/** @var ImageHelper $image_helper */
 						$image_helper = $this->Application->recallObject('ImageHelper');
-						/* @var $image_helper ImageHelper */
 
 						move_uploaded_file($value['tmp_name'], $value['tmp_name'] . '.jpg'); // add extension, so ResizeImage can work
 						$url = $image_helper->ResizeImage($value['tmp_name'] . '.jpg', $storage_format);
@@ -448,8 +448,8 @@
 		$file_path = strlen($value) ? FULL_PATH . str_replace('/', DIRECTORY_SEPARATOR, $upload_dir) . $value : '';
 
 		if ( preg_match('/resize:([\d]*)x([\d]*)/', $format, $regs) ) {
+			/** @var ImageHelper $image_helper */
 			$image_helper = $this->Application->recallObject('ImageHelper');
-			/* @var $image_helper ImageHelper */
 
 			try {
 				return $image_helper->ResizeImage($file_path, $format);
@@ -499,8 +499,8 @@
 				break;
 
 			case 'img_size':
+				/** @var ImageHelper $image_helper */
 				$image_helper = $this->Application->recallObject('ImageHelper');
-				/* @var $image_helper ImageHelper */
 
 				$image_info = $image_helper->getImageInfo($file_path);
 				return $image_info ? $image_info[3] : '';
Index: core/kernel/utility/http_query.php
===================================================================
--- core/kernel/utility/http_query.php
+++ core/kernel/utility/http_query.php
@@ -443,8 +443,8 @@
 			return false;
 		}
 
+		/** @var SiteHelper $site_helper */
 		$site_helper = $this->Application->recallObject('SiteHelper');
-		/* @var $site_helper SiteHelper */
 
 		$found = false;
 		$http_referer = $_SERVER['HTTP_REFERER'];
@@ -559,8 +559,8 @@
 	 */
 	protected function convertPostEvents()
 	{
+		/** @var Array $events */
 		$events = $this->Get('events', Array ());
-		/* @var $events Array */
 
 		if ( is_array($events) ) {
 			$events = array_filter($events);
Index: core/kernel/utility/logger.php
===================================================================
--- core/kernel/utility/logger.php
+++ core/kernel/utility/logger.php
@@ -787,8 +787,8 @@
 		$last_error = error_get_last();
 
 		if ( !is_null($last_error) && isset($this->_handlers[self::LL_ERROR]) ) {
+			/** @var kErrorHandlerStack $handler */
 			$handler = $this->_handlers[self::LL_ERROR];
-			/* @var $handler kErrorHandlerStack */
 
 			$handler->handle($last_error['type'], $last_error['message'], $last_error['file'], $last_error['line']);
 		}
@@ -1389,7 +1389,7 @@
 		$log = $this->_logger->prepare()->addException($exception);
 
 		if ( $exception instanceof kRedirectException ) {
-			/* @var $exception kRedirectException */
+			/** @var kRedirectException $exception */
 
 			$exception->run();
 		}
Index: core/kernel/utility/temp_handler.php
===================================================================
--- core/kernel/utility/temp_handler.php
+++ core/kernel/utility/temp_handler.php
@@ -182,8 +182,8 @@
 
 		$this->FinalRefs[ $tables['TableName'] ] = $tables['TableId']; // don't forget to add main table to FinalRefs too
 
+		/** @var Array $sub_items */
 		$sub_items = $this->Application->getUnitOption($prefix, 'SubItems', Array ());
-		/* @var $sub_items Array */
 
 		if ( is_array($sub_items) ) {
 			foreach ($sub_items as $prefix) {
@@ -250,8 +250,8 @@
 			$this->FinalRefs[ $tmp['TableName'] . $tmp['Constrain'] ] = $tmp['TableId'];
 		}
 
+		/** @var Array $sub_items */
 		$sub_items = $this->Application->getUnitOption($prefix, 'SubItems', Array ());
-		/* @var $sub_items Array */
 
 		if ( is_array($sub_items) ) {
 			foreach ($sub_items as $prefix) {
@@ -275,8 +275,8 @@
 			$special .= '-item';
 		}
 
+		/** @var kCatDBItem $object */
 		$object = $this->Application->recallObject($prefix.'.'.$special, $prefix, Array('skip_autoload' => true, 'parent_event' => $this->parentEvent));
-		/* @var $object kCatDBItem */
 
 		$object->PopulateMultiLangFields();
 
@@ -388,8 +388,9 @@
 
 		//recalling by different name, because we may get kDBList, if we recall just by prefix
 		$recall_prefix = $prefix_special . ($special ? '' : '.') . '-item';
+
+		/** @var kDBItem $object */
 		$object = $this->Application->recallObject($recall_prefix, $prefix, Array ('skip_autoload' => true, 'parent_event' => $this->parentEvent));
-		/* @var $object kDBItem */
 
 		foreach ($ids as $id) {
 			$object->Load($id);
@@ -747,8 +748,8 @@
 		static $connection = null;
 
 		if (!isset($connection)) {
+			/** @var kDBConnection $connection */
 			$connection = $this->Application->makeClass( 'kDBConnection', Array (SQL_TYPE, Array ($this->Application, 'handleSQLError')) );
-			/* @var $connection kDBConnection */
 
 			$connection->debugMode = $this->Application->isDebugMode();
 			$connection->Connect(SQL_SERVER, SQL_USER, SQL_PASS, SQL_DB);
Index: core/units/admin/admin_events_handler.php
===================================================================
--- core/units/admin/admin_events_handler.php
+++ core/units/admin/admin_events_handler.php
@@ -82,14 +82,14 @@
 			$perm_value = $this->Application->isAdminUser;
 		}
 
+		/** @var kPermissionsHelper $perm_helper */
 		$perm_helper = $this->Application->recallObject('PermissionsHelper');
-		/* @var $perm_helper kPermissionsHelper */
 
 		$csv_events = Array ('OnCSVImportBegin', 'OnCSVImportStep', 'OnExportCSV', 'OnGetCSV');
 
 		if ( in_array($event->Name, $csv_events) ) {
+			/** @var kCSVHelper $csv_helper */
 			$csv_helper = $this->Application->recallObject('CSVHelper');
-			/* @var $csv_helper kCSVHelper */
 
 			$prefix = $csv_helper->getPrefix(stripos($event->Name, 'import') !== false);
 
@@ -175,8 +175,8 @@
 
 		$this->OnResetParsedData($event);
 
+		/** @var SkinHelper $skin_helper */
 		$skin_helper = $this->Application->recallObject('SkinHelper');
-		/* @var $skin_helper SkinHelper */
 
 		$skin_helper->deleteCompiled();
 	}
@@ -229,8 +229,8 @@
 	 */
 	protected function OnCompileTemplates(kEvent $event)
 	{
+		/** @var NParserCompiler $compiler */
 		$compiler = $this->Application->recallObject('NParserCompiler');
-		/* @var $compiler NParserCompiler */
 
 		$compiler->CompileTemplatesStep();
 		$event->status = kEvent::erSTOP;
@@ -490,8 +490,8 @@
 			$event->status = kEvent::erSTOP;
 		}
 
+		/** @var kThemesHelper $themes_helper */
 		$themes_helper = $this->Application->recallObject('ThemesHelper');
-		/* @var $themes_helper kThemesHelper */
 
 		$themes_helper->refreshThemes();
 
@@ -607,8 +607,8 @@
 	 */
 	protected function OnExportCSV(kEvent $event)
 	{
+		/** @var kCSVHelper $csv_helper */
 		$csv_helper = $this->Application->recallObject('CSVHelper');
-		/* @var $csv_helper kCSVHelper */
 
 		$csv_helper->PrefixSpecial = $csv_helper->getPrefix(false);
 		$csv_helper->grid = $this->Application->GetVar('grid');
@@ -625,8 +625,8 @@
 	 */
 	protected function OnGetCSV(kEvent $event)
 	{
+		/** @var kCSVHelper $csv_helper */
 		$csv_helper = $this->Application->recallObject('CSVHelper');
-		/* @var $csv_helper kCSVHelper */
 
 		$csv_helper->GetCSV();
 	}
@@ -640,8 +640,8 @@
 	 */
 	protected function OnCSVImportBegin(kEvent $event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject(Array ('skip_autoload' => true));
-		/* @var $object kDBItem */
 
 		$object->setID(0);
 		$field_values = $this->getSubmittedFields($event);
@@ -652,8 +652,8 @@
 		$result = 'required';
 
 		if ( $object->GetDBField('ImportFile') ) {
+			/** @var kCSVHelper $csv_helper */
 			$csv_helper = $this->Application->recallObject('CSVHelper');
-			/* @var $csv_helper kCSVHelper */
 
 			$csv_helper->PrefixSpecial = $csv_helper->getPrefix(true);
 			$csv_helper->grid = $this->Application->GetVar('grid');
@@ -681,8 +681,8 @@
 	 */
 	protected function OnCSVImportStep(kEvent $event)
 	{
+		/** @var kCSVHelper $import_helper */
 		$import_helper = $this->Application->recallObject('CSVHelper');
-		/* @var $import_helper kCSVHelper */
 
 		$import_helper->ImportStep();
 		$event->status = kEvent::erSTOP;
@@ -755,8 +755,8 @@
 	 */
 	protected function OnBackup(kEvent $event)
 	{
+		/** @var BackupHelper $backup_helper */
 		$backup_helper = $this->Application->recallObject('BackupHelper');
-		/* @var $backup_helper BackupHelper */
 
 		if ( !$backup_helper->initBackup() ) {
 			$event->status = kEvent::erFAIL;
@@ -774,8 +774,8 @@
 	 */
 	protected function OnBackupProgress(kEvent $event)
 	{
+		/** @var BackupHelper $backup_helper */
 		$backup_helper = $this->Application->recallObject('BackupHelper');
-		/* @var $backup_helper BackupHelper */
 
 		$done_percent = $backup_helper->performBackup();
 
@@ -809,8 +809,8 @@
 	 */
 	protected function OnRestore(kEvent $event)
 	{
+		/** @var BackupHelper $backup_helper */
 		$backup_helper = $this->Application->recallObject('BackupHelper');
-		/* @var $backup_helper BackupHelper */
 
 		$backup_helper->initRestore();
 		$event->redirect = 'tools/restore3';
@@ -825,8 +825,8 @@
 	 */
 	protected function OnRestoreProgress(kEvent $event)
 	{
+		/** @var BackupHelper $backup_helper */
 		$backup_helper = $this->Application->recallObject('BackupHelper');
-		/* @var $backup_helper BackupHelper */
 
 		$done_percent = $backup_helper->performRestore();
 
@@ -869,8 +869,8 @@
 	 */
 	protected function OnDeleteBackup(kEvent $event)
 	{
+		/** @var BackupHelper $backup_helper */
 		$backup_helper = $this->Application->recallObject('BackupHelper');
-		/* @var $backup_helper BackupHelper */
 
 		$backup_helper->delete();
 	}
@@ -1001,8 +1001,8 @@
 			}
 		}
 
+		/** @var JSONHelper $json_helper */
 		$json_helper = $this->Application->recallObject('JSONHelper');
-		/* @var $json_helper JSONHelper */
 
 		echo $json_helper->encode($ret);
 	}
@@ -1032,8 +1032,8 @@
 			$ret['result'] = $res ? 'OK' : 'FAILED';
 		}
 
+		/** @var JSONHelper $json_helper */
 		$json_helper = $this->Application->recallObject('JSONHelper');
-		/* @var $json_helper JSONHelper */
 
 		echo $json_helper->encode($ret);
 	}
@@ -1074,8 +1074,8 @@
 	 */
 	protected function _deploymentAction(kEvent $event, $dry_run = false)
 	{
+		/** @var DeploymentHelper $deployment_helper */
 		$deployment_helper = $this->Application->recallObject('DeploymentHelper');
-		/* @var $deployment_helper DeploymentHelper */
 
 		$deployment_helper->setEvent($event);
 
Index: core/units/admin/admin_tag_processor.php
===================================================================
--- core/units/admin/admin_tag_processor.php
+++ core/units/admin/admin_tag_processor.php
@@ -82,8 +82,9 @@
 			$ret = '';
 			$section_name = $params['section_name'];
 			$params['name'] = $this->SelectParam($params, 'name,render_as,block');
+
+			/** @var kSectionsHelper $sections_helper */
 			$sections_helper = $this->Application->recallObject('SectionsHelper');
-			/* @var $sections_helper kSectionsHelper */
 
 			$section_data =& $sections_helper->getSectionData($section_name);
 
@@ -121,8 +122,8 @@
 				$section = $this->Application->RecallVar('section');
 			}
 
+			/** @var kSectionsHelper $sections_helper */
 			$sections_helper = $this->Application->recallObject('SectionsHelper');
-			/* @var $sections_helper kSectionsHelper */
 
 			$section_data =& $sections_helper->getSectionData($section);
 			if (!$section_data) {
@@ -192,8 +193,8 @@
 				$section_name = $this->Application->RecallVar('section');
 			}
 
+			/** @var kSectionsHelper $sections_helper */
 			$sections_helper = $this->Application->recallObject('SectionsHelper');
-			/* @var $sections_helper kSectionsHelper */
 
 			if (isset($params['use_first_child']) && $params['use_first_child']) {
 				$section_name = $sections_helper->getFirstChild($section_name, true);
@@ -228,8 +229,8 @@
 				$section_name = $this->Application->RecallVar('section');
 			}
 
+			/** @var kSectionsHelper $sections_helper */
 			$sections_helper = $this->Application->recallObject('SectionsHelper');
-			/* @var $sections_helper kSectionsHelper */
 
 			$section_data =& $sections_helper->getSectionData($section_name);
 
@@ -312,8 +313,8 @@
 		{
 			$section_name = isset($params['section_name']) ? $params['section_name'] : $this->Application->GetVar('section_name');
 
+			/** @var kSectionsHelper $sections_helper */
 			$sections_helper = $this->Application->recallObject('SectionsHelper');
-			/* @var $sections_helper kSectionsHelper */
 
 			$section_data =& $sections_helper->getSectionData($section_name);
 
@@ -349,8 +350,8 @@
 		 */
 		function ListTabs($params)
 		{
+			/** @var kSectionsHelper $sections_helper */
 			$sections_helper = $this->Application->recallObject('SectionsHelper');
-			/* @var $sections_helper kSectionsHelper */
 
 			$section_data =& $sections_helper->getSectionData($params['section_name']);
 
@@ -557,8 +558,8 @@
 				$format = $params['format'];
 
 				if ( preg_match("/_regional_(.*)/", $format, $regs) ) {
+					/** @var LanguagesItem $lang */
 					$lang = $this->Application->recallObject('lang.current');
-					/* @var $lang LanguagesItem */
 
 					$format = $lang->GetDBField($regs[1]);
 				}
@@ -585,8 +586,8 @@
 				$rebuild_mode = $this->Application->ConfigValue('CategoryPermissionRebuildMode');
 
 				if ( $rebuild_mode == CategoryPermissionRebuild::SILENT ) {
+					/** @var kPermCacheUpdater $updater */
 					$updater = $this->Application->makeClass('kPermCacheUpdater');
-					/* @var $updater kPermCacheUpdater */
 
 					$updater->OneStepRun();
 
@@ -810,8 +811,8 @@
 
 		function AdminSkin($params)
 		{
+			/** @var SkinHelper $skin_helper */
 			$skin_helper = $this->Application->recallObject('SkinHelper');
-			/* @var $skin_helper SkinHelper */
 
 			return $skin_helper->AdminSkinTag($params);
 		}
@@ -873,24 +874,24 @@
 
 		function ExportData($params)
 		{
+			/** @var kCSVHelper $export_helper */
 			$export_helper = $this->Application->recallObject('CSVHelper');
-			/* @var $export_helper kCSVHelper */
 			$result = $export_helper->ExportData( $this->SelectParam($params, 'var,name,field') );
 			return ($result === false) ? '' : $result;
 		}
 
 		function ImportData($params)
 		{
+			/** @var kCSVHelper $import_helper */
 			$import_helper = $this->Application->recallObject('CSVHelper');
-			/* @var $import_helper kCSVHelper */
 			$result = $import_helper->ImportData( $this->SelectParam($params, 'var,name,field') );
 			return ($result === false) ? '' : $result;
 		}
 
 		function PrintCSVNotImportedLines($params)
 		{
+			/** @var kCSVHelper $import_helper */
 			$import_helper = $this->Application->recallObject('CSVHelper');
-			/* @var $import_helper kCSVHelper */
 			return  $import_helper->GetNotImportedLines();
 		}
 
@@ -922,8 +923,8 @@
 		 */
 		function PrintBackupDates($params)
 		{
+			/** @var BackupHelper $backup_helper */
 	 		$backup_helper = $this->Application->recallObject('BackupHelper');
-			/* @var $backup_helper BackupHelper */
 
 			$ret = '';
 			$dates = $backup_helper->getBackupFiles();
@@ -1084,8 +1085,8 @@
 					return $this->_httpAuthentificate();
 				}
 
+				/** @var kPasswordFormatter $password_formatter */
 				$password_formatter = $this->Application->recallObject('kPasswordFormatter');
-				/* @var $password_formatter kPasswordFormatter */
 
 				if ( !$password_formatter->checkPasswordFromSetting('HTTPAuthPassword', $_SERVER['PHP_AUTH_PW']) ) {
 					// incorrect password
Index: core/units/captcha/captcha_eh.php
===================================================================
--- core/units/captcha/captcha_eh.php
+++ core/units/captcha/captcha_eh.php
@@ -23,8 +23,8 @@
 		 */
 		function OnValidateCode($event)
 		{
+			/** @var kCaptchaHelper $captcha_helper */
 			$captcha_helper = $this->Application->recallObject('CaptchaHelper');
-			/* @var $captcha_helper kCaptchaHelper */
 
 			$captcha_helper->validateCode($event->MasterEvent);
 		}
@@ -36,8 +36,8 @@
 		 */
 		function OnPrepareCaptcha($event)
 		{
+			/** @var kCaptchaHelper $captcha_helper */
 			$captcha_helper = $this->Application->recallObject('CaptchaHelper');
-			/* @var $captcha_helper kCaptchaHelper */
 
 			// create field for captcha code storage
 			$virtual_fields = $this->Application->getUnitOption($event->MasterEvent->Prefix, 'VirtualFields');
Index: core/units/categories/cache_updater.php
===================================================================
--- core/units/categories/cache_updater.php
+++ core/units/categories/cache_updater.php
@@ -224,8 +224,8 @@
 			}
 
 			// cache widely used values to speed up process
+			/** @var kMultiLanguageHelper $ml_helper */
 			$ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
-			/* @var $ml_helper kMultiLanguageHelper */
 
 			$this->languages = $ml_helper->getLanguages();
 			$this->primaryLanguageId = $this->Application->GetDefaultLanguageId();
Index: core/units/categories/categories_event_handler.php
===================================================================
--- core/units/categories/categories_event_handler.php
+++ core/units/categories/categories_event_handler.php
@@ -70,8 +70,8 @@
 			if ( $event->Name == 'OnResetCMSMenuCache' ) {
 				// events from "Tools -> System Tools" section are controlled via that section "edit" permission
 
+				/** @var kPermissionsHelper $perm_helper */
 				$perm_helper = $this->Application->recallObject('PermissionsHelper');
-				/* @var $perm_helper kPermissionsHelper */
 
 				$perm_value = $this->Application->CheckPermission('in-portal:service.edit');
 
@@ -95,8 +95,8 @@
 			if ( in_array($event->Name, $this->_getMassPermissionEvents()) ) {
 				$items = $this->_getPermissionCheckInfo($event);
 
+				/** @var kPermissionsHelper $perm_helper */
 				$perm_helper = $this->Application->recallObject('PermissionsHelper');
-				/* @var $perm_helper kPermissionsHelper */
 
 				if ( ($event->Name == 'OnSave') && array_key_exists(0, $items) ) {
 					// adding new item (ID = 0)
@@ -125,8 +125,8 @@
 			}
 
 			if ( $event->Name == 'OnRecalculatePriorities' ) {
+				/** @var kPermissionsHelper $perm_helper */
 				$perm_helper = $this->Application->recallObject('PermissionsHelper');
-				/* @var $perm_helper kPermissionsHelper */
 
 				$category_id = $this->Application->GetVar('m_cat_id');
 
@@ -249,8 +249,8 @@
 		 */
 		function OnProcessSelected($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$selected_ids = $this->Application->GetVar('selected_ids');
 
@@ -273,8 +273,8 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			// don't show "Content" category in advanced view
 			$object->addFilter('system_categories', '%1$s.Status <> 4');
@@ -378,8 +378,8 @@
 					$processed_prefix = $this->Application->processPrefix($prefix_special);
 					if ($processed_prefix['prefix'] == $related_prefix) {
 						// printing related categories within list of items (not on details page)
+						/** @var kDBList $list */
 						$list = $this->Application->recallObject($prefix_special);
-						/* @var $list kDBList */
 
 						$id = $list->GetID();
 					}
@@ -395,8 +395,8 @@
 					}
 				}
 
+				/** @var kCatDBItem $p_item */
 				$p_item = $this->Application->recallObject($related_prefix . '.current', null, Array('skip_autoload' => true));
-				/* @var $p_item kCatDBItem */
 
 				$p_item->Load( (int)$id );
 
@@ -523,8 +523,8 @@
 				$search_event = $event_mapping[$type];
 				$this->$search_event($event);
 
+				/** @var kDBList $object */
 				$object = $event->getObject();
-				/* @var $object kDBList */
 
 				$search_sql = '	FROM ' . $search_helper->getSearchTable() . ' search_result
 								JOIN %1$s ON %1$s.ResourceId = search_result.ResourceId';
@@ -561,8 +561,8 @@
 				$view_perm = 1;
 			}
 			else {
+				/** @var kCountHelper $count_helper */
 				$count_helper = $this->Application->recallObject('CountHelper');
-				/* @var $count_helper kCountHelper */
 
 				list ($view_perm, $view_filter) = $count_helper->GetPermissionClause($object->Prefix, 'perm');
 				$object->addFilter('perm_filter2', $view_filter);
@@ -578,8 +578,8 @@
 		 */
 		function _getCurrentThemeId()
 		{
+			/** @var kThemesHelper $themes_helper */
 			$themes_helper = $this->Application->recallObject('ThemesHelper');
-			/* @var $themes_helper kThemesHelper */
 
 			return (int)$themes_helper->getCurrentThemeId();
 		}
@@ -686,8 +686,8 @@
 				return;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject(Array ('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			$object->addCalculatedField(
 				'IsNew',
@@ -734,8 +734,8 @@
 		{
 			parent::OnAfterCopyToLive($event);
 
+			/** @var CategoriesItem $object */
 			$object = $this->Application->recallObject($event->Prefix . '.-item', null, Array ('skip_autoload' => true, 'live_table' => true));
-			/* @var $object CategoriesItem */
 
 			$parent_path = false;
 			$object->Load($event->getEventParam('id'));
@@ -753,8 +753,8 @@
 			}
 
 			if ( $parent_path ) {
+				/** @var kPermCacheUpdater $cache_updater */
 				$cache_updater = $this->Application->makeClass('kPermCacheUpdater', Array (null, $parent_path));
-				/* @var $cache_updater kPermCacheUpdater */
 
 				$cache_updater->OneStepRun();
 			}
@@ -774,8 +774,8 @@
 			$id = $event->getEventParam('id');
 
 			// loading anyway, because this object is needed by "c-perm:OnBeforeDeleteFromLive" event
+			/** @var CategoriesItem $temp_object */
 			$temp_object = $event->getObject(Array ('skip_autoload' => true));
-			/* @var $temp_object CategoriesItem */
 
 			$temp_object->Load($id);
 
@@ -789,8 +789,8 @@
 			}
 
 			// existing category was edited, check if in-cache fields are modified
+			/** @var CategoriesItem $live_object */
 			$live_object = $this->Application->recallObject($event->Prefix . '.-item', null, Array ('live_table' => true, 'skip_autoload' => true));
-			/* @var $live_object CategoriesItem */
 
 			$live_object->Load($id);
 			$cached_fields = Array ('l' . $this->Application->GetDefaultLanguageId() . '_Name', 'Filename', 'Template', 'ParentId', 'Priority');
@@ -842,8 +842,8 @@
 
 			parent::OnPreCreate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			// 2. preset template
 			$category_id = $this->Application->GetVar('m_cat_id');
@@ -871,8 +871,8 @@
 			$is_editing = implode('', $ids);
 			$old_statuses = $is_editing ? $this->_getCategoryStatus($ids) : Array ();
 
+			/** @var CategoriesItem $object */
 			$object = $event->getObject();
-			/* @var $object CategoriesItem */
 
 			parent::OnSave($event);
 
@@ -906,8 +906,8 @@
 			$filename_changes = $this->Application->GetVar($event->Prefix . '_filename_changes', Array ());
 
 			if ( $filename_changes ) {
+				/** @var kOpenerStack $opener_stack */
 				$opener_stack = $this->Application->makeClass('kOpenerStack');
-				/* @var $opener_stack kOpenerStack */
 
 				list ($template, $params, $index_file) = $opener_stack->pop();
 
@@ -947,8 +947,8 @@
 		 */
 		protected function OnPreSaveCreated(kEvent $event)
 		{
+			/** @var CategoriesItem $object */
 			$object = $event->getObject( Array ('skip_autoload' => true) );
-			/* @var $object CategoriesItem */
 
 			if ( $object->IsRoot() ) {
 				// don't create root category while saving permissions
@@ -969,8 +969,8 @@
 		{
 			parent::OnAfterItemDelete($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$sql = 'UPDATE ' . $object->TableName . '
 					SET SymLinkCategoryId = NULL
@@ -984,8 +984,8 @@
 			$ids = $this->Conn->GetCol($sql);
 
 			if ( $ids ) {
+				/** @var kTempTablesHandler $temp_handler */
 				$temp_handler = $this->Application->recallObject('system-event-subscription_TempHandler', 'kTempTablesHandler');
-				/* @var $temp_handler kTempTablesHandler */
 
 				$temp_handler->DeleteItems('system-event-subscription', '', $ids);
 			}
@@ -1082,13 +1082,13 @@
 			$recycle_bin = $this->Application->ConfigValue('RecycleBinFolder');
 
 			if ( $recycle_bin ) {
+				/** @var CategoriesItem $rb */
 				$rb = $this->Application->recallObject('c.recycle', null, Array ('skip_autoload' => true));
-				/* @var $rb CategoriesItem */
 
 				$rb->Load($recycle_bin);
 
+				/** @var CategoriesItem $cat */
 				$cat = $event->getObject(Array ('skip_autoload' => true));
-				/* @var $cat CategoriesItem */
 
 				foreach ($ids as $id) {
 					$cat->Load($id);
@@ -1112,8 +1112,8 @@
 			$ids = $event->getEventParam('ids');
 
 			if ( $ids ) {
+				/** @var kRecursiveHelper $recursive_helper */
 				$recursive_helper = $this->Application->recallObject('RecursiveHelper');
-				/* @var $recursive_helper kRecursiveHelper */
 
 				foreach ($ids as $id) {
 					$recursive_helper->DeleteCategory($id, $event->Prefix);
@@ -1134,8 +1134,8 @@
 		{
 			$this->Application->RemoveVar('clipboard');
 
+			/** @var kClipboardHelper $clipboard_helper */
 			$clipboard_helper = $this->Application->recallObject('ClipboardHelper');
-			/* @var $clipboard_helper kClipboardHelper */
 
 			$clipboard_helper->setClipboard($event, 'copy', $this->StoreSelectedIDs($event));
 			$this->clearSelectedIDs($event);
@@ -1150,8 +1150,8 @@
 		{
 			$this->Application->RemoveVar('clipboard');
 
+			/** @var kClipboardHelper $clipboard_helper */
 			$clipboard_helper = $this->Application->recallObject('ClipboardHelper');
-			/* @var $clipboard_helper kClipboardHelper */
 
 			$clipboard_helper->setClipboard($event, 'cut', $this->StoreSelectedIDs($event));
 			$this->clearSelectedIDs($event);
@@ -1181,8 +1181,8 @@
 		 */
 		function _checkPastePermission($event)
 		{
+			/** @var kPermissionsHelper $perm_helper */
 			$perm_helper = $this->Application->recallObject('PermissionsHelper');
-			/* @var $perm_helper kPermissionsHelper */
 
 			$category_id = $this->Application->GetVar('m_cat_id');
 			if ($perm_helper->AddCheckPermission($category_id, $event->Prefix) == 0) {
@@ -1225,8 +1225,8 @@
 				$source_category_id = $this->Conn->GetOne($sql);
 			}
 
+			/** @var kRecursiveHelper $recursive_helper */
 			$recursive_helper = $this->Application->recallObject('RecursiveHelper');
-			/* @var $recursive_helper kRecursiveHelper */
 
 			if ( $clipboard_data['cut'] ) {
 				$recursive_helper->MoveCategories($clipboard_data['cut'], $this->Application->GetVar('m_cat_id'));
@@ -1249,8 +1249,8 @@
 				}
 			}
 
+			/** @var kPriorityHelper $priority_helper */
 			$priority_helper = $this->Application->recallObject('PriorityHelper');
-			/* @var $priority_helper kPriorityHelper */
 
 			if ( $clipboard_data['cut'] ) {
 				$ids = $priority_helper->recalculatePriorities($event, 'ParentId = ' . $source_category_id);
@@ -1345,8 +1345,8 @@
 		{
 			parent::OnBeforeItemCreate($event);
 
+			/** @var CategoriesItem $object */
 			$object = $event->getObject();
-			/* @var $object CategoriesItem */
 
 			if ( $object->GetDBField('ParentId') <= 0 ) {
 				// no parent category - use current (happens during import)
@@ -1360,8 +1360,8 @@
 				return ;
 			}
 
+			/** @var kPermissionsHelper $perm_helper */
 			$perm_helper = $this->Application->recallObject('PermissionsHelper');
-			/* @var $perm_helper kPermissionsHelper */
 
 			$new_status = false;
 			$category_id = $this->Application->GetVar('m_cat_id');
@@ -1416,8 +1416,8 @@
 
 			$this->_beforeItemChange($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( $object->GetChangedFields() ) {
 				$object->SetDBField('ModifiedById', $this->Application->RecallVar('user_id'));
@@ -1435,8 +1435,8 @@
 		 */
 		protected function ItemPrepareQuery(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$sqls = $object->getFormOption('ItemSQLs', Array ());
 			$category_special = $this->_getCategorySpecial($event);
@@ -1459,8 +1459,8 @@
 		 */
 		protected function ListPrepareQuery(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$special = $this->_getCategorySpecial($event);
 			$sqls = $object->getFormOption('ListSQLs', Array ());
@@ -1484,11 +1484,11 @@
 				return;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
+			/** @var kPermCacheUpdater $cache_updater */
 			$cache_updater = $this->Application->makeClass('kPermCacheUpdater', Array (null, $object->GetDBField('ParentPath')));
-			/* @var $cache_updater kPermCacheUpdater */
 
 			$cache_updater->OneStepRun();
 
@@ -1546,8 +1546,8 @@
 					$page = $this->Application->GetVar($page_var);
 
 					if ( is_numeric($page) ) {
+						/** @var kDBList $object */
 						$object = $event->getObject();
-						/* @var $object kDBList */
 
 						$object->SetPage($page);
 					}
@@ -1573,8 +1573,8 @@
 				return;
 			}
 
+			/** @var CategoriesItem $object */
 			$object = $event->getObject(Array ('skip_autoload' => true));
-			/* @var $object CategoriesItem */
 
 			$ids = $this->StoreSelectedIDs($event);
 
@@ -1613,8 +1613,8 @@
 		 */
 		protected function checkItemStatus(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( !$object->isLoaded() ) {
 				return true;
@@ -1647,8 +1647,8 @@
 			if ( in_array('search', $types) ) {
 				$event->setPseudoClass('_List');
 
+				/** @var kDBList $object */
 				$object = $event->getObject();
-				/* @var $object kDBList */
 
 				// 1. no user sorting - sort by relevance
 				$default_sortings = parent::_getDefaultSorting($event);
@@ -1689,8 +1689,8 @@
 		 */
 		protected function _removeForcedSortings(kEvent $event)
 		{
+			/** @var Array $list_sortings */
 			$list_sortings = $this->Application->getUnitOption($event->Prefix, 'ListSortings', Array ());
-			/* @var $list_sortings Array */
 
 			foreach ($list_sortings as $special => $sortings) {
 				unset($list_sortings[$special]['ForcedSorting']);
@@ -1752,8 +1752,8 @@
 				$t = $this->Application->GetVar('t');
 			}
 
+			/** @var CategoriesItem $page */
 			$page = $this->Application->recallObject($this->Prefix . '.-virtual', null, Array ('page' => $t));
-			/* @var $page CategoriesItem */
 
 			if ( $page->isLoaded() ) {
 				$real_t = $page->GetDBField('CachedTemplate');
@@ -1769,15 +1769,15 @@
 
 			// replace alias in form #alias_name# to actual template used in this theme
 			if ( $this->Application->isAdmin ) {
+				/** @var kThemesHelper $themes_helper */
 				$themes_helper = $this->Application->recallObject('ThemesHelper');
-				/* @var $themes_helper kThemesHelper */
 
 				// only, used when in "Design Mode"
 				$this->Application->SetVar('theme.current_id', $themes_helper->getCurrentThemeId());
 			}
 
+			/** @var kDBItem $theme */
 			$theme = $this->Application->recallObject('theme.current');
-			/* @var $theme kDBItem */
 
 			$template = $theme->GetField('TemplateAliases', $real_t);
 
@@ -1810,8 +1810,8 @@
 		 */
 		function _beforeItemChange($event)
 		{
+			/** @var CategoriesItem $object */
 			$object = $event->getObject();
-			/* @var $object CategoriesItem */
 
 			$now = adodb_mktime();
 
@@ -1897,8 +1897,8 @@
 		{
 			$value = $object->GetField($field, 'no_default'); // current value of target field
 
+			/** @var kMultiLanguage $ml_formatter */
 			$ml_formatter = $this->Application->recallObject('kMultiLanguage');
-			/* @var $ml_formatter kMultiLanguage */
 
 			$src_field = $ml_formatter->LangFieldName('Name');
 			$dst_field = $ml_formatter->LangFieldName($field);
@@ -1923,8 +1923,8 @@
 		{
 			parent::OnBeforeItemDelete($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( $object->GetDBField('Protected') && !$this->Application->isDebugMode(false) ) {
 				$event->status = kEvent::erFAIL;
@@ -2039,13 +2039,13 @@
 
 			$backup_category_id = $this->Application->GetVar('m_cat_id');
 
+			/** @var CategoriesItem $object */
 			$object = $this->Application->recallObject($this->Prefix . '.rebuild-path', null, Array ('skip_autoload' => true));
-			/* @var $object CategoriesItem */
 
 			$parent_id = $base_category;
 
+			/** @var kFilenamesHelper $filenames_helper */
 			$filenames_helper = $this->Application->recallObject('FilenamesHelper');
-			/* @var $filenames_helper kFilenamesHelper */
 
 			$safe_category_path = array_map(Array (&$filenames_helper, 'replaceSequences'), $category_path);
 
@@ -2164,8 +2164,8 @@
 				return ;
 			}
 
+			/** @var SiteConfigHelper $site_config_helper */
 			$site_config_helper = $this->Application->recallObject('SiteConfigHelper');
-			/* @var $site_config_helper SiteConfigHelper */
 
 			$settings = $site_config_helper->getSettings();
 
@@ -2191,8 +2191,8 @@
 			$this->Application->setUnitOption($event->Prefix, 'SectionAdjustments', $section_adjustments);
 
 			// prepare structure dropdown
+			/** @var CategoryHelper $category_helper */
 			$category_helper = $this->Application->recallObject('CategoryHelper');
-			/* @var $category_helper CategoryHelper */
 
 			$fields = $this->Application->getUnitOption($event->Prefix, 'Fields');
 
@@ -2256,8 +2256,8 @@
 				$join_clause = '';
 			}
 
+			/** @var array $list_sqls */
 			$list_sqls = $this->Application->getUnitOption($event->Prefix, 'ListSQLs');
-			/* @var $list_sqls array */
 
 			foreach ($list_sqls as $special => $list_sql) {
 				$list_sqls[$special] = str_replace('{PERM_JOIN}', $join_clause, $list_sql);
@@ -2301,8 +2301,8 @@
 				return;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			// remove this category & it's children from dropdown
 			$sql = 'SELECT ' . $object->IDField . '
@@ -2328,8 +2328,8 @@
 		{
 			parent::OnAfterItemCreate($event);
 
+			/** @var CategoriesItem $object */
 			$object = $event->getObject();
-			/* @var $object CategoriesItem */
 
 			// need to update path after category is created, so category is included in that path
 			$fields_hash = $object->buildParentBasedFields();
@@ -2361,8 +2361,8 @@
 
 			kUtil::setResourceLimit();
 
+			/** @var CategoriesItem $dummy */
 			$dummy = $this->Application->recallObject($event->Prefix . '.rebuild', NULL, Array ('skip_autoload' => true));
-			/* @var $dummy CategoriesItem */
 
 			$error_count = 0;
 			foreach ($files as $a_file => $file_info) {
@@ -2373,8 +2373,8 @@
 			}
 
 			if ( $this->Application->ConfigValue('CategoryPermissionRebuildMode') == CategoryPermissionRebuild::SILENT ) {
+				/** @var kPermCacheUpdater $updater */
 				$updater = $this->Application->makeClass('kPermCacheUpdater');
-				/* @var $updater kPermCacheUpdater */
 
 				$updater->OneStepRun();
 			}
@@ -2429,8 +2429,8 @@
 			$event->status = kEvent::erSTOP;
 			$string = $this->Application->unescapeRequestVariable($this->Application->GetVar('preview_content'));
 
+			/** @var CategoryHelper $category_helper */
 			$category_helper = $this->Application->recallObject('CategoryHelper');
-			/* @var $category_helper CategoryHelper */
 
 			$string = $category_helper->replacePageIds($string);
 
@@ -2449,8 +2449,8 @@
 
 			$keywords = $this->Application->unescapeRequestVariable(trim($this->Application->GetVar('keywords')));
 
+			/** @var kHTTPQuery $query_object */
 			$query_object = $this->Application->recallObject('HTTPQuery');
-			/* @var $query_object kHTTPQuery */
 
 			/** @var kSearchHelper $search_helper */
 			$search_helper = $this->Application->recallObject('SearchHelper');
@@ -2478,8 +2478,8 @@
 
 			$event->setPseudoClass('_List');
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			$this->Application->SetVar($event->getPrefixSpecial().'_Page', 1);
 			$lang = $this->Application->GetVar('m_lang');
@@ -2792,8 +2792,8 @@
 				return;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$id = $this->getPassedID($event);
 
@@ -2803,8 +2803,8 @@
 			}
 
 			if ( $object->Load($id, null, true) ) {
+				/** @var Params $actions */
 				$actions = $this->Application->recallObject('kActions');
-				/* @var $actions Params */
 
 				$actions->Set($event->getPrefixSpecial() . '_id', $object->GetID());
 			}
@@ -2829,8 +2829,8 @@
 			$actual_event_name = $event->getEventParam('actual_event');
 
 			if ( $actual_event_name == 'OnSavePriorityChanges' || $event_name == 'OnAfterItemLoad' || $event_name == 'OnAfterItemDelete' ) {
+				/** @var kDBItem $object */
 				$object = $event->getObject();
-				/* @var $object kDBItem */
 
 				$constrain = 'ParentId = ' . $object->GetDBField('ParentId');
 			}
@@ -2886,8 +2886,8 @@
 			$ret = '';
 			list ($prefix) = explode('.', $prefix_special);
 
+			/** @var kRewriteUrlProcessor $rewrite_processor */
 			$rewrite_processor = $this->Application->recallObject('kRewriteUrlProcessor');
-			/* @var $rewrite_processor kRewriteUrlProcessor */
 
 			$processed_params = $rewrite_processor->getProcessedParams($prefix_special, $params, $keep_events);
 			if ($processed_params === false) {
@@ -3011,8 +3011,8 @@
 					WHERE FriendlyURL = ' . $this->Conn->qstr(implode('/', $url_parts));
 			$friendly = $this->Conn->GetRow($sql);
 
+			/** @var kRewriteUrlProcessor $rewrite_processor */
 			$rewrite_processor = $this->Application->recallObject('kRewriteUrlProcessor');
-			/* @var $rewrite_processor kRewriteUrlProcessor */
 
 			if ($friendly) {
 				$vars['m_cat_id'] = $friendly['CategoryId'];
@@ -3048,8 +3048,8 @@
 			$last_category_info = false;
 			$category_path = $url_part == 'content' ? '' : 'content';
 
+			/** @var kRewriteUrlProcessor $rewrite_processor */
 			$rewrite_processor = $this->Application->recallObject('kRewriteUrlProcessor');
-			/* @var $rewrite_processor kRewriteUrlProcessor */
 
 			do {
 				$category_path = trim($category_path . '/' . $url_part, '/');
@@ -3112,8 +3112,8 @@
 		 */
 		protected function OnAfterItemValidate(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$resource_id = $object->GetDBField('ResourceId');
 
@@ -3134,8 +3134,8 @@
 		{
 			parent::OnBeforeClone($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$object->SetDBField('ResourceId', 0); // this will reset it
 
Index: core/units/categories/categories_item.php
===================================================================
--- core/units/categories/categories_item.php
+++ core/units/categories/categories_item.php
@@ -28,8 +28,8 @@
 				0 => Array ('ParentPath' => '|', 'NamedParentPath' => '', 'CachedTemplate' => ''),
 			);
 
+			/** @var kMultiLanguageHelper $ml_helper */
 			$ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
-			/* @var $ml_helper kMultiLanguageHelper */
 
 			$languages = $ml_helper->getLanguages();
 			$parent_id = $this->GetDBField('ParentId');
@@ -82,8 +82,8 @@
 		 */
 		protected function stripDisallowed($string)
 		{
+			/** @var kFilenamesHelper $filenames_helper */
 			$filenames_helper = $this->Application->recallObject('FilenamesHelper');
-			/* @var $filenames_helper kFilenamesHelper */
 
 			$string = $filenames_helper->replaceSequences($string);
 
@@ -114,8 +114,8 @@
 			}
 
 			if (!isset($current_theme)) {
+				/** @var kThemesHelper $themes_helper */
 				$themes_helper = $this->Application->recallObject('ThemesHelper');
-				/* @var $themes_helper kThemesHelper */
 
 				$current_theme = (int)$themes_helper->getCurrentThemeId();
 			}
@@ -190,8 +190,8 @@
 				return ;
 			}
 
+			/** @var kMultiLanguage $ml_formatter */
 			$ml_formatter = $this->Application->recallObject('kMultiLanguage');
-			/* @var $ml_formatter kMultiLanguage */
 
 			$name = $this->stripDisallowed( $this->GetDBField($ml_formatter->LangFieldName('Name', true)) );
 
Index: core/units/categories/categories_tag_processor.php
===================================================================
--- core/units/categories/categories_tag_processor.php
+++ core/units/categories/categories_tag_processor.php
@@ -18,8 +18,8 @@
 
 	function SubCatCount($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		if ( isset($params['today']) && $params['today'] ) {
 			$sql = 'SELECT COUNT(*)
@@ -39,8 +39,8 @@
 	 */
 	function CategoryCount($params)
 	{
+		/** @var kCountHelper $count_helper */
 		$count_helper = $this->Application->recallObject('CountHelper');
-		/* @var $count_helper kCountHelper */
 
 		$today_only = isset($params['today']) && $params['today'];
 		return $count_helper->CategoryCount($today_only);
@@ -48,8 +48,8 @@
 
 	function IsNew($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		return $object->GetDBField('IsNew') ? 1 : 0;
 	}
@@ -67,8 +67,8 @@
 	 */
 	function IsEditorsPick($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		return $object->GetDBField('EditorsPick') == 1;
 	}
@@ -90,8 +90,8 @@
 			return array_key_exists($icon_name, $icons) ? $icons[$icon_name] : '';
 		}
 
+		/** @var kDBList $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBList */
 
 		if ($object->GetDBField('ThemeId') > 0) {
 			if (!$object->GetDBField('IsMenu')) {
@@ -123,8 +123,8 @@
 
 	function ItemCount($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$ci_table = $this->Application->getUnitOption('ci', 'TableName');
 
@@ -185,8 +185,8 @@
 
 	function CategoryPath($params)
 	{
+		/** @var kNavigationBar $navigation_bar */
 		$navigation_bar = $this->Application->recallObject('kNavigationBar');
-		/* @var $navigation_bar kNavigationBar */
 
 		return $navigation_bar->build($params);
 	}
@@ -199,8 +199,8 @@
 	 */
 	function FieldCategoryPath($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$field = $this->SelectParam($params, 'name,field');
 		$category_id = $object->GetDBField($field);
@@ -208,8 +208,8 @@
 		if ($category_id) {
 			$params['cat_id'] = $category_id;
 
+			/** @var kNavigationBar $navigation_bar */
 			$navigation_bar = $this->Application->recallObject('kNavigationBar');
-			/* @var $navigation_bar kNavigationBar */
 
 			return $navigation_bar->build($params);
 		}
@@ -219,8 +219,8 @@
 
 	function CurrentCategoryName($params)
 	{
+		/** @var kDBList $cat_object */
 		$cat_object = $this->Application->recallObject($this->getPrefixSpecial(), $this->Prefix.'_List');
-		/* @var $cat_object kDBList */
 
 		$sql = 'SELECT '.$this->getTitleField().'
 				FROM '.$cat_object->TableName.'
@@ -242,8 +242,8 @@
 
 	function getTitleField()
 	{
+		/** @var kMultiLanguage $ml_formatter */
 		$ml_formatter = $this->Application->recallObject('kMultiLanguage');
-		/* @var $ml_formatter kMultiLanguage */
 
 		return $ml_formatter->LangFieldName('Name');
 	}
@@ -352,21 +352,21 @@
 	function Meta($params)
 	{
 		$object = $this->Application->recallObject($this->Prefix); // .'.-item'
-		/* @var $object CategoriesItem */
+		/** @var CategoriesItem $object */
 
 		$meta_type = $params['name'];
 		if ($object->isLoaded()) {
 			// 1. get module prefix by current category
+			/** @var CategoryHelper $category_helper */
 			$category_helper = $this->Application->recallObject('CategoryHelper');
-			/* @var $category_helper CategoryHelper */
 
 			$category_path = explode('|', substr($object->GetDBField('ParentPath'), 1, -1));
 			$module_info = $category_helper->getCategoryModule($params, $category_path);
 
 			if ( $module_info ) {
 				// 2. get item template by current category & module prefix
+				/** @var kRewriteUrlProcessor $rewrite_processor */
 				$rewrite_processor = $this->Application->recallObject('kRewriteUrlProcessor');
-				/* @var $rewrite_processor kRewriteUrlProcessor */
 
 				$category_params = Array (
 					'CategoryId' => $object->GetID(),
@@ -377,8 +377,8 @@
 
 				if ($this->Application->GetVar('t') == $item_template) {
 					// we are located on item's details page
+					/** @var kCatDBItem $item */
 					$item = $this->Application->recallObject($module_info['Var']);
-					/* @var $item kCatDBItem */
 
 					// 3. get item's meta data
 					$value = $item->GetField('Meta'.$meta_type);
@@ -523,8 +523,8 @@
 			$continue = 1;
 		}
 
+		/** @var kPermCacheUpdater $updater */
 		$updater = $this->Application->makeClass('kPermCacheUpdater', Array ($continue));
-		/* @var $updater kPermCacheUpdater */
 
 		if ( $continue === '0' ) { // No in dialog
 			$updater->clearData();
@@ -638,8 +638,8 @@
 	 */
 	function IsRootCategory($params)
 	{
+		/** @var CategoriesItem $object */
 		$object = $this->getObject($params);
-		/* @var $object CategoriesItem */
 
 		return $object->IsRoot();
 	}
@@ -757,8 +757,8 @@
 						$cat_id = $this->Application->findModule('Name', $params['module'], 'RootCat');
 					}
 
+					/** @var CategoriesItem $category */
 					$category = $this->Application->recallObject($this->Prefix . '.-c' . $cat_id, $this->Prefix, Array ('skip_autoload' => true));
-					/* @var $category CategoriesItem */
 
 					$category->Load($cat_id);
 				}
@@ -778,12 +778,13 @@
 	 */
 	function HasPermission($params)
 	{
+		/** @var kPermissionsHelper $perm_helper */
 		$perm_helper = $this->Application->recallObject('PermissionsHelper');
-		/* @var $perm_helper kPermissionsHelper */
 
 		$params['raise_warnings'] = 0;
+
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$params['cat_id'] = $object->isLoaded() ? $object->GetDBField('ParentPath') : $this->Application->GetVar('m_cat_id');
 		return $perm_helper->TagPermissionCheck($params);
@@ -846,8 +847,8 @@
 		$format = isset($params['format']) ? $params['format'] : '_regional_DateTimeFormat';
 
 		if ( preg_match("/_regional_(.*)/", $format, $regs) ) {
+			/** @var LanguagesItem $lang */
 			$lang = $this->Application->recallObject('lang.current');
-			/* @var $lang LanguagesItem */
 
 			if ( $regs[1] == 'DateTimeFormat' ) {
 				// combined format
@@ -864,13 +865,13 @@
 
 	function CategoryItemCount($params)
 	{
+		/** @var kDBList $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBList */
 
 		$params['cat_id'] = $object->GetID();
 
+		/** @var kCountHelper $count_helper */
 		$count_helper = $this->Application->recallObject('CountHelper');
-		/* @var $count_helper kCountHelper */
 
 		return $count_helper->CategoryItemCount($params['prefix'], $params);
 	}
@@ -894,8 +895,8 @@
 	 */
 	function IsCategorySymLink($params)
 	{
+		/** @var kDBList $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBList */
 
 		$sym_category_id = $object->GetDBField('SymLinkCategoryId');
 
@@ -946,13 +947,13 @@
 	 */
 	function GetModulePrefix($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$parent_path = explode('|', substr($object->GetDBField('ParentPath'), 1, -1));
 
+		/** @var CategoryHelper $category_helper */
 		$category_helper = $this->Application->recallObject('CategoryHelper');
-		/* @var $category_helper CategoryHelper */
 
 		$module_info = $category_helper->getCategoryModule($params, $parent_path);
 
@@ -1010,8 +1011,8 @@
 		}
 
 		// 3. suggestion not found in database, ask webservice
+		/** @var kCurlHelper $curl_helper */
 		$curl_helper = $this->Application->recallObject('CurlHelper');
-		/* @var $curl_helper kCurlHelper */
 
 		$curl_helper->SetRequestData(array(
 			'appid' => $this->Application->ConfigValue('YahooApplicationId'),
@@ -1020,14 +1021,14 @@
 
 		$xml_data = $curl_helper->Send('http://search.yahooapis.com/WebSearchService/V1/spellingSuggestion');
 
+		/** @var kXMLHelper $xml_helper */
 		$xml_helper = $this->Application->recallObject('kXMLHelper');
-		/* @var $xml_helper kXMLHelper */
 
+		/** @var kXMLNode $root_node */
 		$root_node =& $xml_helper->Parse($xml_data);
-		/* @var $root_node kXMLNode */
 
+		/** @var kXMLNode $result */
 		$result = $root_node->FindChild('RESULT');
-		/* @var $result kXMLNode */
 
 		if ( is_object($result) ) {
 			// webservice responded -> save in local database
@@ -1110,8 +1111,8 @@
 	function CategoryName($params)
 	{
 		// show category cachednavbar of
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$category_id = isset($params['cat_id']) ? $params['cat_id'] : $object->GetDBField('CategoryId');
 
@@ -1166,8 +1167,8 @@
 	 */
 	function &_getPage($params)
 	{
+		/** @var kDBItem $page */
 		$page = $this->Application->recallObject($this->Prefix . '.' . $this->_getPageSpecial($params), null, $params);
-		/* @var $page kDBItem */
 
 		// 1. load by given id
 		$page_id = array_key_exists('page_id', $params) ? $params['page_id'] : 0;
@@ -1194,8 +1195,8 @@
 
 		if ( !$structure_path_match && !$design_match ) {
 			// Same sql like in "c:getPassedID". Load, when current page object doesn't match requested page object
+			/** @var kThemesHelper $themes_helper */
 			$themes_helper = $this->Application->recallObject('ThemesHelper');
-			/* @var $themes_helper kThemesHelper */
 
 			$page_id = $themes_helper->getPageByTemplate($template);
 
@@ -1251,19 +1252,19 @@
 			return 'NO CONTENT NUM SPECIFIED';
 		}
 
+		/** @var kDBItem $page */
 		$page =& $this->_getPage($params);
-		/* @var $page kDBItem */
 
 		if ( !$page->isLoaded() ) {
 			// page is not created yet => all blocks are empty
 			return '';
 		}
 
+		/** @var PageHelper $page_helper */
 		$page_helper = $this->Application->recallObject('PageHelper');
-		/* @var $page_helper PageHelper */
 
+		/** @var kDBItem $content */
 		$content = $this->Application->recallObject('content.-block', null, Array ('skip_autoload' => true));
-		/* @var $content kDBItem */
 
 		if ( !$page_helper->loadContentBlock($content, $page, $num) && EDITING_MODE ) {
 			$page_helper->createNewContentBlock($page->GetID(), $num);
@@ -1445,8 +1446,8 @@
 		$this->Application->SetVar('admin_scripts_included', 1);
 		$js_url = $this->Application->BaseURL() . 'core/admin_templates/js';
 
+		/** @var MinifyHelper $minify_helper */
 		$minify_helper = $this->Application->recallObject('MinifyHelper');
-		/* @var $minify_helper MinifyHelper */
 
 		$to_compress = Array (
 			$js_url . '/jquery/thickbox/thickbox.css',
@@ -1500,8 +1501,8 @@
 
 		$page =& $this->_getPage($params);
 
+		/** @var PageHelper $page_helper */
 		$page_helper = $this->Application->recallObject('PageHelper');
-		/* @var $page_helper PageHelper */
 
 		$class_params = Array (
 			'languagePrefix' => 'l' . $this->Application->GetVar('m_lang') . '_',
@@ -1677,11 +1678,11 @@
 
 						$edit_code .= $tabs . 'a_toolbar.Render();' . "\n";
 
+						/** @var kDBItem $revision */
 						$revision = $this->Application->recallObject('page-revision.current');
-						/* @var $revision kDBItem */
 
+						/** @var PageHelper $page_helper */
 						$page_helper = $this->Application->recallObject('PageHelper');
-						/* @var $page_helper PageHelper */
 
 						foreach ( $page_helper->getToolbarButtonsState($revision) as $toolbar_button => $is_enabled ) {
 							$edit_code .= $tabs . 'a_toolbar.SetEnabled("' . $toolbar_button . '", ' . json_encode($is_enabled) . ');';
@@ -1766,8 +1767,8 @@
 		$template = $this->Application->GetVar('t');
 
 		if (!$this->Application->TemplatesCache->TemplateExists($template) && !$this->Application->isAdmin) {
+			/** @var CategoriesEventHandler $cms_handler */
 			$cms_handler = $this->Application->recallObject($this->Prefix . '_EventHandler');
-			/* @var $cms_handler CategoriesEventHandler */
 
 			$template = ltrim($cms_handler->GetDesignTemplate(), '/');
 		}
@@ -1794,8 +1795,8 @@
 			return '';
 		}
 
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$params['item_prefix'] = 'c';
 
@@ -1816,8 +1817,8 @@
 	 */
 	function CachedMenu($params)
 	{
+		/** @var MenuHelper $menu_helper */
 		$menu_helper = $this->Application->recallObject('MenuHelper');
-		/* @var $menu_helper MenuHelper */
 
 		return $menu_helper->menuTag($this->getPrefixSpecial(), $params);
 	}
@@ -1857,8 +1858,8 @@
 	 */
 	function PrintSubPages($params)
 	{
+		/** @var kDBList $list */
 		$list = $this->Application->recallObject($this->getPrefixSpecial(), $this->Prefix.'_List', $params);
-		/* @var $list kDBList */
 
 		$category_id = array_key_exists('category_id', $params) ? $params['category_id'] : $this->Application->GetVar('m_cat_id');
 
@@ -1888,14 +1889,14 @@
 	 */
 	function PageBrowseLink($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
+		/** @var kThemesHelper $themes_helper */
 		$themes_helper = $this->Application->recallObject('ThemesHelper');
-		/* @var $themes_helper kThemesHelper */
 
+		/** @var SiteConfigHelper $site_config_helper */
 		$site_config_helper = $this->Application->recallObject('SiteConfigHelper');
-		/* @var $site_config_helper SiteConfigHelper */
 
 		$settings = $site_config_helper->getSettings();
 
@@ -1926,11 +1927,11 @@
 	 */
 	protected function DirectLink($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
+		/** @var kThemesHelper $themes_helper */
 		$themes_helper = $this->Application->recallObject('ThemesHelper');
-		/* @var $themes_helper kThemesHelper */
 
 		$url_params = Array (
 			'm_cat_id' => $object->GetID(),
@@ -1959,8 +1960,8 @@
 	 */
 	function ContentPageLink($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$params['t'] = mb_strtolower($object->GetDBField('NamedParentPath'));
 		$params['m_cat_id'] = 0;
@@ -2053,8 +2054,8 @@
 		$block_params = $this->prepareTagParams($params);
 		$block_params['name'] = $block_params['render_as'];
 
+		/** @var kDBItem $object */
 		$object = $this->Application->recallObject($this->Prefix);
-		/* @var $object kDBItem */
 
 		$category_ids = explode('|', substr($object->GetDBField('ParentPath'), 1, -1));
 
@@ -2111,8 +2112,8 @@
 			return '';
 		}
 
+		/** @var TemplateHelper $template_helper */
 		$template_helper = $this->Application->recallObject('TemplateHelper');
-		/* @var $template_helper TemplateHelper */
 
 		return $template_helper->blockInfo( $params['name'] );
 	}
@@ -2156,8 +2157,8 @@
 			}
 		}
 
+		/** @var JSONHelper $json_helper */
 		$json_helper = $this->Application->recallObject('JSONHelper');
-		/* @var $json_helper JSONHelper */
 
 		return $json_helper->encode($ret);
 	}
@@ -2184,8 +2185,8 @@
 	 */
 	function ItemEditLink($params)
 	{
+		/** @var kDBList $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBList */
 
 		$edit_template = $this->Application->getUnitOption($this->Prefix, 'AdminTemplatePath') . '/' . $this->Application->getUnitOption($this->Prefix, 'AdminTemplatePrefix') . 'edit';
 
@@ -2240,18 +2241,18 @@
 			$categories = true;
 		}
 		else {
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
+			/** @var kPermissionsHelper $perm_helper */
 			$perm_helper = $this->Application->recallObject('PermissionsHelper');
-			/* @var $perm_helper kPermissionsHelper */
 
 			$perm_prefix = $this->Application->getUnitOption($this->Prefix, 'PermItemPrefix');
 			$categories = $perm_helper->getPermissionCategories($perm_prefix . '.' . ($object->IsNewItem() ? 'ADD' : 'MODIFY'));
 		}
 
+		/** @var JSONHelper $json_helper */
 		$json_helper = $this->Application->recallObject('JSONHelper');
-		/* @var $json_helper JSONHelper */
 
 		return $json_helper->encode($categories);
 	}
@@ -2262,8 +2263,8 @@
 			return true;
 		}
 
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		return !$object->GetDBField('Protected');
 	}
@@ -2277,11 +2278,11 @@
 	 */
 	protected function CategoryItemElement($params)
 	{
+		/** @var CategoryHelper $category_helper */
 		$category_helper = $this->Application->recallObject('CategoryHelper');
-		/* @var $category_helper CategoryHelper */
 
+		/** @var kNavigationBar $navigation_bar */
 		$navigation_bar = $this->Application->recallObject('kNavigationBar');
-		/* @var $navigation_bar kNavigationBar */
 
 		$category_id = isset($params['cat_id']) ? $params['cat_id'] : $this->Application->GetVar('m_cat_id');
 		$parent_path = explode('|', substr($navigation_bar->getParentPath($category_id), 1, -1));
@@ -2294,8 +2295,8 @@
 
 		$module_prefix = $module_info['Var'];
 
+		/** @var kCatDBItem $object */
 		$object = $this->Application->recallObject($module_prefix);
-		/* @var $object kCatDBItem */
 
 		$title_field = $this->Application->getUnitOption($module_prefix, 'TitleField');
 		$block_params = $this->prepareTagParams($params);
Index: core/units/category_items/category_items_event_handler.php
===================================================================
--- core/units/category_items/category_items_event_handler.php
+++ core/units/category_items/category_items_event_handler.php
@@ -28,11 +28,11 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
+			/** @var kMultiLanguage $ml_formatter */
 			$ml_formatter = $this->Application->recallObject('kMultiLanguage');
-			/* @var $ml_formatter kMultiLanguage */
 
 			$object->addCalculatedField('CategoryName', 'c.' . $ml_formatter->LangFieldName('CachedNavbar'));
 		}
@@ -44,8 +44,8 @@
 		 */
 		function OnSetPrimary($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject(Array ('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			$ids = $this->StoreSelectedIDs($event);
 
@@ -148,8 +148,9 @@
 			}
 
 			$item_prefix = $event->getEventParam('item_prefix');
+
+			/** @var kCatDBItem $item */
 			$item = $this->Application->recallObject($item_prefix . '.-item', null, Array ('skip_autoload' => true));
-			/* @var $item kCatDBItem */
 
 			$ci_table = $this->Application->getUnitOption($event->Prefix, 'TableName');
 			$item_table = $this->Application->getUnitOption($item_prefix, 'TableName');
Index: core/units/category_items/category_items_tag_processor.php
===================================================================
--- core/units/category_items/category_items_tag_processor.php
+++ core/units/category_items/category_items_tag_processor.php
@@ -20,8 +20,8 @@
 		{
 			$field = $this->SelectParam($params, 'name,field');
 
+			/** @var kDBList $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBList */
 
 			$root_phrase = $this->Application->Phrase(($this->Application->isAdmin ? 'la_' : 'lu_') . 'rootcategory_name');
 			$cached_navbar = preg_replace('/^(Content&\|&|Content)/i', '', $object->GetDBField($field));
Index: core/units/config_search/config_search_event_handler.php
===================================================================
--- core/units/config_search/config_search_event_handler.php
+++ core/units/config_search/config_search_event_handler.php
@@ -45,8 +45,8 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			// show only items that belong to selected module
 			$module = $this->Application->GetVar('module');
@@ -107,16 +107,16 @@
 		 */
 		protected function OnCreateCustomField($event)
 		{
+			/** @var kDBItem $custom_field */
 			$custom_field = $event->MasterEvent->getObject();
-			/* @var $custom_field kDBItem */
 
 			if ( $custom_field->GetDBField('Type') == 6 || $custom_field->GetDBField('IsSystem') == 1 ) {
 				// user & system custom fields are not searchable
 				return ;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject(Array ('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			$custom_id = $custom_field->GetID();
 			if ( !$object->isLoaded() || ($object->GetDBField('CustomFieldId') != $custom_id) ) {
Index: core/units/configuration/configuration_event_handler.php
===================================================================
--- core/units/configuration/configuration_event_handler.php
+++ core/units/configuration/configuration_event_handler.php
@@ -59,8 +59,8 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			$module = $this->Application->GetVar('module');
 			$section = $this->Application->GetVar('section');
@@ -92,8 +92,8 @@
 		{
 			parent::OnPreCreate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$object->SetDBField('Section', $this->Application->GetVar('section'));
 			$object->SetDBField('ModuleOwner', $this->Application->GetVar('module'));
@@ -112,8 +112,8 @@
 
 			parent::OnAfterItemLoad($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			// ability to validate each configuration variable separately
 			if ( !isset($default_field_options) ) {
@@ -141,14 +141,14 @@
 		{
 			parent::OnBeforeItemValidate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			// if password field is empty, then don't update
 			if ( $object->GetDBField('ElementType') == 'password' ) {
 				if ( trim($object->GetDBField('VariableValue')) != '' ) {
+					/** @var kPasswordFormatter $password_formatter */
 					$password_formatter = $this->Application->recallObject('kPasswordFormatter');
-					/* @var $password_formatter kPasswordFormatter */
 
 					$object->SetDBField('VariableValue', $password_formatter->hashPassword($object->GetDBField('VariableValue')));
 				}
@@ -179,8 +179,8 @@
 				$object->SetDBField('VariableValue', $email_event_data[0]['Recipients']);
 			}
 
+			/** @var kSectionsHelper $sections_helper */
 			$sections_helper = $this->Application->recallObject('SectionsHelper');
-			/* @var $sections_helper kSectionsHelper */
 
 			$section = $object->GetDBField('Section');
 
@@ -197,8 +197,8 @@
 		 */
 		protected function _processCountryState(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$country_iso = $this->_getCountryByState($event);
 			$state_name = $object->GetDBField('VariableValue');
@@ -207,8 +207,8 @@
 				return;
 			}
 
+			/** @var kCountryStatesHelper $cs_helper */
 			$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-			/* @var $cs_helper kCountryStatesHelper */
 
 			$state_iso = $cs_helper->getStateIso($state_name, $country_iso);
 
@@ -230,8 +230,8 @@
 		 */
 		protected function _getCountryByState(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$variable_name = $object->GetDBField('VariableName');
 
@@ -265,8 +265,8 @@
 		{
 			parent::OnBeforeItemUpdate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			// if password field is empty, then don't update
 			if ( $object->GetDBField('ElementType') == 'password' && trim($object->GetDBField('VariableValue')) == '' ) {
@@ -287,8 +287,8 @@
 
 			parent::OnAfterItemUpdate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( $object->GetDBField('ElementType') == 'password' && trim($object->GetDBField('VariableValue')) == '' ) {
 				$object->SetFieldOption('VariableValue', 'skip_empty', 0);
@@ -317,8 +317,8 @@
 			if ( $variable_name == 'Require_AdminSSL' || $variable_name == 'AdminSSL_URL' ) {
 				// when administrative console is moved to SSL mode, then delete skin
 				if ( in_array($variable_name, $changed) && !$skin_deleted ) {
+					/** @var SkinHelper $skin_helper */
 					$skin_helper = $this->Application->recallObject('SkinHelper');
-					/* @var $skin_helper SkinHelper */
 
 					$skin_file = $skin_helper->getSkinPath();
 					if ( file_exists($skin_file) ) {
@@ -381,8 +381,8 @@
 				unset($items_info['ModuleRootCategory']);
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject( Array('skip_autoload' => true) );
-			/* @var $object kDBItem */
 
 			if ( $items_info ) {
 				$has_error = false;
@@ -493,8 +493,8 @@
 				$template = $this->Application->ConfigValue('HardMaintenanceTemplate');
 			}
 
+			/** @var kCurlHelper $curl_helper */
 			$curl_helper = $this->Application->recallObject('CurlHelper');
-			/* @var $curl_helper kCurlHelper */
 
 			$html = $curl_helper->Send($this->Application->BaseURL() . '?t=' . $template);
 
@@ -518,8 +518,8 @@
 		 */
 		protected function getAutoCompleteSuggestions(kEvent $event, $term)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$field = $this->Application->GetVar('field');
 
Index: core/units/configuration/configuration_tag_processor.php
===================================================================
--- core/units/configuration/configuration_tag_processor.php
+++ core/units/configuration/configuration_tag_processor.php
@@ -157,8 +157,8 @@
 
 	function IsRequired($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$field = $params['field'];
 		$field_options = $object->GetFieldOptions($field);
@@ -176,8 +176,8 @@
 
 	function Error($params)
 	{
+		/** @var kDBList $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBList */
 
 		if ( !($object instanceof kDBList) ) {
 			return parent::Error($params);
@@ -201,8 +201,8 @@
 			$params['cat_id'] = $this->ModuleRootCategory( Array() );
 		}
 
+		/** @var kNavigationBar $navigation_bar */
 		$navigation_bar = $this->Application->recallObject('kNavigationBar');
-		/* @var $navigation_bar kNavigationBar */
 
 		return $navigation_bar->build($params);
 	}
@@ -282,8 +282,8 @@
 	 */
 	protected function ItemEditLink($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$params['m_opener'] = 'd';
 		$params[$object->Prefix . '_mode'] = 't';
Index: core/units/content/content_eh.php
===================================================================
--- core/units/content/content_eh.php
+++ core/units/content/content_eh.php
@@ -25,8 +25,8 @@
 		 */
 		public function CheckPermission(kEvent $event)
 		{
+			/** @var kPermissionsHelper $perm_helper */
 			$perm_helper = $this->Application->recallObject('PermissionsHelper');
-			/* @var $perm_helper kPermissionsHelper */
 
 			$user_id = $this->Application->RecallVar('user_id');
 
@@ -75,8 +75,8 @@
 		{
 			parent::OnEdit($event);
 
+			/** @var fckFCKHelper $fck_helper */
 			$fck_helper = $this->Application->recallObject('FCKHelper');
-			/* @var $fck_helper fckFCKHelper */
 
 			$transit_params = $fck_helper->getTransitParams();
 
@@ -147,8 +147,8 @@
 			}
 
 			list ($object, $revision) = $this->getContentBlockAndRevision($event);
-			/* @var $revision kDBItem */
-			/* @var $object kDBItem */
+			/** @var kDBItem $revision */
+			/** @var kDBItem $object */
 
 			list (, $field_values) = each($items_info);
 			$object->SetFieldsFromHash($field_values);
@@ -163,8 +163,8 @@
 
 			if ( $is_draft ) {
 				if ( $updated ) {
+					/** @var PageHelper $page_helper */
 					$page_helper = $this->Application->recallObject('PageHelper');
-					/* @var $page_helper PageHelper */
 
 					return $revision->GetField('AutoSavedOn') . ' (' . $page_helper->getAgoTime($revision->GetDBField('AutoSavedOn')) . ')';
 				}
@@ -190,10 +190,10 @@
 			}
 
 			list (, $revision) = $this->getContentBlockAndRevision($event);
-			/* @var $revision kDBItem */
+			/** @var kDBItem $revision */
 
+			/** @var PageHelper $page_helper */
 			$page_helper = $this->Application->recallObject('PageHelper');
-			/* @var $page_helper PageHelper */
 
 			$time = $revision->GetField('AutoSavedOn');
 
@@ -228,8 +228,8 @@
 		 */
 		function getContentBlockAndRevision($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject(Array('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			$items_info = $this->Application->GetVar($event->getPrefixSpecial(true));
 			if ( !$items_info ) {
@@ -239,8 +239,8 @@
 			list ($id,) = each($items_info);
 			$object->Load($id);
 
+			/** @var kDBItem $revision */
 			$revision = $this->Application->recallObject('page-revision', null, Array('skip_autoload' => true));
-			/* @var $revision kDBItem */
 
 			$revision->Load($object->GetDBField('RevisionId'));
 
Index: core/units/content/content_tp.php
===================================================================
--- core/units/content/content_tp.php
+++ core/units/content/content_tp.php
@@ -29,8 +29,8 @@
 			return '';
 		}
 
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$params['pass'] = 'm,c,content';
 		$params['c_id'] = $object->GetDBField('PageId');
Index: core/units/country_states/country_state_eh.php
===================================================================
--- core/units/country_states/country_state_eh.php
+++ core/units/country_states/country_state_eh.php
@@ -46,12 +46,12 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			if ( ($event->Special == 'selected') || ($event->Special == 'available') ) {
+				/** @var EditPickerHelper $edit_picker_helper */
 				$edit_picker_helper = $this->Application->recallObject('EditPickerHelper');
-				/* @var $edit_picker_helper EditPickerHelper */
 
 				$edit_picker_helper->applyFilter($event, 'Countries');
 
@@ -95,8 +95,8 @@
 		 */
 		function _setRequired($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$field_options = $object->GetFieldOptions('IsoCode');
 
@@ -123,11 +123,11 @@
 		{
 			parent::OnBeforeItemDelete($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
+			/** @var kCountryStatesHelper $cs_helper */
 			$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-			/* @var $cs_helper kCountryStatesHelper */
 
 			if ( $cs_helper->CountryHasStates($object->GetDBField('IsoCode')) ) {
 				$event->status = kEvent::erFAIL;
@@ -146,8 +146,8 @@
 		{
 			$event->status = kEvent::erSTOP;
 
+			/** @var kCountryStatesHelper $cs_helper */
 			$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-			/* @var $cs_helper kCountryStatesHelper */
 
 			$states = $cs_helper->getStates( (string)$this->Application->GetVar('country_iso') );
 			echo json_encode($states);
Index: core/units/custom_data/custom_data_event_handler.php
===================================================================
--- core/units/custom_data/custom_data_event_handler.php
+++ core/units/custom_data/custom_data_event_handler.php
@@ -171,8 +171,8 @@
 			$calculated_fields = Array ();
 			$virtual_fields = $this->Application->getUnitOption($prefix, 'VirtualFields', Array ());
 
+			/** @var InpCustomFieldsHelper $cf_helper */
 			$cf_helper = $this->Application->recallObject('InpCustomFieldsHelper');
-			/* @var $cf_helper InpCustomFieldsHelper */
 
 			$is_install = defined('IS_INSTALL') && IS_INSTALL;
 
Index: core/units/custom_fields/custom_fields_event_handler.php
===================================================================
--- core/units/custom_fields/custom_fields_event_handler.php
+++ core/units/custom_fields/custom_fields_event_handler.php
@@ -48,8 +48,8 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			$item_type = $this->Application->GetVar('cf_type');
 			if ( !$item_type ) {
@@ -108,8 +108,9 @@
 
 			$hidden_fields = Array ();
 			$virtual_fields = $this->Application->getUnitOption($prefix, 'VirtualFields', Array ());
+
+			/** @var Array $custom_fields */
 			$custom_fields = $this->Application->getUnitOption($prefix, 'CustomFields', Array ());
-			/* @var $custom_fields Array */
 
 			foreach ($custom_fields as $custom_field) {
 				$check_field = 'cust_' . $custom_field;
@@ -134,8 +135,8 @@
 		{
 			parent::OnBeforeItemCreate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$sql = 'SELECT COUNT(*)
 					FROM ' . $this->Application->getUnitOption($event->Prefix, 'TableName') . '
@@ -160,13 +161,13 @@
 		{
 			parent::OnAfterItemDelete($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$main_prefix = $this->getPrefixByItemType($object->GetDBField('Type'));
 
+			/** @var kMultiLanguageHelper $ml_helper */
 			$ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
-			/* @var $ml_helper kMultiLanguageHelper */
 
 			// call main item config to clone cdata table
 			$this->Application->getUnitOption($main_prefix, 'TableName');
@@ -202,13 +203,13 @@
 				return ;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$main_prefix = $this->getPrefixByItemType($object->GetDBField('Type'));
 
+			/** @var kMultiLanguageHelper $ml_helper */
 			$ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
-			/* @var $ml_helper kMultiLanguageHelper */
 
 			// call main item config to clone cdata table
 			define('CUSTOM_FIELD_ADDED', 1); // used in cdata::scanCustomFields method
@@ -245,8 +246,8 @@
 		{
 			parent::OnPreCreate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$object->SetDBField('Type', $this->Application->GetVar('cf_type'));
 		}
@@ -262,15 +263,15 @@
 		{
 			parent::OnAfterItemLoad($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( !in_array($object->GetDBField('ElementType'), $this->_getMultiElementTypes()) ) {
 				return ;
 			}
 
+			/** @var InpCustomFieldsHelper $custom_field_helper */
 			$custom_field_helper = $this->Application->recallObject('InpCustomFieldsHelper');
-			/* @var $custom_field_helper InpCustomFieldsHelper */
 
 			$options = $custom_field_helper->GetValuesHash($object->GetDBField('ValueList'), VALUE_LIST_SEPARATOR, false);
 
@@ -286,8 +287,8 @@
 				$records[] = Array ('OptionKey' => $option_key, 'OptionTitle' => $option_title);
 			}
 
+			/** @var MInputHelper $minput_helper */
 			$minput_helper = $this->Application->recallObject('MInputHelper');
-			/* @var $minput_helper MInputHelper */
 
 			$xml = $minput_helper->prepareMInputXML($records, Array ('OptionKey', 'OptionTitle'));
 			$object->SetDBField('Options', $xml);
@@ -315,15 +316,15 @@
 		{
 			parent::OnBeforeItemUpdate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( !in_array($object->GetDBField('ElementType'), $this->_getMultiElementTypes()) ) {
 				return ;
 			}
 
+			/** @var MInputHelper $minput_helper */
 			$minput_helper = $this->Application->recallObject('MInputHelper');
-			/* @var $minput_helper MInputHelper */
 
 			$ret = $object->GetDBField('ElementType') == 'select' ? Array ('' => '=+') : Array ();
 			$records = $minput_helper->parseMInputXML($object->GetDBField('Options'));
Index: core/units/custom_fields/custom_fields_tag_processor.php
===================================================================
--- core/units/custom_fields/custom_fields_tag_processor.php
+++ core/units/custom_fields/custom_fields_tag_processor.php
@@ -90,7 +90,7 @@
 
 			if ( $source_prefix ) {
 				$source_object = $this->Application->recallObject($source_prefix, null, Array ('raise_warnings' => 0)); // it's possible, that in some cases object will not be loaded
-				/* @var $source_object kCatDBItem */
+				/** @var kCatDBItem $source_object */
 
 				$display_original = $this->Application->ProcessParsedTag($source_prefix, 'DisplayOriginal', Array ('display_original' => $this->setParamValue($params, 'display_original')));
 			}
@@ -100,7 +100,7 @@
 				$block_params['original_title'] = $this->setParamValue($params, 'original_title');
 
 				$original_object = $this->Application->recallObject($source_prefix . '.original', null, Array ('raise_warnings' => 0)); // it's possible, that in some cases object will not be loaded
-				/* @var $original_object kCatDBItem */
+				/** @var kCatDBItem $original_object */
 			}
 
 			if ($this->Special == 'general') {
Index: core/units/email_templates/email_template_eh.php
===================================================================
--- core/units/email_templates/email_template_eh.php
+++ core/units/email_templates/email_template_eh.php
@@ -91,8 +91,8 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			if ( $event->Special == 'module' ) {
 				$module = $this->Application->GetVar('module');
@@ -122,11 +122,11 @@
 			$mapping = Array ('conf' => 'VariableValue', 'site-domain' => 'DefaultEmailRecipients');
 
 			if ( isset($mapping[$event->Special]) ) {
+				/** @var kDBItem $object */
 				$object = $event->getObject();
-				/* @var $object kDBItem */
 
+				/** @var kDBList $target_object */
 				$target_object = $this->Application->recallObject($event->Special);
-				/* @var $target_object kDBList */
 
 				$object->SetDBField('Recipients', $target_object->GetDBField($mapping[$event->Special]));
 			}
@@ -143,8 +143,8 @@
 		{
 			parent::OnPreCreate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$object->SetDBField('Headers', $this->Application->ConfigValue('Smtp_DefaultHeaders'));
 			$this->setRequired($event);
@@ -267,8 +267,8 @@
 				return;
 			}
 
+			/** @var MailingListHelper $mailing_list_helper */
 			$mailing_list_helper = $this->Application->recallObject('MailingListHelper');
-			/* @var $mailing_list_helper MailingListHelper */
 
 			$mailing_list_helper->processQueue($messages);
 
@@ -342,8 +342,8 @@
 		{
 			parent::OnAfterItemLoad($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( !$this->Application->isDebugMode(false) ) {
 				if ( $object->GetDBField('AllowChangingRecipient') ) {
@@ -363,8 +363,8 @@
 				$records[] = Array ('Tag' => $tag, 'Replacement' => $replacement);
 			}
 
+			/** @var MInputHelper $minput_helper */
 			$minput_helper = $this->Application->recallObject('MInputHelper');
-			/* @var $minput_helper MInputHelper */
 
 			$xml = $minput_helper->prepareMInputXML($records, Array ('Tag', 'Replacement'));
 			$object->SetDBField('ReplacementTagsXML', $xml);
@@ -379,8 +379,8 @@
 		 */
 		function _itemChanged($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( !$this->Application->isDebugMode(false) ) {
 				// only allow to enable/disable event while in debug mode
@@ -406,8 +406,8 @@
 
 			// process replacement tags
 			if ( $object->GetDBField('ReplacementTagsXML') ) {
+				/** @var MInputHelper $minput_helper */
 				$minput_helper = $this->Application->recallObject('MInputHelper');
-				/* @var $minput_helper MInputHelper */
 
 				$replacement_tags = Array ();
 				$records = $minput_helper->parseMInputXML($object->GetDBField('ReplacementTagsXML'));
@@ -436,8 +436,8 @@
 		 */
 		protected function setRequired(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$language_prefix = 'l' . $this->Application->GetVar('m_lang') . '_';
 
@@ -559,8 +559,8 @@
 		{
 			parent::OnBeforeItemValidate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			// validate email subject and body for parsing errors
 			$this->_validateEmailTemplate($object);
@@ -583,8 +583,8 @@
 		 */
 		protected function _validateEmailTemplate($object)
 		{
+			/** @var kEmailTemplateHelper $email_template_helper */
 			$email_template_helper = $this->Application->recallObject('kEmailTemplateHelper');
-			/* @var $email_template_helper kEmailTemplateHelper */
 
 			$email_template_helper->parseField($object, 'Subject');
 			$email_template_helper->parseField($object, 'HtmlBody');
@@ -601,8 +601,8 @@
 		 */
 		protected function _validateAddress($event, $field_prefix)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$address_type = $object->GetDBField($field_prefix . 'AddressType');
 			$object->setRequired($field_prefix . 'Address', $address_type > 0);
@@ -700,8 +700,8 @@
 		{
 			parent::OnAfterItemDelete($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$sql = 'SELECT SubscriptionId
 					FROM ' . TABLE_PREFIX . 'SystemEventSubscriptions
@@ -712,8 +712,8 @@
 				return;
 			}
 
+			/** @var kTempTablesHandler $temp_handler */
 			$temp_handler = $this->Application->recallObject('system-event-subscription_TempHandler', 'kTempTablesHandler');
-			/* @var $temp_handler kTempTablesHandler */
 
 			$temp_handler->DeleteItems('system-event-subscription', '', $ids);
 		}
@@ -727,8 +727,8 @@
 		 */
 		protected function OnSend(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject(Array ('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			$ids = $this->StoreSelectedIDs($event);
 
Index: core/units/email_templates/email_template_tp.php
===================================================================
--- core/units/email_templates/email_template_tp.php
+++ core/units/email_templates/email_template_tp.php
@@ -24,8 +24,8 @@
 		function ModifyUnitConfig($params)
 		{
 			if ( !$this->Application->isDebugMode() ) {
+				/** @var Array $grids */
 				$grids = $this->Application->getUnitOption($this->Prefix, 'Grids', Array ());
-				/* @var $grids Array */
 
 				foreach ($grids as $grid_name => $grid_data) {
 					if ( array_key_exists('Enabled', $grid_data['Fields']) ) {
@@ -49,8 +49,8 @@
 				return true;
 			}
 
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			return $object->GetDBField($params['check_field']);
 		}
@@ -74,8 +74,8 @@
 		 */
 		function RemoveToRecipientType($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			$field_options = $object->GetFieldOptions('RecipientType');
 			unset($field_options['options'][ EmailTemplate::RECIPIENT_TYPE_TO ]);
@@ -89,8 +89,8 @@
 		 */
 		function RestoreRecipientType($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			$field_options = $object->GetFieldOptions('RecipientType');
 			$virtual_fields = $this->Application->getUnitOption($this->Prefix, 'VirtualFields');
Index: core/units/favorites/favorites_eh.php
===================================================================
--- core/units/favorites/favorites_eh.php
+++ core/units/favorites/favorites_eh.php
@@ -42,8 +42,9 @@
 	function OnFavoriteToggle($event)
 	{
 		$parent_prefix = $this->Application->getUnitOption($event->Prefix, 'ParentPrefix');
+
+		/** @var kDBItem $parent_object */
 		$parent_object = $this->Application->recallObject($parent_prefix);
-		/* @var $parent_object kDBItem */
 
 		if (!$parent_object->isLoaded() || !$this->Application->CheckPermission('FAVORITES', 0, $parent_object->GetDBField('ParentPath'))) {
 			$event->status = kEvent::erPERM_FAIL;
@@ -56,8 +57,8 @@
 				WHERE (PortalUserId = '.$user_id.') AND (ResourceId = '.$parent_object->GetDBField('ResourceId').')';
 		$favorite_id = $this->Conn->GetOne($sql);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject(Array('skip_autoload' => true));
-		/* @var $object kDBItem */
 
 		if ($favorite_id) {
 			$object->Delete($favorite_id);
@@ -80,15 +81,16 @@
 	{
 		parent::OnBeforeItemCreate($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$user_id = $this->Application->RecallVar('user_id');
 		$object->SetDBField('PortalUserId', $user_id);
 
 		$parent_prefix = $this->Application->getUnitOption($event->Prefix, 'ParentPrefix');
+
+		/** @var kDBItem $parent_object */
 		$parent_object = $this->Application->recallObject($parent_prefix);
-		/* @var $parent_object kDBItem */
 
 		$object->SetDBField('ResourceId', $parent_object->GetDBField('ResourceId'));
 		$object->SetDBField('ItemTypeId', $this->Application->getUnitOption($parent_prefix, 'ItemType'));
Index: core/units/fck/fck_eh.php
===================================================================
--- core/units/fck/fck_eh.php
+++ core/units/fck/fck_eh.php
@@ -74,8 +74,8 @@
 		{
 			$event->status = kEvent::erSTOP;
 
+			/** @var CategoryHelper $category_helper */
 			$category_helper = $this->Application->recallObject('CategoryHelper');
-			/* @var $category_helper CategoryHelper */
 
 			$pages = $category_helper->getStructureTreeAsOptions();
 
@@ -123,8 +123,8 @@
 				return;
 			}
 
+			/** @var fckFCKHelper $fck_helper */
 			$fck_helper = $this->Application->recallObject('FCKHelper');
-			/* @var $fck_helper fckFCKHelper*/
 
 			if ( !$fck_helper->IsAllowedExtension($folder, $new_name) ) {
 				echo 203;
@@ -166,8 +166,8 @@
 		{
 			$this->CreateXmlHeader();
 
+			/** @var fckFCKHelper $fck_helper */
 			$fck_helper = $this->Application->recallObject('FCKHelper');
-			/* @var $fck_helper fckFCKHelper */
 
 			$ret = '<?xml version="1.0" encoding="' . CHARSET . '" ?>'."\n" ;
 			$ret .= "<content>"."\n";
@@ -230,8 +230,8 @@
 				return;
 			}
 
+			/** @var fckFCKHelper $fck_helper */
 			$fck_helper = $this->Application->recallObject('FCKHelper');
-			/* @var $fck_helper fckFCKHelper*/
 
 			$fck_helper->UploadFile();
 		}
Index: core/units/fck/fck_tp.php
===================================================================
--- core/units/fck/fck_tp.php
+++ core/units/fck/fck_tp.php
@@ -18,8 +18,8 @@
 
 		protected function CheckCreateDefaultFolders(Array $params)
 		{
+			/** @var fckFCKHelper $fck_helper */
 			$fck_helper = $this->Application->recallObject('FCKHelper');
-			/* @var $fck_helper fckFCKHelper */
 
 			$default_folders = defined('FCK_DEFAULT_FOLDERS') ? FCK_DEFAULT_FOLDERS : Array ('Files', 'Images', 'Flash', 'Media', 'Documents');
 
Index: core/units/files/file_eh.php
===================================================================
--- core/units/files/file_eh.php
+++ core/units/files/file_eh.php
@@ -45,8 +45,8 @@
 		{
 			parent::OnBeforeItemCreate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$object->SetDBField('CreatedById', $this->Application->RecallVar('user_id'));
 		}
@@ -62,8 +62,8 @@
 		{
 			parent::OnBeforeItemUpdate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( !$object->GetDBField('FileName') ) {
 				$object->SetDBField('FileName', basename($object->GetDBField('FilePath')));
@@ -82,8 +82,8 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			if ( !$this->Application->isAdminUser ) {
 				$object->addFilter('active_filter', '%1$s.Status = ' . STATUS_ACTIVE);
@@ -97,11 +97,11 @@
 		 */
 		function OnDownloadFile($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
+			/** @var FileHelper $file_helper */
 			$file_helper = $this->Application->recallObject('FileHelper');
-			/* @var $file_helper FileHelper */
 
 			$filename = $object->GetField('FilePath', 'full_path');
 			$file_helper->DownloadFile($filename);
Index: core/units/files/file_tp.php
===================================================================
--- core/units/files/file_tp.php
+++ core/units/files/file_tp.php
@@ -26,8 +26,8 @@
 
 		function FileIcon($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			$last_dot = mb_strrpos($object->GetDBField('FilePath'), '.');
 			$ext = ($last_dot !== false) ? mb_substr($object->GetDBField('FilePath'), $last_dot + 1).'.gif' : '';
Index: core/units/filters/item_filter_eh.php
===================================================================
--- core/units/filters/item_filter_eh.php
+++ core/units/filters/item_filter_eh.php
@@ -47,8 +47,8 @@
 		parent::SetCustomQuery($event);
 
 		if ( !$this->Application->isAdmin ) {
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			$prefix_info = $this->Application->processPrefix($event->getEventParam('prefix'));
 
@@ -91,8 +91,8 @@
 	{
 		parent::OnBeforeItemValidate($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$prefix = $object->GetDBField('ItemPrefix');
 
@@ -133,8 +133,8 @@
 			return;
 		}
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		if ( !isset($cache) ) {
 			$cache = $this->Conn->Query($object->GetSelectSQL(), 'FilterKey');
@@ -147,8 +147,8 @@
 		}
 
 		if ( $object->isLoaded() ) {
+			/** @var Params $actions */
 			$actions = $this->Application->recallObject('kActions');
-			/* @var $actions Params */
 
 			$actions->Set($event->getPrefixSpecial() . '_id', $object->GetID());
 		}
Index: core/units/filters/item_filter_tp.php
===================================================================
--- core/units/filters/item_filter_tp.php
+++ core/units/filters/item_filter_tp.php
@@ -45,8 +45,8 @@
 	{
 		static $cache = Array ();
 
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		// get item list to be filtered
 		$this->Application->ProcessParsedTag($params['prefix'], 'InitList', $params);
@@ -311,8 +311,8 @@
 			$range_count = $max_value / $this->Application->GetVar('range_step');
 		}
 		else {
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			$range_count = $object->GetDBField('RangeCount');
 		}
Index: core/units/forms/drafts/draft_eh.php
===================================================================
--- core/units/forms/drafts/draft_eh.php
+++ core/units/forms/drafts/draft_eh.php
@@ -27,8 +27,8 @@
 		{
 			parent::OnBeforeItemCreate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$user_id = $this->Application->RecallVar('user_id');
 
@@ -45,8 +45,8 @@
 		public function getPassedID(kEvent $event)
 		{
 			if ( $event->Special == 'related' ) {
+				/** @var kDBItem $form_submission */
 				$form_submission = $this->Application->recallObject('formsubs');
-				/* @var $form_submission kDBItem */
 
 				return Array (
 					'FormSubmissionId' => $form_submission->GetID(),
Index: core/units/forms/form_fields/form_field_eh.php
===================================================================
--- core/units/forms/form_fields/form_field_eh.php
+++ core/units/forms/form_fields/form_field_eh.php
@@ -42,8 +42,8 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			$visibility_filter = $this->getVisiblilityFilter();
 
Index: core/units/forms/form_fields/form_fields_tp.php
===================================================================
--- core/units/forms/form_fields/form_fields_tp.php
+++ core/units/forms/form_fields/form_fields_tp.php
@@ -51,11 +51,11 @@
 				return ;
 			}
 
+			/** @var kDBItem $submission */
 			$submission = $this->Application->recallObject( $block_params['SourcePrefix'] );
-			/* @var $submission kDBItem */
 
 			$options = $submission->GetFieldOptions('fld_' . $object->GetID());
 			$object->SetDBField('DirectOptions', array_key_exists('options', $options) ? $options['options'] : false);
 		}
 
 	}
\ No newline at end of file
Index: core/units/forms/form_submissions/form_submission_tp.php
===================================================================
--- core/units/forms/form_submissions/form_submission_tp.php
+++ core/units/forms/form_submissions/form_submission_tp.php
@@ -42,11 +42,11 @@
 	 */
 	function FormField($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
+		/** @var FormSubmissionHelper $form_submission_helper */
 		$form_submission_helper = $this->Application->recallObject('FormSubmissionHelper');
-		/* @var $form_submission_helper FormSubmissionHelper */
 
 		$formatted = !(array_key_exists('db', $params) && $params['db']);
 		$format = $formatted ? (array_key_exists('format', $params) ? $params['format'] : null) : null;
Index: core/units/forms/form_submissions/form_submissions_eh.php
===================================================================
--- core/units/forms/form_submissions/form_submissions_eh.php
+++ core/units/forms/form_submissions/form_submissions_eh.php
@@ -89,8 +89,8 @@
 			$conf_fields = $this->Application->getUnitOption($event->Prefix, 'Fields');
 			$conf_grids = $this->Application->getUnitOption($event->Prefix, 'Grids');
 
+			/** @var InpCustomFieldsHelper $helper */
 			$helper = $this->Application->recallObject('InpCustomFieldsHelper');
-			/* @var $helper InpCustomFieldsHelper */
 
 			$sql = 'SELECT *
 					FROM ' . TABLE_PREFIX . 'FormFields
@@ -185,8 +185,8 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			$object->addFilter('form_filter', '%1$s.FormId = ' . (int)$this->Application->GetVar('form_id'));
 		}
@@ -229,14 +229,14 @@
 				return;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			// allows user to view only it's last submission
 			$this->Application->StoreVar('last_submission_id', $object->GetID());
 
+			/** @var FormSubmissionHelper $form_submission_helper */
 			$form_submission_helper = $this->Application->recallObject('FormSubmissionHelper');
-			/* @var $form_submission_helper FormSubmissionHelper */
 
 			$form =& $form_submission_helper->getForm($object);
 
@@ -259,8 +259,8 @@
 			$event->SetRedirectParam('opener', 's');
 			$event->SetRedirectParam('m_cat_id', 0);
 
+			/** @var kDBItem $theme */
 			$theme = $this->Application->recallObject('theme.current');
-			/* @var $theme kDBItem */
 
 			$template = $this->Application->unescapeRequestVariable($this->Application->GetVar('success_template'));
 			$alias_template = $theme->GetField('TemplateAliases', $template);
@@ -279,8 +279,8 @@
 		{
 			parent::OnBeforeItemCreate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$object->SetDBField('IPAddress', $this->Application->getClientIp());
 
@@ -295,15 +295,15 @@
 				$object->SetDBField('ReferrerURL', $referrer);
 			}
 
+			/** @var FormSubmissionHelper $form_submission_helper */
 			$form_submission_helper = $this->Application->recallObject('FormSubmissionHelper');
-			/* @var $form_submission_helper FormSubmissionHelper */
 
 			$form =& $form_submission_helper->getForm($object);
 
 			// validate captcha code
 			if ( $form->GetDBField('UseSecurityImage') && !$this->Application->LoggedIn() ) {
+				/** @var kCaptchaHelper $captcha_helper */
 				$captcha_helper = $this->Application->recallObject('CaptchaHelper');
-				/* @var $captcha_helper kCaptchaHelper */
 
 				$captcha_helper->validateCode($event, false);
 			}
@@ -320,8 +320,8 @@
 		{
 			parent::OnBeforeItemUpdate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$object->setRequired('MergeToSubmission', $object->GetDBField('IsMergeToSubmission'));
 		}
@@ -402,8 +402,8 @@
 				return ;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$form_id = $object->GetDBField('FormId');
 			$email_field = $this->getFieldByRole($form_id, SubmissionFormField::COMMUNICATION_ROLE_EMAIL);
@@ -412,8 +412,8 @@
 				return ;
 			}
 
+			/** @var kDBItem $merge_to */
 			$merge_to = $this->Application->recallObject($event->Prefix . '.merge-to', null, Array ('skip_autoload' => true));
-			/* @var $merge_to kDBItem */
 
 			$sql = $merge_to->GetSelectSQL() . ' WHERE (FormId = ' . $form_id . ') AND (' . $email_field . ' = ' . $this->Conn->qstr( $object->GetDBField($email_field) ) . ')';
 			$submissions = $this->Conn->Query($sql, $object->IDField);
@@ -430,8 +430,8 @@
 			$name_field = $this->getFieldByRole($form_id, SubmissionFormField::COMMUNICATION_ROLE_NAME);
 			$subject_field = $this->getFieldByRole($form_id, SubmissionFormField::COMMUNICATION_ROLE_SUBJECT);
 
+			/** @var kDBItem $language */
 			$language = $this->Application->recallObject('lang.current');
-			/* @var $language kDBItem */
 
 			$date_format = $language->GetDBField('DateFormat');
 
@@ -496,8 +496,8 @@
 			parent::OnUpdate($event);
 
 			if ($event->status == kEvent::erSUCCESS) {
+				/** @var kDBItem $object */
 				$object = $event->getObject();
-				/* @var $object kDBItem */
 
 				$merge_to = $object->GetDBField('MergeToSubmission');
 
@@ -512,8 +512,8 @@
 						WHERE FormId = ' . $form_id;
 				$form_info = $this->Conn->GetRow($sql);
 
+				/** @var kDBItem $reply */
 				$reply = $this->Application->recallObject('submission-log.merge', null, Array ('skip_autoload' => true));
-				/* @var $reply kDBItem */
 
 				$email_field = $this->getFieldByRole($form_id, SubmissionFormField::COMMUNICATION_ROLE_EMAIL);
 				$subject_field = $this->getFieldByRole($form_id, SubmissionFormField::COMMUNICATION_ROLE_SUBJECT);
Index: core/units/forms/forms/forms_eh.php
===================================================================
--- core/units/forms/forms/forms_eh.php
+++ core/units/forms/forms/forms_eh.php
@@ -181,8 +181,8 @@
 	 */
 	protected function OnFormSubmit($event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$fields = explode(',',$this->Application->GetVar('fields'));
 		$required_fields = explode(',', $this->Application->GetVar('required_fields'));
@@ -297,8 +297,8 @@
 	 */
 	function _validatePopSettings($event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$modes = Array ('Reply', 'Bounce');
 		$fields = Array ('Server', 'Port', 'Username', 'Password');
@@ -329,8 +329,8 @@
 					$connection_info[ strtolower($field) ] = $object->GetDBField($mode . $field);
 				}
 
+				/** @var POP3Helper $pop3_helper */
 				$pop3_helper = $this->Application->makeClass('POP3Helper', Array ($connection_info, 10));
-				/* @var $pop3_helper POP3Helper */
 
 				switch ( $pop3_helper->initMailbox(true) ) {
 					case 'socket':
@@ -357,8 +357,8 @@
 	 */
 	function _setRequired($event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$required = $object->GetDBField('EnableEmailCommunication');
 		$fields = Array (
@@ -380,8 +380,8 @@
 	 */
 	function _disableSecurityImage($event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		if ($object->GetDBField('RequireLogin')) {
 			$object->SetDBField('UseSecurityImage', 0);
@@ -426,8 +426,8 @@
 				WHERE EnableEmailCommunication = 1';
 		$forms = $this->Conn->Query($sql, $id_field);
 
+		/** @var MailboxHelper $mailbox_helper */
 		$mailbox_helper = $this->Application->recallObject('MailboxHelper');
-		/* @var $mailbox_helper MailboxHelper */
 
 		$field_prefix = $bounce_mode ? 'Bounce' : 'Reply';
 
@@ -458,8 +458,8 @@
 
 	function isValidRecipient($params)
 	{
+		/** @var MailboxHelper $mailbox_helper */
 		$mailbox_helper = $this->Application->recallObject('MailboxHelper');
-		/* @var $mailbox_helper MailboxHelper */
 
 		$recipients = $mailbox_helper->getRecipients();
 		$recipient_email = $params['recipient_email'];
@@ -491,8 +491,8 @@
 		if ($params['bounce_mode']) {
 			// mark original message as bounced
 
+			/** @var MailboxHelper $mailbox_helper */
 			$mailbox_helper = $this->Application->recallObject('MailboxHelper');
-			/* @var $mailbox_helper MailboxHelper */
 
 			if (!array_key_exists('attachments', $mailbox_helper->parsedMessage)) {
 				// for now only parse bounces based on attachments, skip other bounce types
@@ -505,8 +505,8 @@
 				switch ($attachment['headers']['content-type']) {
 					case 'message/delivery-status':
 						// save as BounceInfo
+						/** @var MimeDecodeHelper $mime_decode_helper */
 						$mime_decode_helper = $this->Application->recallObject('MimeDecodeHelper');
-						/* @var $mime_decode_helper MimeDecodeHelper */
 
 						$charset = $mailbox_helper->parsedMessage[ $fields_hash['MessageType'] ][0]['charset'];
 						$fields_hash['Message'] = $mime_decode_helper->convertEncoding($charset, $attachment['data']);
@@ -564,8 +564,8 @@
 					// remove object, because it's linked to single form upon creation forever
 					$this->Application->removeObject('formsubs.-item');
 
+					/** @var kDBItem $form_submission */
 					$form_submission = $this->Application->recallObject('formsubs.-item', null, Array ('skip_autoload' => true));
-					/* @var $form_submission kDBItem */
 
 					// in case that other non-role mapped fields are required
 					$form_submission->IgnoreValidation = true;
@@ -592,8 +592,8 @@
 			return false;
 		}
 
+		/** @var kDBItem $reply_to */
 		$reply_to = $this->Application->recallObject('submission-log.-reply-to', null, Array ('skip_autoload' => true));
-		/* @var $reply_to kDBItem */
 
 		$reply_to->Load($regs[2], 'VerifyCode');
 		if (!$reply_to->isLoaded()) {
@@ -612,8 +612,8 @@
 			return true;
 		}
 
+		/** @var kDBItem $reply */
 		$reply = $this->Application->recallObject('submission-log.-reply', null, Array ('skip_autoload' => true));
-		/* @var $reply kDBItem */
 
 		$reply->SetDBFieldsFromHash($fields_hash);
 		$reply->SetDBField('ReplyTo', $reply_to->GetID());
Index: core/units/forms/forms/forms_tp.php
===================================================================
--- core/units/forms/forms/forms_tp.php
+++ core/units/forms/forms/forms_tp.php
@@ -18,8 +18,8 @@
 
 		function CheckBox($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			$value = $object->GetDBField($this->SelectParam($params, 'name,field'));
 
Index: core/units/forms/submission_log/submission_log_eh.php
===================================================================
--- core/units/forms/submission_log/submission_log_eh.php
+++ core/units/forms/submission_log/submission_log_eh.php
@@ -75,17 +75,17 @@
 		{
 			parent::OnNew($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
+			/** @var kDBItem $form_submission */
 			$form_submission = $this->Application->recallObject('formsubs');
-			/* @var $form_submission kDBItem */
 
+			/** @var FormSubmissionHelper $form_submission_helper */
 			$form_submission_helper = $this->Application->recallObject('FormSubmissionHelper');
-			/* @var $form_submission_helper FormSubmissionHelper */
 
+			/** @var kDBItem $form */
 			$form =& $form_submission_helper->getForm($form_submission);
-			/* @var $form kDBItem */
 
 			$from_email = $form->GetDBField('ReplyFromEmail');
 			$to_email = $form_submission_helper->getFieldByRole($form_submission, SubmissionFormField::COMMUNICATION_ROLE_EMAIL);
@@ -106,8 +106,8 @@
 
 			$ids = $this->StoreSelectedIDs($event);
 			if ( $ids ) {
+				/** @var kDBItem $org_message */
 				$org_message = $this->Application->recallObject($event->Prefix . '.-item', null, Array ('skip_autoload' => true));
-				/* @var $org_message kDBItem */
 
 				$org_message->Load(array_shift($ids));
 				// client could reply from different email, so compare to admin email!
@@ -212,8 +212,8 @@
 				return ;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject( Array('skip_autoload' => true) );
-			/* @var $object kDBItem */
 
 			$sql = 'SELECT f.ReplyFromEmail, sl.' . $object->IDField . '
 					FROM ' . $object->TableName . ' sl
@@ -277,11 +277,11 @@
 		 */
 		function _validateRecipients($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
+			/** @var kEmailSendingHelper $esender */
 			$esender = $this->Application->recallObject('EmailSender');
-			/* @var $esender kEmailSendingHelper */
 
 			$cc = $object->GetDBField('Cc');
 
@@ -329,8 +329,8 @@
 				$this->_generateVerificationCode($object);
 			}
 
+			/** @var FormSubmissionHelper $form_submission_helper */
 			$form_submission_helper = $this->Application->recallObject('FormSubmissionHelper');
-			/* @var $form_submission_helper FormSubmissionHelper */
 
 			$form_submission = $form_submission_helper->getSubmissionFromLog($object);
 			$form =& $form_submission_helper->getForm($form_submission);
@@ -351,8 +351,8 @@
 				$send_params['to_name'] = $to_name;
 			}
 
+			/** @var kEmailSendingHelper $esender */
 			$esender = $this->Application->recallObject('EmailSender');
-			/* @var $esender kEmailSendingHelper */
 
 			$esender->SetReturnPath( $form->GetDBField('BounceEmail') );
 
@@ -391,8 +391,8 @@
 			$object->SetDBField('BounceDate_time', NULL);
 
 			if ($object->GetDBField('DraftId')) {
+				/** @var kTempTablesHandler $temp_handler */
 				$temp_handler = $this->Application->recallObject('draft_TempHandler', 'kTempTablesHandler');
-				/* @var $temp_handler kTempTablesHandler */
 
 				$temp_handler->DeleteItems('draft', '', Array ($object->GetDBField('DraftId')));
 				$object->SetDBField('DraftId', 0);
@@ -413,8 +413,8 @@
 		{
 			parent::OnAfterItemCreate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$this->_sendEmail($object); // send email
 
@@ -427,8 +427,8 @@
 
 			if ( $reply_to ) {
 				// this is reply to other message -> mark it as replied
+				/** @var kDBItem $org_message */
 				$org_message = $this->Application->recallObject($event->Prefix . '.-item', null, Array ('skip_autoload' => true));
-				/* @var $org_message kDBItem */
 
 				$org_message->Load($reply_to);
 				$org_message->SetDBField('ReplyStatus', SUBMISSION_LOG_REPLIED);
@@ -450,11 +450,11 @@
 		 */
 		function _getLastMessageId($event, $from_client = false)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
+			/** @var FormSubmissionHelper $form_submission_helper */
 			$form_submission_helper = $this->Application->recallObject('FormSubmissionHelper');
-			/* @var $form_submission_helper FormSubmissionHelper */
 
 			$form_submission = $form_submission_helper->getSubmissionFromLog($object);
 
@@ -480,8 +480,8 @@
 
 			$this->_updateSubmission($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			// send out email event to admin for bouncing
 			$sent_status = $object->GetDBField('SentStatus');
@@ -498,8 +498,8 @@
 		 */
 		function _updateStatusDates($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$now = adodb_mktime();
 
@@ -525,11 +525,11 @@
 		 */
 		function _updateSubmission($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
+			/** @var FormSubmissionHelper $form_submission_helper */
 			$form_submission_helper = $this->Application->recallObject('FormSubmissionHelper');
-			/* @var $form_submission_helper FormSubmissionHelper */
 
 			$form_submission = $form_submission_helper->getSubmissionFromLog($object);
 
@@ -571,11 +571,11 @@
 		 */
 		function OnSaveDraft($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject( Array('skip_autoload' => true) );
-			/* @var $object kDBItem */
 
+			/** @var kDBItem $draft */
 			$draft = $this->Application->recallObject('draft', null, Array('skip_autoload' => true));
-			/* @var $draft kDBItem */
 
 			$items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) );
 			if ($items_info) {
@@ -615,11 +615,11 @@
 		 */
 		function OnUseDraft($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject( Array('skip_autoload' => true) );
-			/* @var $object kDBItem */
 
+			/** @var kDBItem $draft */
 			$draft = $this->Application->recallObject('draft', null, Array('skip_autoload' => true));
-			/* @var $draft kDBItem */
 
 			$items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) );
 			if ($items_info) {
@@ -653,11 +653,11 @@
 		 */
 		function OnDeleteDraft($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject( Array('skip_autoload' => true) );
-			/* @var $object kDBItem */
 
+			/** @var kDBItem $draft */
 			$draft = $this->Application->recallObject('draft', null, Array('skip_autoload' => true));
-			/* @var $draft kDBItem */
 
 			$items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) );
 			if ($items_info) {
@@ -676,8 +676,8 @@
 	 				// get existing draft for given submission and user
 	 				$draft->Load($load_keys);
 					if ($draft->isLoaded()) {
+						/** @var kTempTablesHandler $temp_handler */
 						$temp_handler = $this->Application->recallObject('draft_TempHandler', 'kTempTablesHandler');
-						/* @var $temp_handler kTempTablesHandler */
 
 						$temp_handler->DeleteItems('draft', '', Array ($draft->GetID()));
 					}
Index: core/units/forms/submission_log/submission_log_tp.php
===================================================================
--- core/units/forms/submission_log/submission_log_tp.php
+++ core/units/forms/submission_log/submission_log_tp.php
@@ -24,8 +24,8 @@
 		 */
 		function IsNewUserReply($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			$user_reply = $this->IsUserReply($params);
 
@@ -40,11 +40,11 @@
 		 */
 		function IsUserReply($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
+			/** @var FormSubmissionHelper $form_submission_helper */
 			$form_submission_helper = $this->Application->recallObject('FormSubmissionHelper');
-			/* @var $form_submission_helper FormSubmissionHelper */
 
 			$form_submission = $form_submission_helper->getSubmissionFromLog($object);
 			$form =& $form_submission_helper->getForm($form_submission);
@@ -65,11 +65,11 @@
 				return false;
 			}
 
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
+			/** @var kDBItem $draft */
 			$draft = $this->Application->recallObject('draft', null, Array('skip_autoload' => true));
-			/* @var $draft kDBItem */
 
 			$load_keys = Array (
 				'FormSubmissionId' => $object->GetDBField('FormSubmissionId'),
@@ -90,8 +90,8 @@
 		 */
 		function IterateFiles($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			$field = $this->SelectParam($params, 'name,field');
 			$value = $object->GetDBField($field);
Index: core/units/groups/groups_event_handler.php
===================================================================
--- core/units/groups/groups_event_handler.php
+++ core/units/groups/groups_event_handler.php
@@ -28,8 +28,8 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			switch ($event->Special) {
 				case 'user':
Index: core/units/helpers/ajax_form_helper.php
===================================================================
--- core/units/helpers/ajax_form_helper.php
+++ core/units/helpers/ajax_form_helper.php
@@ -11,8 +11,8 @@
 		 */
 		public function prepareJSONErrors($event, &$response)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$response['status'] = 'FAILED';
 			$response['field_errors'] = $this->getErrorMessages($object);
@@ -93,8 +93,8 @@
 				$response['status'] = 'OK';
 			}
 
+			/** @var JSONHelper $json_helper */
 			$json_helper = $this->Application->recallObject('JSONHelper');
-			/* @var $json_helper JSONHelper */
 
 			echo $json_helper->encode($response);
 
@@ -119,8 +119,8 @@
 			$form_data = $event->getEventParam('form_data');
 
 			if ( $form_data !== false ) {
+				/** @var kDBItem $object */
 				$object = $event->getObject();
-				/* @var $object kDBItem */
 
 				$params['uploader_info'] = $this->getUploaderInfo($object, array_keys($form_data));
 			}
Index: core/units/helpers/backup_helper.php
===================================================================
--- core/units/helpers/backup_helper.php
+++ core/units/helpers/backup_helper.php
@@ -51,8 +51,8 @@
 	 */
 	function initBackup()
 	{
+		/** @var FileHelper $file_helper */
 		$file_helper = $this->Application->recallObject('FileHelper');
-		/* @var $file_helper FileHelper */
 
 		if (!$file_helper->CheckFolder($this->path) || !is_writable($this->path)) {
 			$this->Application->SetVar('error_msg', $this->Application->Phrase('la_Text_backup_access'));
@@ -501,8 +501,8 @@
 	 */
 	public function getBackupFiles()
 	{
+		/** @var FileHelper $file_helper */
 		$file_helper = $this->Application->recallObject('FileHelper');
-		/* @var $file_helper FileHelper */
 
 		$ret = Array ();
 		$backup_path = $this->Application->ConfigValue('Backup_Path');
Index: core/units/helpers/brackets_helper.php
===================================================================
--- core/units/helpers/brackets_helper.php
+++ core/units/helpers/brackets_helper.php
@@ -65,7 +65,7 @@
 			parent::__construct();
 
 			$this->_language = $this->Application->recallObject('lang.current');
-			/* @var $lang kDBItem */
+			/** @var kDBItem $lang */
 
 			$this->_decimalSeparator = $this->_language->GetDBField('DecimalPoint');
 			$this->_thousandsSeparator = $this->_language->GetDBField('ThousandSep');
@@ -256,8 +256,8 @@
 		{
 			$items_info = $this->getBrackets($event);
 			if ($items_info) {
+				/** @var kDBItem $object */
 				$object = $event->getObject();
-				/* @var $object kDBItem */
 
 				$linked_info = $object->getLinkedInfo();
 				$stored_ids = $this->Conn->GetCol('SELECT '.$object->IDField.' FROM '.$object->TableName.' WHERE '.$linked_info['ForeignKey'].' = '.$linked_info['ParentId']);
@@ -314,8 +314,8 @@
 		 */
 		function arrangeBrackets($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$temp = $this->getBrackets($event);
 
@@ -465,8 +465,8 @@
 		 */
 		function replaceInfinity($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( $object->GetDBField($this->max_field) == '&#8734;' ) {
 				$object->SetDBField($this->max_field, -1);
Index: core/units/helpers/captcha_helper.php
===================================================================
--- core/units/helpers/captcha_helper.php
+++ core/units/helpers/captcha_helper.php
@@ -167,8 +167,8 @@
 			}
 		}
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$valid_code = $this->Application->RecallVar($event->getPrefixSpecial() . '_captcha_code');
 
Index: core/units/helpers/cat_dbitem_export_helper.php
===================================================================
--- core/units/helpers/cat_dbitem_export_helper.php
+++ core/units/helpers/cat_dbitem_export_helper.php
@@ -162,8 +162,8 @@
 		function fillRequiredFields($event, &$object, $set_status = false)
 		{
 			if ( $object == $this->false ) {
+				/** @var kCatDBItem $object */
 				$object = $event->getObject();
-				/* @var $object kCatDBItem */
 			}
 
 			$has_empty = false;
@@ -193,8 +193,8 @@
 
 				if ( $formatter_class ) {
 					// not tested
+					/** @var kFormatter $formatter */
 					$formatter = $this->Application->recallObject($formatter_class);
-					/* @var $formatter kFormatter */
 
 					$sample_value = $formatter->GetSample($field_name, $field_options, $object);
 				}
@@ -226,8 +226,8 @@
 
 			$this->fillRequiredFields($event, $this->false);
 
+			/** @var kCatDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kCatDBItem */
 
 			$cross_unique_fields = Array('FieldsSeparatedBy', 'FieldsEnclosedBy');
 			if (($object->GetDBField('CategoryFormat') == 1) || ($event->Special == 'import')) // in one field
@@ -404,8 +404,8 @@
 		 */
 		function openFile($event)
 		{
+			/** @var FileHelper $file_helper */
 			$file_helper = $this->Application->recallObject('FileHelper');
-			/* @var $file_helper FileHelper */
 
 			$file_helper->CheckFolder(EXPORT_PATH);
 
@@ -439,8 +439,8 @@
 
 		function getCustomSQL()
 		{
+			/** @var kMultiLanguage $ml_formatter */
 			$ml_formatter = $this->Application->recallObject('kMultiLanguage');
-			/* @var $ml_formatter kMultiLanguage */
 
 			$custom_sql = '';
 
@@ -1117,8 +1117,8 @@
 			$category_path = $this->getFromCache('category_path', $category_id);
 
 			if ( !$category_path ) {
+				/** @var kMultiLanguage $ml_formatter */
 				$ml_formatter = $this->Application->recallObject('kMultiLanguage');
-				/* @var $ml_formatter kMultiLanguage */
 
 				$sql = 'SELECT ' . $ml_formatter->LangFieldName('CachedNavbar') . '
 						FROM ' . TABLE_PREFIX . 'Categories
@@ -1259,8 +1259,8 @@
 		 */
 		function prepareExportColumns($event)
 		{
+			/** @var kCatDBItem $object */
 			$object = $event->getObject( Array('skip_autoload' => true) );
-			/* @var $object kCatDBItem */
 
 			if ( !$object->isField('ExportColumns') ) {
 				// import/export prefix was used (see kDBEventHandler::prepareObject) but object don't plan to be imported/exported
@@ -1293,8 +1293,8 @@
 				}
 			}
 
+			/** @var kDBEventHandler $handler */
 			$handler = $this->Application->recallObject($event->Prefix.'_EventHandler');
-			/* @var $handler kDBEventHandler */
 
 			$available_columns = array_merge($available_columns, $handler->getCustomExportColumns($event));
 
@@ -1346,8 +1346,8 @@
 		 */
 		function PrepareExportPresets($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject(Array ('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			$options = $object->GetFieldOptions('ExportPresets');
 			$export_settings = $this->Application->RecallPersistentVar('export_settings');
@@ -1399,14 +1399,14 @@
 				return ;
 			}
 
+			/** @var FileHelper $file_helper */
 			$file_helper = $this->Application->recallObject('FileHelper');
-			/* @var $file_helper FileHelper */
 
 			$import_filenames = Array ();
 			$file_helper->CheckFolder(EXPORT_PATH);
 
 			$iterator = new DirectoryIterator(EXPORT_PATH);
-			/* @var $file_info DirectoryIterator */
+			/** @var DirectoryIterator $file_info */
 
 			foreach ($iterator as $file_info) {
 				$file = $file_info->getFilename();
@@ -1418,8 +1418,8 @@
 				$import_filenames[$file] = $file . ' (' . kUtil::formatSize( $file_info->getSize() ) . ')';
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$object->SetFieldOption('ImportLocalFilename', 'options', $import_filenames);
 		}
@@ -1454,8 +1454,8 @@
 
 			list($item_id, $field_values) = each($items_info);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject(Array ('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			$object->SetFieldsFromHash($field_values);
 			$field_values['ImportFilename'] = $object->GetDBField('ImportFilename'); //if upload formatter has renamed the file during moving !!!
@@ -1556,8 +1556,8 @@
 
 			$required_fields['export'] = Array('ExportFormat', 'ExportFilename','ExportColumns');
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ($this->_getExportSavePreset($object)) {
 				$required_fields['export'][] = 'ExportPresetName';
Index: core/units/helpers/category_helper.php
===================================================================
--- core/units/helpers/category_helper.php
+++ core/units/helpers/category_helper.php
@@ -201,8 +201,8 @@
 			}
 
 			// generate structure tree from scratch
+			/** @var kMultiLanguageHelper $ml_helper */
 			$ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
-			/* @var $ml_helper kMultiLanguageHelper */
 
 			$languages = $ml_helper->getLanguages();
 			$root_category = $this->Application->getBaseCategory();
@@ -301,8 +301,8 @@
 				return $this->_structureTree;
 			}
 
+			/** @var kThemesHelper $themes_helper */
 			$themes_helper = $this->Application->recallObject('ThemesHelper');
-			/* @var $themes_helper kThemesHelper */
 
 			$data = $this->_getStructureTree();
 
Index: core/units/helpers/controls/edit_picker_helper.php
===================================================================
--- core/units/helpers/controls/edit_picker_helper.php
+++ core/units/helpers/controls/edit_picker_helper.php
@@ -40,11 +40,11 @@
 				return ;
 			}
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
+			/** @var kDBItem $main_object */
 			$main_object = $this->Application->recallObject($event->getEventParam('link_to_prefix'));
-			/* @var $main_object kDBItem */
 
 			$selected_items = $main_object->GetDBField($storage_field);
 			if ($selected_items) {
@@ -74,8 +74,8 @@
 		 */
 		function LoadValues($event, $store_field, $source_field)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			list ($sub_prefix, $sub_prefix_field) = explode('.', $source_field);
 			$foreign_key = $this->Application->getUnitOption($sub_prefix, 'ForeignKey');
@@ -103,13 +103,13 @@
 		 */
 		function SaveValues(&$sub_event, $store_field, $sub_prefix_field)
 		{
+			/** @var kDBItem $main_object */
 			$main_object = $sub_event->MasterEvent->getObject();
-			/* @var $main_object kDBItem */
 
 			$affected_field = $main_object->GetDBField($store_field);
 
+			/** @var kDBItem $object */
 			$object = $this->Application->recallObject($sub_event->getPrefixSpecial(), null, Array('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			$sub_table = $object->TableName;
 			$foreign_key = $this->Application->getUnitOption($sub_event->Prefix, 'ForeignKey');
Index: core/units/helpers/controls/minput_helper.php
===================================================================
--- core/units/helpers/controls/minput_helper.php
+++ core/units/helpers/controls/minput_helper.php
@@ -79,8 +79,8 @@
 		 */
 		function OnValidateMInputFields($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$items_info = $this->Application->GetVar($event->getPrefixSpecial(true));
 			if ($items_info) {
@@ -140,11 +140,11 @@
 		 */
 		function LoadValues($event, $store_field, $sub_prefix, $use_fields)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
+			/** @var kDBItem $sub_item */
 			$sub_item = $this->Application->recallObject($sub_prefix, null, Array('skip_autoload' => true));
-			/* @var $sub_item kDBItem */
 
 			$foreign_key = $this->Application->getUnitOption($sub_prefix, 'ForeignKey');
 
@@ -187,13 +187,13 @@
 		 */
 		function SaveValues(&$sub_event, $store_field)
 		{
+			/** @var kDBItem $main_object */
 			$main_object = $sub_event->MasterEvent->getObject();
-			/* @var $main_object kDBItem */
 
 			$affected_field = $main_object->GetDBField($store_field);
 
+			/** @var kDBItem $object */
 			$object = $this->Application->recallObject($sub_event->getPrefixSpecial(), null, Array ('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			$sub_table = $object->TableName;
 			$foreign_key = $this->Application->getUnitOption($sub_event->Prefix, 'ForeignKey');
Index: core/units/helpers/country_states_helper.php
===================================================================
--- core/units/helpers/country_states_helper.php
+++ core/units/helpers/country_states_helper.php
@@ -85,8 +85,8 @@
 		 */
 		function PopulateStates($event, $state_field, $country_field)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$country_iso = $object->GetDBField($country_field);
 
@@ -170,8 +170,8 @@
 		 */
 		function CheckStateField($event, $state_field, $country_field, $auto_required = true)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$country_iso = $object->GetDBField($country_field);
 
Index: core/units/helpers/cron_helper.php
===================================================================
--- core/units/helpers/cron_helper.php
+++ core/units/helpers/cron_helper.php
@@ -127,8 +127,8 @@
 			self::WEEKDAY => $this->weekdaySettings,
 		);
 
+		/** @var Array $ret */
 		$ret = $mapping[$field_type];
-		/* @var $ret Array */
 
 		foreach ($ret as $option_key => $option_title) {
 			$option_title = substr($option_title, 0, 1) == '+' ? substr($option_title, 1) : $this->Application->Phrase($option_title);
@@ -145,8 +145,8 @@
 			}
 		}
 		elseif ( $field_type == self::HOUR ) {
+			/** @var LanguagesItem $language */
 			$language = $this->Application->recallObject('lang.current');
-			/* @var $language LanguagesItem */
 
 			$short_time_format = str_replace(':s', '', $language->GetDBField('TimeFormat'));
 
@@ -155,8 +155,8 @@
 			}
 		}
 		elseif ( $field_type == self::DAY ) {
+			/** @var kMultiLanguageHelper $ml_helper */
 			$ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
-			/* @var $ml_helper kMultiLanguageHelper */
 
 			$forms = Array (
 				'phrase1' => 'la_NumberSuffixSt', 'phrase2' => 'la_NumberSuffixNd', 'phrase3' => 'la_NumberSuffixRd',
Index: core/units/helpers/csv_helper.php
===================================================================
--- core/units/helpers/csv_helper.php
+++ core/units/helpers/csv_helper.php
@@ -32,8 +32,8 @@
 			$export_rand = $this->Application->RecallVar('export_rand');
 			$get_rand = $this->Application->GetVar('export_rand');
 
+			/** @var FileHelper $file_helper */
 			$file_helper = $this->Application->recallObject('FileHelper');
-			/* @var $file_helper FileHelper */
 
 			if ( $export_data && $export_rand == $get_rand ) {
 				$export_data = unserialize($export_data);
@@ -65,8 +65,9 @@
 			$grid_config = $grids[$export_data['grid']]['Fields'];
 
 			$list_params = Array ('per_page' => $export_data['step'], 'grid' => $export_data['grid']);
+
+			/** @var kDBList $list */
 			$list = $this->Application->recallObject(rtrim(implode('.', $prefix_elems), '.'), $prefix_elems[0] . '_List', $list_params);
-			/* @var $list kDBList */
 
 			$list->SetPage($export_data['page']);
 			$list->Query();
@@ -263,8 +264,8 @@
 			$import_data = unserialize($this->Application->RecallVar('import_data'));
 			$prefix_elems = preg_split('/\.|_/', $import_data['prefix'], 2);
 
+			/** @var kDBItem $object */
 			$object = $this->Application->recallObject($prefix_elems[0].'.-csvimport', $prefix_elems[0], Array('skip_autoload' => true, 'populate_ml_fields' => true));
-			/* @var $object kDBItem */
 
 			$file = fopen($import_data['file'], 'r');
 			$eof = false;
Index: core/units/helpers/deployment_helper.php
===================================================================
--- core/units/helpers/deployment_helper.php
+++ core/units/helpers/deployment_helper.php
@@ -279,8 +279,8 @@
 	 */
 	private function importLanguagePack()
 	{
+		/** @var LanguageImportHelper $language_import_helper */
 		$language_import_helper = $this->Application->recallObject('LanguageImportHelper');
-		/* @var $language_import_helper LanguageImportHelper */
 
 		$this->out('Importing LanguagePack ... ');
 		$filename = $this->getModuleFile('english.lang');
@@ -305,8 +305,8 @@
 			$languages = $this->Conn->GetCol($sql);
 		}
 
+		/** @var LanguageImportHelper $language_import_helper */
 		$language_import_helper = $this->Application->recallObject('LanguageImportHelper');
-		/* @var $language_import_helper LanguageImportHelper */
 
 		$language_import_helper->performExport(EXPORT_PATH . '/' . $this->moduleName . '.lang', '|0|1|2|', $languages, '|' . $this->moduleName . '|');
 	}
Index: core/units/helpers/fck_helper.php
===================================================================
--- core/units/helpers/fck_helper.php
+++ core/units/helpers/fck_helper.php
@@ -115,7 +115,7 @@
 
 		try {
 			$iterator = new DirectoryIterator($files_dir);
-			/* @var $file_info DirectoryIterator */
+			/** @var DirectoryIterator $file_info */
 		}
 		catch (UnexpectedValueException $e) {
 			return $ret;
@@ -145,7 +145,7 @@
 
 		try {
 			$iterator = new DirectoryIterator($files_dir);
-			/* @var $file_info DirectoryIterator */
+			/** @var DirectoryIterator $file_info */
 		}
 		catch (UnexpectedValueException $e) {
 			return $ret;
@@ -566,8 +566,8 @@
 	protected function getJavaScriptConfig()
 	{
 		if ( file_exists(SYSTEM_PRESET_PATH . DIRECTORY_SEPARATOR . 'inp_ckconfig.js') ) {
+			/** @var FileHelper $file_helper */
 			$file_helper = $this->Application->recallObject('FileHelper');
-			/* @var $file_helper FileHelper */
 
 			return $file_helper->pathToUrl(SYSTEM_PRESET_PATH . DIRECTORY_SEPARATOR . 'inp_ckconfig.js');
 		}
Index: core/units/helpers/file_helper.php
===================================================================
--- core/units/helpers/file_helper.php
+++ core/units/helpers/file_helper.php
@@ -317,7 +317,7 @@
 			}
 
 			$iterator = new DirectoryIterator($source);
-			/* @var $file_info DirectoryIterator */
+			/** @var DirectoryIterator $file_info */
 
 			$result = $this->CheckFolder($destination);
 
@@ -360,7 +360,7 @@
 			}
 
 			$iterator = new DirectoryIterator($source);
-			/* @var $file_info DirectoryIterator */
+			/** @var DirectoryIterator $file_info */
 
 			$result = $this->CheckFolder($destination);
 
Index: core/units/helpers/filenames_helper.php
===================================================================
--- core/units/helpers/filenames_helper.php
+++ core/units/helpers/filenames_helper.php
@@ -44,8 +44,8 @@
 
 		$this->_escapeChar = $this->Application->ConfigValue('FilenameSpecialCharReplacement');
 
+		/** @var kDBItem $language */
 		$language = $this->Application->recallObject('lang.primary');
-		/* @var $language kDBItem */
 
 		$replacements = $language->GetDBField('FilenameReplacements');
 		if ($replacements) {
Index: core/units/helpers/form_submission_helper.php
===================================================================
--- core/units/helpers/form_submission_helper.php
+++ core/units/helpers/form_submission_helper.php
@@ -114,8 +114,8 @@
 		{
 			$form_id = $form_submission->GetDBField('FormId');
 
+			/** @var kDBItem $form */
 			$form = $this->Application->recallObject('form', null, Array ('skip_autoload' => true));
-			/* @var $form kDBItem */
 
 			if ( !$form->isLoaded() || ($form->GetID() != $form_id) ) {
 				$form->Load($form_id);
@@ -135,8 +135,8 @@
 		{
 			$submission_id = $submission_log->GetDBField('FormSubmissionId');
 
+			/** @var kDBItem $form_submission */
 			$form_submission = $this->Application->recallObject('formsubs.-item', null, Array ('skip_autoload' => true));
-			/* @var $form_submission kDBItem */
 
 			if ( $form_submission->isLoaded() && ($form_submission->GetID() == $submission_id) ) {
 				return $form_submission;
Index: core/units/helpers/geocode_helper.php
===================================================================
--- core/units/helpers/geocode_helper.php
+++ core/units/helpers/geocode_helper.php
@@ -84,8 +84,8 @@
 			$delay = 0;
 			$query_address = $address . ', ' . $city . ', ' . $state;
 
+			/** @var kCurlHelper $curl_helper */
 			$curl_helper = $this->Application->recallObject('CurlHelper');
-			/* @var $curl_helper kCurlHelper */
 
 			while ( true ) {
 				$curl_helper->SetRequestData(array(
Index: core/units/helpers/language_import_helper.php
===================================================================
--- core/units/helpers/language_import_helper.php
+++ core/units/helpers/language_import_helper.php
@@ -807,7 +807,7 @@
 				$container_nodes = Array ('PHRASES', 'EVENTS', 'COUNTRIES');
 
 				foreach ($language_node as $sub_node) {
-					/* @var $sub_node SimpleXMLElement */
+					/** @var SimpleXMLElement $sub_node */
 
 					if ( in_array($sub_node->getName(), $container_nodes) ) {
 							continue;
@@ -843,8 +843,8 @@
 			}
 
 			if ( !defined('IS_INSTALL') || !IS_INSTALL ) {
+				/** @var kMultiLanguageHelper $ml_helper */
 				$ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
-				/* @var $ml_helper kMultiLanguageHelper */
 
 				// create ML columns for new languages
 				$ml_helper->resetState();
@@ -869,7 +869,7 @@
 				$container_nodes = Array ('PHRASES', 'EVENTS', 'COUNTRIES');
 
 				foreach ($language_node as $sub_node) {
-					/* @var $sub_node SimpleXMLElement */
+					/** @var SimpleXMLElement $sub_node */
 
 					if ( !in_array($sub_node->getName(), $container_nodes) || !count($sub_node->children()) ) {
 						// PHP 5.3 version would be: !$sub_node->count()
@@ -927,7 +927,7 @@
 			}
 
 			foreach ($phrases as $phrase_node) {
-				/* @var $phrase_node SimpleXMLElement */
+				/** @var SimpleXMLElement $phrase_node */
 
 				$phrase_key = mb_strtoupper($phrase_node['Label']);
 
@@ -993,11 +993,11 @@
 				$this->Application->Debugger->profileStart('L[' . $language_id . ']E', 'Language: ' . $language_id . '; Events Import');
 			}
 
+			/** @var kEmailTemplateHelper $email_template_helper */
 			$email_template_helper = $this->Application->recallObject('kEmailTemplateHelper');
-			/* @var $email_template_helper kEmailTemplateHelper */
 
 			foreach ($events as $event_node) {
-				/* @var $event_node SimpleXMLElement */
+				/** @var SimpleXMLElement $event_node */
 
 				$message_type = (string)$event_node['MessageType'];
 				$email_template_id = $this->_getEmailTemplateId((string)$event_node['Event'], (int)$event_node['Type']);
@@ -1072,7 +1072,7 @@
 			static $other_translations = Array ();
 
 			foreach ($country_states as $country_state_node) {
-				/* @var $country_state_node SimpleXMLElement */
+				/** @var SimpleXMLElement $country_state_node */
 
 				if ( $process_states ) {
 					$country_state_id = $this->_getStateId((string)$country_states['Iso'], (string)$country_state_node['Iso']);
@@ -1244,8 +1244,8 @@
 				'per_page' => -1
 			);
 
+			/** @var kDBList $list */
 			$list = $this->Application->recallObject($prefix, $prefix . '_List', $tag_params);
-			/* @var $list kDBList */
 
 			$sql = $list->getCountSQL($list->GetSelectSQL());
 			$sql = str_replace('COUNT(*) AS count', $list->TableName . '.' . $list->IDField, $sql);
Index: core/units/helpers/list_helper.php
===================================================================
--- core/units/helpers/list_helper.php
+++ core/units/helpers/list_helper.php
@@ -151,8 +151,8 @@
 		 */
 		function getNavigationResource(&$object, $list_prefix, $next = true, $select_fields = null)
 		{
+			/** @var kDBList $list */
 			$list = $this->Application->recallObject($list_prefix);
-			/* @var $list kDBList */
 
 			if ( !isset($select_fields) ) {
 				$select_fields = '%1$s.' . $object->IDField;
Index: core/units/helpers/mailbox_helper.php
===================================================================
--- core/units/helpers/mailbox_helper.php
+++ core/units/helpers/mailbox_helper.php
@@ -46,8 +46,8 @@
 		 */
 		function process($connection_info, $verify_callback, $process_callback, $callback_params = Array (), $include_attachment_contents = true)
 		{
+			/** @var POP3Helper $pop3_helper */
 			$pop3_helper = $this->Application->makeClass('POP3Helper', Array ($connection_info));
-			/* @var $pop3_helper POP3Helper */
 
 			$connection_status = $pop3_helper->initMailbox();
 
@@ -238,8 +238,8 @@
 				return false;
 			}
 
+			/** @var kEmailSendingHelper $esender */
 			$esender = $this->Application->recallObject('EmailSender');
-			/* @var $esender kEmailSendingHelper */
 
 			// Get the return address
 			$return_path = '';
@@ -306,8 +306,8 @@
 				$message_body = $esender->ConvertToText($message_body);
 			}
 
+			/** @var MimeDecodeHelper $mime_decode_helper */
 			$mime_decode_helper = $this->Application->recallObject('MimeDecodeHelper');
-			/* @var $mime_decode_helper MimeDecodeHelper */
 
 			// convert to site encoding
 			$message_charset = $this->parsedMessage[$message_type][0]['charset'];
@@ -370,8 +370,8 @@
 		{
 			$message = preg_replace("/\r?\n/", "\r\n", trim($message));
 
+			/** @var MimeDecodeHelper $mime_decode_helper */
 			$mime_decode_helper = $this->Application->recallObject('MimeDecodeHelper');
-			/* @var $mime_decode_helper MimeDecodeHelper */
 
 			// 1. separate headers from bodies
 			$mime_decode_helper->InitHelper($message);
Index: core/units/helpers/mailing_list_helper.php
===================================================================
--- core/units/helpers/mailing_list_helper.php
+++ core/units/helpers/mailing_list_helper.php
@@ -27,8 +27,8 @@
 		 */
 		function queueEmail($email, $mailing_id, &$mailing_data)
 		{
+			/** @var kEmailSendingHelper $esender */
 			$esender = $this->Application->recallObject('EmailSender');
-			/* @var $esender kEmailSendingHelper */
 
 			if ($this->_mailingId != $mailing_id) {
 				if (is_numeric($this->_mailingId)) {
@@ -91,8 +91,8 @@
 			$email_address = $name = '';
 
 			if ( $mailing_data['PortalUserId'] > 0 ) {
+				/** @var UsersItem $sender */
 				$sender = $this->Application->recallObject('u.-item', null, Array ('skip_autoload' => true));
-				/* @var $sender UsersItem */
 
 				$sender->Load($mailing_data['PortalUserId']);
 
@@ -271,8 +271,8 @@
 		 */
 		function processQueue(&$messages)
 		{
+			/** @var kEmailSendingHelper $esender */
 			$esender = $this->Application->recallObject('EmailSender');
-			/* @var $esender kEmailSendingHelper */
 
 			$queue_table = $this->Application->getUnitOption('email-queue', 'TableName');
 
Index: core/units/helpers/menu_helper.php
===================================================================
--- core/units/helpers/menu_helper.php
+++ core/units/helpers/menu_helper.php
@@ -168,8 +168,8 @@
 			$cat = isset($params['category_id']) && $params['category_id'] != '' ? $params['category_id'] : $this->Application->GetVar('m_cat_id');
 
 			if ( "$cat" == 'parent' ) {
+				/** @var kDBItem $this_category */
 				$this_category = $this->Application->recallObject('c');
-				/* @var $this_category kDBItem */
 
 				$cat = $this_category->GetDBField('ParentId');
 			}
@@ -345,8 +345,8 @@
 			static $items_by_parent = NULL, $lang_part = NULL;
 
 			if ( !isset($lang_part) ) {
+				/** @var kMultiLanguageHelper $ml_helper */
 				$ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
-				/* @var $ml_helper kMultiLanguageHelper */
 
 				$lang_part = '';
 				$languages = $ml_helper->getLanguages();
Index: core/units/helpers/mime_decode_helper.php
===================================================================
--- core/units/helpers/mime_decode_helper.php
+++ core/units/helpers/mime_decode_helper.php
@@ -228,8 +228,8 @@
 					case 'message/rfc822':
 					case 'message/disposition-notification':
 						// create another instance, not to interfear with main parser
+						/** @var MimeDecodeHelper $mime_decode_helper */
 						$mime_decode_helper = $this->Application->makeClass('MimeDecodeHelper');
-						/* @var $mime_decode_helper MimeDecodeHelper */
 
 						$mime_decode_helper->InitHelper($body);
 
Index: core/units/helpers/minifiers/minify_helper.php
===================================================================
--- core/units/helpers/minifiers/minify_helper.php
+++ core/units/helpers/minifiers/minify_helper.php
@@ -181,7 +181,7 @@
 		public function delete()
 		{
 			$iterator = new DirectoryIterator($this->resourceFolder);
-			/* @var $file_info DirectoryIterator */
+			/** @var DirectoryIterator $file_info */
 
 			foreach ($iterator as $file_info) {
 				if ( !$file_info->isDir() && preg_match('/^(c|d)_.*.(css|js)$/', $file_info->getFilename()) ) {
@@ -247,8 +247,8 @@
 		 */
 		protected function compressViaPHP(&$string, $extension)
 		{
+			/** @var JsMinifyHelper $minifier */
 			$minifier = $this->Application->makeClass($extension == 'js' ? 'JsMinifyHelper' : 'CssMinifyHelper');
-			/* @var $minifier JsMinifyHelper */
 
 			$string = $minifier->minify($string);
 		}
Index: core/units/helpers/mod_rewrite_helper.php
===================================================================
--- core/units/helpers/mod_rewrite_helper.php
+++ core/units/helpers/mod_rewrite_helper.php
@@ -36,8 +36,8 @@
 			$module_prefix = $this->_parseCategoryItemUrl($url_parts, $params, $prefix);
 
 			if ($module_prefix !== false) {
+				/** @var kRewriteUrlProcessor $rewrite_processor */
 				$rewrite_processor = $this->Application->recallObject('kRewriteUrlProcessor');
-				/* @var $rewrite_processor kRewriteUrlProcessor */
 
 				$params['pass'][] = $module_prefix;
 				$rewrite_processor->setModulePrefix($module_prefix);
@@ -59,8 +59,8 @@
 		{
 			static $default_per_page = Array ();
 
+			/** @var kRewriteUrlProcessor $rewrite_processor */
 			$rewrite_processor = $this->Application->recallObject('kRewriteUrlProcessor');
-			/* @var $rewrite_processor kRewriteUrlProcessor */
 
 			$ret = '';
 			list ($prefix) = explode('.', $prefix_special);
@@ -76,8 +76,8 @@
 			}
 
 			if (!array_key_exists($prefix, $default_per_page)) {
+				/** @var ListHelper $list_helper */
 				$list_helper = $this->Application->recallObject('ListHelper');
-				/* @var $list_helper ListHelper */
 
 				$default_per_page[$prefix] = $list_helper->getDefaultPerPage($prefix);
 			}
@@ -145,8 +145,8 @@
 				return true;
 			}
 
+			/** @var kRewriteUrlProcessor $rewrite_processor */
 			$rewrite_processor = $this->Application->recallObject('kRewriteUrlProcessor');
-			/* @var $rewrite_processor kRewriteUrlProcessor */
 
 			$ret = '';
 			list ($prefix) = explode('.', $prefix_special);
@@ -157,8 +157,8 @@
 			}
 
 			if (!array_key_exists($prefix, $default_per_page)) {
+				/** @var ListHelper $list_helper */
 				$list_helper = $this->Application->recallObject('ListHelper');
-				/* @var $list_helper ListHelper */
 
 				$default_per_page[$prefix] = $list_helper->getDefaultPerPage($prefix);
 			}
@@ -252,8 +252,8 @@
 				return false;
 			}
 
+			/** @var kRewriteUrlProcessor $rewrite_processor */
 			$rewrite_processor = $this->Application->recallObject('kRewriteUrlProcessor');
-			/* @var $rewrite_processor kRewriteUrlProcessor */
 
 			if ( $prefix == 'bb' && preg_match('/^bb_([\d]+)/', $item_filename, $regs) ) {
 				// process topics separately, because they don't use item filenames
@@ -335,8 +335,8 @@
 		 */
 		protected function _parseTopicUrl($topic_id, &$vars)
 		{
+			/** @var kRewriteUrlProcessor $rewrite_processor */
 			$rewrite_processor = $this->Application->recallObject('kRewriteUrlProcessor');
-			/* @var $rewrite_processor kRewriteUrlProcessor */
 
 			$sql = 'SELECT c.ParentPath, c.CategoryId
 					FROM ' . TABLE_PREFIX . 'Categories AS c
Index: core/units/helpers/modules_helper.php
===================================================================
--- core/units/helpers/modules_helper.php
+++ core/units/helpers/modules_helper.php
@@ -53,8 +53,8 @@
 
 		function _EnableCookieSID()
 		{
+			/** @var Session $session */
 			$session = $this->Application->recallObject('Session');
-			/* @var $session Session */
 
 			return $session->CookiesEnabled;
 		}
@@ -450,7 +450,7 @@
 
 			try {
 				$iterator = new DirectoryIterator(MODULES_PATH);
-				/* @var $file_info DirectoryIterator */
+				/** @var DirectoryIterator $file_info */
 			}
 			catch (UnexpectedValueException $e) {
 				return $modules;
Index: core/units/helpers/navigation_bar.php
===================================================================
--- core/units/helpers/navigation_bar.php
+++ core/units/helpers/navigation_bar.php
@@ -203,8 +203,8 @@
 
 		$main_category_id = $this->_getCurrentCategoryId();
 
+		/** @var CategoryHelper $category_helper */
 		$category_helper = $this->Application->recallObject('CategoryHelper');
-		/* @var $category_helper CategoryHelper */
 
 		$module_info = $category_helper->getCategoryModule($this->_params, array_keys($category_path));
 		$module_item_id = $this->Application->GetVar($module_info['Var'] . '_id');
@@ -290,8 +290,8 @@
 		if ( $cached_path === false ) {
 			$parent_path = explode('|', substr($this->getParentPath($main_category_id), 1, -1));
 
+			/** @var kMultiLanguage $ml_formatter */
 			$ml_formatter = $this->Application->recallObject('kMultiLanguage');
-			/* @var $ml_formatter kMultiLanguage */
 
 			$navbar_field = $ml_formatter->LangFieldName($category_title);
 
Index: core/units/helpers/page_helper.php
===================================================================
--- core/units/helpers/page_helper.php
+++ core/units/helpers/page_helper.php
@@ -44,8 +44,8 @@
 	 */
 	protected function getHistoryPermissionAndUser($page_id)
 	{
+		/** @var kPermissionsHelper $perm_helper */
 		$perm_helper = $this->Application->recallObject('PermissionsHelper');
-		/* @var $perm_helper kPermissionsHelper */
 
 		$user_id = (int)$this->Application->RecallVar($this->Application->isAdmin ? 'user_id' : 'admin_user_id');
 		$history_permission = $perm_helper->CheckUserPermission($user_id, 'CATEGORY.REVISION.HISTORY.VIEW', 0, $page_id);
@@ -84,8 +84,8 @@
 	 */
 	protected function getCurrentRevisionInfo()
 	{
+		/** @var kDBItem $revision */
 		$revision = $this->Application->recallObject('page-revision.current');
-		/* @var $revision kDBItem */
 
 		$status_label = $this->getRevisionStatusText($revision);
 
@@ -173,8 +173,8 @@
 	 */
 	protected function getEditorsWarning(array $users)
 	{
+		/** @var kMultiLanguageHelper $ml_helper */
 		$ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
-		/* @var $ml_helper kMultiLanguageHelper */
 
 		$ret = $ml_helper->getPluralPhrase(
 			count($users),
@@ -202,8 +202,8 @@
 
 		$tag_params = Array ('per_page' => -1, 'skip_parent_filter' => 1, 'requery' => 1, 'page_id' => $page_id);
 
+		/** @var kDBList $revisions */
 		$revisions = $this->Application->recallObject('page-revision.list', 'page-revision_List', $tag_params);
-		/* @var $revisions kDBList */
 
 		$revisions->Query();
 		$revisions->GoFirst();
@@ -381,8 +381,8 @@
 
 		if ( !$revisions ) {
 			// no revisions for a page -> create a live revision
+			/** @var kDBItem $revision */
 			$revision = $this->Application->recallObject('page-revision.live', null, Array ('skip_autoload' => true));
-			/* @var $revision kDBItem */
 
 			$revision->SetDBField('PageId', $page_id);
 			$revision->SetDBField('RevisionNumber', 1);
@@ -392,8 +392,8 @@
 			$revisions[ $revision->GetID() ] = NULL;
 		}
 
+		/** @var kDBItem $content_block */
 		$content_block = $this->Application->recallObject('content.new', null, Array ('skip_autoload' => true));
-		/* @var $content_block kDBItem */
 
 		$content_block->SetDBField('PageId', $page_id);
 		$content_block->SetDBField('ContentNum', $num);
Index: core/units/helpers/permissions_helper.php
===================================================================
--- core/units/helpers/permissions_helper.php
+++ core/units/helpers/permissions_helper.php
@@ -189,8 +189,9 @@
 			);
 
 			$top_prefix = $event->getEventParam('top_prefix');
+
+			/** @var kCatDBEventHandler $event_handler */
 			$event_handler = $this->Application->recallObject($event->Prefix . '_EventHandler');
-			/* @var $event_handler kCatDBEventHandler */
 
 			$raise_warnings = $event->getEventParam('raise_warnings');
 			$event->setEventParam('raise_warnings', 0);
@@ -447,8 +448,8 @@
 				// check permission by event name
 				list ($prefix, ) = explode(':', $perm_event);
 
+				/** @var kEventHandler $event_handler */
 				$event_handler = $this->Application->recallObject($prefix . '_EventHandler');
-				/* @var $event_handler kEventHandler */
 
 				return $event_handler->CheckPermission( new kEvent($perm_event) );
 			}
Index: core/units/helpers/priority_helper.php
===================================================================
--- core/units/helpers/priority_helper.php
+++ core/units/helpers/priority_helper.php
@@ -27,8 +27,8 @@
 		 */
 		function preparePriorities($event, $is_new = false, $constrain = '', $joins = '')
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$field_options = $object->GetFieldOptions('Priority');
 			$table_name = $this->Application->getUnitOption($event->Prefix, 'TableName');
@@ -242,8 +242,8 @@
 		{
 			$ids = array_unique($ids);
 
+			/** @var kDBItem $dummy */
 			$dummy = $this->Application->recallObject($prefix . '.-dummy', null, Array ('skip_autoload' => true));
-			/* @var $dummy kDBItem */
 
 			$sql = 	$dummy->GetSelectSQL() . '
 					WHERE ' . $dummy->TableName . '.' . $dummy->IDField . ' IN (' . implode(',', $ids) . ')';
Index: core/units/helpers/rating_helper.php
===================================================================
--- core/units/helpers/rating_helper.php
+++ core/units/helpers/rating_helper.php
@@ -253,8 +253,8 @@
 		 */
 		protected function &_getSpamHelper(&$object)
 		{
+			/** @var SpamHelper $spam_helper */
 			$spam_helper = $this->Application->recallObject('SpamHelper');
-			/* @var $spam_helper SpamHelper */
 
 			// 2. user isn't voting too frequently
 			$config_mapping = $this->Application->getUnitOption($object->Prefix, 'ConfigMapping');
Index: core/units/helpers/recursive_helper.php
===================================================================
--- core/units/helpers/recursive_helper.php
+++ core/units/helpers/recursive_helper.php
@@ -38,8 +38,8 @@
 					WHERE ('.$id_field.' = '.$category_id.') AND (PrimaryCat = 0)';
 			$this->Conn->Query($sql);
 
+			/** @var kTempTablesHandler $temp_handler */
 			$temp_handler = $this->Application->recallObject($prefix.'_TempHandler', 'kTempTablesHandler');
-			/* @var $temp_handler kTempTablesHandler */
 
 			// 2. delete items this have this category as primary
 			$delete_ids = $this->getCategoryItems($category_id, true);
@@ -125,8 +125,9 @@
 			}
 
 			// 1. clone category
+			/** @var kTempTablesHandler $temp_handler */
 			$temp_handler = $this->Application->recallObject($prefix . '_TempHandler', 'kTempTablesHandler');
-			/* @var $temp_handler kTempTablesHandler*/
+
 			$temp_handler->BuildTables($prefix, Array ($category_id));
 			$new_category_id = array_pop($temp_handler->CloneItems($prefix, '', Array ($category_id)));
 			$this->Application->SetVar('m_cat_id', $new_category_id);
@@ -143,8 +144,8 @@
 					continue;
 				}
 
+				/** @var kCatDBItem $item_object */
 				$item_object = $this->Application->recallObject($item_prefix . '.-item', null, Array ('skip_autoload' => true));
-				/* @var $item_object kCatDBItem */
 
 				foreach ($resource_ids as $item_resource_id) {
 					$item_object->Load($item_resource_id, 'ResourceId');
Index: core/units/helpers/search_helper.php
===================================================================
--- core/units/helpers/search_helper.php
+++ core/units/helpers/search_helper.php
@@ -216,8 +216,8 @@
 		 */
 		public function performSearch($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			// process search keyword
 			$search_keyword = $this->Application->GetVar($event->getPrefixSpecial(true) . '_search_keyword');
@@ -251,8 +251,8 @@
 
 			$search_filter = Array();
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			foreach ($search_fields as $search_field) {
 				$custom_search = isset($custom_filter[$search_field]);
@@ -691,8 +691,8 @@
 				}
 			}
 
+			/** @var kFormatter $formatter */
 			$formatter = $this->Application->recallObject($options['formatter']);
-			/* @var $formatter kFormatter */
 
 			$value_ts = $formatter->Parse($value[$type], $search_field, $object);
 
@@ -718,8 +718,8 @@
 				return $field_options['input_time_format'];
 			}
 
+			/** @var LanguagesItem $lang_current */
 			$lang_current = $this->Application->recallObject('lang.current');
-			/* @var $lang_current LanguagesItem */
 
 			return $lang_current->GetDBField('InputTimeFormat');
 		}
@@ -748,17 +748,17 @@
 		 */
 		function SetComplexFilter($event, &$type_clauses, $types, $except_types)
 		{
+			/** @var kMultipleFilter $includes_or_filter */
 			$includes_or_filter = $this->Application->makeClass('kMultipleFilter', Array (kDBList::FLT_TYPE_OR));
-			/* @var $includes_or_filter kMultipleFilter */
 
+			/** @var kMultipleFilter $excepts_and_filter */
 			$excepts_and_filter = $this->Application->makeClass('kMultipleFilter', Array (kDBList::FLT_TYPE_AND));
-			/* @var $excepts_and_filter kMultipleFilter */
 
+			/** @var kMultipleFilter $includes_or_filter_h */
 			$includes_or_filter_h = $this->Application->makeClass('kMultipleFilter', Array (kDBList::FLT_TYPE_OR));
-			/* @var $includes_or_filter_h kMultipleFilter */
 
+			/** @var kMultipleFilter $excepts_and_filter_h */
 			$excepts_and_filter_h = $this->Application->makeClass('kMultipleFilter', Array (kDBList::FLT_TYPE_AND));
-			/* @var $excepts_and_filter_h kMultipleFilter */
 
 			if ( $types ) {
 				$types = explode(',', $types);
@@ -793,8 +793,8 @@
 				}
 			}
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			$object->addFilter('includes_filter', $includes_or_filter);
 			$object->addFilter('excepts_filter', $excepts_and_filter);
Index: core/units/helpers/sections_helper.php
===================================================================
--- core/units/helpers/sections_helper.php
+++ core/units/helpers/sections_helper.php
@@ -116,8 +116,9 @@
 			// 2. apply section adjustments
 			foreach ($prefixes as $prefix) {
 				$config =& $this->Application->UnitConfigReader->configData[$prefix];
+
+				/** @var Array $section_adjustments */
 				$section_adjustments = getArrayValue($config, 'SectionAdjustments');
-				/* @var $section_adjustments Array */
 
 				if ( !$section_adjustments ) {
 					continue;
@@ -212,8 +213,9 @@
 		function _processPrefixSections($prefix)
 		{
 			$config =& $this->Application->UnitConfigReader->configData[$prefix];
+
+			/** @var Array $sections */
 			$sections = getArrayValue($config, 'Sections');
-			/* @var $sections Array */
 
 			if ( !$sections ) {
 				return ;
@@ -300,8 +302,9 @@
 		public function getFirstChild($section_name, $check_permission = false)
 		{
 			$section_data =& $this->getSectionData($section_name);
+
+			/** @var Array $children */
 			$children = isset($section_data['children']) && $section_data['children'] ? $section_data['children'] : false;
-			/* @var $children Array */
 
 			if ( $children ) {
 				// get 1st child
Index: core/units/helpers/skin_helper.php
===================================================================
--- core/units/helpers/skin_helper.php
+++ core/units/helpers/skin_helper.php
@@ -50,8 +50,8 @@
 				}
 				else {
 					// not found (try to compile on the fly)
+					/** @var kDBItem $skin */
 					$skin = $this->Application->recallObject('skin.-item', null, Array ('skip_autoload' => true));
-					/* @var $skin kDBItem */
 
 					$skin->Load(1, 'IsPrimary');
 					$last_compiled = $this->compile($skin);
@@ -208,7 +208,7 @@
 			$last_compiled = 0;
 
 			$iterator = new DirectoryIterator( $this->_getStylesheetPath() . DIRECTORY_SEPARATOR );
-			/* @var $file_info DirectoryIterator */
+			/** @var DirectoryIterator $file_info */
 
 			foreach ($iterator as $file_info) {
 				if ( !$file_info->isFile() ) {
@@ -232,7 +232,7 @@
 		function deleteCompiled()
 		{
 			$iterator = new DirectoryIterator( $this->_getStylesheetPath() . DIRECTORY_SEPARATOR );
-			/* @var $file_info DirectoryIterator */
+			/** @var DirectoryIterator $file_info */
 
 			foreach ($iterator as $file_info) {
 				if ( $file_info->isFile() && $this->isSkinFile( $file_info->getFilename() ) ) {
Index: core/units/helpers/template_helper.php
===================================================================
--- core/units/helpers/template_helper.php
+++ core/units/helpers/template_helper.php
@@ -83,8 +83,8 @@
 			$t = $this->Application->GetVar('source');
 
 			if (!$this->Application->TemplatesCache->TemplateExists($t)) {
+				/** @var CategoriesEventHandler $cms_handler */
 				$cms_handler = $this->Application->recallObject('st_EventHandler');
-				/* @var $cms_handler CategoriesEventHandler */
 
 				$t = ltrim($cms_handler->GetDesignTemplate($t), '/');
 			}
Index: core/units/helpers/themes_helper.php
===================================================================
--- core/units/helpers/themes_helper.php
+++ core/units/helpers/themes_helper.php
@@ -163,8 +163,8 @@
 				$modules = Array ($module_name => $this->Application->ModuleInfo[$module_name]);
 			}
 
+			/** @var LanguageImportHelper $language_import_helper */
 			$language_import_helper = $this->Application->recallObject('LanguageImportHelper');
-			/* @var $language_import_helper LanguageImportHelper */
 
 			foreach ($modules as $module_name => $module_info) {
 				if ( $module_name == 'In-Portal' ) {
@@ -206,7 +206,7 @@
 				}
 
 				foreach ($theme as $design) {
-					/* @var $design SimpleXMLElement */
+					/** @var SimpleXMLElement $design */
 
 					$template_path = trim($design);
 					$module_override = (string)$design['module'];
@@ -363,7 +363,7 @@
 			$ignore_regexp = $this->getIgnoreRegexp($theme_path . $folder_path);
 
 			$iterator = new DirectoryIterator($theme_path . $folder_path . '/');
-			/* @var $file_info DirectoryIterator */
+			/** @var DirectoryIterator $file_info */
 
 			foreach ($iterator as $file_info) {
 				$filename = $file_info->getFilename();
@@ -506,7 +506,7 @@
 
 			try {
 				$iterator = new DirectoryIterator($this->themesFolder . '/');
-				/* @var $file_info DirectoryIterator */
+				/** @var DirectoryIterator $file_info */
 
 				foreach ($iterator as $file_info) {
 					$filename = $file_info->getFilename();
@@ -553,8 +553,8 @@
 			$this->Application->incrementCacheSerial('theme');
 			$this->Application->incrementCacheSerial('theme-file');
 
+			/** @var MinifyHelper $minify_helper */
 			$minify_helper = $this->Application->recallObject('MinifyHelper');
-			/* @var $minify_helper MinifyHelper */
 
 			$minify_helper->delete();
 		}
Index: core/units/helpers/upload_helper.php
===================================================================
--- core/units/helpers/upload_helper.php
+++ core/units/helpers/upload_helper.php
@@ -83,8 +83,8 @@
 		$storage_format = $this->getStorageFormat($this->Application->GetVar('field'), $event);
 
 		if ( $storage_format ) {
+			/** @var ImageHelper $image_helper */
 			$image_helper = $this->Application->recallObject('ImageHelper');
-			/* @var $image_helper ImageHelper */
 
 			$this->moveUploadedFile($value['tmp_name'] . '.jpg'); // add extension, so ResizeImage can work
 			$url = $image_helper->ResizeImage($value['tmp_name'] . '.jpg', $storage_format);
@@ -137,8 +137,8 @@
 		// this prevents session from auto-expiring when KeepSessionOnBrowserClose & FireFox is used
 		$this->Application->HttpQuery->Cookie[$cookie_name . '_live'] = $this->Application->GetVar('flashsid');
 
+		/** @var Session $admin_session */
 		$admin_session = $this->Application->recallObject('Session.admin');
-		/* @var $admin_session Session */
 
 		if ( $admin_session->RecallVar('user_id') == USER_ROOT ) {
 			return true;
@@ -279,8 +279,8 @@
 	 */
 	public function prepareUploadedFile(kEvent $event, $field)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject(Array ('skip_autoload' => true));
-		/* @var $object kDBItem */
 
 		$filename = $this->getSafeFilename();
 
Index: core/units/helpers/user_helper.php
===================================================================
--- core/units/helpers/user_helper.php
+++ core/units/helpers/user_helper.php
@@ -59,8 +59,8 @@
 			$super_admin = ($username == 'super-root') && $this->verifySuperAdmin();
 
 			if ( $this->Application->isAdmin && ($username == 'root') || ($super_admin && $username == 'super-root') ) {
+				/** @var kPasswordFormatter $password_formatter */
 				$password_formatter = $this->Application->recallObject('kPasswordFormatter');
-				/* @var $password_formatter kPasswordFormatter */
 
 				if ( !$password_formatter->checkPasswordFromSetting('RootPass', $password) ) {
 					return LoginResult::INVALID_PASSWORD;
@@ -296,8 +296,8 @@
 			$user_id = USER_GUEST;
 			$this->Application->SetVar('u.current_id', $user_id);
 
+			/** @var UsersItem $object */
 			$object = $this->Application->recallObject('u.current', null, Array('skip_autoload' => true));
-			/* @var $object UsersItem */
 
 			$object->Load($user_id);
 
@@ -347,8 +347,8 @@
 					return md5($user_info['Password']) == $password;
 				}
 				else {
+					/** @var kPasswordFormatter $password_formatter */
 					$password_formatter = $this->Application->recallObject('kPasswordFormatter');
-					/* @var $password_formatter kPasswordFormatter */
 
 					$hashing_method = $user_info['PasswordHashingMethod'];
 
@@ -375,8 +375,8 @@
 		 */
 		protected function _fixUserPassword($user_id, $password)
 		{
+			/** @var kPasswordFormatter $password_formatter */
 			$password_formatter = $this->Application->recallObject('kPasswordFormatter');
-			/* @var $password_formatter kPasswordFormatter */
 
 			$fields_hash = Array (
 				'Password' => $password_formatter->hashPassword($password),
@@ -408,8 +408,8 @@
 			}
 
 			// synchronize login
+			/** @var UsersSyncronizeManager $sync_manager */
 			$sync_manager = $this->Application->recallObject('UsersSyncronizeManager', null, Array (), Array ('InPortalSyncronize'));
-			/* @var $sync_manager UsersSyncronizeManager */
 
 			if ( isset($username) && isset($password) ) {
 				$sync_manager->performAction('LoginUser', $username, $password);
@@ -542,8 +542,8 @@
 		{
 			$prefix_special = $this->Application->isAdmin ? 'u.current' : 'u'; // "u" used on front not to change theme
 
+			/** @var UsersItem $object */
 			$object = $this->Application->recallObject($prefix_special, null, Array('skip_autoload' => true));
-			/* @var $object UsersItem */
 
 			return $object;
 		}
@@ -712,8 +712,8 @@
 			$email_to_restore = $prev_emails[$hash];
 			unset($prev_emails[$hash]);
 
+			/** @var UsersItem $object */
 			$object = $this->Application->recallObject('u.email-restore', null, Array ('skip_autoload' => true));
-			/* @var $object UsersItem */
 
 			$object->Load($user_info['PortalUserId']);
 			$object->SetDBField('PrevEmails', serialize($prev_emails));
Index: core/units/helpers/xml_helper.php
===================================================================
--- core/units/helpers/xml_helper.php
+++ core/units/helpers/xml_helper.php
@@ -103,8 +103,8 @@
 
 			xml_parser_free($xml_parser);
 
+			/** @var kXMLNode $root_copy */
 			$root_copy = $this->RootElement;
-			/* @var $root_copy kXMLNode */
 
 			unset($this->RootElement);
 			unset($this->CurrentElement);
@@ -152,8 +152,9 @@
 		{
 			if ($this->Mode == self::XML_WITH_TEXT_NODES) {
 				$class_name = $this->XMLNodeClassName;
+
+				/** @var kXMLNode $text_node */
 				$text_node = new $class_name('_TEXT_');
-				/* @var $text_node kXMLNode */
 
 				$text_node->AppendData($Line);
 				$this->CurrentElement->AddChild( $text_node );
@@ -185,8 +186,9 @@
 		function &CreateNode($name, $value=null, $attributes=array())
 		{
 			$class_name = $this->XMLNodeClassName;
+
+			/** @var kXMLNode $node */
 			$node = new $class_name($name, $attributes);
-			/* @var $node kXMLNode */
 
 			if ($value) {
 				$node->SetData($value);
@@ -432,7 +434,7 @@
 			$children = array_keys($this->Children);*/
 
 			foreach ($this->Children as $elem) {
-				/* @var $elem kXMLNode */
+				/** @var kXMLNode $elem */
 
 				$child =& $elem->FindChild($name);
 				if ( $child !== false ) {
@@ -551,7 +553,7 @@
 				}
 
 				foreach ($this->Children as $node) {
-					/* @var $node kXMLNode */
+					/** @var kXMLNode $node */
 
 					$xml .= $node->GetXML($node->Name == '_TEXT_' ? true : false);
 				}
Index: core/units/images/image_event_handler.php
===================================================================
--- core/units/images/image_event_handler.php
+++ core/units/images/image_event_handler.php
@@ -84,8 +84,8 @@
 	 */
 	protected function customProcessing(kEvent $event, $type)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		if ( $event->Name == 'OnMassDelete' && $type == 'before' ) {
 			$ids = $event->getEventParam('ids');
@@ -152,8 +152,8 @@
 	{
 		$id = $event->getEventParam('id');
 
+		/** @var kDBItem $object */
 		$object = $this->Application->recallObject($event->Prefix . '.-item', $event->Prefix, Array ('skip_autoload' => true));
-		/* @var $object kDBItem */
 
 		if ( in_array($event->Name, Array ('OnBeforeDeleteFromLive', 'OnAfterClone')) ) {
 			$object->SwitchToLive();
@@ -167,8 +167,8 @@
 
 		$object->Load($id);
 
+		/** @var FileHelper $file_helper */
 		$file_helper = $this->Application->recallObject('FileHelper');
-		/* @var $file_helper FileHelper */
 
 		$fields = Array ('LocalPath' => 'LocalImage', 'ThumbPath' => 'LocalThumb');
 
@@ -250,8 +250,8 @@
 	 */
 	protected function OnSetPrimary($event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$object->SetDBField('DefaultImg', 1);
 		$object->Update();
@@ -284,8 +284,8 @@
 
 		$this->processImageStatus($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$object->Update();
 	}
@@ -297,8 +297,8 @@
 	 */
 	function processImageStatus($event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$id = $object->GetDBField('ResourceId');
 
@@ -333,8 +333,8 @@
 	{
 		parent::SetCustomQuery($event);
 
+		/** @var kDBList $object */
 		$object = $event->getObject();
-		/* @var $object kDBList */
 
 		if ( !$this->Application->isAdminUser ) {
 			$object->addFilter('active', '%1$s.Enabled = 1');
@@ -353,8 +353,8 @@
 			$object->addFilter('product_images', '%1$s.ResourceId = ' . $resource_id);
 		}
 
+		/** @var kSearchHelper $search_helper */
 		$search_helper = $this->Application->recallObject('SearchHelper');
-		/* @var $search_helper kSearchHelper */
 
 		$types = $event->getEventParam('types');
 		$except_types = $event->getEventParam('except');
Index: core/units/images/image_tag_processor.php
===================================================================
--- core/units/images/image_tag_processor.php
+++ core/units/images/image_tag_processor.php
@@ -34,8 +34,8 @@
 
 		$parent_prefix = $this->Application->getUnitOption($object->Prefix, 'ParentPrefix');
 
+		/** @var kDBItem $parent_item */
 		$parent_item = $this->Application->recallObject($parent_prefix);
-		/* @var $parent_item kDBItem */
 
 		$block_params['img_path'] = $image_url;
 		$image_dimensions = $this->ImageSize($block_params);
@@ -88,11 +88,11 @@
 
 	function LoadItemImage($params)
 	{
+		/** @var kCatDBItem $parent_item */
 		$parent_item = $this->Application->recallObject($params['PrefixSpecial']);
-		/* @var $parent_item kCatDBItem */
 
+		/** @var kDBItem $object */
 		$object = $this->Application->recallObject($this->getPrefixSpecial(), null, Array('skip_autoload' => true));
-		/* @var $object kDBItem */
 
 		$object->Clear();
 
@@ -220,8 +220,8 @@
 
 	function ImageSrc($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$this->makeRelativePaths($object);
 
@@ -246,8 +246,8 @@
 				list ($max_width, $max_height) = $this->_transformParams($params, $max_width, $max_height);
 
 				if ($object->isLoaded() && file_exists($src_image)) {
+					/** @var ImageHelper $image_helper */
 					$image_helper = $this->Application->recallObject('ImageHelper');
-					/* @var $image_helper ImageHelper */
 
 					return $image_helper->ResizeImage($src_image, $max_width, $max_height);
 				}
@@ -286,8 +286,8 @@
 			return false;
 		}
 
+		/** @var FileHelper $file_helper */
 		$file_helper = $this->Application->recallObject('FileHelper');
-		/* @var $file_helper FileHelper */
 
 		$dst_image = $file_helper->urlToPath($src_image);
 
@@ -296,8 +296,8 @@
 
 	function _getImageUrl($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$base_url = rtrim($this->Application->BaseURL(), '/');
 
@@ -374,8 +374,8 @@
 		$sub_folder = $this->Application->isAdmin ? rtrim(IMAGES_PATH, '/') : THEMES_PATH;
 
 		if (($max_width !== false) || ($max_height !== false)) {
+			/** @var ImageHelper $image_helper */
 			$image_helper = $this->Application->recallObject('ImageHelper');
-			/* @var $image_helper ImageHelper */
 
 			$src_image = FULL_PATH . $sub_folder . '/' . $default_image;
 
@@ -393,8 +393,8 @@
 
 		// absolute url
 		if (preg_match('/^(.*):\/\/(.*)$/U', $path)) {
+			/** @var FileHelper $file_helper */
 			$file_helper = $this->Application->recallObject('FileHelper');
-			/* @var $file_helper FileHelper */
 
 			return $file_helper->urlToPath($path);
 		}
@@ -417,8 +417,8 @@
 	{
 		$img_path = $this->getFullPath($params['img_path']);
 
+		/** @var ImageHelper $image_helper */
 		$image_helper = $this->Application->recallObject('ImageHelper');
-		/* @var $image_helper ImageHelper */
 
 		$max_width = $this->getImageDimension('Width', $params);
 		$max_height = $this->getImageDimension('Height', $params);
@@ -446,8 +446,8 @@
 			return '';
 		}
 
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$params['img_path'] = $image_url;
 		$image_dimensions = $this->ImageSize($params);
Index: core/units/languages/languages_event_handler.php
===================================================================
--- core/units/languages/languages_event_handler.php
+++ core/units/languages/languages_event_handler.php
@@ -129,8 +129,8 @@
 				}
 			}
 
+			/** @var kMultiLanguageHelper $ml_helper */
 			$ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
-			/* @var $ml_helper kMultiLanguageHelper */
 
 			$ml_helper->massCreateFields();
 			$event->SetRedirectParam('action_completed', 1);
@@ -152,8 +152,9 @@
 			$ids = $this->getSelectedIDs($event);
 			if ($ids) {
 				$id = array_shift($ids);
+
+				/** @var LanguagesItem $object */
 				$object = $event->getObject( Array('skip_autoload' => true) );
-				/* @var $object LanguagesItem */
 
 				$object->Load($id);
 				$object->copyMissingData( $object->setPrimary() );
@@ -171,8 +172,8 @@
 				return ;
 			}
 
+			/** @var LanguagesItem $object */
 			$object = $event->getObject( Array('skip_autoload' => true) );
-			/* @var $object LanguagesItem */
 
 			$object->SwitchToLive();
 
@@ -267,8 +268,8 @@
 		{
 			parent::OnBeforeItemUpdate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$status_fields = $this->Application->getUnitOption($event->Prefix, 'StatusField');
 			$status_field = array_shift($status_fields);
@@ -304,11 +305,11 @@
 		{
 			parent::OnBeforeItemValidate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
+			/** @var kEmailTemplateHelper $email_template_helper */
 			$email_template_helper = $this->Application->recallObject('kEmailTemplateHelper');
-			/* @var $email_template_helper kEmailTemplateHelper */
 
 			$email_template_helper->parseField($object, 'HtmlEmailTemplate');
 			$email_template_helper->parseField($object, 'TextEmailTemplate');
@@ -330,8 +331,8 @@
 		 */
 		protected function setRequired(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$object->setRequired('HtmlEmailTemplate', !$object->GetDBField('TextEmailTemplate'));
 			$object->setRequired('TextEmailTemplate', !$object->GetDBField('HtmlEmailTemplate'));
@@ -349,8 +350,8 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			if ( in_array($event->Special, Array ('enabled', 'selected', 'available')) ) {
 				$object->addFilter('enabled_filter', '%1$s.Enabled = ' . STATUS_ACTIVE);
@@ -358,8 +359,8 @@
 
 			// site domain language picker
 			if ( $event->Special == 'selected' || $event->Special == 'available' ) {
+				/** @var EditPickerHelper $edit_picker_helper */
 				$edit_picker_helper = $this->Application->recallObject('EditPickerHelper');
-				/* @var $edit_picker_helper EditPickerHelper */
 
 				$edit_picker_helper->applyFilter($event, 'Languages');
 			}
@@ -384,8 +385,8 @@
 		{
 			parent::OnAfterItemCreate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$src_language = $object->GetDBField('CopyFromLanguage');
 
@@ -429,8 +430,8 @@
 			}
 
 			// create multilingual columns for phrases & email events table first (actual for 6+ language)
+			/** @var kMultiLanguageHelper $ml_helper */
 			$ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
-			/* @var $ml_helper kMultiLanguageHelper */
 
 			$ml_helper->createFields('phrases');
 			$ml_helper->createFields('email-template');
@@ -469,8 +470,8 @@
 		{
 			parent::OnPreCreate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$object->SetDBField('CopyLabels', 1);
 
@@ -496,8 +497,8 @@
 		{
 			parent::OnAfterItemLoad($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$this->setRequired($event);
 		}
@@ -539,8 +540,8 @@
 				$this->Application->StorePersistentVar($language_field, $language_id);
 			}
 			else {
+				/** @var kDBItem $object */
 				$object = $this->Application->recallObject('u.current');
-				/* @var $object kDBItem */
 
 				$object->SetDBField($language_field, $language_id);
 				$object->Update();
@@ -566,8 +567,8 @@
 			if ($items_info) {
 				list ($id, $field_values) = each($items_info);
 
+				/** @var kDBItem $object */
 				$object = $this->Application->recallObject('phrases.import', 'phrases', Array('skip_autoload' => true));
-				/* @var $object kDBItem */
 
 				$object->setID($id);
 				$object->SetFieldsFromHash($field_values);
@@ -585,8 +586,8 @@
 					$event->status = kEvent::erFAIL;
 				}
 
+				/** @var LanguageImportHelper $language_import_helper */
 				$language_import_helper = $this->Application->recallObject('LanguageImportHelper');
-				/* @var $language_import_helper LanguageImportHelper */
 
 				$language_import_helper->performImport(
 					$filename,
@@ -638,8 +639,9 @@
 			$items_info = $this->Application->GetVar('phrases_export');
 			if ( $items_info ) {
 				list($id, $field_values) = each($items_info);
+
+				/** @var kDBItem $object */
 				$object = $this->Application->recallObject('phrases.export', null, Array ('skip_autoload' => true));
-				/* @var $object kDBItem */
 
 				$object->setID($id);
 				$object->SetFieldsFromHash($field_values);
@@ -650,8 +652,8 @@
 					return;
 				}
 
+				/** @var FileHelper $file_helper */
 				$file_helper = $this->Application->recallObject('FileHelper');
-				/* @var $file_helper FileHelper */
 
 				$file_helper->CheckFolder(EXPORT_PATH);
 
@@ -668,8 +670,8 @@
 
 				$filename = EXPORT_PATH . '/' . $field_values['LangFile'];
 
+				/** @var LanguageImportHelper $language_import_helper */
 				$language_import_helper = $this->Application->recallObject('LanguageImportHelper');
-				/* @var $language_import_helper LanguageImportHelper */
 
 				if ( $object->GetDBField('DoNotEncode') ) {
 					$language_import_helper->setExportEncoding('plain');
@@ -733,8 +735,8 @@
 		{
 			parent::OnBeforeItemDelete($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( $object->GetDBField('PrimaryLang') || $object->GetDBField('AdminInterfaceLang') || $object->GetID() == $this->Application->GetVar('m_lang') ) {
 				$event->status = kEvent::erFAIL;
@@ -752,8 +754,8 @@
 		{
 			parent::OnAfterItemDelete($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			// clean EmailTemplates table
 			$fields_hash = Array (
Index: core/units/languages/languages_item.php
===================================================================
--- core/units/languages/languages_item.php
+++ core/units/languages/languages_item.php
@@ -73,8 +73,8 @@
 				return ;
 			}
 
+			/** @var kMultiLanguageHelper $ml_helper */
 			$ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
-			/* @var $ml_helper kMultiLanguageHelper */
 
 			$to_language = $this->GetID();
 			$this->Application->UnitConfigReader->ReReadConfigs();
Index: core/units/languages/languages_tag_processor.php
===================================================================
--- core/units/languages/languages_tag_processor.php
+++ core/units/languages/languages_tag_processor.php
@@ -78,8 +78,8 @@
 
 		function SelectedLanguage($params)
 		{
+			/** @var kDBList $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBList */
 
 			if (array_key_exists('type', $params) && $params['type'] == 'data') {
 				// when using language selector on editing forms
Index: core/units/logs/change_logs/change_log_eh.php
===================================================================
--- core/units/logs/change_logs/change_log_eh.php
+++ core/units/logs/change_logs/change_log_eh.php
@@ -45,8 +45,8 @@
 	{
 		parent::OnAfterItemDelete($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$sql = 'UPDATE ' . $this->Application->getUnitOption('session-log', 'TableName') . '
 				SET AffectedItems = AffectedItems - 1
Index: core/units/logs/email_logs/email_log_eh.php
===================================================================
--- core/units/logs/email_logs/email_log_eh.php
+++ core/units/logs/email_logs/email_log_eh.php
@@ -79,8 +79,8 @@
 		$ids = $this->Conn->GetCol($sql);
 
 		if ( $ids ) {
+			/** @var kTempTablesHandler $temp_handler */
 			$temp_handler = $this->Application->recallObject($event->getPrefixSpecial() . '_TempHandler', 'kTempTablesHandler', Array ('parent_event' => $event));
-			/* @var $temp_handler kTempTablesHandler */
 
 			$temp_handler->DeleteItems($event->Prefix, $event->Special, $ids);
 		}
@@ -97,8 +97,8 @@
 	{
 		$event->status = kEvent::erSTOP;
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		echo $object->GetDBField('HtmlBody');
 	}
@@ -112,8 +112,8 @@
 	 */
 	protected function checkItemStatus(kEvent $event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		if ( !$object->isLoaded() ) {
 			return true;
Index: core/units/logs/email_logs/email_log_tp.php
===================================================================
--- core/units/logs/email_logs/email_log_tp.php
+++ core/units/logs/email_logs/email_log_tp.php
@@ -25,8 +25,8 @@
 	 */
 	protected function PrintOtherRecipients($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$other_recipients = $object->GetDBField('OtherRecipients');
 		$other_recipients = $other_recipients ? unserialize($other_recipients) : Array ();
@@ -80,8 +80,8 @@
 	 */
 	protected function RecipientsByType($params)
 	{
+		/** @var Array $recipients */
 		$recipients = $this->Application->Parser->GetParam('recipients');
-		/* @var $recipients Array */
 
 		$ret = '';
 		$block_params = $this->prepareTagParams($params);
Index: core/units/logs/session_logs/session_log_eh.php
===================================================================
--- core/units/logs/session_logs/session_log_eh.php
+++ core/units/logs/session_logs/session_log_eh.php
@@ -28,8 +28,8 @@
 				return ;
 			}
 
+			/** @var kDBItem $object */
 			$object = $this->Application->recallObject($event->Prefix, null, Array ('skip_autoload' => 1));
-			/* @var $object kDBItem */
 
 			$fields_hash = Array (
 				'SessionStart' => adodb_mktime(),
@@ -55,8 +55,8 @@
 		 */
 		function OnEndSession($event)
 		{
+			/** @var kDBItem $object */
 			$object = $this->Application->recallObject($event->Prefix, null, Array ('skip_autoload' => 1));
-			/* @var $object kDBItem */
 
 			$object->Load($this->Application->RecallVar('_SessionLogId_'));
 			if (!$object->isLoaded()) {
@@ -111,8 +111,8 @@
 		{
 			parent::OnAfterItemDelete($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$sql = 'SELECT ' . $this->Application->getUnitOption('change-log', 'IDField') . '
 					FROM ' . $this->Application->getUnitOption('change-log', 'TableName') . '
@@ -120,11 +120,11 @@
 			$related_ids = $this->Conn->GetCol($sql);
 
 			if ( $related_ids ) {
+				/** @var kTempTablesHandler $temp_handler */
 				$temp_handler = $this->Application->recallObject('change-log_TempHandler', 'kTempTablesHandler');
-				/* @var $temp_handler kTempTablesHandler */
 
 				$temp_handler->DeleteItems('change-log', '', $related_ids);
 			}
 		}
 
 	}
\ No newline at end of file
Index: core/units/logs/system_logs/system_log_eh.php
===================================================================
--- core/units/logs/system_logs/system_log_eh.php
+++ core/units/logs/system_logs/system_log_eh.php
@@ -27,8 +27,8 @@
 	{
 		parent::SetCustomQuery($event);
 
+		/** @var kDBList $object */
 		$object = $event->getObject();
-		/* @var $object kDBList */
 
 		if ( $event->Special == 'email' ) {
 			$unique_id = $event->getEventParam('unique_id');
@@ -53,8 +53,8 @@
 	protected function OnSendNotifications(kEvent $event)
 	{
 		// initialize list outside of e-mail event with right settings
+		/** @var kDBList $list */
 		$list = $this->Application->recallObject($event->Prefix . '.email', $event->Prefix . '_List', Array ('per_page' => 20));
-		/* @var $list kDBList */
 
 		if ( !$list->GetRecordsCount() ) {
 			// no messages, that needs to be sent
@@ -78,8 +78,8 @@
 		$this->Application->emailAdmin('SYSTEM.LOG.NOTIFY', null, $send_params);
 		$this->Application->removeObject($event->Prefix . '.email');
 
+		/** @var kDBItem $object */
 		$object = $event->getObject(Array ('skip_autoload' => true));
-		/* @var $object kDBItem */
 
 		foreach ($list as $fields_hash) {
 			$object->LoadFromHash($fields_hash);
@@ -111,8 +111,8 @@
 		$ids = $this->Conn->GetCol($sql);
 
 		if ( $ids ) {
+			/** @var kTempTablesHandler $temp_handler */
 			$temp_handler = $this->Application->recallObject($event->getPrefixSpecial() . '_TempHandler', 'kTempTablesHandler', Array ('parent_event' => $event));
-			/* @var $temp_handler kTempTablesHandler */
 
 			$temp_handler->DeleteItems($event->Prefix, $event->Special, $ids);
 		}
Index: core/units/logs/system_logs/system_log_tp.php
===================================================================
--- core/units/logs/system_logs/system_log_tp.php
+++ core/units/logs/system_logs/system_log_tp.php
@@ -25,8 +25,8 @@
 	 */
 	protected function Filename($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$filename = $object->GetDBField('LogSourceFilename');
 
@@ -46,8 +46,8 @@
 	 */
 	protected function RequestURI($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$request_uri = $object->GetDBField('LogRequestURI');
 
@@ -67,8 +67,8 @@
 	 */
 	protected function MemoryUsage($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		return kUtil::formatSize($object->GetDBField('LogMemoryUsed'));
 	}
@@ -82,8 +82,8 @@
 	 */
 	protected function PrintArray($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$field = $params['field'];
 		$value = $object->GetDBField($field);
@@ -106,8 +106,8 @@
 	 */
 	protected function PrintBacktrace($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$value = $object->GetDBField('LogBacktrace');
 
Index: core/units/mailing_lists/mailing_list_eh.php
===================================================================
--- core/units/mailing_lists/mailing_list_eh.php
+++ core/units/mailing_lists/mailing_list_eh.php
@@ -55,8 +55,8 @@
 
 			$recipients = $this->Application->GetVar($recipient_type);
 			if ( $recipients ) {
+				/** @var kDBItem $object */
 				$object = $event->getObject();
-				/* @var $object kDBItem */
 
 				$to = $recipient_type . '_' . implode(';' . $recipient_type . '_', array_keys($recipients));
 
@@ -120,8 +120,8 @@
 
 			$this->_deleteQueue($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			// delete mailing attachments after mailing is deleted
 			$attachments = $object->GetField('Attachments', 'file_paths');
@@ -143,8 +143,8 @@
 		 */
 		function OnCancelMailing($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject( Array('skip_autoload' => true) );
-			/* @var $object kDBItem */
 
 			$ids = $this->StoreSelectedIDs($event);
 
@@ -170,8 +170,8 @@
 		{
 			parent::OnBeforeItemCreate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( !$this->Application->GetVar('mailing_recipient_type') ) {
 				// user manually typed email addresses -> normalize
@@ -212,8 +212,8 @@
 		 */
 		protected function setRequired(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$object->setRequired('MessageHtml', !$object->GetDBField('MessageText'));
 			$object->setRequired('MessageText', !$object->GetDBField('MessageHtml'));
@@ -230,8 +230,8 @@
 		{
 			parent::OnAfterItemUpdate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$status = $object->GetDBField('Status');
 			if ( ($status != $object->GetOriginalField('Status')) && ($status == MailingList::CANCELLED) ) {
@@ -246,8 +246,8 @@
 		 */
 		function _deleteQueue($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$sql = 'DELETE FROM ' . $this->Application->getUnitOption('email-queue', 'TableName') . '
 					WHERE MailingId = ' . $object->GetID();
@@ -309,8 +309,8 @@
 				return;
 			}
 
+			/** @var MailingListHelper $mailing_list_helper */
 			$mailing_list_helper = $this->Application->recallObject('MailingListHelper');
-			/* @var $mailing_list_helper MailingListHelper */
 
 			foreach ($mailing_lists as $mailing_id => $mailing_data) {
 				if ( $mailing_data['EmailsTotal'] == 0 ) {
@@ -381,8 +381,8 @@
 				return ;
 			}
 
+			/** @var MailingListHelper $mailing_list_helper */
 			$mailing_list_helper = $this->Application->recallObject('MailingListHelper');
-			/* @var $mailing_list_helper MailingListHelper */
 
 			$mailing_list_helper->processQueue($messages);
 		}
@@ -398,9 +398,9 @@
 		{
 			$event->status = kEvent::erSTOP;
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			echo $object->GetDBField('MessageHtml');
 		}
 	}
\ No newline at end of file
Index: core/units/mailing_lists/mailing_list_tp.php
===================================================================
--- core/units/mailing_lists/mailing_list_tp.php
+++ core/units/mailing_lists/mailing_list_tp.php
@@ -18,11 +18,11 @@
 
 		function PrintRecipients($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
+			/** @var MailingListHelper $mailing_list_helper */
 			$mailing_list_helper = $this->Application->recallObject('MailingListHelper');
-			/* @var $mailing_list_helper MailingListHelper */
 
 			// for each group convert ids to names
 			$recipient_names = Array ();
@@ -55,9 +55,9 @@
 				return false;
 			}
 
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			return $object->IsNewItem();
 		}
 	}
\ No newline at end of file
Index: core/units/modules/modules_event_handler.php
===================================================================
--- core/units/modules/modules_event_handler.php
+++ core/units/modules/modules_event_handler.php
@@ -43,8 +43,8 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			if ( $event->Special ) {
 				$object->addFilter('current_module', '%1$s.Name = ' . $event->Special);
@@ -80,8 +80,8 @@
 				return ;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject( Array('skip_autoload' => true) );
-			/* @var $object kDBItem */
 
 			$ids = $this->StoreSelectedIDs($event);
 
@@ -147,8 +147,8 @@
 		{
 			parent::OnAfterListQuery($event);
 
+			/** @var kModulesHelper $modules_helper */
 			$modules_helper = $this->Application->recallObject('ModulesHelper');
-			/* @var $modules_helper kModulesHelper */
 
 			$new_modules = $modules_helper->getModules(kModulesHelper::NOT_INSTALLED);
 
@@ -160,8 +160,8 @@
 
 			$toolkit = new kInstallToolkit();
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			foreach ($new_modules as $module) {
 				$module_record = Array (
Index: core/units/modules/modules_tag_processor.php
===================================================================
--- core/units/modules/modules_tag_processor.php
+++ core/units/modules/modules_tag_processor.php
@@ -33,11 +33,11 @@
 				return true;
 			}
 
+			/** @var kDBList $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBList */
 
+			/** @var kModulesHelper $modules_helper */
 			$modules_helper = $this->Application->recallObject('ModulesHelper');
-			/* @var $modules_helper kModulesHelper */
 
 			return $modules_helper->moduleInstalled( $object->GetDBField('Name') );
 		}
@@ -49,11 +49,11 @@
 				return true;
 			}
 
+			/** @var kDBList $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBList */
 
+			/** @var kModulesHelper $modules_helper */
 			$modules_helper = $this->Application->recallObject('ModulesHelper');
-			/* @var $modules_helper kModulesHelper */
 
 			$licensed_modules = array_map('strtolower', $modules_helper->_GetModules());
 
@@ -69,8 +69,8 @@
 		{
 			static $errors = Array ();
 
+			/** @var kDBList $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBList */
 
 			$module_path = $object->GetDBField('Path');
 
@@ -105,8 +105,8 @@
 
 		function InstallLink($params)
 		{
+			/** @var kDBList $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBList */
 
 			$module_path = strtolower( $object->GetDBField('Path') );
 			$url_params = Array ('redirect' => 1, 'admin' => 1);
Index: core/units/page_revisions/page_revision_eh.php
===================================================================
--- core/units/page_revisions/page_revision_eh.php
+++ core/units/page_revisions/page_revision_eh.php
@@ -33,8 +33,8 @@
 			return $this->Application->isAdminUser;
 		}
 
+		/** @var kPermissionsHelper $perm_helper */
 		$perm_helper = $this->Application->recallObject('PermissionsHelper');
-		/* @var $perm_helper kPermissionsHelper */
 
 		if ( $event->Name == 'OnSave' ) {
 				$perm_status = $this->Application->CheckPermission('CATEGORY.REVISION.ADD', 0) || $this->Application->CheckPermission('CATEGORY.REVISION.ADD.PENDING', 0);
@@ -62,8 +62,8 @@
 	{
 		parent::SetCustomQuery($event);
 
+		/** @var kDBList $object */
 		$object = $event->getObject();
-		/* @var $object kDBList */
 
 		$page_id = $event->getEventParam('page_id');
 
@@ -91,11 +91,11 @@
 	public function getPassedID(kEvent $event)
 	{
 		if ( $event->Special == 'current' ) {
+			/** @var kDBItem $page */
 			$page = $this->Application->recallObject('st.-virtual');
-			/* @var $page kDBItem */
 
+			/** @var PageHelper $page_helper */
 			$page_helper = $this->Application->recallObject('PageHelper');
-			/* @var $page_helper PageHelper */
 
 			$page_id = $page->GetID();
 			$revision_clause = $page_helper->getRevsionWhereClause($page_id, $page->GetDBField('LiveRevisionNumber'));
@@ -111,8 +111,8 @@
 			}
 
 			// no revisions -> create live revision
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$object->SetDBField('PageId', $page_id);
 			$object->SetDBField('RevisionNumber', 1);
@@ -136,8 +136,8 @@
 	{
 		parent::OnBeforeItemCreate($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		if ( $this->Application->isAdmin ) {
 			$object->SetDBField('CreatedById', $this->Application->RecallVar('user_id'));
@@ -158,8 +158,8 @@
 	{
 		parent::OnBeforeItemUpdate($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		if ( $object->GetDBField('IsDraft') == 0 && $object->GetOriginalField('IsDraft') == 1 ) {
 			$object->SetDBField('CreatedOn_date', adodb_mktime());
@@ -178,15 +178,15 @@
 	{
 		parent::OnAfterItemCreate($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		if ( !$object->GetDBField('FromRevisionId') ) {
 			return ;
 		}
 
+		/** @var kDBItem $content */
 		$content = $this->Application->recallObject('content.-item', null, Array ('skip_autoload' => true));
-		/* @var $content kDBItem */
 
 		$sql = 	$content->GetSelectSQL() . '
 				WHERE pr.RevisionId = ' . $object->GetDBField('FromRevisionId');
@@ -210,14 +210,14 @@
 	{
 		parent::OnAfterItemUpdate($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$status = $object->GetDBField('Status');
 
 		if ( $status != $object->GetOriginalField('Status') && $status == STATUS_ACTIVE ) {
+			/** @var kDBItem $page */
 			$page = $this->Application->recallObject('c.revision', null, Array ('skip_autoload' => true));
-			/* @var $page kDBItem */
 
 			$page->Load($object->GetDBField('PageId'));
 			$page->SetDBField('LiveRevisionNumber', $object->GetDBField('RevisionNumber'));
@@ -238,8 +238,8 @@
 			return ;
 		}
 
+		/** @var PageHelper $page_helper */
 		$page_helper = $this->Application->recallObject('PageHelper');
-		/* @var $page_helper PageHelper */
 
 		$page_id = $this->Application->GetVar('m_cat_id');
 		echo json_encode( $page_helper->getPageInfo($page_id) );
@@ -257,8 +257,8 @@
 		$revision_id = $this->getCurrentDraftRevision($event);
 
 		if ( $revision_id ) {
+			/** @var kDBItem $object */
 			$object = $event->getObject(Array ('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			$object->Load($revision_id);
 			$object->SetDBField('IsDraft', 0);
@@ -287,8 +287,8 @@
 		$revision_id = $this->getCurrentDraftRevision($event);
 
 		if ( $revision_id ) {
+			/** @var kTempTablesHandler $temp_handler */
 			$temp_handler = $this->Application->recallObject($event->getPrefixSpecial() . '_TempHandler', 'kTempTablesHandler');
-			/* @var $temp_handler kTempTablesHandler */
 
 			$temp_handler->DeleteItems($event->Prefix, $event->Special, Array ($revision_id));
 		}
@@ -303,8 +303,8 @@
 	 */
 	function OnPublish($event)
 	{
+		/** @var kDBItem $revision */
 		$revision = $this->Application->recallObject('page-revision.current');
-		/* @var $revision kDBItem */
 
 		if ( !$revision->isLoaded() || $revision->GetDBField('Status') == STATUS_ACTIVE || $revision->GetDBField('IsDraft') ) {
 			return ;
@@ -323,8 +323,8 @@
 	 */
 	function OnDecline($event)
 	{
+		/** @var kDBItem $revision */
 		$revision = $this->Application->recallObject('page-revision.current');
-		/* @var $revision kDBItem */
 
 		if ( !$revision->isLoaded() || $revision->GetDBField('Status') == STATUS_DISABLED || $revision->GetDBField('IsLive') || $revision->GetDBField('IsDraft') ) {
 			return ;
Index: core/units/page_revisions/page_revision_tp.php
===================================================================
--- core/units/page_revisions/page_revision_tp.php
+++ core/units/page_revisions/page_revision_tp.php
@@ -18,11 +18,11 @@
 
 	function LastAutoSaveAgo($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
+		/** @var PageHelper $page_helper */
 		$page_helper = $this->Application->recallObject('PageHelper');
-		/* @var $page_helper PageHelper */
 
 		return $page_helper->getAgoTime( $object->GetDBField('AutoSavedOn') );
 	}
Index: core/units/pdf/pdf_helper.php
===================================================================
--- core/units/pdf/pdf_helper.php
+++ core/units/pdf/pdf_helper.php
@@ -74,8 +74,8 @@
 			$xml = $this->Application->Parser->Run($template);
 		}
 
+		/** @var kXMLHelper $xml_helper */
 		$xml_helper =& $this->Application->recallObject('kXMLHelper');
-		/* @var $xml_helper kXMLHelper */
 
 		$doc = $xml_helper->Parse($xml_helper->ConvertHTMLEntities($xml), kXMLHelper::XML_WITH_TEXT_NODES);
 		if ($doc->Name == 'ERROR') {
Index: core/units/permission_types/permission_type_eh.php
===================================================================
--- core/units/permission_types/permission_type_eh.php
+++ core/units/permission_types/permission_type_eh.php
@@ -27,8 +27,8 @@
 	{
 		parent::OnBeforeItemDelete($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		if ( $object->GetDBField('IsSystem') ) {
 			// prevents deletion of this permission
Index: core/units/permissions/permissions_event_handler.php
===================================================================
--- core/units/permissions/permissions_event_handler.php
+++ core/units/permissions/permissions_event_handler.php
@@ -49,8 +49,9 @@
 			$permissions = $permissions[$group_id];
 
 			$object = $event->getObject( Array('skip_autoload' => true) );
+
+			/** @var kPermissionsHelper $permissions_helper */
 			$permissions_helper = $this->Application->recallObject('PermissionsHelper');
-			/* @var $permissions_helper kPermissionsHelper */
 
 			$permissions_helper->LoadPermissions($group_id, $category_id, 0, 'c');
 
@@ -118,12 +119,13 @@
 			return ;
 		}
 
+		/** @var kDBItem $object */
 		$object = $event->getObject( Array ('skip_autoload' => true) );
-		/* @var $object kDBItem */
 
 		$group_id = $this->Application->GetVar('g_id');
+
+		/** @var kPermissionsHelper $permissions_helper */
 		$permissions_helper = $this->Application->recallObject('PermissionsHelper');
-		/* @var $permissions_helper kPermissionsHelper */
 
 		$permissions_helper->LoadPermissions($group_id, 0, 1, 'g');
 
@@ -136,8 +138,8 @@
 		}
 		--$new_id;
 
+		/** @var kSectionsHelper $sections_helper */
 		$sections_helper = $this->Application->recallObject('SectionsHelper');
-		/* @var $sections_helper kSectionsHelper */
 
 		foreach ($permissions as $section_name => $section_permissions) {
 			$section_name = $sections_helper->getPermSection($section_name);
@@ -184,8 +186,8 @@
 	 */
 	function UpdatePermissions($event, $create_sql, $update_sql, $delete_ids)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		if ($delete_ids) {
 			$action = ChangeLog::DELETE;
@@ -247,8 +249,8 @@
 
 			if ( (count($foreign_keys) == 1) && ($foreign_keys[0] == 0) ) {
 				// parent item has zero id
+				/** @var CategoriesItem $temp_object */
 				$temp_object = $this->Application->recallObject('c');
-				/* @var $temp_object CategoriesItem */
 
 				if ( $temp_object->isLoaded() ) {
 					// category with id = 0 found in temp table
Index: core/units/permissions/permissions_tag_processor.php
===================================================================
--- core/units/permissions/permissions_tag_processor.php
+++ core/units/permissions/permissions_tag_processor.php
@@ -20,8 +20,8 @@
 		{
 			$section_name = $params['section_name'];
 
+			/** @var kSectionsHelper $sections_helper */
 			$sections_helper = $this->Application->recallObject('SectionsHelper');
-			/* @var $sections_helper kSectionsHelper */
 
 			$section_data =& $sections_helper->getSectionData($section_name);
 
@@ -32,8 +32,8 @@
 		{
 			$section_name = $params['section_name'];
 
+			/** @var kSectionsHelper $sections_helper */
 			$sections_helper = $this->Application->recallObject('SectionsHelper');
-			/* @var $sections_helper kSectionsHelper */
 
 			$section_data =& $sections_helper->getSectionData($section_name);
 
@@ -52,13 +52,13 @@
 			$section_name = $params['section_name'];
 			$perm_name = $params['perm_name'];
 
+			/** @var kSectionsHelper $sections_helper */
 			$sections_helper = $this->Application->recallObject('SectionsHelper');
-			/* @var $sections_helper kSectionsHelper */
 
 			$section_name = $sections_helper->getPermSection($section_name);
 
+			/** @var kPermissionsHelper $permissions_helper */
 			$permissions_helper = $this->Application->recallObject('PermissionsHelper');
-			/* @var $permissions_helper kPermissionsHelper */
 
 			if (!$permissions_helper->isOldPermission($section_name, $perm_name)) {
 				$perm_name = $section_name.'.'.$perm_name;
@@ -71,7 +71,7 @@
 		{
 			$permissions_helper = $this->Application->recallObject('PermissionsHelper');
 			$prefix_parts = explode('-', $this->Prefix, 2);
-			/* @var $permissions_helper kPermissionsHelper */
+			/** @var kPermissionsHelper $permissions_helper */
 
 			$permissions_helper->LoadPermissions($this->Application->GetVar('g_id'), 0, 1, 'g');
 		}
@@ -83,8 +83,8 @@
 
 		function PrintPermissions($params)
 		{
+			/** @var kDBItem $category */
 			$category = $this->Application->recallObject('c');
-			/* @var $category kDBItem */
 
 			$group_id = $this->Application->GetVar('group_id');
 			$prefix = $this->Application->GetVar('item_prefix');
@@ -199,8 +199,8 @@
 					$id_field = $this->Application->getUnitOption('c', 'IDField');
 					$table_name = $this->Application->getUnitOption('c', 'TableName');
 
+					/** @var kMultiLanguage $ml_formatter */
 					$ml_formatter = $this->Application->recallObject('kMultiLanguage');
-					/* @var $ml_formatter kMultiLanguage */
 
 					$sql = 'SELECT ' . $ml_formatter->LangFieldName('CachedNavbar') . '
 							FROM ' . $table_name . '
Index: core/units/phrases/phrases_event_handler.php
===================================================================
--- core/units/phrases/phrases_event_handler.php
+++ core/units/phrases/phrases_event_handler.php
@@ -47,8 +47,8 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			$object->addFilter('module_filter', '%1$s.Module IN (SELECT Name FROM ' . TABLE_PREFIX . 'Modules WHERE Loaded = 1)');
 		}
@@ -150,8 +150,8 @@
 		{
 			parent::OnPreCreate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$this->_setPhraseModule($object);
 		}
@@ -167,8 +167,8 @@
 		{
 			parent::OnNew($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$label = $this->Application->GetVar($event->getPrefixSpecial() . '_label');
 
@@ -235,8 +235,8 @@
 		protected function OnCreate(kEvent $event)
 		{
 			if ( $this->Application->GetVar($event->Prefix . '_label') ) {
+				/** @var kDBItem $object */
 				$object = $event->getObject(Array ('skip_autoload' => true));
-				/* @var $object kDBItem */
 
 				if ( $this->Application->GetVar('m_lang') != $this->Application->GetVar('lang_id') ) {
 					$object->SwitchToLive();
@@ -257,8 +257,8 @@
 		 */
 		protected function OnCreateAjax(kEvent $event)
 		{
+			/** @var AjaxFormHelper $ajax_form_helper */
 			$ajax_form_helper = $this->Application->recallObject('AjaxFormHelper');
-			/* @var $ajax_form_helper AjaxFormHelper */
 
 			$ajax_form_helper->transitEvent($event, 'OnCreate');
 		}
@@ -288,8 +288,8 @@
 		 */
 		protected function OnUpdateAjax(kEvent $event)
 		{
+			/** @var AjaxFormHelper $ajax_form_helper */
 			$ajax_form_helper = $this->Application->recallObject('AjaxFormHelper');
-			/* @var $ajax_form_helper AjaxFormHelper */
 
 			$ajax_form_helper->transitEvent($event, 'OnUpdate');
 		}
@@ -322,8 +322,8 @@
 		{
 			parent::OnBeforeItemCreate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$primary_language_id = $this->Application->GetDefaultLanguageId();
 
@@ -366,8 +366,8 @@
 		 */
 		function _phraseChanged($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$label = $object->GetDBField('Phrase');
 			$object->SetDBField('PhraseKey', mb_strtoupper($label));
Index: core/units/priorites/priority_eh.php
===================================================================
--- core/units/priorites/priority_eh.php
+++ core/units/priorites/priority_eh.php
@@ -133,8 +133,8 @@
 			)
 		);
 
+		/** @var Array $prefixes */
 		$prefixes = $this->Application->getUnitOption($event->Prefix, 'ProcessPrefixes', Array ());
-		/* @var $prefixes Array */
 
 		foreach ($prefixes as $prefix) {
 			foreach ($hooks as $hook) {
@@ -165,8 +165,8 @@
 			return ;
 		}
 
+		/** @var kPriorityHelper $priority_helper */
 		$priority_helper = $this->Application->recallObject('PriorityHelper');
-		/* @var $priority_helper kPriorityHelper */
 
 		list ($constrain, $joins) = $this->getConstrainInfo($event);
 		$is_new = $event->MasterEvent->Name == 'OnPreCreate' || $event->MasterEvent->Name == 'OnPreSaveCreated';
@@ -241,8 +241,8 @@
 		$del = $this->Application->RecallVar('priority_deleted'.$this->Application->GetVar('m_wid'));
 		$del = $del ? unserialize($del) : array();
 
+		/** @var kPriorityHelper $priority_helper */
 		$priority_helper = $this->Application->recallObject('PriorityHelper');
-		/* @var $priority_helper kPriorityHelper */
 
 		foreach ($del as $del_info) {
 			$dummy_event = new kEvent( array('prefix'=>$del_info['prefix'], 'name'=>'Dummy' ) );
@@ -266,8 +266,8 @@
 		$tmp = $this->Application->RecallVar('priority_changes'.$this->Application->GetVar('m_wid'));
 		$changes = $tmp ? unserialize($tmp) : array();
 
+		/** @var kPriorityHelper $priority_helper */
 		$priority_helper = $this->Application->recallObject('PriorityHelper');
-		/* @var $priority_helper kPriorityHelper */
 
 		list ($constrain, $joins) = $this->getConstrainInfo($event);
 		$ids = $priority_helper->updatePriorities($event->MasterEvent, $changes, Array (0 => $event->MasterEvent->getEventParam('ids')), $constrain, $joins);
@@ -281,8 +281,8 @@
 	{
 		$obj = $event->MasterEvent->getObject();
 		if ($obj->GetDBField('Priority') == 0) {
+			/** @var kPriorityHelper $priority_helper */
 			$priority_helper = $this->Application->recallObject('PriorityHelper');
-			/* @var $priority_helper kPriorityHelper */
 
 			list ($constrain, $joins) = $this->getConstrainInfo($event);
 			$priority_helper->preparePriorities($event->MasterEvent, true, $constrain, $joins);
@@ -314,8 +314,8 @@
 					WHERE '.$id_field.' IN ('.implode(',', $ids).') ORDER BY Priority DESC';
 			$priorities = $this->Conn->GetCol($sql, $id_field);
 
+			/** @var kPriorityHelper $priority_helper */
 			$priority_helper = $this->Application->recallObject('PriorityHelper');
-			/* @var $priority_helper kPriorityHelper */
 
 			list ($constrain, $joins) = $this->getConstrainInfo($event);
 
@@ -366,8 +366,8 @@
 	 */
 	function OnRecalculatePriorities($event)
 	{
+		/** @var kPriorityHelper $priority_helper */
 		$priority_helper = $this->Application->recallObject('PriorityHelper');
-		/* @var $priority_helper kPriorityHelper */
 
 		$prefix = $this->Application->GetVar('priority_prefix');
 		$dummy_event = new kEvent($prefix . ':Dummy');
Index: core/units/promo_block_groups/promo_block_group_eh.php
===================================================================
--- core/units/promo_block_groups/promo_block_group_eh.php
+++ core/units/promo_block_groups/promo_block_group_eh.php
@@ -51,8 +51,8 @@
 	 */
 	private function beforeItemChange($event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$object->setRequired('TransitionEffectCustom', $object->GetDBField('TransitionEffect') == '-1');
 	}
@@ -69,8 +69,8 @@
 	{
 		parent::OnBeforeItemDelete($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$sql = 'SELECT BlockId
 				FROM ' . TABLE_PREFIX . 'PromoBlocks
Index: core/units/promo_block_groups/promo_block_group_tp.php
===================================================================
--- core/units/promo_block_groups/promo_block_group_tp.php
+++ core/units/promo_block_groups/promo_block_group_tp.php
@@ -25,8 +25,8 @@
 	 */
 	protected function PrintCategories(Array $params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$ret = '';
 		$field = $this->SelectParam($params, 'name,field');
@@ -54,8 +54,8 @@
 	 */
 	protected function EditLink(Array $params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$prefix = $object->getPrefixSpecial();
 
Index: core/units/promo_blocks/promo_block_eh.php
===================================================================
--- core/units/promo_blocks/promo_block_eh.php
+++ core/units/promo_blocks/promo_block_eh.php
@@ -68,11 +68,11 @@
 	{
 		parent::OnPreCreate($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
+		/** @var kDBItem $promo_block_group */
 		$promo_block_group = $this->Application->recallObject('promo-block-group');
-		/* @var $promo_block_group kDBItem */
 
 		$object->SetDBField('PromoBlockGroupId', $promo_block_group->GetID());
 	}
@@ -100,12 +100,12 @@
 	{
 		parent::SetCustomQuery($event);
 
+		/** @var kDBList $object */
 		$object = $event->getObject();
-		/* @var $object kDBList */
 
 		if ( $this->Application->isAdmin ) {
+			/** @var kDBItem $promo_block_group */
 			$promo_block_group = $this->Application->recallObject('promo-block-group');
-			/* @var $promo_block_group kDBItem */
 
 			$object->addFilter('promo_group_filter', '%1$s.PromoBlockGroupId = ' . $promo_block_group->GetID());
 			return;
@@ -114,8 +114,8 @@
 		$group_id = $event->getEventParam('group_id');
 
 		if ( !$group_id ) {
+			/** @var CategoriesItem $page */
 			$page = $this->Application->recallObject('st');
-			/* @var $page CategoriesItem */
 
 			$group_id = $page->GetDBField('PromoBlockGroupId');
 		}
@@ -135,8 +135,8 @@
 	 */
 	protected function OnSetSticky(kEvent $event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject( Array('skip_autoload' => true) );
-		/* @var $object kDBItem */
 
 		$ids = $this->StoreSelectedIDs($event);
 
@@ -194,8 +194,8 @@
 	 */
 	protected function _itemChanged(kEvent $event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$date_from = $object->GetDBField('ScheduleFromDate_date');
 		$date_to = $object->GetDBField('ScheduleToDate_date');
@@ -229,8 +229,8 @@
 	 */
 	protected function OnFollowLink(kEvent $event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$this->_incrementField($event, 'NumberOfClicks', false);
 
@@ -267,8 +267,8 @@
 			}
 		}
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		if ( !$object->isLoaded() ) {
 			echo 'FAILED';
@@ -293,8 +293,8 @@
 	 */
 	protected function OnResetCounters(kEvent $event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject( Array ('skip_autoload' => true) );
-		/* @var $object kDBItem */
 
 		$ids = $this->StoreSelectedIDs($event);
 
@@ -319,8 +319,8 @@
 	{
 		parent::OnAfterConfigRead($event);
 
+		/** @var CategoryHelper $category_helper */
 		$category_helper = $this->Application->recallObject('CategoryHelper');
-		/* @var $category_helper CategoryHelper */
 
 		$fields = $this->Application->getUnitOption($event->Prefix, 'Fields');
 
Index: core/units/promo_blocks/promo_block_tp.php
===================================================================
--- core/units/promo_blocks/promo_block_tp.php
+++ core/units/promo_blocks/promo_block_tp.php
@@ -25,8 +25,8 @@
 	 */
 	protected function PromoLink($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$url_params = Array (
 			$this->Prefix . '_event' => 'OnFollowLink',
@@ -46,8 +46,8 @@
 	 */
 	protected function LinkInNewWindow($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		if ( $object->GetDBField('LinkType') == 1 ) { // Internal
 			return false;
@@ -72,8 +72,8 @@
 				$group_id = $params['group_id'];
 			}
 			else {
+				/** @var CategoriesItem $page */
 				$page = $this->Application->recallObject('st');
-				/* @var $page CategoriesItem */
 
 				$group_id = $page->GetDBField('PromoBlockGroupId');
 			}
Index: core/units/related_searches/related_searches_event_handler.php
===================================================================
--- core/units/related_searches/related_searches_event_handler.php
+++ core/units/related_searches/related_searches_event_handler.php
@@ -27,8 +27,8 @@
 		{
 			parent::OnNew($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$table_info = $object->getLinkedInfo();
 
Index: core/units/relationship/relationship_event_handler.php
===================================================================
--- core/units/relationship/relationship_event_handler.php
+++ core/units/relationship/relationship_event_handler.php
@@ -45,8 +45,8 @@
 		{
 			parent::OnNew($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$table_info = $object->getLinkedInfo();
 
@@ -136,8 +136,8 @@
 		{
 			parent::OnAfterItemLoad($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$sql = 'SELECT Prefix
 					FROM ' . TABLE_PREFIX . 'ItemTypes
@@ -289,8 +289,8 @@
 		 */
 		function OnDeleteForeignRelations($event)
 		{
+			/** @var kDBItem $main_object */
 			$main_object = $event->MasterEvent->getObject();
-			/* @var $main_object kDBItem */
 
 			$sql = 'DELETE FROM ' . $this->Application->getUnitOption($event->Prefix, 'TableName') . '
 					WHERE TargetId = ' . $main_object->GetDBField('ResourceId');
Index: core/units/reviews/reviews_event_handler.php
===================================================================
--- core/units/reviews/reviews_event_handler.php
+++ core/units/reviews/reviews_event_handler.php
@@ -43,12 +43,13 @@
 		public function CheckPermission(kEvent $event)
 		{
 			if ( $event->Name == 'OnAddReview' || $event->Name == 'OnCreate' ) {
+				/** @var kPermissionsHelper $perm_helper */
 				$perm_helper = $this->Application->recallObject('PermissionsHelper');
-				/* @var $perm_helper kPermissionsHelper */
 
 				$parent_prefix = $this->Application->getUnitOption($event->Prefix, 'ParentPrefix');
+
+				/** @var kCatDBItem $main_object */
 				$main_object = $this->Application->recallObject($parent_prefix);
-				/* @var $main_object kCatDBItem */
 
 				$perm_name = $this->getPermPrefix($event).'.REVIEW';
 				$res = 	$this->Application->CheckPermission($perm_name, 0, $main_object->GetDBField('CategoryId')) ||
@@ -70,8 +71,8 @@
 			if ( in_array($event->Name, $check_events) ) {
 				// check for PRODUCT.VIEW permission
 
+				/** @var kPermissionsHelper $perm_helper */
 				$perm_helper = $this->Application->recallObject('PermissionsHelper');
-				/* @var $perm_helper kPermissionsHelper */
 
 				$perm_prefix = $this->getPermPrefix($event);
 
@@ -132,8 +133,8 @@
 				return false;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			// 1. get main item resource id (use object, because of temp tables in admin)
 			$sql = 'SELECT ItemId
@@ -179,8 +180,8 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			if ( !$this->Application->isAdminUser ) {
 				$object->addFilter('active', '%1$s.Status = ' . STATUS_ACTIVE);
@@ -195,8 +196,8 @@
 					$object->clearFilters();
 					$parent_info = $object->getLinkedInfo();
 
+					/** @var kDBItem $parent */
 					$parent = $this->Application->recallObject($parent_info['ParentPrefix']);
-					/* @var $parent kDBItem */
 
 					$object->addFilter('item_reviews', '%1$s.ItemId = ' . $parent->GetDBField('ResourceId'));
 					break;
@@ -243,8 +244,9 @@
 		function getReviewStatus($event)
 		{
 			$parent_prefix = $this->Application->getUnitOption($event->Prefix, 'ParentPrefix');
+
+			/** @var kCatDBItem $main_object */
 			$main_object = $this->Application->recallObject($parent_prefix);
-			/* @var $main_object kCatDBItem */
 
 			$ret = STATUS_DISABLED;
 			$perm_name = $this->getPermPrefix($event).'.REVIEW';
@@ -269,8 +271,8 @@
 		{
 			parent::OnBeforeItemCreate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$parent_info = $object->getLinkedInfo();
 			$item_type = $this->Application->getUnitOption($parent_info['ParentPrefix'], 'ItemType');
@@ -284,8 +286,8 @@
 				return ;
 			}
 
+			/** @var SpamHelper $spam_helper */
 			$spam_helper = $this->Application->recallObject('SpamHelper');
-			/* @var $spam_helper SpamHelper */
 
 			$spam_helper->InitHelper($parent_info['ParentId'], 'Review', 0);
 
@@ -318,8 +320,8 @@
 		{
 			parent::OnBeforeItemUpdate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$rating = $object->GetDBField('Rating');
 
@@ -342,11 +344,11 @@
 			$this->updateSubitemCounters($event);
 
 			if ( !$this->Application->isAdminUser ) {
+				/** @var SpamHelper $spam_helper */
 				$spam_helper = $this->Application->recallObject('SpamHelper');
-				/* @var $spam_helper SpamHelper */
 
+				/** @var kDBItem $object */
 				$object = $event->getObject();
-				/* @var $object kDBItem */
 
 				$parent_info = $object->getLinkedInfo();
 
@@ -379,8 +381,8 @@
 
 			$this->updateSubitemCounters($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( $this->Application->isAdminUser && !$object->IsTempTable() ) {
 				// send email on review status change from reviews grid in admin
@@ -404,15 +406,15 @@
 		 */
 		function _loadMainObject($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$parent_prefix = $this->Application->getUnitOption($event->Prefix, 'ParentPrefix');
 			$parent_table_key = $this->Application->getUnitOption($event->Prefix, 'ParentTableKey');
 			$foreign_key = $this->Application->getUnitOption($event->Prefix, 'ForeignKey');
 
+			/** @var kDBItem $main_object */
 			$main_object = $this->Application->recallObject($parent_prefix, null, Array ('skip_autoload' => true));
-			/* @var $main_object kDBItem */
 
 			$main_object->Load($object->GetDBField($foreign_key), $parent_table_key);
 		}
@@ -429,8 +431,8 @@
 				return;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$parent_prefix = $this->Application->getUnitOption($event->Prefix, 'ParentPrefix');
 			$parent_table = $this->Application->getUnitOption($parent_prefix, 'TableName');
@@ -537,12 +539,12 @@
 				return;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( $this->Application->GetVar('ajax') == 'yes' ) {
+				/** @var AjaxFormHelper $ajax_form_helper */
 				$ajax_form_helper = $this->Application->recallObject('AjaxFormHelper');
-				/* @var $ajax_form_helper AjaxFormHelper */
 
 				$params = Array ('status' => 'OK');
 
Index: core/units/reviews/reviews_tag_processor.php
===================================================================
--- core/units/reviews/reviews_tag_processor.php
+++ core/units/reviews/reviews_tag_processor.php
@@ -24,8 +24,8 @@
 	 */
 	function ItemEditLink($params)
 	{
+		/** @var kDBList $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBList */
 
 		$item_prefix = $this->Application->findModule('Name', $object->GetDBField('Module'), 'Var');
 		$edit_template = $this->Application->getUnitOption($item_prefix, 'AdminTemplatePath') . '/' . $this->Application->getUnitOption($item_prefix, 'AdminTemplatePrefix') . 'edit';
@@ -45,8 +45,8 @@
 
 	function HelpfulLink($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$parent_prefix = $this->Application->getUnitOption($this->Prefix, 'ParentPrefix');
 		$params['events[' . $parent_prefix . ']'] = 'OnReviewHelpful';
@@ -65,13 +65,13 @@
 	{
 		static $cache = null;
 
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$parent_prefix = $this->Application->getUnitOption($this->Prefix, 'ParentPrefix');
 
+		/** @var kCatDBItem $main_object */
 		$main_object = $this->Application->recallObject($parent_prefix);
-		/* @var $main_object kCatDBItem */
 
 		if ( !isset($cache) ) {
 			$sql = 'SELECT COUNT(*), Rating
@@ -119,8 +119,8 @@
 	{
 		$field = $this->SelectParam($params, 'name,field');
 
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		if ($field == 'ReviewText') {
 			if ($object->GetDBField('TextFormat') == 1) {
@@ -137,11 +137,12 @@
 	function AlreadyReviewed($params)
 	{
 		$parent_prefix = $this->Application->getUnitOption($this->Prefix, 'ParentPrefix');
+
+		/** @var kCatDBItem $main_object */
 		$main_object = $this->Application->recallObject($parent_prefix);
-		/* @var $main_object kCatDBItem */
 
+		/** @var SpamHelper $spam_helper */
 		$spam_helper = $this->Application->recallObject('SpamHelper');
-		/* @var $spam_helper SpamHelper */
 
 		$spam_helper->InitHelper($main_object->GetDBField('ResourceId'), 'Review', 0, $main_object->GetCol('ResourceId'));
 
@@ -150,8 +151,8 @@
 
 	function HasError($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		return method_exists($object, 'GetErrorMsg') ? parent::HasError($params) : 0;
 	}
@@ -164,8 +165,8 @@
 	 */
 	function PageLink($params)
 	{
+		/** @var kDBList $object */
 		$object = $this->getObject($params);
-		/* @var kDBList */
 
 		$parent_info = $object->getLinkedInfo();
 
@@ -224,15 +225,15 @@
 	 */
 	function VotesIndicator($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
+		/** @var RatingHelper $rating_helper */
 		$rating_helper = $this->Application->recallObject('RatingHelper');
-		/* @var $rating_helper RatingHelper */
 
 		$rating = isset($params['rating']) ? $params['rating'] : $object->GetDBField('Rating');
 		$small_style = array_key_exists('small_style', $params) ? $params['small_style'] : false;
 
 		return $rating_helper->ratingBarSimple($rating, '', null, $small_style);
 	}
-}
\ No newline at end of file
+}
Index: core/units/scheduled_tasks/scheduled_task_eh.php
===================================================================
--- core/units/scheduled_tasks/scheduled_task_eh.php
+++ core/units/scheduled_tasks/scheduled_task_eh.php
@@ -46,8 +46,8 @@
 		{
 			parent::OnBeforeItemValidate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$event_string = $object->GetDBField('Event');
 
@@ -72,14 +72,14 @@
 		{
 			$scheduled_tasks_from_cache = $this->Application->EventManager->getScheduledTasks(true);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject( Array ('skip_autoload' => true) );
-			/* @var $object kDBItem */
 
 			$processed_ids = Array ();
 			$scheduled_tasks_from_db = $this->Conn->Query($object->GetSelectSQL(), 'Name');
 
+			/** @var kCronHelper $cron_helper */
 			$cron_helper = $this->Application->recallObject('kCronHelper');
-			/* @var $cron_helper kCronHelper */
 
 			foreach ($scheduled_tasks_from_cache as $scheduled_task_name => $scheduled_task_params) {
 				if ( !isset($scheduled_tasks_from_db[$scheduled_task_name]) ) {
@@ -110,8 +110,8 @@
 			$delete_ids = $this->Conn->GetCol($sql);
 
 			if ($delete_ids) {
+				/** @var kTempTablesHandler $temp_handler */
 				$temp_handler = $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler');
-				/* @var $temp_handler kTempTablesHandler */
 
 				$temp_handler->DeleteItems($event->Prefix, $event->Special, $delete_ids);
 			}
@@ -159,8 +159,8 @@
 			$ids = $this->StoreSelectedIDs($event);
 
 			if ($ids) {
+				/** @var kDBItem $object */
 				$object = $event->getObject( Array ('skip_autoload' => true) );
-				/* @var $object kDBItem */
 
 				foreach ($ids as $id) {
 					$object->Load($id);
@@ -186,8 +186,8 @@
 			$ids = $this->StoreSelectedIDs($event);
 
 			if ($ids) {
+				/** @var kDBItem $object */
 				$object = $event->getObject( Array ('skip_autoload' => true) );
-				/* @var $object kDBItem */
 
 				$where_clause = Array (
 					$object->TableName . '.' . $object->IDField . ' IN (' . implode(',', $ids) . ')',
@@ -219,11 +219,11 @@
 		{
 			parent::OnAfterItemLoad($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
+			/** @var kCronHelper $cron_helper */
 			$cron_helper = $this->Application->recallObject('kCronHelper');
-			/* @var $cron_helper kCronHelper */
 
 			$cron_helper->load($object, 'RunSchedule');
 		}
@@ -265,11 +265,11 @@
 		 */
 		protected function _itemChanged(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
+			/** @var kCronHelper $cron_helper */
 			$cron_helper = $this->Application->recallObject('kCronHelper');
-			/* @var $cron_helper kCronHelper */
 
 			if ( $cron_helper->validateAndSave($object, 'RunSchedule') && !$object->GetDBField('NextRunOn_date') ) {
 				$next_run = $cron_helper->getMatch($object->GetDBField('RunSchedule'));
@@ -294,8 +294,8 @@
 				return;
 			}
 
+			/** @var kCronHelper $cron_helper */
 			$cron_helper = $this->Application->recallObject('kCronHelper');
-			/* @var $cron_helper kCronHelper */
 
 			$cron_helper->initUnit($event->Prefix, 'RunSchedule');
 
Index: core/units/sections/site_config_tp.php
===================================================================
--- core/units/sections/site_config_tp.php
+++ core/units/sections/site_config_tp.php
@@ -24,8 +24,8 @@
 				EDITING_MODE_DESIGN => Array ('image' => 'design_mode', 'title' => 'la_btn_DesignMode'),
 			);
 
+			/** @var SiteConfigHelper $site_config_helper */
 			$site_config_helper = $this->Application->recallObject('SiteConfigHelper');
-			/* @var $site_config_helper SiteConfigHelper */
 
 			$settings = $site_config_helper->getSettings();
 
Index: core/units/selectors/selectors_event_handler.php
===================================================================
--- core/units/selectors/selectors_event_handler.php
+++ core/units/selectors/selectors_event_handler.php
@@ -52,8 +52,8 @@
 
 			$event->Init($event->Prefix, '-item');
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$title_field = 'SelectorName';
 			$new_name = $object->GetDBField($title_field);
@@ -105,8 +105,8 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			switch ($event->Special) {
 				case 'base':
@@ -205,8 +205,8 @@
 		 */
 		function SaveChanges($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject( Array('skip_autoload' => true) );
-			/* @var $object kDBItem */
 
 			$items_info = $this->Application->GetVar($event->getPrefixSpecial(true));
 			if ( $items_info ) {
@@ -260,8 +260,8 @@
 		{
 			parent::OnAfterItemLoad($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$selector_data = $object->GetDBField('SelectorData');
 
@@ -283,8 +283,8 @@
 		 */
 		function SerializeSelectorData($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$selector_data = $object->GetDBField('SelectorData');
 			if ( !$selector_data ) {
@@ -307,8 +307,8 @@
 		 */
 		function UnserializeSelectorData($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$selector_data = $object->GetDBField('SelectorData');
 
@@ -351,8 +351,8 @@
 		 */
 		function RemoveParentProperties($event, $selector_data)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$parent_id = $object->GetDBField('ParentId');
 
@@ -394,8 +394,8 @@
 		 */
 		function AddParentProperties($event, $selector_data)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$parent_id = $object->GetDBField('ParentId');
 			if ( $parent_id ) {
@@ -424,8 +424,8 @@
 		 */
 		function OnResetToBase($event)
 		{
+			/** @var SelectorsItem $object */
 			$object = $event->getObject();
-			/* @var $object SelectorsItem */
 
 			$field_values = $this->getSubmittedFields($event);
 			$object->SetFieldsFromHash($field_values);
@@ -443,8 +443,8 @@
 		 */
 		function OnMassResetToBase($event)
 		{
+			/** @var SelectorsItem $object */
 			$object = $event->getObject( Array('skip_autoload' => true) );
-			/* @var $object SelectorsItem */
 
 			$items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) );
 
Index: core/units/selectors/selectors_tag_processor.php
===================================================================
--- core/units/selectors/selectors_tag_processor.php
+++ core/units/selectors/selectors_tag_processor.php
@@ -18,8 +18,8 @@
 
 		function PrintStyle($params)
 		{
+			/** @var SelectorsItem $object */
 			$object = $this->getObject($params);
-			/* @var $object SelectorsItem */
 
 			$style_data = $object->GetDBField( $params['field'] );
 
@@ -75,8 +75,8 @@
 		{
 			$field = $params['field'];
 
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			$value = $object->GetDBField($field);
 			$subfield = getArrayValue($params, 'subfield');
Index: core/units/site_domains/site_domain_eh.php
===================================================================
--- core/units/site_domains/site_domain_eh.php
+++ core/units/site_domains/site_domain_eh.php
@@ -61,8 +61,8 @@
 
 		function querySiteDomain($field, $value)
 		{
+			/** @var SiteHelper $site_helper */
 			$site_helper = $this->Application->recallObject('SiteHelper');
-			/* @var $site_helper SiteHelper */
 
 			$site_domains = $site_helper->getSiteDomains();
 			$domain_by_name = $site_helper->getDomainByName($field, $value);
@@ -117,8 +117,8 @@
 				return;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$id = (int)$this->getPassedID($event);
 
@@ -127,15 +127,15 @@
 				return;
 			}
 
+			/** @var SiteHelper $site_helper */
 			$site_helper = $this->Application->recallObject('SiteHelper');
-			/* @var $site_helper SiteHelper */
 
 			$site_domains = $site_helper->getSiteDomains();
 			$domain_data = array_key_exists($id, $site_domains) ? $site_domains[$id] : false;
 
 			if ( $object->LoadFromHash($domain_data) ) {
+				/** @var Params $actions */
 				$actions = $this->Application->recallObject('kActions');
-				/* @var $actions Params */
 
 				$actions->Set($event->getPrefixSpecial() . '_id', $object->GetID());
 			}
@@ -172,8 +172,8 @@
 				$this->Application->setUnitOption($event->Prefix, 'Fields', $fields);
 
 				// remove grid columns
+				/** @var Array $grids */
 				$grids = $this->Application->getUnitOption($event->Prefix, 'Grids', Array ());
-				/* @var $grids Array */
 
 				foreach ($grids as $grid_name => $grid_info) {
 					foreach ($remove_fields as $remove_field) {
@@ -282,8 +282,8 @@
 		 */
 		function _itemChanged($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$email_event_data = $this->Application->GetVar('email-template_' . $event->Prefix);
 			$object->SetDBField('DefaultEmailRecipients', $email_event_data[0]['Recipients']);
@@ -298,8 +298,8 @@
 		 */
 		function _setRequired($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$redirect_mode = $object->GetDBField('RedirectOnIPMatch');
 			$object->setRequired('ExternalUrl', $redirect_mode == SITE_DOMAIN_REDIRECT_EXTERNAL);
Index: core/units/skins/skin_eh.php
===================================================================
--- core/units/skins/skin_eh.php
+++ core/units/skins/skin_eh.php
@@ -98,8 +98,8 @@
 		{
 			parent::OnBeforeClone($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$object->SetDBField('IsPrimary', 0);
 		}
@@ -115,12 +115,12 @@
 		{
 			parent::OnAfterItemUpdate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( !$object->IsTempTable() ) {
+				/** @var SkinHelper $skin_helper */
 				$skin_helper = $this->Application->recallObject('SkinHelper');
-				/* @var $skin_helper SkinHelper */
 
 				$skin_helper->compile($object);
 			}
@@ -135,8 +135,8 @@
 		 */
 		protected function OnCompileStylesheet($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject( Array ('skip_autoload' => true) );
-			/* @var $object kDBItem */
 
 			$object->SwitchToLive();
 
@@ -149,8 +149,8 @@
 				return ;
 			}
 
+			/** @var SkinHelper $skin_helper */
 			$skin_helper = $this->Application->recallObject('SkinHelper');
-			/* @var $skin_helper SkinHelper */
 
 			foreach ($ids as $id) {
 				$object->Load($id);
Index: core/units/spam_reports/spam_report_eh.php
===================================================================
--- core/units/spam_reports/spam_report_eh.php
+++ core/units/spam_reports/spam_report_eh.php
@@ -63,8 +63,8 @@
 	{
 		parent::OnBeforeItemCreate($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$item_prefix = $this->Application->GetVar('item_prefix');
 		$item_id = $this->Application->GetVar($item_prefix . '_id');
@@ -88,14 +88,14 @@
 	{
 		parent::OnAfterItemCreate($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$item_prefix = $object->GetDBField('ItemPrefix');
 
 		if ( preg_match('/rev$/', $item_prefix) ) {
+			/** @var kDBItem $item */
 			$item = $this->Application->recallObject($item_prefix);
-			/* @var $item kDBItem */
 
 			$object->SetDBField('ItemName', $item->GetDBField('ReviewText'));
 		}
@@ -110,8 +110,8 @@
 	 */
 	function OnNewReport($event)
 	{
+		/** @var AjaxFormHelper $ajax_form_helper */
 		$ajax_form_helper = $this->Application->recallObject('AjaxFormHelper');
-		/* @var $ajax_form_helper AjaxFormHelper */
 
 		$ajax_form_helper->transitEvent($event, 'OnCreate');
 	}
@@ -126,8 +126,8 @@
 		$temp_handlers = Array ();
 		$ids = $this->StoreSelectedIDs($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject( Array ('skip_autoload' => true) );
-		/* @var $object kDBItem */
 
 		foreach ($ids as $id) {
 			$object->Load($id);
Index: core/units/spam_reports/spam_report_tp.php
===================================================================
--- core/units/spam_reports/spam_report_tp.php
+++ core/units/spam_reports/spam_report_tp.php
@@ -24,8 +24,8 @@
 	 */
 	function ItemEditLink($params)
 	{
+		/** @var kDBList $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBList */
 
 		$prefix = $object->GetDBField('ItemPrefix');
 
@@ -57,8 +57,8 @@
 	 */
 	function AssocItemDeleteLink($params)
 	{
+		/** @var kDBList $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBList */
 
 		$prefix = $this->getPrefixSpecial();
 
@@ -80,9 +80,9 @@
 	 */
 	protected function IsReviewReport($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		return preg_match('/rev$/',  $object->GetDBField('ItemPrefix'));
 	}
 }
\ No newline at end of file
Index: core/units/statistics/statistics_event_handler.php
===================================================================
--- core/units/statistics/statistics_event_handler.php
+++ core/units/statistics/statistics_event_handler.php
@@ -28,8 +28,8 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			if ( $event->Special == 'summary' ) {
 				$object->addFilter('summary_filter', '%1$s.AdminSummary = 1');
Index: core/units/statistics/statistics_tag_processor.php
===================================================================
--- core/units/statistics/statistics_tag_processor.php
+++ core/units/statistics/statistics_tag_processor.php
@@ -44,8 +44,8 @@
     		switch ($this->PostFormatting) {
     			case 'number':
     				// simple-specific postformatting
+					/** @var LanguagesItem $lang */
     				$lang = $this->Application->recallObject('lang.current');
-					/* @var $lang LanguagesItem */
 
     				$value = $lang->formatNumber($value, $this->PostFormattingParams['precision']);
     				break;
@@ -103,8 +103,8 @@
 				return $this->TagCache[$tag];
 			}
 
+			/** @var kDBItem $object */
 			$object = $this->getObject();
-			/* @var $object kDBItem */
 
 			list($tag_name, $tag_params) = explode(' ', $tag, 2); // 1st - function, 2nd .. nth - params
 			preg_match_all('/([\${}a-zA-Z0-9_.-]+)=(["\']{1,1})(.*?)(?<!\\\)\\2/s', $tag_params, $rets, PREG_SET_ORDER);
@@ -122,8 +122,8 @@
 
 				case 'm:post_format':
 					// m:post_format field="<field_name>" type="<formatting_type>" precision="2"
+					/** @var LanguagesItem $lang */
 					$lang = $this->Application->recallObject('lang.current');
-					/* @var $lang LanguagesItem */
 
 					switch ($tag_params['type']) {
 						case 'date':
@@ -255,8 +255,8 @@
 		 */
 		function getPendingPrefixes()
 		{
+			/** @var kModulesHelper $modules_helper */
 			$modules_helper = $this->Application->recallObject('ModulesHelper');
-			/* @var $modules_helper kModulesHelper */
 
 			$licensed_modules = array_map('strtolower', $modules_helper->_GetModules());
 
Index: core/units/stylesheets/stylesheets_event_handler.php
===================================================================
--- core/units/stylesheets/stylesheets_event_handler.php
+++ core/units/stylesheets/stylesheets_event_handler.php
@@ -25,8 +25,8 @@
 	 */
 	protected function OnCompileStylesheet($event)
 	{
+		/** @var StylesheetsItem $object */
 		$object = $event->getObject( Array ('skip_autoload' => true) );
-		/* @var $object StylesheetsItem */
 
 		$object->SwitchToLive();
 
Index: core/units/stylesheets/stylesheets_item.php
===================================================================
--- core/units/stylesheets/stylesheets_item.php
+++ core/units/stylesheets/stylesheets_item.php
@@ -19,8 +19,8 @@
 
 		function Compile()
 		{
+			/** @var SelectorsItem $selector_item */
 			$selector_item = $this->Application->recallObject('selectors.item', 'selectors', Array('live_table'=>true, 'skip_autoload' => true) );
-			/* @var $selector_item SelectorsItem */
 
 			$parent_field = $this->Application->getUnitOption($selector_item->Prefix, 'ForeignKey');
 
@@ -40,8 +40,8 @@
 			$compile_ts = adodb_mktime();
 			$css_path = WRITEABLE . '/stylesheets/';
 
+			/** @var FileHelper $file_helper */
 			$file_helper = $this->Application->recallObject('FileHelper');
-			/* @var $file_helper FileHelper */
 
 			$file_helper->CheckFolder($css_path);
 
Index: core/units/system_event_subscriptions/system_event_subscription_eh.php
===================================================================
--- core/units/system_event_subscriptions/system_event_subscription_eh.php
+++ core/units/system_event_subscriptions/system_event_subscription_eh.php
@@ -93,10 +93,10 @@
 	 */
 	protected function _setRequired(kEvent $event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$object->setRequired('UserId', !$object->GetDBField('SubscriberEmail'));
 		$object->setRequired('SubscriberEmail', !$object->GetDBField('UserId'));
 	}
 }
\ No newline at end of file
Index: core/units/system_event_subscriptions/system_event_subscription_tp.php
===================================================================
--- core/units/system_event_subscriptions/system_event_subscription_tp.php
+++ core/units/system_event_subscriptions/system_event_subscription_tp.php
@@ -31,8 +31,8 @@
 	 */
 	function CategoryPath($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$category_id = $object->GetDBField('CategoryId');
 
@@ -42,8 +42,8 @@
 
 		$params['cat_id'] = $category_id;
 
+		/** @var kNavigationBar $navigation_bar */
 		$navigation_bar = $this->Application->recallObject('kNavigationBar');
-		/* @var $navigation_bar kNavigationBar */
 
 		return $navigation_bar->build($params);
 	}
@@ -57,8 +57,8 @@
 	 */
 	protected function ItemName($params)
 	{
+		/** @var kDBList $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBList */
 
 		if ( !isset($this->_analyzer) ) {
 			$this->_analyzer = new kSubscriptionAnalyzer($object);
Index: core/units/theme_files/theme_file_eh.php
===================================================================
--- core/units/theme_files/theme_file_eh.php
+++ core/units/theme_files/theme_file_eh.php
@@ -63,8 +63,8 @@
 		{
 			parent::OnAfterItemLoad($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$filename = $this->_getTemplatePath($object);
 
@@ -87,8 +87,8 @@
 		{
 			parent::OnBeforeItemUpdate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$file_data = $object->GetDBField('FileContents');
 
@@ -109,8 +109,8 @@
 		{
 			parent::OnAfterItemUpdate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$filename = $this->_getTemplatePath($object);
 
@@ -119,8 +119,8 @@
 				fwrite($fp, $object->GetDBField('FileContents'));
 				fclose($fp);
 
+				/** @var kThemesHelper $themes_helper */
 				$themes_helper = $this->Application->recallObject('ThemesHelper');
-				/* @var $themes_helper kThemesHelper */
 
 				$meta_info = $themes_helper->parseTemplateMetaInfo($filename);
 				$file_description = array_key_exists('desc', $meta_info) ? $meta_info['desc'] : '';
@@ -139,8 +139,8 @@
 		 */
 		function _getTemplatePath(&$object)
 		{
+			/** @var kDBItem $theme */
 			$theme = $this->Application->recallObject('theme');
-			/* @var $theme kDBItem */
 
 			$path = FULL_PATH . '/themes/' . $theme->GetDBField('Name');
 
@@ -158,11 +158,11 @@
 		{
 			parent::OnNew($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
+			/** @var TemplateHelper $template_helper */
 			$template_helper = $this->Application->recallObject('TemplateHelper');
-			/* @var $template_helper TemplateHelper */
 
 			$template_helper->InitHelper($object);
 
@@ -179,8 +179,8 @@
 		 */
 		function OnSaveBlock($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject( Array('skip_autoload' => true) );
-			/* @var $object kDBItem */
 
 			$items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) );
 			if ($items_info) {
@@ -192,8 +192,8 @@
 
 			$status = $object->Validate();
 
+			/** @var TemplateHelper $template_helper */
 			$template_helper = $this->Application->recallObject('TemplateHelper');
-			/* @var $template_helper TemplateHelper */
 
 			$template_helper->InitHelper($object);
 
@@ -221,8 +221,8 @@
 
 			$target_order = $this->Application->GetVar('target_order');
 
+			/** @var TemplateHelper $template_helper */
 			$template_helper = $this->Application->recallObject('TemplateHelper');
-			/* @var $template_helper TemplateHelper */
 
 			if ($template_helper->moveTemplateElements($target_order)) {
 				echo 'OK';
Index: core/units/themes/themes_eh.php
===================================================================
--- core/units/themes/themes_eh.php
+++ core/units/themes/themes_eh.php
@@ -166,8 +166,8 @@
 		{
 			parent::OnAfterCopyToLive($event);
 
+			/** @var kDBItem $object */
 			$object = $this->Application->recallObject($event->Prefix . '.-item', null, Array ('skip_autoload' => true, 'live_table' => true));
-			/* @var $object kDBItem */
 
 			$object->Load($event->getEventParam('id'));
 
@@ -238,8 +238,8 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			if ( in_array($event->Special, Array ('enabled', 'selected', 'available')) || !$this->Application->isAdminUser ) {
 				// "enabled" special or Front-End
@@ -248,8 +248,8 @@
 
 			// site domain theme picker
 			if ( $event->Special == 'selected' || $event->Special == 'available' ) {
+				/** @var EditPickerHelper $edit_picker_helper */
 				$edit_picker_helper = $this->Application->recallObject('EditPickerHelper');
-				/* @var $edit_picker_helper EditPickerHelper */
 
 				$edit_picker_helper->applyFilter($event, 'Themes');
 			}
Index: core/units/themes/themes_tag_processor.php
===================================================================
--- core/units/themes/themes_tag_processor.php
+++ core/units/themes/themes_tag_processor.php
@@ -28,8 +28,8 @@
 		{
 			$object = $this->getObject($params);
 
+			/** @var kThemesHelper $themes_helper */
 			$themes_helper = $this->Application->recallObject('ThemesHelper');
-			/* @var $themes_helper kThemesHelper */
 
 			return $object->GetDBField('ThemeId') == $themes_helper->getCurrentThemeId();
 		}
Index: core/units/thesaurus/thesaurus_eh.php
===================================================================
--- core/units/thesaurus/thesaurus_eh.php
+++ core/units/thesaurus/thesaurus_eh.php
@@ -28,8 +28,8 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			if ( !$this->Application->isAdminUser ) {
 				$keywords = $this->Application->unescapeRequestVariable(trim($this->Application->GetVar('keywords')));
Index: core/units/thesaurus/thesaurus_tp.php
===================================================================
--- core/units/thesaurus/thesaurus_tp.php
+++ core/units/thesaurus/thesaurus_tp.php
@@ -18,8 +18,8 @@
 
 		function SubSearchLink($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			$params['search_type'] = 'subsearch';
 			$params['keywords'] = $object->GetDBField('ThesaurusTerm');
Index: core/units/translator/translator_event_handler.php
===================================================================
--- core/units/translator/translator_event_handler.php
+++ core/units/translator/translator_event_handler.php
@@ -82,11 +82,11 @@
 		{
 			list($obj_prefix, $field) = $this->getPrefixAndField($event);
 
+			/** @var kDBItem $object */
 			$object = $this->Application->recallObject($obj_prefix);
-			/* @var $object kDBItem */
 
+			/** @var kDBItem $translator */
 			$translator = $event->getObject();
-			/* @var $translator kDBItem */
 
 			$def_lang = $this->Application->GetDefaultLanguageId();
 
@@ -105,8 +105,8 @@
 
 			$translator->SetDBField('Translation', $object->GetDBField('l'.$current_lang.'_'.$field));
 
+			/** @var LanguagesItem $cur_lang */
 			$cur_lang = $this->Application->recallObject('lang.current');
-			/* @var $cur_lang LanguagesItem */
 
 			$cur_lang->Load($current_lang);
 
@@ -139,8 +139,8 @@
 		 */
 		protected function OnPreSave(kEvent $event)
 		{
+			/** @var kDBItem $translator */
 			$translator = $event->getObject();
-			/* @var $translator kDBItem */
 
 			$field_values = $this->getSubmittedFields($event);
 			$translator->SetFieldsFromHash($field_values);
@@ -148,8 +148,8 @@
 
 			list($obj_prefix, $field) = $this->getPrefixAndField($event);
 
+			/** @var kDBItem $object */
 			$object = $this->Application->recallObject($obj_prefix);
-			/* @var $object kDBItem */
 
 			$lang = $translator->GetDBField('Language');
 
@@ -170,8 +170,8 @@
 		{
 			$event->CallSubEvent('OnPreSave');
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$object->SetDBField('Language', $object->GetDBField('SwitchLanguage'));
 
Index: core/units/user_groups/user_groups_eh.php
===================================================================
--- core/units/user_groups/user_groups_eh.php
+++ core/units/user_groups/user_groups_eh.php
@@ -97,8 +97,8 @@
 			$ids = $this->StoreSelectedIDs($event);
 
 			if ($ids) {
+				/** @var kDBItem $user */
 				$user = $this->Application->recallObject('u');
-				/* @var $user kDBItem */
 
 				$user->SetDBField('PrimaryGroupId', array_shift($ids));
 				$user->Update();
Index: core/units/user_profile/user_profile_eh.php
===================================================================
--- core/units/user_profile/user_profile_eh.php
+++ core/units/user_profile/user_profile_eh.php
@@ -72,8 +72,8 @@
 			}
 
 			if ($public_profile_add || $public_profile_remove) {
+				/** @var kDBItem $user */
 				$user = $this->Application->recallObject('u.current');
-				/* @var $user kDBItem */
 
 				// get current value
 				$display_to_public_old = $user->GetDBField('DisplayToPublic');
Index: core/units/user_profile/user_profile_tp.php
===================================================================
--- core/units/user_profile/user_profile_tp.php
+++ core/units/user_profile/user_profile_tp.php
@@ -82,8 +82,8 @@
 			static $cache = null;
 
 			if (!isset($cache)) {
+				/** @var kDBItem $user */
 				$user = $this->Application->recallObject( $this->getUserPrefixSpecial() );
-				/* @var $user kDBItem */
 
 				$sql = 'SELECT VariableValue, VariableName
 						FROM ' . TABLE_PREFIX . 'UserPersistentSessionData
@@ -120,8 +120,8 @@
 			static $field_count = null;
 
 			if (!isset($field_count)) {
+				/** @var kDBItem $user */
 				$user = $this->Application->recallObject( $this->getUserPrefixSpecial() );
-				/* @var $user kDBItem */
 
 				$display_to_public = $user->GetDBField('DisplayToPublic');
 				$field_count = $display_to_public ? substr_count($display_to_public, '|') - 1 : 0;
Index: core/units/users/users_event_handler.php
===================================================================
--- core/units/users/users_event_handler.php
+++ core/units/users/users_event_handler.php
@@ -64,8 +64,8 @@
 		{
 			parent::OnItemBuild($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( $event->Special == 'forgot' || $object->getFormName() == 'registration' ) {
 				$this->_makePasswordRequired($event);
@@ -84,8 +84,8 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			if ( $event->Special == 'regular' ) {
 				$object->addFilter('primary_filter', '%1$s.UserType = ' . UserType::USER);
@@ -139,8 +139,8 @@
 			}
 
 			if ( $event->Name == 'OnLoginAs' ) {
+				/** @var Session $admin_session */
 				$admin_session = $this->Application->recallObject('Session.admin');
-				/* @var $admin_session Session */
 
 				return $admin_session->LoggedIn();
 			}
@@ -155,8 +155,8 @@
 				}
 
 				if ( substr($event->Name, 0, 8) == 'OnUpdate' && $user_id > 0 ) {
+					/** @var UsersItem $user_dummy */
 					$user_dummy = $this->Application->recallObject($event->Prefix . '.-item', null, Array ('skip_autoload' => true));
-					/* @var $user_dummy UsersItem */
 
 					foreach ($items_info as $id => $field_values) {
 						if ( $id != $user_id ) {
@@ -219,8 +219,8 @@
 
 			if ($this->Application->GetVar('admin') == 1) {
 				// Front-End showed in admin's right frame
+				/** @var Session $session_admin */
 				$session_admin = $this->Application->recallObject('Session.admin');
-				/* @var $session_admin Session */
 
 				if (!$session_admin->LoggedIn()) {
 					// front-end session created from admin session & both expired
@@ -261,15 +261,15 @@
 		 */
 		protected function OnLogin($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject( Array ('form_name' => 'login') );
-			/* @var $object kDBItem */
 
 			$object->SetFieldsFromHash($this->getSubmittedFields($event));
 			$username = $object->GetDBField('UserLogin');
 			$password = $object->GetDBField('UserPassword');
 			$remember_login = $object->GetDBField('UserRememberLogin') == 1;
 
-			/* @var $user_helper UserHelper */
+			/** @var UserHelper $user_helper */
 			$user_helper = $this->Application->recallObject('UserHelper');
 
 			$user_helper->event =& $event;
@@ -296,8 +296,8 @@
 		 */
 		protected function OnLoginAjax($event)
 		{
+			/** @var AjaxFormHelper $ajax_form_helper */
 			$ajax_form_helper = $this->Application->recallObject('AjaxFormHelper');
-			/* @var $ajax_form_helper AjaxFormHelper */
 
 			$ajax_form_helper->transitEvent($event, 'OnLogin');
 		}
@@ -315,7 +315,7 @@
 				return ;
 			}
 
-			/* @var $user_helper UserHelper */
+			/** @var UserHelper $user_helper */
 			$user_helper = $this->Application->recallObject('UserHelper');
 
 			$user_helper->loginUser('', '', false, false, $remember_login_cookie);
@@ -328,8 +328,8 @@
 		 */
 		function OnInpLogin($event)
 		{
+			/** @var UsersSyncronizeManager $sync_manager */
 			$sync_manager = $this->Application->recallObject('UsersSyncronizeManager', null, Array(), Array ('InPortalSyncronize'));
-			/* @var $sync_manager UsersSyncronizeManager */
 
 			$sync_manager->performAction('LoginUser', $event->getEventParam('user'), $event->getEventParam('pass') );
 
@@ -346,8 +346,8 @@
 		 */
 		function OnInpLogout($event)
 		{
+			/** @var UsersSyncronizeManager $sync_manager */
 			$sync_manager = $this->Application->recallObject('UsersSyncronizeManager', null, Array(), Array ('InPortalSyncronize'));
-			/* @var $sync_manager UsersSyncronizeManager */
 
 			$sync_manager->performAction('LogoutUser');
 		}
@@ -361,7 +361,7 @@
 		 */
 		protected function OnLogout($event)
 		{
-			/* @var $user_helper UserHelper */
+			/** @var UserHelper $user_helper */
 			$user_helper = $this->Application->recallObject('UserHelper');
 
 			$user_helper->event =& $event;
@@ -399,8 +399,8 @@
 				return ;
 			}
 
+			/** @var UsersItem $object */
 			$object = $event->getObject( Array('form_name' => 'registration') );
-			/* @var $object UsersItem */
 
 			$field_values = $this->getSubmittedFields($event);
 			$user_email = getArrayValue($field_values, 'Email');
@@ -443,8 +443,8 @@
 		 */
 		protected function OnRegisterAjax(kEvent $event)
 		{
+			/** @var AjaxFormHelper $ajax_form_helper */
 			$ajax_form_helper = $this->Application->recallObject('AjaxFormHelper');
-			/* @var $ajax_form_helper AjaxFormHelper */
 
 			$ajax_form_helper->transitEvent($event, 'OnCreate', Array ('do_refresh' => 1));
 		}
@@ -458,8 +458,8 @@
 		 */
 		protected function getSubscriberByEmail($email)
 		{
+			/** @var UsersItem $verify_user */
 			$verify_user = $this->Application->recallObject('u.verify', null, Array ('skip_autoload' => true));
-			/* @var $verify_user UsersItem */
 
 			$verify_user->Load($email, 'Email');
 
@@ -473,11 +473,11 @@
 		 */
 		function autoLoginUser($event)
 		{
+			/** @var UsersItem $object */
 			$object = $event->getObject();
-			/* @var $object UsersItem */
 
 			if ( $object->GetDBField('Status') == STATUS_ACTIVE ) {
-				/* @var $user_helper UserHelper */
+				/** @var UserHelper $user_helper */
 				$user_helper = $this->Application->recallObject('UserHelper');
 
 				$user =& $user_helper->getUserObject();
@@ -502,11 +502,11 @@
 
 			$this->beforeItemChanged($event);
 
+			/** @var kCountryStatesHelper $cs_helper */
 			$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-			/* @var $cs_helper kCountryStatesHelper */
 
+			/** @var UsersItem $object */
 			$object = $event->getObject();
-			/* @var $object UsersItem */
 
 			if ( !$object->isSubscriberOnly() ) {
 				// don't check state-to-country relations for subscribers
@@ -521,7 +521,7 @@
 
 			$this->setUserGroup($object);
 
-			/* @var $user_helper UserHelper */
+			/** @var UserHelper $user_helper */
 			$user_helper = $this->Application->recallObject('UserHelper');
 
 			if ( !$user_helper->checkBanRules($object) ) {
@@ -574,8 +574,8 @@
 		 */
 		protected function assignToPrimaryGroup($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$primary_group_id = $object->GetDBField('PrimaryGroupId');
 
@@ -604,8 +604,8 @@
 		 */
 		protected function OnAfterItemValidate(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$resource_id = $object->GetDBField('ResourceId');
 
@@ -621,8 +621,8 @@
 		 */
 		function OnRecommend($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject( Array ('form_name' => 'recommend') );
-			/* @var $object kDBItem */
 
 			$object->SetFieldsFromHash($this->getSubmittedFields($event));
 
@@ -658,8 +658,8 @@
 		 */
 		function OnUpdateAddress($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject(Array ('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			$items_info = $this->Application->GetVar($event->getPrefixSpecial(true));
 
@@ -677,8 +677,8 @@
 				$object->Validate();
 			}
 
+			/** @var kCountryStatesHelper $cs_helper */
 			$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-			/* @var $cs_helper kCountryStatesHelper */
 
 			$cs_helper->PopulateStates($event, 'State', 'Country');
 
@@ -692,8 +692,8 @@
 		 */
 		function OnSubscribeQuery($event)
 		{
+			/** @var UsersItem $object */
 			$object = $event->getObject( Array ('form_name' => 'subscription') );
-			/* @var $object UsersItem */
 
 			$object->SetFieldsFromHash($this->getSubmittedFields($event));
 
@@ -724,8 +724,8 @@
 		 */
 		function OnSubscribeUser($event)
 		{
+			/** @var UsersItem $object */
 			$object = $event->getObject( Array ('form_name' => 'subscription') );
-			/* @var $object UsersItem */
 
 			$user_email = $this->Application->GetVar('subscriber_email');
 			$object->SetDBField('SubscriberEmail', $user_email);
@@ -748,8 +748,8 @@
 					}
 
 					if ( $object->isSubscriberOnly() ) {
+						/** @var kTempTablesHandler $temp_handler */
 						$temp_handler = $this->Application->recallObject($event->Prefix . '_TempHandler', 'kTempTablesHandler');
-						/* @var $temp_handler kTempTablesHandler */
 
 						$temp_handler->DeleteItems($event->Prefix, '', Array($object->GetID()));
 					}
@@ -826,13 +826,13 @@
 		 */
 		function OnForgotPassword($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject( Array ('form_name' => 'forgot_password') );
-			/* @var $object kDBItem */
 
 			$object->SetFieldsFromHash($this->getSubmittedFields($event));
 
+			/** @var UsersItem $user */
 			$user = $this->Application->recallObject('u.tmp', null, Array ('skip_autoload' => true));
-			/* @var $user UsersItem */
 
 			$found = $allow_reset = false;
 			$email_or_username = $object->GetDBField('ForgotLogin');
@@ -915,14 +915,14 @@
 
 			$this->beforeItemChanged($event);
 
+			/** @var kCountryStatesHelper $cs_helper */
 			$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-			/* @var $cs_helper kCountryStatesHelper */
 
 			$cs_helper->CheckStateField($event, 'State', 'Country');
 			$cs_helper->PopulateStates($event, 'State', 'Country');
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( $event->Special == 'forgot' ) {
 				$object->SetDBField('PwResetConfirm', '');
@@ -949,8 +949,8 @@
 		 */
 		function beforeItemChanged($event)
 		{
+			/** @var UsersItem $object */
 			$object = $event->getObject();
-			/* @var $object UsersItem */
 
 			if ( !$this->Application->isAdmin && $object->getFormName() == 'registration' ) {
 				// sets new user's status based on config options
@@ -962,8 +962,8 @@
 				}
 
 				if ( $this->Application->ConfigValue('RegistrationCaptcha') ) {
+					/** @var kCaptchaHelper $captcha_helper */
 					$captcha_helper = $this->Application->recallObject('CaptchaHelper');
-					/* @var $captcha_helper kCaptchaHelper */
 
 					$captcha_helper->validateCode($event, false);
 				}
@@ -985,8 +985,8 @@
 		{
 			$event->SetRedirectParam('opener', 's');
 
+			/** @var UsersItem $object */
 			$object = $event->getObject();
-			/* @var $object UsersItem */
 
 			$next_template = false;
 
@@ -1074,8 +1074,8 @@
 			$item_info = $this->Application->GetVar( $event->getPrefixSpecial(true) );
 			list($id, $field_values) = each($item_info);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject( Array ('skip_autoload' => true) );
-			/* @var $object kDBItem */
 
 			$object->IgnoreValidation = true;
 
@@ -1112,8 +1112,8 @@
 		{
 			switch ($event->Special) {
 				case 'ord':
+					/** @var OrdersItem $order */
 					$order = $this->Application->recallObject('ord');
-					/* @var $order OrdersItem */
 
 					return $order->GetDBField('PortalUserId');
 					break;
@@ -1132,7 +1132,7 @@
 					break;
 
 				case 'forgot':
-					/* @var $user_helper UserHelper */
+					/** @var UserHelper $user_helper */
 					$user_helper = $this->Application->recallObject('UserHelper');
 
 					$id = $user_helper->validateUserCode($this->Application->GetVar('user_key'), 'forgot_password');
@@ -1173,8 +1173,8 @@
 			$user_id = $this->Application->RecallVar('user_id');
 
 			if ( $id == $user_id && ($user_id > 0 || $user_id == USER_ROOT) ) {
+				/** @var kDBItem $user_dummy */
 				$user_dummy = $this->Application->recallObject($event->Prefix . '.-item', null, Array ('skip_autoload' => true));
-				/* @var $user_dummy kDBItem */
 
 				$user_dummy->Load($id);
 				$status_field = $user_dummy->getStatusField();
@@ -1186,8 +1186,8 @@
 			}
 
 			if ( $user_id == USER_ROOT ) {
+				/** @var UsersItem $object */
 				$object = $event->getObject(Array ('skip_autoload' => true));
-				/* @var $object UsersItem */
 
 				// this is internal hack to allow root/root passwords for dev
 				if ( $this->Application->isDebugMode() && $field_values['RootPassword'] == 'root' ) {
@@ -1273,8 +1273,8 @@
 		 */
 		protected function checkItemStatus(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( !$object->isLoaded() ) {
 				return true;
@@ -1298,8 +1298,8 @@
 
 			$this->afterItemChanged($event);
 
+			/** @var UsersItem $object */
 			$object = $event->getObject();
-			/* @var $object UsersItem */
 
 			if ( !$this->Application->isAdmin && ($event->Special != 'email-restore') ) {
 				$this->sendEmailChangeEvent($event);
@@ -1321,8 +1321,8 @@
 		{
 			$this->saveUserImages($event);
 
+			/** @var UsersItem $object */
 			$object = $event->getObject();
-			/* @var $object UsersItem */
 
 			if ( $object->GetDBField('EmailPassword') && $object->GetDBField('Password_plain') ) {
 				$email_passwords = $this->Application->RecallVar('email_passwords');
@@ -1381,8 +1381,8 @@
 				$email_passwords = unserialize($email_passwords);
 
 				if ( isset($email_passwords[$temp_id]) ) {
+					/** @var kDBItem $object */
 					$object = $event->getObject();
-					/* @var $object kDBItem */
 
 					$object->SwitchToLive();
 					$object->Load( $event->getEventParam('id') );
@@ -1462,8 +1462,8 @@
 		 */
 		protected function sendEmailChangeEvent(kEvent $event)
 		{
+			/** @var UsersItem $object */
 			$object = $event->getObject();
-			/* @var $object UsersItem */
 
 			$new_email = $object->GetDBField('Email');
 			$prev_email = $object->GetOriginalField('Email');
@@ -1519,8 +1519,8 @@
 			$form_fields =& $forms['default']['Fields'];
 
 			// 1. arrange user registration countries
+			/** @var SiteHelper $site_helper */
 			$site_helper = $this->Application->recallObject('SiteHelper');
-			/* @var $site_helper SiteHelper */
 
 			$first_country = $site_helper->getDefaultCountry('', false);
 
@@ -1537,8 +1537,8 @@
 			$form_fields['PrimaryGroupId']['default'] = $this->Application->ConfigValue('User_NewGroup');
 
 			// 3. allow avatar upload on Front-End
+			/** @var FileHelper $file_helper */
 			$file_helper = $this->Application->recallObject('FileHelper');
-			/* @var $file_helper FileHelper */
 
 			$file_helper->createItemFiles($event->Prefix, true); // create image fields
 
@@ -1589,8 +1589,8 @@
 				return;
 			}
 
+			/** @var kTempTablesHandler $temp_handler */
 			$temp_handler = $this->Application->recallObject($event->Prefix.'_TempHandler', 'kTempTablesHandler');
-			/* @var $temp_handler kTempTablesHandler */
 
 			$ids = $this->StoreSelectedIDs($event);
 			$temp_handler->CloneItems($event->Prefix, '', $ids);
@@ -1608,8 +1608,8 @@
 		{
 			parent::OnBeforeClone($event);
 
+			/** @var UsersItem $object */
 			$object = $event->getObject();
-			/* @var $object UsersItem */
 
 			$object->generatePassword();
 			$object->SetDBField('ResourceId', 0); // this will reset it
@@ -1692,16 +1692,16 @@
 			parent::OnAfterItemLoad($event);
 
 			// linking existing images for item with virtual fields
+			/** @var ImageHelper $image_helper */
 			$image_helper = $this->Application->recallObject('ImageHelper');
-			/* @var $image_helper ImageHelper */
 
+			/** @var UsersItem $object */
 			$object = $event->getObject();
-			/* @var $object UsersItem */
 
 			$image_helper->LoadItemImages($object);
 
+			/** @var kCountryStatesHelper $cs_helper */
 			$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-			/* @var $cs_helper kCountryStatesHelper */
 
 			$cs_helper->PopulateStates($event, 'State', 'Country');
 
@@ -1726,8 +1726,8 @@
 			$ret = $this->Application->getCache($cache_key);
 
 			if ( $ret === false ) {
+				/** @var kDBList $languages */
 				$languages = $this->Application->recallObject('lang.enabled', 'lang_List');
-				/* @var $languages kDBList */
 
 				$ret = Array ();
 
@@ -1749,11 +1749,11 @@
 		function saveUserImages($event)
 		{
 			if (!$this->Application->isAdmin) {
+				/** @var ImageHelper $image_helper */
 				$image_helper = $this->Application->recallObject('ImageHelper');
-				/* @var $image_helper ImageHelper */
 
+				/** @var kDBItem $object */
 				$object = $event->getObject();
-				/* @var $object kDBItem */
 
 				// process image upload in virtual fields
 				$image_helper->SaveItemImages($object);
@@ -1775,8 +1775,8 @@
 				return;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$user_type = $this->Application->GetVar('user_type');
 
@@ -1802,8 +1802,8 @@
 		 */
 		function _makePasswordRequired($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$required_fields = Array ('Password', 'Password_plain', 'VerifyPassword', 'VerifyPassword_plain');
 			$object->setRequired($required_fields);
@@ -1823,8 +1823,8 @@
 			if ( $id < 0 ) {
 				// when root, guest and so on
 
+				/** @var kDBItem $object */
 				$object = $event->getObject();
-				/* @var $object kDBItem */
 
 				$object->Clear($id);
 				return;
@@ -1878,13 +1878,13 @@
 		 */
 		function OnResetLostPassword($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$event->CallSubEvent('OnUpdate');
 
 			if ( $event->status == kEvent::erSUCCESS ) {
-				/* @var $user_helper UserHelper */
+				/** @var UserHelper $user_helper */
 				$user_helper = $this->Application->recallObject('UserHelper');
 
 			    $user =& $user_helper->getUserObject();
@@ -1905,8 +1905,8 @@
 		 */
 		protected function OnResetRootPassword($event)
 		{
+			/** @var kPasswordFormatter $password_formatter */
 			$password_formatter = $this->Application->recallObject('kPasswordFormatter');
-			/* @var $password_formatter kPasswordFormatter */
 
 			$new_root_password = kUtil::generatePassword();
 
@@ -1926,7 +1926,7 @@
 		 */
 		protected function OnLoginAs(kEvent $event)
 		{
-			/* @var $user_helper UserHelper */
+			/** @var UserHelper $user_helper */
 			$user_helper = $this->Application->recallObject('UserHelper');
 
 			$user =& $user_helper->getUserObject();
Index: core/units/users/users_item.php
===================================================================
--- core/units/users/users_item.php
+++ core/units/users/users_item.php
@@ -35,8 +35,8 @@
 						ORDER BY IF(GroupId = ' . $this->GetDBField('PrimaryGroupId') . ', 1, 0) DESC';
 				$groups = $this->Conn->GetCol($sql);
 
+				/** @var UserHelper $user_helper */
 				$user_helper = $this->Application->recallObject('UserHelper');
-				/* @var $user_helper UserHelper */
 
 				$user_groups = Array ();
 				$ip_restrictions = $user_helper->getGroupsWithIPRestrictions();
@@ -108,8 +108,8 @@
 			$ret = parent::Create($force_id, $system_create);
 			if ( $ret ) {
 				// find out how to synchronize user only when it's copied to live table
+				/** @var UsersSyncronizeManager $sync_manager */
 				$sync_manager = $this->Application->recallObject('UsersSyncronizeManager', null, Array (), Array ('InPortalSyncronize'));
-				/* @var $sync_manager UsersSyncronizeManager */
 
 				$sync_manager->performAction('createUser', $this->FieldValues);
 			}
@@ -132,8 +132,8 @@
 
 			if ( $ret ) {
 				// find out how to synchronize user only when it's copied to live table
+				/** @var UsersSyncronizeManager $sync_manager */
 				$sync_manager = $this->Application->recallObject('UsersSyncronizeManager', null, Array (), Array ('InPortalSyncronize'));
-				/* @var $sync_manager UsersSyncronizeManager */
 
 				$sync_manager->performAction('updateUser', $this->FieldValues);
 			}
@@ -153,8 +153,8 @@
 			$ret = parent::Delete($id);
 
 			if ( $ret ) {
+				/** @var UsersSyncronizeManager $sync_manager */
 				$sync_manager = $this->Application->recallObject('UsersSyncronizeManager', null, Array (), Array ('InPortalSyncronize'));
-				/* @var $sync_manager UsersSyncronizeManager */
 
 				$sync_manager->performAction('deleteUser', $this->FieldValues);
 			}
Index: core/units/users/users_tag_processor.php
===================================================================
--- core/units/users/users_tag_processor.php
+++ core/units/users/users_tag_processor.php
@@ -35,8 +35,8 @@
 
 		function ConfirmPasswordLink($params)
 		{
+			/** @var UsersItem $user */
 			$user = $this->Application->recallObject($this->Prefix . '.email-to');
-			/* @var $user UsersItem */
 
 			$code = $this->getCachedCode();
 			$user->SetDBField('PwResetConfirm', $code);
@@ -75,8 +75,8 @@
 
 		function TestCodeIsValid($params)
 		{
+			/** @var UserHelper $user_helper */
 			$user_helper = $this->Application->recallObject('UserHelper');
-			/* @var $user_helper UserHelper */
 
 			$code_type = isset($params['code_type']) ? $params['code_type'] : 'forgot_password';
 			$expiration_timeout = isset($params['expiration_timeout']) ? $params['expiration_timeout'] : null;
@@ -85,7 +85,7 @@
 			if ( !is_numeric($user_id) ) {
 				// used for error reporting only -> rewrite code + theme (by Alex)
 		     	$object = $this->getObject( Array('skip_autoload' => true) ); // TODO: change theme too
-				/* @var $object UsersItem */
+				/** @var UsersItem $object */
 
 				$object->SetError('PwResetConfirm', $user_id, $this->_getUserCodeErrorMsg($user_id, $code_type, $params));
 
@@ -104,8 +104,8 @@
 		 */
 		protected function RestoreEmail($params)
 		{
+			/** @var UserHelper $user_helper */
 			$user_helper = $this->Application->recallObject('UserHelper');
-			/* @var $user_helper UserHelper */
 
 			$hash = $this->Application->GetVar('hash');
 			$error_code = $user_helper->restoreEmail($hash);
@@ -113,7 +113,7 @@
 			if ( $error_code ) {
 				// used for error reporting only -> rewrite code + theme (by Alex)
 				$object = $this->getObject(Array ('skip_autoload' => true)); // TODO: change theme too
-				/* @var $object UsersItem */
+				/** @var UsersItem $object */
 
 				$object->SetError('PwResetConfirm', 'restore', $params[$error_code]);
 
@@ -181,8 +181,8 @@
 		 */
 		protected function LoginName($params)
 		{
+			/** @var UsersItem $object */
 			$object = $this->getObject($params);
-			/* @var $object UsersItem */
 
 			return $object->GetID() != USER_ROOT ? $object->GetDBField('Username') : 'root';
 		}
@@ -212,8 +212,8 @@
 		 */
 		function HasPermission($params)
 		{
+			/** @var kPermissionsHelper $perm_helper */
 			$perm_helper = $this->Application->recallObject('PermissionsHelper');
-			/* @var $perm_helper kPermissionsHelper */
 
 			return $perm_helper->TagPermissionCheck($params);
 		}
@@ -242,8 +242,8 @@
 		{
 			static $loggedin_status = Array ();
 
+			/** @var kDBList $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBList */
 
 			if (!isset($loggedin_status[$this->Special])) {
 				$user_ids = $object->GetCol($object->IDField);
@@ -264,8 +264,8 @@
 		 */
 		function ActivationLink($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			$code = $this->getCachedCode();
 			$object->SetDBField('PwResetConfirm', $code);
@@ -333,11 +333,11 @@
 		 */
 		protected function _updateAndLogin($fields_hash)
 		{
+			/** @var UserHelper $user_helper */
 			$user_helper = $this->Application->recallObject('UserHelper');
-			/* @var $user_helper UserHelper */
 
+			/** @var UsersItem $user */
 			$user = $this->Application->recallObject($this->Prefix . '.activate', null, Array ('skip_autoload' => true));
-			/* @var $user UsersItem */
 
 
 			$user->Load(trim($this->Application->GetVar('user_key')), 'PwResetConfirm');
@@ -369,8 +369,8 @@
 		 */
 		protected function UserTitle(array $params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			return $object->GetDBField('Email') ? $object->GetDBField('Email') : $object->GetDBField('Username');
 		}
Index: core/units/visits/visits_event_handler.php
===================================================================
--- core/units/visits/visits_event_handler.php
+++ core/units/visits/visits_event_handler.php
@@ -49,8 +49,8 @@
 				return ;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject(Array ('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			$object->SetDBField('VisitDate_date', adodb_mktime());
 			$object->SetDBField('VisitDate_time', adodb_mktime());
@@ -75,8 +75,8 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			$types = $event->getEventParam('types');
 
Index: core/units/visits/visits_tag_processor.php
===================================================================
--- core/units/visits/visits_tag_processor.php
+++ core/units/visits/visits_tag_processor.php
@@ -20,8 +20,8 @@
 		{
 			$virtual_users = Array(USER_ROOT, USER_GUEST, 0);
 
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			return !in_array( $object->GetDBField( $params['user_field'] ) , $virtual_users );
 		}
@@ -36,8 +36,8 @@
 		 */
 		protected function UserLink($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			$user_id = $object->GetDBField( $params['user_field'] );
 
Index: modules/custom/install.php
===================================================================
--- modules/custom/install.php
+++ modules/custom/install.php
@@ -20,8 +20,8 @@
 }
 else {
 	// install, using installation wizard
+	/** @var kInstallToolkit $toolkit */
 	$toolkit =& $this->toolkit;
-	/* @var $toolkit kInstallToolkit */
 }
 
 $application =& kApplication::Instance();
Index: modules/custom/units/sections/articles/e_article_eh.php
===================================================================
--- modules/custom/units/sections/articles/e_article_eh.php
+++ modules/custom/units/sections/articles/e_article_eh.php
@@ -81,8 +81,8 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			# identifying event based on special and setting filter
 			if ( $event->Special == 'custom-special' ) {
Index: modules/custom/units/sections/categories/e_category_eh.php
===================================================================
--- modules/custom/units/sections/categories/e_category_eh.php
+++ modules/custom/units/sections/categories/e_category_eh.php
@@ -81,8 +81,8 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			# identifying event based on special and setting filter
 			if ( $event->Special == 'custom-special' ) {
Index: modules/custom/units/sections/links/e_link_eh.php
===================================================================
--- modules/custom/units/sections/links/e_link_eh.php
+++ modules/custom/units/sections/links/e_link_eh.php
@@ -81,8 +81,8 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			# identifying event based on special and setting filter
 			if ( $event->Special == 'custom-special' ) {
Index: modules/custom/units/sections/products/e_product_eh.php
===================================================================
--- modules/custom/units/sections/products/e_product_eh.php
+++ modules/custom/units/sections/products/e_product_eh.php
@@ -82,8 +82,8 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			# identifying event based on special and setting filter
 			if ( $event->Special == 'custom-special' ) {
Index: modules/custom/units/sections/users/e_user_eh.php
===================================================================
--- modules/custom/units/sections/users/e_user_eh.php
+++ modules/custom/units/sections/users/e_user_eh.php
@@ -81,8 +81,8 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			# identifying event based on special and setting filter
 			if ( $event->Special == 'custom-special' ) {
Index: modules/custom/units/sections/users/e_user_tp.php
===================================================================
--- modules/custom/units/sections/users/e_user_tp.php
+++ modules/custom/units/sections/users/e_user_tp.php
@@ -16,8 +16,8 @@
 		 */
 		function PrintFormattedUserAddress($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			$ret = '';
 			$newline = '<br/>';
Index: modules/custom/units/widgets/widget_eh.php
===================================================================
--- modules/custom/units/widgets/widget_eh.php
+++ modules/custom/units/widgets/widget_eh.php
@@ -111,8 +111,8 @@
 	 */
 	function OnCustomEvent($event)
 	{
+		/** @var kDBList $object */
 		$object = $event->getObject();
-		/* @var $object kDBList */
 
 	}
 
@@ -128,8 +128,8 @@
 	{
 		parent::SetCustomQuery($event);
 
+		/** @var kDBList $object */
 		$object = $event->getObject();
-		/* @var $object kDBList */
 
 		# identifying event based on special and setting filter
 		if ( $event->Special == 'custom-special' ) {
@@ -293,8 +293,8 @@
 			$params['pass_template'] = false;
 		}
 
+		/** @var kRewriteUrlProcessor $rewrite_processor */
 		$rewrite_processor = $this->Application->recallObject('kRewriteUrlProcessor');
-		/* @var $rewrite_processor kRewriteUrlProcessor */
 
 		$processed_params = $rewrite_processor->getProcessedParams($prefix, $params, $keep_events);
 
@@ -348,8 +348,8 @@
 			$widget_filename = $url_parts[$widget_index + 1];
 		}
 
+		/** @var kRewriteUrlProcessor $rewrite_processor */
 		$rewrite_processor = $this->Application->recallObject('kRewriteUrlProcessor');
-		/* @var $rewrite_processor kRewriteUrlProcessor */
 
 		if ( $widget_filename ) {
 			$sql = 'SELECT WidgetId
Index: modules/custom/units/widgets/widget_tp.php
===================================================================
--- modules/custom/units/widgets/widget_tp.php
+++ modules/custom/units/widgets/widget_tp.php
@@ -26,8 +26,8 @@
 	 */
 	function ItemEditLink($params)
 	{
+		/** @var kDBList $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBList */
 
 		$edit_template = $this->Application->getUnitOption($this->Prefix, 'AdminTemplatePath') . '/' . $this->Application->getUnitOption($this->Prefix, 'AdminTemplatePrefix') . 'edit';
 
@@ -53,8 +53,8 @@
 	 */
 	protected function ItemLink($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$params['pass'] = 'm,' . $this->Prefix;
 		$params[$object->Prefix . '_id'] = $object->GetID();
Index: modules/in-bulletin/install.php
===================================================================
--- modules/in-bulletin/install.php
+++ modules/in-bulletin/install.php
@@ -32,8 +32,8 @@
 }
 else {
 	// install, using installation wizard
+	/** @var kInstallToolkit $toolkit */
 	$toolkit =& $this->toolkit;
-	/* @var $toolkit kInstallToolkit */
 }
 
 $application =& kApplication::Instance();
Index: modules/in-bulletin/units/helpers/post_helper.php
===================================================================
--- modules/in-bulletin/units/helpers/post_helper.php
+++ modules/in-bulletin/units/helpers/post_helper.php
@@ -183,8 +183,8 @@
 		function replacePostQuote($text, $render_as)
 		{
 			if (preg_match('/\[quote id=([\d]+)\](.*)\[\/quote\]/s', $text, $regs)) {
+				/** @var kDBItem $post */
 				$post = $this->Application->recallObject('bb-post.-item', null, Array ('skip_autoload' => true));
-				/* @var $post kDBItem */
 
 				$post->Load($regs[1]);
 
@@ -430,8 +430,8 @@
 				throw new InvalidArgumentException('Unknown subscription manager "' . $name . '"');
 			}
 
+			/** @var kSubscriptionManager $manager */
 			$manager = $this->Application->makeClass('kSubscriptionManager');
-			/* @var $manager kSubscriptionManager */
 
 			$fields_hash = Array ();
 
Index: modules/in-bulletin/units/poll_comments/poll_comment_eh.php
===================================================================
--- modules/in-bulletin/units/poll_comments/poll_comment_eh.php
+++ modules/in-bulletin/units/poll_comments/poll_comment_eh.php
@@ -71,8 +71,8 @@
 				return;
 			}
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			$object->addFilter('comment_status', '%1$s.Status = ' . STATUS_ACTIVE);
 		}
@@ -87,15 +87,15 @@
 		protected function OnBeforeItemCreate(kEvent $event)
 		{
 			if ( !$this->Application->isAdmin ) {
+				/** @var kDBItem $object */
 				$object = $event->getObject();
-				/* @var $object kDBItem */
 
 				$parent_info = $object->getLinkedInfo($event->Special);
 				$poll_id = $parent_info['ParentId'];
 
 				if ( $poll_id ) {
+					/** @var SpamHelper $spam_helper */
 					$spam_helper = $this->Application->recallObject('SpamHelper');
-					/* @var $spam_helper SpamHelper */
 
 					$spam_helper->InitHelper($poll_id, 'PollComment', 0); // ResourceId used for SpamControl only
 
@@ -143,8 +143,8 @@
 		 */
 		protected function OnCreateAjax(kEvent $event)
 		{
+			/** @var AjaxFormHelper $ajax_form_helper */
 			$ajax_form_helper = $this->Application->recallObject('AjaxFormHelper');
-			/* @var $ajax_form_helper AjaxFormHelper */
 
 			$ajax_form_helper->transitEvent($event, 'OnCreate');
 		}
@@ -161,11 +161,11 @@
 			parent::OnAfterItemCreate($event);
 
 			if ( !$this->Application->isAdminUser ) {
+				/** @var SpamHelper $spam_helper */
 				$spam_helper = $this->Application->recallObject('SpamHelper');
-				/* @var $spam_helper SpamHelper */
 
+				/** @var kDBItem $object */
 				$object = $event->getObject();
-				/* @var $object kDBItem */
 
 				$comment_settings = 'poll_CommentDelay_Value:poll_CommentDelay_Interval';
 				$spam_helper->InitHelper($object->GetDBField('PollId'), 'PollComment', $comment_settings);
Index: modules/in-bulletin/units/polls/poll_eh.php
===================================================================
--- modules/in-bulletin/units/polls/poll_eh.php
+++ modules/in-bulletin/units/polls/poll_eh.php
@@ -52,8 +52,8 @@
 				return;
 			}
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			$object->addFilter('poll_range_filter', '(%1$s.StartDate <= ' . adodb_mktime() . ') AND (%1$s.EndDate >= ' . adodb_mktime() . ' OR EndDate IS NULL)');
 			$object->addFilter('poll_status', '(%1$s.Status = ' . STATUS_ACTIVE . ')');
@@ -66,8 +66,8 @@
 		 */
 		function OnResetVotes($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$sql = 'DELETE FROM '.TABLE_PREFIX.'PollsStatistics
 					WHERE '.$object->IDField.' = '.$object->GetID();
@@ -93,8 +93,8 @@
 		{
 			parent::OnBeforeItemCreate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$object->SetDBField('ResourceId', $this->Application->NextResourceId());
 		}
@@ -106,8 +106,8 @@
 		 */
 		function OnMakeVote($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$poll_answer_id = $this->Application->GetVar('option_id');
 
@@ -161,11 +161,11 @@
 		{
 			parent::OnAfterItemDelete($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$sql = 'DELETE FROM ' . TABLE_PREFIX . 'PollsStatistics
 					WHERE PollId = ' . $object->GetID();
 			$this->Conn->Query($sql);
 		}
 	}
\ No newline at end of file
Index: modules/in-bulletin/units/polls/poll_tp.php
===================================================================
--- modules/in-bulletin/units/polls/poll_tp.php
+++ modules/in-bulletin/units/polls/poll_tp.php
@@ -24,8 +24,8 @@
 		 */
 		function HasVoted($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			if ( !$object->GetDBField('AllowMultipleVotings') ) {
 				$where_clause = Array (
@@ -52,11 +52,11 @@
 		 */
 		function HasCommented($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
+			/** @var SpamHelper $spam_helper */
 			$spam_helper = $this->Application->recallObject('SpamHelper');
-			/* @var $spam_helper SpamHelper */
 
 			$spam_helper->InitHelper($object->GetID(), 'PollComment', 0); // PollId used for SpamControl only
 
Index: modules/in-bulletin/units/posts/post_eh.php
===================================================================
--- modules/in-bulletin/units/posts/post_eh.php
+++ modules/in-bulletin/units/posts/post_eh.php
@@ -45,8 +45,8 @@
 		{
 			parent::OnBeforeItemCreate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$user_id = $this->Application->RecallVar('user_id');
 
@@ -68,8 +68,8 @@
 			$object->SetDBField('PosterAlias', $this->Conn->GetOne($sql));
 
 			// set post options
+			/** @var PostHelper $post_helper */
 			$post_helper = $this->Application->recallObject('PostHelper');
-			/* @var $post_helper PostHelper */
 
 			$options_map = $post_helper->getOptionsMap();
 			$post_options = $object->GetDBField('Options');
@@ -91,8 +91,8 @@
 		 */
 		function checkPostPermission($event, $permissions)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$sql = 'SELECT ci.CategoryId, p.CreatedById
 					FROM '.$object->TableName.' p
@@ -101,8 +101,8 @@
 					WHERE p.'.$object->IDField.' = '.$object->GetID();
 			$post_info = $this->Conn->GetRow($sql);
 
+			/** @var kPermissionsHelper $perm_helper */
 			$perm_helper = $this->Application->recallObject('PermissionsHelper');
-			/* @var $perm_helper kPermissionsHelper */
 
 			$is_owner = $post_info['CreatedById'] == $this->Application->RecallVar('user_id');
 			$params['permissions'] = 'TOPIC.REPLY.MODIFY|TOPIC.REPLY.OWNER.MODIFY';
@@ -122,8 +122,8 @@
 		{
 			parent::OnBeforeItemUpdate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$perm_status = $this->checkPostPermission($event, 'TOPIC.REPLY.MODIFY|TOPIC.REPLY.OWNER.MODIFY');
 			if ( !$perm_status ) {
@@ -131,8 +131,8 @@
 				return;
 			}
 
+			/** @var PostHelper $post_helper */
 			$post_helper = $this->Application->recallObject('PostHelper');
-			/* @var $post_helper PostHelper */
 
 			$options_map = $post_helper->getOptionsMap();
 			$post_options = $object->GetDBField('Options');
@@ -168,8 +168,8 @@
 		{
 			parent::OnBeforeItemDelete($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( !$this->checkPostPermission($event, 'TOPIC.REPLY.OWNER.DELETE|TOPIC.REPLY.DELETE') ) {
 				$event->status = kEvent::erFAIL;
@@ -187,11 +187,11 @@
 		{
 			parent::OnAfterItemLoad($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
+			/** @var PostHelper $post_helper */
 			$post_helper = $this->Application->recallObject('PostHelper');
-			/* @var $post_helper PostHelper */
 
 			$options_map = $post_helper->getOptionsMap();
 			$post_options = $object->GetDBField('Options');
@@ -213,13 +213,13 @@
 		{
 			parent::OnAfterItemCreate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$parent_prefix = $this->Application->getUnitOption($event->Prefix, 'ParentPrefix');
 
+			/** @var kCatDBItem $main_object */
 			$main_object = $this->Application->recallObject($parent_prefix);
-			/* @var $main_object kCatDBItem */
 
 			if ( $this->Application->LoggedIn() ) {
 				// Update user posts counter.
@@ -227,8 +227,8 @@
 				$this->Application->StorePersistentVar('bb_posts', $user_posts + 1);
 			}
 
+			/** @var PostHelper $post_helper */
 			$post_helper = $this->Application->recallObject('PostHelper');
-			/* @var $post_helper PostHelper */
 
 			$category_id = $this->Application->GetVar('m_cat_id');
 			$post_helper->PropagateCategoryField($category_id, 'Modified', $object->GetDBField('CreatedOn'));
@@ -276,8 +276,8 @@
 		 */
 		function updateTopicInfo($event, &$main_object)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$main_object->SetDBField('Modified_date', $object->GetDBField('Modified'));
 			$main_object->SetDBField('Modified_time', $object->GetDBField('Modified'));
@@ -336,8 +336,8 @@
 		{
 			parent::OnAfterItemDelete($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$topic_id = $object->GetDBField('TopicId');
 			if ( !$topic_id ) {
@@ -345,8 +345,8 @@
 				return;
 			}
 
+			/** @var PostHelper $post_helper */
 			$post_helper = $this->Application->recallObject('PostHelper');
-			/* @var $post_helper PostHelper */
 
 			// update posts count in topic
 			$post_helper->updatePostCount($topic_id, -1);
@@ -358,8 +358,8 @@
 			$this->Conn->Query($sql);
 
 
+			/** @var kCatDBItem $main_object */
 			$main_object = $this->Application->recallObject('bb.-item', null, Array ('skip_autoload' => true));
-			/* @var $main_object kCatDBItem */
 
 			$main_object->Load($topic_id);
 
@@ -438,11 +438,11 @@
 			$reply_to = $this->Application->GetVar('reply_to');
 
 			if ( $reply_to > 0 ) {
+				/** @var kDBItem $object */
 				$object = $event->getObject();
-				/* @var $object kDBItem */
 
+				/** @var kDBItem $source_post */
 				$source_post = $this->Application->recallObject($event->Prefix . '.-item', null, Array ('skip_autoload' => true));
-				/* @var $source_post kDBItem */
 
 				$source_post->Load($reply_to);
 
Index: modules/in-bulletin/units/posts/post_tp.php
===================================================================
--- modules/in-bulletin/units/posts/post_tp.php
+++ modules/in-bulletin/units/posts/post_tp.php
@@ -19,8 +19,9 @@
 		function ListPosts($params)
 		{
 			$parent_prefix = $this->Application->getUnitOption($this->Prefix, 'ParentPrefix');
+
+			/** @var kCatDBItem $main_object */
 			$main_object = $this->Application->recallObject($parent_prefix);
-			/* @var $main_object kCatDBItem */
 
 			if ($main_object->isLoaded()) {
 				$main_object->RegisterHit();
@@ -47,11 +48,11 @@
 		{
 			static $posters = null;
 
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
+			/** @var UsersItem $poster */
 			$poster = $this->Application->recallObject('u.poster', null, Array('skip_autoload' => true));
-			/* @var $poster UsersItem */
 
 			if ( !isset($posters) ) {
 				$poster_ids = array_unique( $object->GetCol('CreatedById') );
@@ -117,8 +118,8 @@
 		{
 			$object = $this->getObject($params);
 
+			/** @var PostHelper $post_helper */
 			$post_helper = $this->Application->recallObject('PostHelper');
-			/* @var $post_helper PostHelper */
 
 			return $post_helper->CensorText( $object->GetDBField('Subject') );
 		}
@@ -127,8 +128,8 @@
 		{
 			$object = $this->getObject($params);
 
+			/** @var PostHelper $post_helper */
 			$post_helper = $this->Application->recallObject('PostHelper');
-			/* @var $post_helper PostHelper */
 
 			$body = $object->GetDBField('PostingText');
 
@@ -194,8 +195,8 @@
 		{
 			$object = $this->getObject($params);
 
+			/** @var PostHelper $post_helper */
 			$post_helper = $this->Application->recallObject('PostHelper');
-			/* @var $post_helper PostHelper */
 
 			$sub_blocks = Array (
 				'smileys' => $params['smiley_render_as'],
@@ -271,12 +272,13 @@
 				$category_path = $parent_item->isLoaded() ? $parent_item->GetDBField('ParentPath') : $this->Application->GetVar('m_cat_id');
 			}
 
+			/** @var kPermissionsHelper $perm_helper */
 			$perm_helper = $this->Application->recallObject('PermissionsHelper');
-			/* @var $perm_helper kPermissionsHelper */
 
 			$params['raise_warnings'] = 0;
+
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			// 1. category restriction
 			$params['cat_id'] = $category_path;
@@ -289,16 +291,16 @@
 
 		function CategoryItemCount($params)
 		{
+			/** @var kCountHelper $count_helper */
 			$count_helper = $this->Application->recallObject('CountHelper');
-			/* @var $count_helper kCountHelper */
 
 			return $count_helper->CategoryItemCount('bb', $params, 'SUM(Posts)'); //  - COUNT(TopicId)
 		}
 
 		function ItemCount($params)
 		{
+			/** @var kCountHelper $count_helper */
 			$count_helper = $this->Application->recallObject('CountHelper');
-			/* @var $count_helper kCountHelper */
 
 			$today_only = isset($params['today']) && $params['today'];
 			return $count_helper->ItemCount('bb', $today_only, 'SUM(Posts)'); // - COUNT(TopicId)
@@ -312,8 +314,8 @@
 		 */
 		function PageLink($params)
 		{
+			/** @var kDBList $object */
 			$object = $this->getObject($params);
-			/* @var kDBList */
 
 			$parent_info = $object->getLinkedInfo();
 			if ($parent_info['ParentId'] > 0) {
Index: modules/in-bulletin/units/private_message_body/private_message_body_eh.php
===================================================================
--- modules/in-bulletin/units/private_message_body/private_message_body_eh.php
+++ modules/in-bulletin/units/private_message_body/private_message_body_eh.php
@@ -27,12 +27,12 @@
 		{
 			parent::OnBeforeItemCreate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			// set post options
+			/** @var PostHelper $post_helper */
 			$post_helper = $this->Application->recallObject('PostHelper');
-			/* @var $post_helper PostHelper */
 
 			$options_map = $post_helper->getOptionsMap();
 			$post_options = $object->GetDBField('Options');
@@ -54,11 +54,11 @@
 		{
 			parent::OnBeforeItemDelete($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( $object->GetDBField('ReferenceCount') > 0 ) {
 				$event->status = kEvent::erFAIL;
 			}
 		}
 	}
\ No newline at end of file
Index: modules/in-bulletin/units/private_messages/private_message_eh.php
===================================================================
--- modules/in-bulletin/units/private_messages/private_message_eh.php
+++ modules/in-bulletin/units/private_messages/private_message_eh.php
@@ -55,8 +55,8 @@
 				$this->Application->SetVar('folder_id', $folder_id);
 			}
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			$user_id = $this->Application->RecallVar('user_id');
 
@@ -81,8 +81,8 @@
 		{
 			parent::OnBeforeItemCreate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( $object->GetDBField('FolderId') != PM_FOLDER_SENT ) {
 				// when creating "Inbox" message (from "Sent" message) don't reset folder & status
@@ -106,8 +106,8 @@
 		{
 			parent::OnAfterItemCreate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$this->Application->emailUser('PM.ADD', $object->GetDBField('ToId'));
 
@@ -118,8 +118,8 @@
 				return ;
 			}
 
+			/** @var kDBItem $message_body */
 			$message_body = $this->Application->recallObject($event->Prefix . '-body', null, Array ('skip_autoload' => true));
-			/* @var $message_body kDBItem */
 
 			// 1. create message body (for sender & recipient)
 			$copy_fields = Array ('Subject', 'Body', 'ShowSignatures', 'DisableSmileys', 'DisableBBCodes');
@@ -149,11 +149,11 @@
 		{
 			parent::OnAfterItemLoad($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
+			/** @var PostHelper $post_helper */
 			$post_helper = $this->Application->recallObject('PostHelper');
-			/* @var $post_helper PostHelper */
 
 			$options_map = $post_helper->getOptionsMap();
 			$post_options = $object->GetDBField('Options');
@@ -192,8 +192,8 @@
 		{
 			parent::OnBeforeItemDelete($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$user_id = $this->Application->RecallVar('user_id');
 			$owner_field = ($object->GetDBField('FolderId') == PM_FOLDER_INBOX) ? 'ToId' : 'FromId';
@@ -214,8 +214,8 @@
 		{
 	    	parent::OnAfterItemDelete($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$body_idfield = $this->Application->getUnitOption($event->Prefix . '-body', 'IDField');
 			$body_table = $this->Application->getUnitOption($event->Prefix . '-body', 'TableName');
@@ -257,8 +257,8 @@
 		 */
 		protected function checkItemStatus(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( !$object->isLoaded() ) {
 				return true;
@@ -282,13 +282,13 @@
 			$reply_to = $this->Application->GetVar('reply_to');
 			$user_id = $this->Application->GetVar('user_id');
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( $reply_to > 0 ) {
 				// reply to message
+				/** @var kDBItem $source_msg */
 				$source_msg = $this->Application->recallObject($event->Prefix . '.-item', null, Array ('skip_autoload' => true));
-				/* @var $source_msg kDBItem */
 
 				$source_msg->Load($reply_to);
 
Index: modules/in-bulletin/units/private_messages/private_message_tp.php
===================================================================
--- modules/in-bulletin/units/private_messages/private_message_tp.php
+++ modules/in-bulletin/units/private_messages/private_message_tp.php
@@ -24,8 +24,8 @@
 		 */
 		function IsNew($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			return $object->GetDBField('Status') < PM_STATUS_READ;
 		}
@@ -60,8 +60,8 @@
 
 		function MessageSubject($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			$params['field'] = 'Subject';
 			$value = $this->Field($params);
@@ -77,8 +77,8 @@
 		{
 			$object = $this->getObject($params);
 
+			/** @var PostHelper $post_helper */
 			$post_helper = $this->Application->recallObject('PostHelper');
-			/* @var $post_helper PostHelper */
 
 			// 2. parse post body
 			$sub_blocks = Array (
@@ -110,8 +110,8 @@
 		 */
 		function CanReplyMessage($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			return $object->GetDBField('FromId') != $this->Application->RecallVar('user_id');
 		}
@@ -123,8 +123,8 @@
 		 */
 		function MarkAsRead($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			if ($object->GetDBField('Status') < PM_STATUS_READ) {
 				$object->SetDBField('Status', PM_STATUS_READ);
Index: modules/in-bulletin/units/topics/topics_event_handler.php
===================================================================
--- modules/in-bulletin/units/topics/topics_event_handler.php
+++ modules/in-bulletin/units/topics/topics_event_handler.php
@@ -26,8 +26,8 @@
 		public function CheckPermission(kEvent $event)
 		{
 			if ( $event->Name == 'OnTopicLockToggle' ) {
+				/** @var kCatDBItem $object */
 				$object = $event->getObject();
-				/* @var $object kCatDBItem */
 
 				if ( !$object->isLoaded() ) {
 					$event->status = kEvent::erPERM_FAIL;
@@ -58,8 +58,8 @@
 		 */
 		function OnToggleLock($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$new_type = $object->GetDBField('TopicType') ? 0 : 1;
 			$object->SetDBField('TopicType', $new_type);
@@ -93,15 +93,15 @@
 
 			$this->cacheItemOwner($event, 'OwnerId', 'PostedBy');
 
+			/** @var kCatDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kCatDBItem */
 
 			if ( !$object->GetDBField('TodayDate') ) {
 				$object->SetDBField('TodayDate', adodb_date('Y-m-d'));
 			}
 
+			/** @var PostHelper $post_helper */
 			$post_helper = $this->Application->recallObject('PostHelper');
-			/* @var $post_helper PostHelper */
 
 			$object->SetDBField('TopicText', $post_helper->CensorText($object->GetDBField('TopicText')));
 		}
@@ -122,11 +122,11 @@
 				return ;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
+			/** @var kDBItem $post */
 			$post = $this->Application->recallObject($event->Prefix . '-post', null, Array ('skip_autoload' => true));
-			/* @var $post kDBItem */
 
 			$post->SetDBField('Pending', $object->GetDBField('Status') == STATUS_ACTIVE ? 0 : 1);
 			$post->SetDBField('Subject', '');
@@ -156,12 +156,12 @@
 				return;
 			}
 
+			/** @var kCatDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kCatDBItem */
 
 			if ( $object->GetDBField('Posts') == 1 ) {
+				/** @var kDBItem $post */
 				$post = $this->Application->recallObject($event->Prefix . '-post', null, Array ('skip_autoload' => true));
-				/* @var $post kDBItem */
 
 				$main_status = $object->GetDBField('Status');
 				$post->Load($object->GetDBField('LastPostId'));
@@ -183,8 +183,8 @@
 		{
 			parent::OnAfterItemLoad($event);
 
+			/** @var kCatDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kCatDBItem */
 
 			if ( $object->GetDBField('Posts') > 0 || !$this->Application->isAdminUser ) {
 				$object->setRequired('PostingText', false);
@@ -198,8 +198,8 @@
 		 */
 		function OnTopicLockToggle($event)
 		{
+			/** @var kCatDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kCatDBItem */
 
 			$topic_type = $object->GetDBField('TopicType');
 			$object->SetDBField('TopicType', $topic_type == 1 ? 0 : 1);
@@ -267,8 +267,8 @@
 		 */
 		protected function OnToogleCategoryTopicsSubscribe(kEvent $event)
 		{
+			/** @var PostHelper $post_helper */
 			$post_helper = $this->Application->recallObject('PostHelper');
-			/* @var $post_helper PostHelper */
 
 			$manager = $post_helper->getSubscriptionManager('CategoryTopics');
 
@@ -289,11 +289,11 @@
 		 */
 		protected function OnToogleTopicPostsSubscribe(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
+			/** @var PostHelper $post_helper */
 			$post_helper = $this->Application->recallObject('PostHelper');
-			/* @var $post_helper PostHelper */
 
 			$manager = $post_helper->getSubscriptionManager('TopicPosts', Array ($object->GetID()));
 
Index: modules/in-bulletin/units/topics/topics_tag_processor.php
===================================================================
--- modules/in-bulletin/units/topics/topics_tag_processor.php
+++ modules/in-bulletin/units/topics/topics_tag_processor.php
@@ -88,8 +88,8 @@
 			static $subscribed = null;
 
 			if ( !isset($subscribed) ) {
+				/** @var PostHelper $post_helper */
 				$post_helper = $this->Application->recallObject('PostHelper');
-				/* @var $post_helper PostHelper */
 
 				$subscribed = $post_helper->getSubscriptionManager('CategoryTopics')->subscribed();
 			}
@@ -108,11 +108,11 @@
 			static $subscribed = null;
 
 			if ( !isset($subscribed) ) {
+				/** @var kDBItem $object */
 				$object = $this->getObject($params);
-				/* @var $object kDBItem */
 
+				/** @var PostHelper $post_helper */
 				$post_helper = $this->Application->recallObject('PostHelper');
-				/* @var $post_helper PostHelper */
 
 				$subscribed = $post_helper->getSubscriptionManager('TopicPosts', Array ($object->GetID()))->subscribed();
 			}
Index: modules/in-commerce/install.php
===================================================================
--- modules/in-commerce/install.php
+++ modules/in-commerce/install.php
@@ -31,8 +31,8 @@
 }
 else {
 	// install, using installation wizard
+	/** @var kInstallToolkit $toolkit */
 	$toolkit =& $this->toolkit;
-	/* @var $toolkit kInstallToolkit */
 }
 
 $application =& kApplication::Instance();
Index: modules/in-commerce/install/upgrades.php
===================================================================
--- modules/in-commerce/install/upgrades.php
+++ modules/in-commerce/install/upgrades.php
@@ -174,8 +174,8 @@
 				$this->Conn->Query($sql);
 			}
 
+			/** @var kMultiLanguageHelper $ml_helper */
 			$ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
-			/* @var $ml_helper kMultiLanguageHelper */
 
 			$ml_helper->createFields('pt');
 
Index: modules/in-commerce/units/addresses/addresses_event_handler.php
===================================================================
--- modules/in-commerce/units/addresses/addresses_event_handler.php
+++ modules/in-commerce/units/addresses/addresses_event_handler.php
@@ -64,8 +64,8 @@
 				return;
 			}
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			$user_id = $this->Application->RecallVar('user_id');
 			$object->addFilter('myitems_user', '%1$s.PortalUserId = ' . $user_id);
@@ -99,8 +99,8 @@
 		{
 			parent::OnBeforeItemUpdate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( !$object->isLoaded() || !$this->checkItemStatus($event) ) {
 				// not trivially loaded object OR not current user address
@@ -108,8 +108,8 @@
 				return ;
 			}
 
+			/** @var kCountryStatesHelper $cs_helper */
 			$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-			/* @var $cs_helper kCountryStatesHelper */
 
 			$cs_helper->CheckStateField($event, 'State', 'Country');
 			$cs_helper->PopulateStates($event, 'State', 'Country');
@@ -178,8 +178,8 @@
 		{
 			parent::OnAfterItemLoad($event);
 
+			/** @var kCountryStatesHelper $cs_helper */
 			$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-			/* @var $cs_helper kCountryStatesHelper */
 
 			$cs_helper->PopulateStates($event, 'State', 'Country');
 		}
@@ -193,8 +193,8 @@
 		 */
 		protected function OnUpdateProfileAddress(kEvent $event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject(Array ('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			if ( !$this->Application->isAdmin ) {
 				$address_id = $this->getOrderAddressId();
@@ -223,8 +223,8 @@
 				'Country'		=>	1,
 			);
 
+			/** @var UsersItem $user */
 			$user = $this->Application->recallObject($this->Application->isAdmin ? 'u' : 'u.current');
-			/* @var $user UsersItem */
 
 			$user->setName( $object->GetDBField('To') );
 
@@ -268,13 +268,13 @@
 		 */
 		protected function OnUpdateUserProfile(kEvent $event)
 		{
+			/** @var UsersItem $user */
 			$user = $event->MasterEvent->getObject();
-			/* @var $user UsersItem */
 
 			$load_keys = Array ('PortalUserId' => $user->GetID(), 'IsProfileAddress' => 1);
 
+			/** @var kDBItem $object */
 			$object = $this->Application->recallObject($event->Prefix . '.-item', null, Array ('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			$object->Load($load_keys);
 
@@ -338,8 +338,8 @@
 				return false;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( !$object->isLoaded() ) {
 				return true;
@@ -366,15 +366,15 @@
 				return ;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( !$this->Application->isAdmin ) {
 				$object->SetDBField('PortalUserId', $this->Application->RecallVar('user_id'));
 			}
 
+			/** @var kCountryStatesHelper $cs_helper */
 			$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-			/* @var $cs_helper kCountryStatesHelper */
 
 			$cs_helper->CheckStateField($event, 'State', 'Country');
 			$cs_helper->PopulateStates($event, 'State', 'Country');
@@ -395,8 +395,8 @@
 		{
 			parent::OnBeforeItemDelete($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( !$object->isLoaded() || !$this->checkItemStatus($event) ) {
 				// not trivially loaded object OR not current user address
@@ -416,8 +416,8 @@
 		{
 			parent::OnAfterConfigRead($event);
 
+			/** @var SiteHelper $site_helper */
 			$site_helper = $this->Application->recallObject('SiteHelper');
-			/* @var $site_helper SiteHelper */
 
 			$fields = $this->Application->getUnitOption($event->Prefix, 'Fields');
 			$fields['Country']['default'] = $site_helper->getDefaultCountry('Shipping');
Index: modules/in-commerce/units/addresses/addresses_tag_processor.php
===================================================================
--- modules/in-commerce/units/addresses/addresses_tag_processor.php
+++ modules/in-commerce/units/addresses/addresses_tag_processor.php
@@ -35,8 +35,8 @@
 		 */
 		protected function PrintLocation($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			$ret = '';
 			$fields = Array ('City', 'State', 'Zip', 'Country');
@@ -76,8 +76,8 @@
 
 		function IsProfileAddress($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			return $object->GetDBField('IsProfileAddress');
 		}
Index: modules/in-commerce/units/affiliate_payment_types/affiliate_payment_types_event_handler.php
===================================================================
--- modules/in-commerce/units/affiliate_payment_types/affiliate_payment_types_event_handler.php
+++ modules/in-commerce/units/affiliate_payment_types/affiliate_payment_types_event_handler.php
@@ -28,8 +28,8 @@
 			parent::SetCustomQuery($event);
 
 			if ( !$this->Application->isAdmin ) {
+				/** @var kDBList $object */
 				$object = $event->getObject();
-				/* @var $object kDBList */
 
 				$object->addFilter('active', '%1$s.Status = ' . STATUS_ACTIVE);
 			}
@@ -42,8 +42,8 @@
 		 */
 		function OnSetPrimary($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$object->SetDBField('IsPrimary', 1);
 			$object->Update();
@@ -85,8 +85,8 @@
 		 */
 		function itemChanged($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( $object->GetDBField('IsPrimary') && $object->Validate() ) {
 				$sql = 'UPDATE ' . $this->Application->getUnitOption($event->Prefix, 'TableName') . '
Index: modules/in-commerce/units/affiliate_payment_types/affiliate_payment_types_tp.php
===================================================================
--- modules/in-commerce/units/affiliate_payment_types/affiliate_payment_types_tp.php
+++ modules/in-commerce/units/affiliate_payment_types/affiliate_payment_types_tp.php
@@ -27,14 +27,14 @@
 	{
 		static $checked = false;
 
+		/** @var kDBItem $affiliate */
 		$affiliate = $this->Application->recallObject( $params['prefix'] );
-		/* @var $affiliate kDBItem */
 
 		$payment_type = $affiliate->GetDBField( $params['field'] );
 
 		if ( $payment_type ) {
+			/** @var kDBList $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBList */
 
 			return $payment_type == $object->GetID();
 		}
Index: modules/in-commerce/units/affiliate_payments/affiliate_payments_event_handler.php
===================================================================
--- modules/in-commerce/units/affiliate_payments/affiliate_payments_event_handler.php
+++ modules/in-commerce/units/affiliate_payments/affiliate_payments_event_handler.php
@@ -33,8 +33,8 @@
 
 			$parent_info = $object->getLinkedInfo();
 
+			/** @var kDBItem $parent_object */
 			$parent_object = $this->Application->recallObject($parent_info['ParentPrefix']);
-			/* @var $parent_object kDBItem */
 
 			$options = $object->GetFieldOptions('PaymentTypeId');
 
@@ -61,11 +61,11 @@
 		{
 			parent::OnNew($event);
 
+			/** @var kDBItem $affiliate */
 			$affiliate = $this->Application->recallObject('affil');
-			/* @var $affiliate kDBItem */
 
+			/** @var kDBItem $object */
 			$object = $event->getObject(Array ('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			$object->SetDBField('Amount', $affiliate->GetDBField('AmountToPay'));
 			$object->SetDBField('AffiliateId', $affiliate->GetID());
@@ -82,8 +82,8 @@
 		{
 			parent::OnAfterItemCreate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$parent_info = $object->getLinkedInfo();
 
@@ -92,8 +92,8 @@
 					WHERE ' . $parent_info['ParentTableKey'] . ' = ' . $parent_info['ParentId'];
 			$payment_date = $this->Conn->GetOne($sql);
 
+			/** @var kDBItem $affiliate */
 			$affiliate = $this->Application->recallObject('affil');
-			/* @var $affiliate kDBItem */
 
 			$affiliate->SetDBField('AmountToPay', $affiliate->GetDBField('AmountToPay') - $object->GetDBField('Amount'));
 			$affiliate->SetDBField('LastPaymentDate_date', $payment_date);
@@ -113,8 +113,8 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			if ( $event->Special == 'log' ) {
 				$object->removeFilter('parent_filter');
Index: modules/in-commerce/units/affiliate_plans/affiliate_plans_event_handler.php
===================================================================
--- modules/in-commerce/units/affiliate_plans/affiliate_plans_event_handler.php
+++ modules/in-commerce/units/affiliate_plans/affiliate_plans_event_handler.php
@@ -28,8 +28,8 @@
 			parent::SetCustomQuery($event);
 
 			if ( $event->Special == 'active' ) {
+				/** @var kDBList $object */
 				$object = $event->getObject();
-				/* @var $object kDBList */
 
 				$object->addFilter('active', '%1$s.Enabled = 1');
 			}
@@ -82,8 +82,8 @@
 		 */
 		function itemChanged($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$live_table = $this->Application->getUnitOption($event->Prefix, 'TableName');
 			$plans_count = $this->Conn->GetOne('SELECT COUNT(*) FROM ' . $live_table);
Index: modules/in-commerce/units/affiliate_plans_brackets/affiliate_plans_brackets_event_handler.php
===================================================================
--- modules/in-commerce/units/affiliate_plans_brackets/affiliate_plans_brackets_event_handler.php
+++ modules/in-commerce/units/affiliate_plans_brackets/affiliate_plans_brackets_event_handler.php
@@ -94,14 +94,14 @@
 		{
 			parent::OnBeforeItemUpdate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$linked_info = $object->getLinkedInfo();
 			$object->SetDBField($linked_info['ParentTableKey'], $linked_info['ParentId']);
 
+			/** @var kBracketsHelper $brackets_helper */
 			$brackets_helper = $this->Application->recallObject('BracketsHelper');
-			/* @var $brackets_helper kBracketsHelper */
 
 			$brackets_helper->InitHelper('FromAmount', 'ToAmount', Array ('Percent' => ''));
 			$brackets_helper->replaceInfinity($event);
@@ -114,10 +114,10 @@
 		 */
 		function OnPreSaveBrackets($event)
 		{
+			/** @var kBracketsHelper $brackets_helper */
 			$brackets_helper = $this->Application->recallObject('BracketsHelper');
-			/* @var $brackets_helper kBracketsHelper */
 
 			$brackets_helper->InitHelper('FromAmount', 'ToAmount', Array('Percent' => '') );
 			$brackets_helper->OnPreSaveBrackets($event);
 		}
 	}
\ No newline at end of file
Index: modules/in-commerce/units/affiliate_plans_brackets/affiliate_plans_brackets_tag_processor.php
===================================================================
--- modules/in-commerce/units/affiliate_plans_brackets/affiliate_plans_brackets_tag_processor.php
+++ modules/in-commerce/units/affiliate_plans_brackets/affiliate_plans_brackets_tag_processor.php
@@ -31,8 +31,8 @@
 
 		function ShowPricingForm($params)
 		{
+			/** @var kDBItem $br_object */
 			$br_object = $this->Application->recallObject( $this->getPrefixSpecial() );
-			/* @var $br_object kDBItem */
 
 			$br_data = $this->Application->GetVar( $this->getPrefixSpecial(true) );
 			$linked_info = $br_object->getLinkedInfo($this->Special);
Index: modules/in-commerce/units/affiliate_plans_items/affiliate_plans_items_tag_processor.php
===================================================================
--- modules/in-commerce/units/affiliate_plans_items/affiliate_plans_items_tag_processor.php
+++ modules/in-commerce/units/affiliate_plans_items/affiliate_plans_items_tag_processor.php
@@ -31,8 +31,8 @@
 
 		function ItemIcon($params)
 		{
+			/** @var kDBList $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBList */
 
 			if ($object->GetDBField('ItemType') == 2) {
 				$cat_object = $this->Application->recallObject('c');
Index: modules/in-commerce/units/affiliates/affiliates_event_handler.php
===================================================================
--- modules/in-commerce/units/affiliates/affiliates_event_handler.php
+++ modules/in-commerce/units/affiliates/affiliates_event_handler.php
@@ -121,8 +121,8 @@
 		{
 			parent::OnBeforeItemCreate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$object->SetDBField('AffiliateCode', $this->generateAffiliateCode($event));
 
@@ -147,8 +147,8 @@
 			parent::OnBeforeItemUpdate($event);
 
 			if ( !$this->Application->isAdmin ) {
+				/** @var kDBItem $object */
 				$object = $event->getObject();
-				/* @var $object kDBItem */
 
 				$object->SetDBField('PortalUserId', $object->GetOriginalField('PortalUserId'));
 
@@ -170,8 +170,8 @@
 				return;
 			}
 
+			/** @var kDBItem $object */
 			$object = $this->Application->recallObject($event->Prefix . '.-item', null, Array ('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			$affiliate_storage_method = $this->Application->ConfigValue('Comm_AffiliateStorageMethod');
 
@@ -186,8 +186,8 @@
 
 			if ( $object->isLoaded() && ($object->GetDBField('Status') == 1) ) {
 				// user is found with such email
+				/** @var UsersItem $affiliate_user */
 				$affiliate_user = $this->Application->recallObject('u.affiliate', null, Array ('skip_autoload' => true));
-				/* @var $affiliate_user UsersItem */
 
 				$affiliate_user->Load($object->GetDBField('PortalUserId'));
 
@@ -225,20 +225,20 @@
 		 */
 		function OnOrderApprove($event)
 		{
+			/** @var OrdersItem $order */
 			$order = $this->Application->recallObject($event->getEventParam('Order_PrefixSpecial'));
-			/* @var $order OrdersItem */
 
 			$affiliate_id = $order->GetDBField('AffiliateId');
 			if ( !$affiliate_id ) {
 				return false;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject(Array ('ship_autoload' => true));
-			/* @var $object kDBItem */
 
 			if ( $object->Load($affiliate_id) ) {
+				/** @var kDBItem $affiliate_plan */
 				$affiliate_plan = $this->Application->recallObject('ap', null, Array ('skip_autoload' => true));
-				/* @var $affiliate_plan kDBItem */
 
 				$affiliate_plan->Load($object->GetDBField('AffiliatePlanId'));
 
@@ -309,8 +309,8 @@
 				return;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject( Array('form_name' => 'registration', 'skip_autoload' => true) );
-			/* @var $object kDBItem */
 
 			$object->setID(0);
 			$field_values = $this->getSubmittedFields($event);
@@ -318,8 +318,8 @@
 			$event->setEventParam('form_data', $field_values);
 
 			if ( !$object->Validate() ) {
+				/** @var kDBItem $user */
 				$user = $event->MasterEvent->getObject();
-				/* @var $user kDBItem */
 
 				$user->Validate();
 
@@ -338,11 +338,11 @@
 				return;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
+			/** @var UsersItem $user */
 			$user = $event->MasterEvent->getObject();
-			/* @var $user UsersItem */
 
 			$object->SetDBField('PortalUserId', $user->GetID());
 
@@ -374,8 +374,8 @@
 		 */
 		function OnBecomeAffiliate($event)
 		{
+			/** @var UsersItem $object */
 			$object = $event->getObject( Array('form_name' => 'registration', 'skip_autoload' => true) );
-			/* @var $object UsersItem */
 
 			$event->CallSubEvent('OnCreate');
 
@@ -402,8 +402,8 @@
 			$event->CallSubEvent('OnUpdate');
 
 			if ( $event->status == kEvent::erSUCCESS ) {
+				/** @var kDBItem $object */
 				$object = $event->getObject();
-				/* @var $object kDBItem */
 
 				$this->Application->emailUser('AFFILIATE.PAYMENT.TYPE.CHANGED', $object->GetDBField('PortalUserId'));
 				$this->Application->emailAdmin('AFFILIATE.PAYMENT.TYPE.CHANGED');
@@ -429,8 +429,8 @@
 		{
 			parent::OnBeforeDeleteFromLive($event);
 
+			/** @var kDBItem $payment_object */
 			$payment_object = $this->Application->recallObject('apayments', 'apayments', Array ('skip_autoload' => true));
-			/* @var $payment_object kDBItem */
 
 			$id = $event->getEventParam('id');
 			$ap_table = $this->Application->getUnitOption('apayments', 'TableName');
@@ -453,8 +453,8 @@
 				$this->Application->emailAdmin('AFFILIATE.PAYMENT');
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$passed_id = $event->getEventParam('id');
 
@@ -586,8 +586,8 @@
 				return;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject(Array ('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			$ids = $this->StoreSelectedIDs($event);
 
@@ -647,8 +647,8 @@
 				return true;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( !$object->isLoaded() ) {
 				return true;
Index: modules/in-commerce/units/affiliates/affiliates_tag_processor.php
===================================================================
--- modules/in-commerce/units/affiliates/affiliates_tag_processor.php
+++ modules/in-commerce/units/affiliates/affiliates_tag_processor.php
@@ -93,8 +93,8 @@
 		 */
 		protected function User_IsAffiliate($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->Application->recallObject($this->Prefix . '.user');
-			/* @var $object kDBItem */
 
 			return $object->isLoaded();
 		}
@@ -108,8 +108,8 @@
 		 */
 		protected function User_AffiliateIsActive($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->Application->recallObject($this->Prefix . '.user');
-			/* @var $object kDBItem */
 
 			return $object->isLoaded() && ($object->GetDBField('Status') == STATUS_ACTIVE);
 		}
@@ -122,8 +122,8 @@
 		 */
 		function UserLink($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			$user_id = $object->GetDBField('PortalUserId');
 
@@ -149,8 +149,8 @@
 
 		function IsAffiliateOrRegisterAsAffiliateAllowed($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->Application->recallObject($this->Prefix . '.user');
-			/* @var $object kDBItem */
 
 			return $this->Application->ConfigValue('Comm_RegisterAsAffiliate') || $object->isLoaded() ? 1 : 0;
 		}
Index: modules/in-commerce/units/brackets/brackets_event_handler.php
===================================================================
--- modules/in-commerce/units/brackets/brackets_event_handler.php
+++ modules/in-commerce/units/brackets/brackets_event_handler.php
@@ -51,17 +51,17 @@
 			return;
 		}
 
+		/** @var kDBItem $shipping_object */
 		$shipping_object = $this->Application->recallObject('s');
-		/* @var $shipping_object kDBItem */
 
+		/** @var LanguagesItem $lang_object */
 		$lang_object = $this->Application->recallObject('lang.current');
-		/* @var $lang_object LanguagesItem */
 
 		if ( $lang_object->GetDBField('UnitSystem') == 2 && $shipping_object->GetDBField('Type') == 1 ) {
 			$fields = Array ('Start', 'End');
 
+			/** @var kUnitFormatter $formatter */
 			$formatter = $this->Application->recallObject('kUnitFormatter');
-			/* @var $formatter kUnitFormatter */
 
 			foreach ($fields as $field) {
 				$object->SetFieldOption($field, 'formatter', 'kUnitFormatter');
@@ -74,11 +74,11 @@
 
 	function prepareBrackets($event)
 	{
+		/** @var LanguagesItem $lang_object */
 		$lang_object = $this->Application->recallObject('lang.current');
-		/* @var $lang_object LanguagesItem */
 
+		/** @var kDBItem $shipping_object */
 		$shipping_object = $this->Application->recallObject('s');
-		/* @var $shipping_object kDBItem */
 
 		if ( $lang_object->GetDBField('UnitSystem') != 2 || $shipping_object->GetDBField('Type') != 1 ) {
 			return;
@@ -158,8 +158,8 @@
 	 */
 	protected function &getHelper($event, $event_readonly = false)
 	{
+		/** @var kDBItem $shipping_object */
 		$shipping_object = $this->Application->recallObject('s');
-		/* @var $shipping_object kDBItem */
 
 		$default_start = $shipping_object->GetDBField('Type') == 1 ? 0 : 1;
 
@@ -168,8 +168,8 @@
 			$event->redirect = false;
 		}
 
+		/** @var kBracketsHelper $brackets_helper */
 		$brackets_helper = $this->Application->recallObject('BracketsHelper');
-		/* @var $brackets_helper kBracketsHelper */
 
 		$brackets_helper->InitHelper('Start', 'End', Array (), $default_start);
 
@@ -187,8 +187,8 @@
 	{
 		parent::OnBeforeItemUpdate($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$linked_info = $object->getLinkedInfo();
 		$object->SetDBField($linked_info['ParentTableKey'], $linked_info['ParentId']);
@@ -204,11 +204,11 @@
 	 */
 	function OnPreSaveBrackets($event)
 	{
+		/** @var LanguagesItem $lang_object */
 		$lang_object = $this->Application->recallObject('lang.current');
-		/* @var $lang_object LanguagesItem */
 
+		/** @var kDBItem $shipping_object */
 		$shipping_object = $this->Application->recallObject('s');
-		/* @var $shipping_object kDBItem */
 
 		if ( $lang_object->GetDBField('UnitSystem') == 2 && $shipping_object->GetDBField('Type') == 1 ) {
 			$item_info = $this->Application->GetVar($event->getPrefixSpecial());
Index: modules/in-commerce/units/brackets/brackets_tag_processor.php
===================================================================
--- modules/in-commerce/units/brackets/brackets_tag_processor.php
+++ modules/in-commerce/units/brackets/brackets_tag_processor.php
@@ -29,13 +29,13 @@
 
 	function ShowBracketsForm($params)
 	{
+		/** @var kDBItem $shipping_object */
 		$shipping_object = $this->Application->recallObject('s');
-		/* @var $shipping_object kDBItem */
 
 		$default_start = ($shipping_object->GetDBField('Type') == 1) ? 0 : 1;
 
+		/** @var kBracketsHelper $brackets_helper */
 		$brackets_helper = $this->Application->recallObject('BracketsHelper');
-		/* @var $brackets_helper kBracketsHelper */
 
 		$brackets_helper->InitHelper('Start', 'End', Array(), $default_start );
 
@@ -51,8 +51,8 @@
 
 			usort($brackets, Array(&$brackets_helper, 'compareBrackets'));
 
+			/** @var kDBItem $dummy */
 			$dummy = $this->Application->recallObject($this->Prefix.'.-dummy', null, array('skip_autoload' => true));
-			/* @var $dummy kDBItem */
 
 			// performs number formatting
 			foreach($brackets as $id => $values)
Index: modules/in-commerce/units/coupon_items/coupon_items_tag_processor.php
===================================================================
--- modules/in-commerce/units/coupon_items/coupon_items_tag_processor.php
+++ modules/in-commerce/units/coupon_items/coupon_items_tag_processor.php
@@ -31,8 +31,8 @@
 
 	function ItemIcon($params)
 	{
+		/** @var kDBList $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBList */
 
 		if ($object->GetDBField('ItemType') == 2) {
 			$cat_object = $this->Application->recallObject('c');
Index: modules/in-commerce/units/coupons/coupons_event_handler.php
===================================================================
--- modules/in-commerce/units/coupons/coupons_event_handler.php
+++ modules/in-commerce/units/coupons/coupons_event_handler.php
@@ -46,8 +46,8 @@
 
 		$event->CallSubEvent('OnNew');
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$this->setCloningRequired($object);
 		$clone_count = $this->Application->RecallVar('CoupLastCloneCount');
@@ -75,8 +75,8 @@
 	{
 		parent::OnBeforeClone($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$this->SetNewCode($object);
 
@@ -96,8 +96,8 @@
 			return;
 		}
 
+		/** @var kDBItem $object */
 		$object = $event->getObject( Array ('skip_autoload' => true) );
-		/* @var $object kDBItem */
 
 		$this->setCloningRequired($object);
 
@@ -112,8 +112,8 @@
 			return ;
 		}
 
+		/** @var kTempTablesHandler $temp */
 		$temp = $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler');
-		/* @var $temp kTempTablesHandler */
 
 		$original_coupon_ids = $this->getSelectedIDs($event, true);
 		$clone_count = $object->GetDBField('CouponCount');
@@ -179,8 +179,8 @@
 	{
 		parent::OnPreCreate($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$exp_date = adodb_mktime();
 		$default_duration = $this->Application->ConfigValue('Comm_DefaultCouponDuration');
@@ -227,8 +227,8 @@
 	 */
 	function itemChanged($event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$object->SetDBField('Amount', abs($object->GetDBField('Amount')));
 	}
Index: modules/in-commerce/units/currencies/currencies_event_handler.php
===================================================================
--- modules/in-commerce/units/currencies/currencies_event_handler.php
+++ modules/in-commerce/units/currencies/currencies_event_handler.php
@@ -72,8 +72,8 @@
 			return;
 		}
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$object->SetDBField('IsPrimary', 1);
 		$object->Update();
@@ -90,8 +90,8 @@
 	{
 		parent::OnBeforeItemUpdate($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		if ( $object->GetDBField('IsPrimary') && $object->Validate() ) {
 			$sql = 'UPDATE ' . $this->Application->getUnitOption($this->Prefix, 'TableName') . '
@@ -124,8 +124,8 @@
 	{
 		parent::SetCustomQuery($event);
 
+		/** @var kDBList $object */
 		$object = $event->getObject();
-		/* @var $object kDBList */
 
 		if ( $event->Special == 'active' ) {
 			$object->addFilter('status_filter', '%1$s.Status = 1');
@@ -137,8 +137,8 @@
 
 		// site domain currency picker
 		if ( $event->Special == 'selected' || $event->Special == 'available' ) {
+			/** @var EditPickerHelper $edit_picker_helper */
 			$edit_picker_helper = $this->Application->recallObject('EditPickerHelper');
-			/* @var $edit_picker_helper EditPickerHelper */
 
 			$edit_picker_helper->applyFilter($event, 'Currencies');
 			$object->addFilter('status_filter', '%1$s.Status = ' . STATUS_ACTIVE);
@@ -208,8 +208,8 @@
 
 		$rates->GetRatesData();
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$iso = $object->GetDBField('ISO');
 		$rates->StoreRates($iso);
Index: modules/in-commerce/units/currencies/currencies_tag_processor.php
===================================================================
--- modules/in-commerce/units/currencies/currencies_tag_processor.php
+++ modules/in-commerce/units/currencies/currencies_tag_processor.php
@@ -62,8 +62,8 @@
 
 	function CurrencyLink($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$params['pass'] = 'm,curr';
 		$params['curr_event'] = 'OnChangeCurrency';
Index: modules/in-commerce/units/destinations/dst_event_handler.php
===================================================================
--- modules/in-commerce/units/destinations/dst_event_handler.php
+++ modules/in-commerce/units/destinations/dst_event_handler.php
@@ -24,8 +24,8 @@
 	 */
 	protected function OnCreate(kEvent $event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject(Array ('skip_autoload' => true));
-		/* @var $object kDBItem */
 
 		// creates multiple db records from single request (OnCreate event only creates 1 record)
 		$items_info = $this->Application->GetVar($event->getPrefixSpecial(true));
@@ -67,8 +67,8 @@
 			return;
 		}
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$events = $this->Application->GetVar('events');
 
@@ -76,8 +76,8 @@
 			$object->SetDBField('ShippingZoneId', $this->Application->GetVar('z_id'));
 		}
 
+		/** @var kDBItem $zone_object */
 		$zone_object = $this->Application->recallObject('z');
-		/* @var $zone_object kDBItem */
 
 		if ( $zone_object->GetDBField('Type') == 3 ) {
 			$object->SetDBField('StdDestId', $this->Application->GetVar('ZIPCountry'));
@@ -91,11 +91,11 @@
 	 */
 	function OnZoneUpdate($event) {
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
+		/** @var kDBItem $zone_object */
 		$zone_object = $this->Application->recallObject('z');
-		/* @var $zone_object kDBItem */
 
 		$zone_id = (int)$zone_object->GetID();
 		$zone_type = $zone_object->GetDBField('Type');
Index: modules/in-commerce/units/discount_items/discount_items_tag_processor.php
===================================================================
--- modules/in-commerce/units/discount_items/discount_items_tag_processor.php
+++ modules/in-commerce/units/discount_items/discount_items_tag_processor.php
@@ -31,8 +31,8 @@
 
 	function ItemIcon($params)
 	{
+		/** @var kDBList $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBList */
 
 		if ($object->GetDBField('ItemType') == 2) {
 			$cat_object = $this->Application->recallObject('c');
Index: modules/in-commerce/units/discounts/discounts_event_handler.php
===================================================================
--- modules/in-commerce/units/discounts/discounts_event_handler.php
+++ modules/in-commerce/units/discounts/discounts_event_handler.php
@@ -50,9 +50,9 @@
 	 */
 	function itemChanged($event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$object->SetDBField('Amount', abs($object->GetDBField('Amount')));
 	}
 }
\ No newline at end of file
Index: modules/in-commerce/units/downloads/download_helper.php
===================================================================
--- modules/in-commerce/units/downloads/download_helper.php
+++ modules/in-commerce/units/downloads/download_helper.php
@@ -25,8 +25,8 @@
 
 		function SendFile($file_id, $product_id)
 		{
+			/** @var kDBItem $file_object */
 			$file_object = $this->Application->recallObject('file', null, Array('skip_autoload' => true));
-			/* @var $file_object kDBItem */
 
 			$sql = $file_id ?
 						'SELECT FileId, FilePath, RealPath, MIMEType FROM '.$this->Application->getUnitOption('file', 'TableName').'
Index: modules/in-commerce/units/files/files_event_handler.php
===================================================================
--- modules/in-commerce/units/files/files_event_handler.php
+++ modules/in-commerce/units/files/files_event_handler.php
@@ -43,8 +43,8 @@
 	{
 		parent::SetCustomQuery($event);
 
+		/** @var kDBList $object */
 		$object = $event->getObject();
-		/* @var $object kDBList */
 
 		switch ($event->Special) {
 			case 'downl':
@@ -80,8 +80,8 @@
 
 		$this->itemChanged($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$parent_info = $object->getLinkedInfo($event->Special);
 
@@ -105,8 +105,8 @@
 	 */
 	function itemChanged($event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		if ( $object->GetDBField('IsPrimary') ) {
 			$parent_info = $object->getLinkedInfo($event->Special);
@@ -134,8 +134,8 @@
 		$ids = $this->StoreSelectedIDs($event);
 		$id = array_shift($ids);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject( Array('skip_autoload' => true) );
-		/* @var $object kDBItem */
 
 		$object->Load($id);
 
@@ -156,8 +156,8 @@
 		if ( $event->Name == 'OnMassDelete' && $type == 'before' ) {
 			$ids = $event->getEventParam('ids');
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$parent_info = $object->getLinkedInfo($event->Special);
 
Index: modules/in-commerce/units/gateways/gw_classes/authorizenet.php
===================================================================
--- modules/in-commerce/units/gateways/gw_classes/authorizenet.php
+++ modules/in-commerce/units/gateways/gw_classes/authorizenet.php
@@ -54,8 +54,8 @@
 			$post_fields['x_email'] = $billing_email;
 			$post_fields['x_phone'] = $item_data['BillingPhone'];
 
+			/** @var kCountryStatesHelper $cs_helper */
 			$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-			/* @var $cs_helper kCountryStatesHelper */
 
 			$post_fields['x_country']			=	$cs_helper->getCountryIso( $item_data['BillingCountry'] );
 			$post_fields['x_cust_id']			=	$item_data['PortalUserId'];
@@ -63,8 +63,8 @@
 			$post_fields['x_description']		=	'Invoice #'.$item_data['OrderNumber'];
 			$post_fields['x_email_customer']	=	'FALSE';
 
+			/** @var kCurlHelper $curl_helper */
 			$curl_helper = $this->Application->recallObject('CurlHelper');
-			/* @var $curl_helper kCurlHelper */
 
 			$curl_helper->SetPostData($post_fields);
 			$this->gw_responce = $curl_helper->Send($gw_params['submit_url']);
@@ -104,8 +104,8 @@
 
 				if( $this->IsTestMode() ) $post_fields['x_test_request'] = 'True';
 
+				/** @var kCurlHelper $curl_helper */
 				$curl_helper = $this->Application->recallObject('CurlHelper');
-				/* @var $curl_helper kCurlHelper */
 
 				$curl_helper->SetPostData($post_fields);
 				$this->gw_responce = $curl_helper->Send($gw_params['submit_url']);
Index: modules/in-commerce/units/gateways/gw_classes/google_checkout.php
===================================================================
--- modules/in-commerce/units/gateways/gw_classes/google_checkout.php
+++ modules/in-commerce/units/gateways/gw_classes/google_checkout.php
@@ -74,8 +74,8 @@
 					WHERE oi.OrderId = '.$cart_fields['OrderId'];
 			$order_items = $this->Conn->Query($sql);
 
+			/** @var kMultiLanguage $ml_formatter */
 			$ml_formatter = $this->Application->recallObject('kMultiLanguage');
-			/* @var $ml_formatter kMultiLanguage */
 
 			$cart_xml = Array ();
 			foreach ($order_items as $order_item) {
@@ -207,11 +207,11 @@
     		// parse xml & get order_id from there, like sella pay
     		$this->gwParams = $gw_params;
 
+    		/** @var kXMLHelper $xml_helper */
     		$xml_helper = $this->Application->recallObject('kXMLHelper');
-    		/* @var $xml_helper kXMLHelper */
 
+    		/** @var kXMLNode $root_node */
 			$root_node =& $xml_helper->Parse( $this->getRequestXML() );
-    		/* @var $root_node kXMLNode */
 
     		$this->Application->XMLHeader();
 			define('DBG_SKIP_REPORTING', 1);
@@ -321,8 +321,8 @@
 			);
 
 			foreach ($search_nodes as $search_string) {
+				/** @var kXMLNode $found_node */
 				$found_node =& $root_node;
-				/* @var $found_node kXMLNode */
 
 				$search_string = explode(':', $search_string);
 				foreach ($search_string as $search_node) {
@@ -330,8 +330,9 @@
 				}
 
 				$node_data = Array ();
+
+				/** @var kXMLNode $sub_node */
 				$sub_node =& $found_node->firstChild;
-				/* @var $sub_node kXMLNode */
 
 				do {
 					if ($found_node->Name == 'SHIPPING') {
@@ -361,8 +362,8 @@
 			}
 
 			// 2. update shipping address in order
+			/** @var OrdersItem $order */
 			$order = $this->Application->recallObject('ord', null, Array ('skip_autoload' => true));
-			/* @var $order OrdersItem */
 
 			$order->Load($order_id);
 
@@ -372,8 +373,8 @@
 				'ShippingZip' => $address_info['POSTAL-CODE'],
 			);
 
+			/** @var kCountryStatesHelper $cs_helper */
 			$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-			/* @var $cs_helper kCountryStatesHelper */
 
 			$shipping_address['ShippingCountry'] = $cs_helper->getCountryIso($address_info['COUNTRY-CODE'], true);
 
@@ -434,8 +435,8 @@
 
 			$user_address = Array ();
 			foreach ($search_nodes as $search_string) {
+				/** @var kXMLNode $found_node */
 				$found_node =& $root_node;
-				/* @var $found_node kXMLNode */
 
 				$search_string = explode(':', $search_string);
 				foreach ($search_string as $search_node) {
@@ -444,8 +445,8 @@
 
 				$node_data = Array ();
 				if ($found_node->Children) {
+					/** @var kXMLNode $sub_node */
 					$sub_node =& $found_node->firstChild;
-					/* @var $sub_node kXMLNode */
 
 					do {
 						$node_data[$sub_node->Name] = $sub_node->Data;
@@ -481,8 +482,8 @@
 			}
 
 			// 2. update shipping address in order
+			/** @var OrdersItem $order */
 			$order = $this->Application->recallObject('ord', null, Array ('skip_autoload' => true));
-			/* @var $order OrdersItem */
 
 			$order->Load($order_id);
 
@@ -527,8 +528,8 @@
 				'POSTAL-CODE' => 'Zip',
 			);
 
+			/** @var kCountryStatesHelper $cs_helper */
 			$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-			/* @var $cs_helper kCountryStatesHelper */
 
 			foreach ($user_address as $field_prefix => $address_details) {
 				foreach ($address_mapping as $src_field => $dst_field) {
@@ -576,8 +577,8 @@
 			);
 
 			foreach ($search_nodes as $search_string) {
+				/** @var kXMLNode $found_node */
 				$found_node =& $root_node;
-				/* @var $found_node kXMLNode */
 
 				$search_string = explode(':', $search_string);
 				foreach ($search_string as $search_node) {
@@ -586,8 +587,8 @@
 
 				$node_data = Array ();
 				if ($found_node->Children) {
+					/** @var kXMLNode $sub_node */
 					$sub_node =& $found_node->firstChild;
-					/* @var $sub_node kXMLNode */
 
 					do {
 						$node_data[$sub_node->Name] = $sub_node->Data;
@@ -607,8 +608,8 @@
 			}
 
 			// 2. update shipping address in order
+			/** @var OrdersItem $order */
 			$order = $this->Application->recallObject('ord', null, Array ('skip_autoload' => true));
-			/* @var $order OrdersItem */
 
 			$order->Load($google_order_number, 'GoogleOrderNumber');
 
@@ -689,8 +690,8 @@
 
 			$this->_chargeOrder($item_data);
 
+			/** @var OrdersItem $order */
 			$order = $this->Application->recallObject('ord.-item', null, Array ('skip_autoload' => true));
-			/* @var $order OrdersItem */
 
 			$order->Load($item_data['OrderId']);
 			if (!$order->isLoaded()) {
@@ -713,11 +714,11 @@
 		{
 			$submit_url = $this->gwParams['submit_url'].'/request/Merchant/'.$this->gwParams['merchant_id'];
 
+			/** @var kCurlHelper $curl_helper */
 			$curl_helper = $this->Application->recallObject('CurlHelper');
-			/* @var $curl_helper kCurlHelper */
 
+    		/** @var kXMLHelper $xml_helper */
 			$xml_helper = $this->Application->recallObject('kXMLHelper');
-    		/* @var $xml_helper kXMLHelper */
 
 			$curl_helper->SetPostData($command_xml);
 			$auth_options = Array (
@@ -727,8 +728,8 @@
 
 			$xml_responce = $curl_helper->Send($submit_url);
 
+    		/** @var kXMLNode $root_node */
 			$root_node =& $xml_helper->Parse($xml_responce);
-    		/* @var $root_node kXMLNode */
 
     		return $root_node;
 		}
@@ -749,8 +750,8 @@
 
 			$order_state = Array ();
 			foreach ($search_nodes as $search_string) {
+				/** @var kXMLNode $found_node */
 				$found_node =& $root_node;
-				/* @var $found_node kXMLNode */
 
 				$search_string = explode(':', $search_string);
 				foreach ($search_string as $search_node) {
@@ -773,8 +774,8 @@
 			}
 
 			// 2. update shipping address in order
+			/** @var OrdersItem $order */
 			$order = $this->Application->recallObject('ord', null, Array ('skip_autoload' => true));
-			/* @var $order OrdersItem */
 
 			$order->Load($google_order_number, 'GoogleOrderNumber');
 
@@ -800,8 +801,8 @@
 
 				if ($order_charged) {
 					// when using Pre-Authorize
+					/** @var OrdersEventHandler $order_eh */
 					$order_eh = $this->Application->recallObject('ord_EventHandler');
-					/* @var $order_eh OrdersEventHandler */
 
 					$order_eh->SplitOrder( new kEvent('ord:OnMassOrderApprove'), $order);
 				}
@@ -846,8 +847,9 @@
 			$shipping_totals = $this->Conn->GetRow($query);
 
 			$this->Application->recallObject('ShippingQuoteEngine');
+
+			/** @var ShippingQuoteCollector $quote_engine_collector */
 			$quote_engine_collector = $this->Application->recallObject('ShippingQuoteCollector');
-			/* @var $quote_engine_collector ShippingQuoteCollector */
 
 			$shipping_quote_params = Array(
 				'dest_country'	=>	$order->GetDBField('ShippingCountry'),
Index: modules/in-commerce/units/gateways/gw_classes/gw_base.php
===================================================================
--- modules/in-commerce/units/gateways/gw_classes/gw_base.php
+++ modules/in-commerce/units/gateways/gw_classes/gw_base.php
@@ -155,8 +155,8 @@
 		 */
 		function ConvertCurrency($value, $iso, $format_value = true)
 		{
+			/** @var CurrencyRates $converter */
 			$converter = $this->Application->recallObject('CurrencyRates');
-			/* @var $converter CurrencyRates */
 
 			$value = $converter->Convert($value, 'PRIMARY', $iso);
 			return $format_value ? sprintf('%.2f', $value) : $value;
@@ -188,8 +188,8 @@
 			$gw_id = $this->Conn->getInsertID();
 
 			// 2. create DISABLED payment type, that uses this gateway (used for storing configuration properties of gateway)
+			/** @var kDBItem $payment_type */
 			$payment_type = $this->Application->recallObject('pt.-item', null, Array ('skip_autoload' => true));
-			/* @var $payment_type kDBItem */
 
 			$payment_type->Clear();
 			$fields_hash = Array (
Index: modules/in-commerce/units/gateways/gw_classes/ideal_nl.php
===================================================================
--- modules/in-commerce/units/gateways/gw_classes/ideal_nl.php
+++ modules/in-commerce/units/gateways/gw_classes/ideal_nl.php
@@ -46,13 +46,13 @@
 			$this->Application->StoreVar('gw_success_template',$tag_params['return_template']);
 			$this->Application->StoreVar('gw_cancel_template',$tag_params['cancel_template']);
 
+			/** @var kCurlHelper $curl_helper */
 			$curl_helper = $this->Application->recallObject('CurlHelper');
-			/* @var $curl_helper kCurlHelper */
 
 			$banks = $curl_helper->Send($gw_params['request_url'].'?a=banklist');
 
+			/** @var kXMLHelper $parser */
 			$parser = $this->Application->recallObject('kXMLHelper');
-			/* @var $parser kXMLHelper */
 			$bank_data =& $parser->Parse($banks);
 
 			$bank_data->FindChild('response');
@@ -84,14 +84,14 @@
 			$fields['returnurl'] = $this->getNotificationUrl() . '?order_id='.$item_data['OrderId'];
 			$fields['reporturl'] = $this->getNotificationUrl() . '?mode=report&order_id='.$item_data['OrderId'];
 
+			/** @var kCurlHelper $curl_helper */
 			$curl_helper = $this->Application->recallObject('CurlHelper');
-			/* @var $curl_helper kCurlHelper */
 
 			$curl_helper->SetRequestData($fields);
 			$transaction_xml = $curl_helper->Send($gw_params['request_url']);
 
+			/** @var kXMLHelper $parser */
 			$parser = $this->Application->recallObject('kXMLHelper');
-			/* @var $parser kXMLHelper */
 			$trans_data =& $parser->Parse($transaction_xml);
 			$transaction_id = $trans_data->FindChildValue('transaction_id');
 			$url = $trans_data->FindChildValue('url');
@@ -131,14 +131,14 @@
 				$fields['transaction_id'] =  $this->Application->GetVar('transaction_id');
 				$fields['bank_id'] = $this->Application->GetVar('ideal_nl_bank_id');
 
+				/** @var kCurlHelper $curl_helper */
 				$curl_helper = $this->Application->recallObject('CurlHelper');
-				/* @var $curl_helper kCurlHelper */
 
 				$curl_helper->SetRequestData($fields);
 				$check_xml = $curl_helper->Send($gw_params['request_url']);
 
+				/** @var kXMLHelper $parser */
 				$parser = $this->Application->recallObject('kXMLHelper');
-				/* @var $parser kXMLHelper */
 				$trans_data =& $parser->Parse($check_xml);
 
 				$response = $trans_data->FindChild('order');
Index: modules/in-commerce/units/gateways/gw_classes/notify_scripts/google_checkout_notify.php
===================================================================
--- modules/in-commerce/units/gateways/gw_classes/notify_scripts/google_checkout_notify.php
+++ modules/in-commerce/units/gateways/gw_classes/notify_scripts/google_checkout_notify.php
@@ -26,8 +26,8 @@
 
 	$application->SetVar('payment_type_id', $payment_type_id); // keep, because kGWGoogleCheckout::processNewOrderNotification relies on this
 
+	/** @var OrdersItem $order */
 	$order = $application->recallObject('ord', null, Array ('skip_autoload' => true));
-	/* @var $order OrdersItem */
 
 	$gw_data = $order->getGatewayData($application->GetVar('payment_type_id'));
 	$application->registerClass( $gw_data['ClassName'], GW_CLASS_PATH.'/'.$gw_data['ClassFile'] );
Index: modules/in-commerce/units/gateways/gw_classes/notify_scripts/google_checkout_shippings.php
===================================================================
--- modules/in-commerce/units/gateways/gw_classes/notify_scripts/google_checkout_shippings.php
+++ modules/in-commerce/units/gateways/gw_classes/notify_scripts/google_checkout_shippings.php
@@ -24,14 +24,15 @@
 			WHERE g.ClassName = "kGWGoogleCheckout"';
 	$payment_type_id = $application->Conn->GetOne($sql);
 
+	/** @var OrdersItem $order */
 	$order = $application->recallObject('ord', null, Array ('skip_autoload' => true));
-	/* @var $order OrdersItem */
 
 	$gw_data = $order->getGatewayData($payment_type_id);
 	$application->registerClass( $gw_data['ClassName'], GW_CLASS_PATH.'/'.$gw_data['ClassFile'] );
+
+	/** @var kGWGoogleCheckout $gateway_object */
 	$gateway_object = $application->recallObject( $gw_data['ClassName'] );
-	/* @var $gateway_object kGWGoogleCheckout */
 
 	$gateway_object->processNotification($gw_data['gw_params'], 'shippings');
 
 	$application->Done();
\ No newline at end of file
Index: modules/in-commerce/units/gateways/gw_classes/paymentech.php
===================================================================
--- modules/in-commerce/units/gateways/gw_classes/paymentech.php
+++ modules/in-commerce/units/gateways/gw_classes/paymentech.php
@@ -72,8 +72,8 @@
 				'ShippingRef' => '',
 			);
 
+			/** @var kCountryStatesHelper $cs_helper */
 			$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-			/* @var $cs_helper kCountryStatesHelper */
 
 			$data['AVScountryCode'] = $cs_helper->getCountryIso( $item_data['BillingCountry'] );
 
@@ -166,8 +166,8 @@
 
 		function setGWResponce($gw_params, $headers, $xml)
 		{
+			/** @var kCurlHelper $curl_helper */
 			$curl_helper = $this->Application->recallObject('CurlHelper');
-			/* @var $curl_helper kCurlHelper */
 
 			$curl_helper->SetHeaders($headers);
 			$curl_helper->SetPostData($xml);
Index: modules/in-commerce/units/gateways/gw_classes/paypal.php
===================================================================
--- modules/in-commerce/units/gateways/gw_classes/paypal.php
+++ modules/in-commerce/units/gateways/gw_classes/paypal.php
@@ -81,8 +81,8 @@
 			$ret['state'] = $item_data['BillingState'];
 			$ret['zip'] = $item_data['BillingZip'];
 
+			/** @var kCountryStatesHelper $cs_helper */
 			$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-			/* @var $cs_helper kCountryStatesHelper */
 
 			$ret['country'] = $cs_helper->getCountryIso( $item_data['BillingCountry'] );
 			$ret['notify_url'] = $this->getNotificationUrl() . '?sid=' . $this->Application->GetSID() . '&admin=1&order_id=' . $item_data['OrderId'];
@@ -146,8 +146,8 @@
 			$ret['state'] = $item_data['BillingState'];
 			$ret['zip'] = $item_data['BillingZip'];
 
+			/** @var kCountryStatesHelper $cs_helper */
 			$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-			/* @var $cs_helper kCountryStatesHelper */
 
 			$ret['country'] = $cs_helper->getCountryIso( $item_data['BillingCountry'] );
 			$ret['notify_url'] = $this->getNotificationUrl() . '?sid='.$this->Application->GetSID().'&admin=1&order_id='.$item_data['OrderId'].'&payment_type_id='.$tag_params['payment_type_id'];
@@ -172,8 +172,8 @@
 			// status, of that PayPal server really has sent such notification to us
 			$status_map = Array('INVALID' => 0, 'VERIFIED' => 1);
 
+			/** @var kCurlHelper $curl_helper */
 			$curl_helper = $this->Application->recallObject('CurlHelper');
-			/* @var $curl_helper kCurlHelper */
 
 			$curl_helper->SetPostData($_POST);
 			$n_status = $curl_helper->Send($gw_params['submit_url']); // INVALID, VERIFIED
@@ -198,8 +198,8 @@
 					$this->Application->HandleEvent(new kEvent('p:OnSubscriptionApprove', array('field_values' => $field_values)));
 					$success = 0; //this will eliminate OnCompleteOrder in gw_notify!
 
+					/** @var kDBItem $org_order */
 					$org_order = $this->Application->recallObject('ord.-original', 'ord', Array('skip_autoload' => true));
-					/* @var $org_order kDBItem */
 
 					$org_order->Load($field_values['OrderId']);
 
Index: modules/in-commerce/units/gateways/gw_classes/paypal_direct.php
===================================================================
--- modules/in-commerce/units/gateways/gw_classes/paypal_direct.php
+++ modules/in-commerce/units/gateways/gw_classes/paypal_direct.php
@@ -77,8 +77,8 @@
 			$post_fields['CITY']				=	$item_data['BillingCity'];
 			$post_fields['STATE']				=	$item_data['BillingState'];
 
+			/** @var kCountryStatesHelper $cs_helper */
 			$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-			/* @var $cs_helper kCountryStatesHelper */
 
 			$post_fields['COUNTRYCODE']			=	$cs_helper->getCountryIso( $item_data['BillingCountry'] );
 			$post_fields['ZIP']					=	$item_data['BillingZip'];
@@ -129,8 +129,8 @@
 //			print_r($post_fields);
 //			exit;
 
+			/** @var kCurlHelper $curl_helper */
 			$curl_helper = $this->Application->recallObject('CurlHelper');
-			/* @var $curl_helper kCurlHelper */
 
 			$curl_helper->SetPostData($post_fields);
 			$this->gw_responce = $curl_helper->Send($gw_params['submit_url']);
Index: modules/in-commerce/units/gateways/gw_classes/rightconnect.php
===================================================================
--- modules/in-commerce/units/gateways/gw_classes/rightconnect.php
+++ modules/in-commerce/units/gateways/gw_classes/rightconnect.php
@@ -109,8 +109,8 @@
 			$post_fields["email"] = $item_data['BillingEmail'];
 			$post_fields["ADMIN_EMAIL"] = $this->Application->ConfigValue('DefaultEmailSender');
 
+			/** @var kCurlHelper $curl_helper */
 			$curl_helper = $this->Application->recallObject('CurlHelper');
-			/* @var $curl_helper kCurlHelper */
 
 			$curl_helper->SetPostData($post_fields);
 			$this->gw_responce = $curl_helper->Send($gw_params['submit_url']);
Index: modules/in-commerce/units/gateways/gw_classes/sella_guestpay.php
===================================================================
--- modules/in-commerce/units/gateways/gw_classes/sella_guestpay.php
+++ modules/in-commerce/units/gateways/gw_classes/sella_guestpay.php
@@ -69,8 +69,8 @@
 			$b = join($separator, $b);
 			$url = 'https://ecomm.sella.it/CryptHTTPS/Encrypt.asp?a='.$a.'&b='.$b.'&c=2.0';
 
+			/** @var kCurlHelper $curl_helper */
 			$curl_helper = $this->Application->recallObject('CurlHelper');
-			/* @var $curl_helper kCurlHelper */
 
 			$res = $curl_helper->Send($url);
 
@@ -92,8 +92,8 @@
 			$b = $_GET['b'];
 			$url = 'https://ecomm.sella.it/CryptHTTPS/Decrypt.asp?a='.$a.'&b='.$b.'&c=2.0';
 
+			/** @var kCurlHelper $curl_helper */
 			$curl_helper = $this->Application->recallObject('CurlHelper');
-			/* @var $curl_helper kCurlHelper */
 
 			$ret = $curl_helper->Send($url);
 			$result = $this->parseGWResponce($ret, $gw_params);
Index: modules/in-commerce/units/gateways/gw_classes/worldpay.php
===================================================================
--- modules/in-commerce/units/gateways/gw_classes/worldpay.php
+++ modules/in-commerce/units/gateways/gw_classes/worldpay.php
@@ -74,8 +74,8 @@
 			}
 			$ret['postcode'] = $item_data['BillingZip'];
 
+			/** @var kCountryStatesHelper $cs_helper */
 			$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-			/* @var $cs_helper kCountryStatesHelper */
 
 			$ret['country'] = $cs_helper->getCountryIso( $item_data['BillingCountry'] );
 			$ret['tel'] = $item_data['BillingPhone'];
@@ -106,8 +106,8 @@
 
     		$transaction_status = $this->Application->GetVar('transStatus') == 'Y' ? 1 : 0;
 
+			/** @var kCurlHelper $curl_helper */
     		$curl_helper = $this->Application->recallObject('CurlHelper');
-			/* @var $curl_helper kCurlHelper */
 
 			$url = $this->Application->GetVar($transaction_status ? 'MC_return_page' : 'MC_cancel_return_page');
 			echo $curl_helper->Send($url);
Index: modules/in-commerce/units/gateways/gw_event_handler.php
===================================================================
--- modules/in-commerce/units/gateways/gw_event_handler.php
+++ modules/in-commerce/units/gateways/gw_event_handler.php
@@ -76,10 +76,10 @@
 				continue;
 			}
 
+			/** @var kGWBase $tmp */
 			$tmp = new $class_name();
-			/* @var $tmp kGWBase */
 
 			$tmp->Install();
 		}
 	}
 }
\ No newline at end of file
Index: modules/in-commerce/units/gateways/gw_tag_processor.php
===================================================================
--- modules/in-commerce/units/gateways/gw_tag_processor.php
+++ modules/in-commerce/units/gateways/gw_tag_processor.php
@@ -43,8 +43,8 @@
 
 	function gwConfigValue($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$id = $object->GetID();
 
@@ -102,8 +102,8 @@
 	 */
 	protected function PredefinedOptions($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$block_params = $this->prepareTagParams($params);
 		$block_params['name'] = $this->SelectParam($params, 'render_as,block');
Index: modules/in-commerce/units/gift_certificates/gift_certificates_eh.php
===================================================================
--- modules/in-commerce/units/gift_certificates/gift_certificates_eh.php
+++ modules/in-commerce/units/gift_certificates/gift_certificates_eh.php
@@ -46,8 +46,8 @@
 	{
 		parent::OnPreCreate($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$exp_date = adodb_mktime();
 		$default_duration = $this->Application->ConfigValue('Comm_DefaultCouponDuration');
@@ -85,8 +85,8 @@
 
 		$this->itemChanged($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$object->SetDBField('Debit', $object->GetDBField('Amount'));
 	}
@@ -98,8 +98,8 @@
 	 */
 	function itemChanged($event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$amount = abs($object->GetDBField('Amount'));
 		$debit = abs($object->GetDBField('Debit'));
@@ -117,8 +117,8 @@
 				$object->setRequired('RecipientEmail', false);
 			}
 
+			/** @var kCountryStatesHelper $cs_helper */
 			$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-			/* @var $cs_helper kCountryStatesHelper */
 
 			if ( !$cs_helper->CountryHasStates($object->GetDBField('RecipientCountry')) ) {
 				$object->setRequired('RecipientState', false);
@@ -151,8 +151,8 @@
 			return ;
 		}
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		// get object id by unique field Code
 		$sql = 'SELECT ' . $object->IDField . '
@@ -175,8 +175,8 @@
 			return ;
 		}
 
+		/** @var kDBItem $object */
 		$object = $event->getObject( Array ('skip_autoload' => true) );
-		/* @var $object kDBItem */
 
 		foreach ($ids as $id) {
 			$object->Load($id);
Index: modules/in-commerce/units/gift_certificates/gift_certificates_tp.php
===================================================================
--- modules/in-commerce/units/gift_certificates/gift_certificates_tp.php
+++ modules/in-commerce/units/gift_certificates/gift_certificates_tp.php
@@ -39,9 +39,9 @@
 		$params[$this->getPrefixSpecial().'_id'] = $this->Application->RecallVar('print_certificate_id');
 		$this->Application->RemoveVar('print_certificate_id');
 
+		/** @var kMainTagProcessor $main_processor */
 		$main_processor = $this->Application->recallTagProcessor('m');
-		/* @var $main_processor kMainTagProcessor */
 
 		return $main_processor->Link($params);
 	}
 }
\ No newline at end of file
Index: modules/in-commerce/units/helpers/bank_lv_currency_rates.php
===================================================================
--- modules/in-commerce/units/helpers/bank_lv_currency_rates.php
+++ modules/in-commerce/units/helpers/bank_lv_currency_rates.php
@@ -26,8 +26,8 @@
 	{
 		$xml_parser = xml_parser_create();
 
+		/** @var kCurlHelper $curl_helper */
 		$curl_helper = $this->Application->recallObject('CurlHelper');
-		/* @var $curl_helper kCurlHelper */
 
 		$xml = $curl_helper->Send($this->RateSource);
 
Index: modules/in-commerce/units/helpers/currency_rates.php
===================================================================
--- modules/in-commerce/units/helpers/currency_rates.php
+++ modules/in-commerce/units/helpers/currency_rates.php
@@ -101,8 +101,8 @@
 
 		if ( $decimal_tag ) {
 			if ( $decimal_separator === false ) {
+				/** @var LanguagesItem $language */
 				$language = $this->Application->recallObject('lang.current');
-				/* @var $language LanguagesItem */
 
 				$decimal_separator = $language->GetDBField('DecimalPoint');
 			}
@@ -126,8 +126,8 @@
 
 	function StoreRates($currencies=null)
 	{
+		/** @var kDBItem $curr_object */
 		$curr_object = $this->Application->recallObject('curr', null, Array ('skip_autoload' => true));
-		/* @var $curr_object kDBItem */
 
 		if ($currencies) {
 			if (!is_array($currencies)) {
Index: modules/in-commerce/units/helpers/ecb_currency_rates.php
===================================================================
--- modules/in-commerce/units/helpers/ecb_currency_rates.php
+++ modules/in-commerce/units/helpers/ecb_currency_rates.php
@@ -26,8 +26,8 @@
 	{
 		$xml_parser = xml_parser_create();
 
+		/** @var kCurlHelper $curl_helper */
 		$curl_helper = $this->Application->recallObject('CurlHelper');
-		/* @var $curl_helper kCurlHelper */
 
 		$xml = $curl_helper->Send($this->RateSource);
 
Index: modules/in-commerce/units/helpers/frny_currency_rates.php
===================================================================
--- modules/in-commerce/units/helpers/frny_currency_rates.php
+++ modules/in-commerce/units/helpers/frny_currency_rates.php
@@ -24,8 +24,8 @@
 
 	function GetRatesData()
 	{
+		/** @var kCurlHelper $curl_helper */
 		$curl_helper = $this->Application->recallObject('CurlHelper');
-		/* @var $curl_helper kCurlHelper */
 
 		for($i = 0; $i < 10; $i++)
 		{
Index: modules/in-commerce/units/helpers/order_helper.php
===================================================================
--- modules/in-commerce/units/helpers/order_helper.php
+++ modules/in-commerce/units/helpers/order_helper.php
@@ -29,8 +29,8 @@
 				'errors' => $errors ? unserialize($errors) : Array (),
 			);
 
+			/** @var kDBList $items */
 			$items = $this->Application->recallObject('orditems', 'orditems_List', Array ('per_page' => -1));
-			/* @var $items kDBList */
 
 			$items->Query();
 			$items->GoFirst();
@@ -41,8 +41,8 @@
 				return $ret;
 			}
 
+			/** @var kCatDBItem $product */
 			$product = $this->Application->recallObject('p', null, Array ('skip_autoload' => true));
-			/* @var $product kCatDBItem */
 
 			$sql =  $product->GetSelectSQL() . '
 					WHERE ' . $product->TableName . '.' . $product->IDField . ' IN (' . implode(',', $items->GetCol('ProductId')) . ')';
@@ -71,8 +71,8 @@
 
 				$row_index = $items->GetDBField('ProductId') . ':' . $items->GetDBField('OptionsSalt') . ':' . $items->GetDBField('BackOrderFlag');
 
+				/** @var ImageHelper $image_helper */
 				$image_helper = $this->Application->recallObject('ImageHelper');
-				/* @var $image_helper ImageHelper */
 
 				// TODO: find a way to specify thumbnail size & default image
 
@@ -109,8 +109,8 @@
 
 		function convertCurrency($amount, $currency)
 		{
+			/** @var CurrencyRates $converter */
 			$converter = $this->Application->recallObject('CurrencyRates');
-			/* @var $converter CurrencyRates */
 
 			// convert primary currency to selected (if they are the same, converter will just return)
 			return (float)$converter->Convert($amount, 'PRIMARY', $this->getISO($currency));
Index: modules/in-commerce/units/manufacturers/manufacturers_event_handler.php
===================================================================
--- modules/in-commerce/units/manufacturers/manufacturers_event_handler.php
+++ modules/in-commerce/units/manufacturers/manufacturers_event_handler.php
@@ -76,8 +76,8 @@
 
 		$manufacturers = $this->Conn->GetCol($sql);
 
+		/** @var kDBList $object */
 		$object = $event->getObject();
-		/* @var $object kDBList */
 
 		$object->addFilter('category_manufacturer_filter', $manufacturers ? '%1$s.ManufacturerId IN (' . implode(',', $manufacturers) . ')' : 'FALSE');
 	}
@@ -93,8 +93,8 @@
 	{
 		parent::OnAfterItemLoad($event);
 
+		/** @var kCountryStatesHelper $cs_helper */
 		$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-		/* @var $cs_helper kCountryStatesHelper */
 
 		$cs_helper->PopulateStates($event, 'State', 'Country');
 	}
@@ -110,8 +110,8 @@
 	{
 		parent::OnBeforeItemUpdate($event);
 
+		/** @var kCountryStatesHelper $cs_helper */
 		$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-		/* @var $cs_helper kCountryStatesHelper */
 
 		$cs_helper->CheckStateField($event, 'State', 'Country');
 		$cs_helper->PopulateStates($event, 'State', 'Country');
@@ -128,10 +128,10 @@
 	{
 		parent::OnBeforeItemCreate($event);
 
+		/** @var kCountryStatesHelper $cs_helper */
 		$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-		/* @var $cs_helper kCountryStatesHelper */
 
 		$cs_helper->CheckStateField($event, 'State', 'Country');
 		$cs_helper->PopulateStates($event, 'State', 'Country');
 	}
 }
\ No newline at end of file
Index: modules/in-commerce/units/order_items/order_items_event_handler.php
===================================================================
--- modules/in-commerce/units/order_items/order_items_event_handler.php
+++ modules/in-commerce/units/order_items/order_items_event_handler.php
@@ -51,8 +51,8 @@
 				// = allows selecting one item at a time, but we leave this code just in case :)
 				$product_ids = explode(',', $product_ids);
 
+				/** @var ProductsItem $product_object */
 				$product_object = $this->Application->recallObject('p.-item', null, array('skip_autoload' => true));
-				/* @var $product_object ProductsItem */
 
 				foreach ($product_ids as $product_id) {
 					$product_object->Load($product_id);
@@ -72,8 +72,8 @@
 						$this->Application->EventManager->openerStackPush('in-commerce/orders/order_product_edit', $url_params);
 					}
 					else {
+						/** @var OrdersEventHandler $orders_h */
 						$orders_h = $this->Application->recallObject('ord_EventHandler');
-						/* @var $orders_h OrdersEventHandler */
 
 						// 1 for PacakgeNum - temporary solution to overcome splitting into separate sub-orders
 						// of orders with items added through admin when approving them
@@ -101,13 +101,13 @@
 				return;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject(Array ('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			$table_info = $object->getLinkedInfo();
 
+			/** @var OrdersItem $main_object */
 			$main_object = $this->Application->recallObject($table_info['ParentPrefix']);
-			/* @var $main_object OrdersItem */
 
 			foreach ($items_info as $id => $field_values) {
 				$object->Clear(); // otherwise validation errors will be passed to next object
@@ -169,16 +169,16 @@
 				return;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$changed_fields = $object->GetChangedFields();
 
 			if ( $changed_fields ) {
 				$table_info = $object->getLinkedInfo();
 
+				/** @var OrdersItem $main_object */
 				$main_object = $this->Application->recallObject($table_info['ParentPrefix']);
-				/* @var $main_object OrdersItem */
 
 				$oi_string = $object->GetDBField('ProductId') . ':' . $object->GetDBField('OptionsSalt') . ':' . $object->GetDBField('BackOrderFlag');
 
@@ -301,8 +301,8 @@
 		{
 			parent::OnAfterItemLoad($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$item_info = $object->GetDBField('ItemData');
 
@@ -325,8 +325,8 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			$package_num = $event->getEventParam('package_num');
 			if ( $package_num ) {
@@ -352,15 +352,15 @@
 				return true;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( !$object->isLoaded() ) {
 				return true;
 			}
 
+			/** @var kDBItem $order */
 			$order = $this->Application->recallObject('ord');
-			/* @var $order kDBItem */
 
 			if ( $order->isLoaded() && ($order->GetID() == $object->GetDBField('OrderId')) ) {
 				return $order->GetDBField('PortalUserId') == $this->Application->RecallVar('user_id');
Index: modules/in-commerce/units/order_items/order_items_tag_processor.php
===================================================================
--- modules/in-commerce/units/order_items/order_items_tag_processor.php
+++ modules/in-commerce/units/order_items/order_items_tag_processor.php
@@ -17,8 +17,8 @@
 {
 	function PrintGrid($params)
 	{
+		/** @var kDBList $order */
 		$order = $this->Application->recallObject('ord');
-		/* @var $order kDBList */
 
 		if ( $order->GetDBField('Status') != ORDER_STATUS_INCOMPLETE ) {
 			$params['grid'] = $params['NotEditable'];
@@ -32,24 +32,24 @@
 
 	function IsTangible($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		return $object->GetDBField('Type') == PRODUCT_TYPE_TANGIBLE;
 	}
 
 	function HasQty($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		return in_array($object->GetDBField('Type'), Array (PRODUCT_TYPE_TANGIBLE, 6));
 	}
 
 	function HasDiscount($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		return (float)$object->GetDBField('ItemDiscount') ? 1 : 0;
 	}
@@ -63,16 +63,16 @@
 
 	function PrintOptions($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$item_data = @unserialize($object->GetDBField('ItemData'));
 
 		$render_as = $this->SelectParam($params, 'render_as');
 		$block_params['name'] = $render_as;
 
+		/** @var kProductOptionsHelper $opt_helper */
 		$opt_helper = $this->Application->recallObject('kProductOptionsHelper');
-		/* @var $opt_helper kProductOptionsHelper */
 
 		$o = '';
 		$options = $item_data['Options'];
@@ -99,8 +99,8 @@
 				$val = join(',', $val);
 			}*/
 
+			/** @var LanguagesItem $lang */
 			$lang = $this->Application->recallObject('lang.current');
-			/* @var $lang LanguagesItem */
 
 			if ( $render_as ) {
 				$block_params['option'] = $key;
@@ -167,8 +167,8 @@
 	{
 		$block_params['name'] = $params['render_as'];
 
+		/** @var Array $values */
 		$values = $this->Application->Parser->GetParam('value');
-		/* @var $values Array */
 
 		$prices = $this->Application->Parser->GetParam('price');
 		$price_types = $this->Application->Parser->GetParam('price_type');
@@ -224,8 +224,8 @@
 		$block_params['name'] = $this->SelectParam($params, 'render_as,block');
 		$block_params['pass_params'] = 'true';
 
+		/** @var kCatDBItem $product_object */
 		$product_object = $this->Application->recallObject('p', 'p', Array ('skip_autoload' => true));
-		/* @var $product_object kCatDBItem */
 
 		$i = 0;
 		$product_id = $product_object->GetID();
@@ -261,8 +261,8 @@
 
 	function DisplayOptionsPricing($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		if ( $object->GetDBField('OptionsSelectionMode') == 1 ) {
 			return false;
@@ -274,8 +274,9 @@
 		}
 
 		$options = getArrayValue($item_data, 'Options');
+
+		/** @var kProductOptionsHelper $helper */
 		$helper = $this->Application->recallObject('kProductOptionsHelper');
-		/* @var $helper kProductOptionsHelper */
 
 		$crc = $helper->OptionsSalt($options, true);
 
@@ -288,19 +289,19 @@
 
 	function RowIndex($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		return $object->GetDBField('ProductId') . ':' . $object->GetDBField('OptionsSalt') . ':' . $object->GetDBField('BackOrderFlag');
 	}
 
 	function FreePromoShippingAvailable($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
+		/** @var OrderHelper $order_helper */
 		$order_helper = $this->Application->recallObject('OrderHelper');
-		/* @var $order_helper OrderHelper */
 
 		return $order_helper->eligibleForFreePromoShipping($object);
 	}
Index: modules/in-commerce/units/orders/order_calculator.php
===================================================================
--- modules/in-commerce/units/orders/order_calculator.php
+++ modules/in-commerce/units/orders/order_calculator.php
@@ -546,8 +546,8 @@
 		{
 			$addition = 0;
 
+			/** @var kProductOptionsHelper $opt_helper */
 			$opt_helper = $this->Application->recallObject('kProductOptionsHelper');
-			/* @var $opt_helper kProductOptionsHelper */
 
 			foreach ($item_data['Options'] as $opt => $val) {
 				$sql = 'SELECT *
@@ -643,8 +643,8 @@
 		 */
 		public function generateOptionsSalt($options)
 		{
+			/** @var kProductOptionsHelper $opt_helper */
 			$opt_helper = $this->Application->recallObject('kProductOptionsHelper');
-			/* @var $opt_helper kProductOptionsHelper */
 
 			return $opt_helper->OptionsSalt($options, true);
 		}
Index: modules/in-commerce/units/orders/order_manager.php
===================================================================
--- modules/in-commerce/units/orders/order_manager.php
+++ modules/in-commerce/units/orders/order_manager.php
@@ -218,8 +218,8 @@
 		{
 			$ret = false;
 
+			/** @var kDBItem $order_item */
 			$order_item = $this->Application->recallObject('orditems.-item', null, Array('skip_autoload' => true));
-			/* @var $order_item kDBItem */
 
 			foreach ($this->operations as $operation) {
 				$item = $this->getOrderItemByOperation($operation);
@@ -377,8 +377,8 @@
 		 */
 		protected function getProductField($product_id, $field)
 		{
+			/** @var kCatDBItem $product */
 			$product = $this->Application->recallObject('p', null, Array ('skip_autoload' => true));
-			/* @var $product kCatDBItem */
 
 			if ( !$product->isLoaded() || ($product->GetID() != $product_id) ) {
 				$product->Load($product_id);
Index: modules/in-commerce/units/orders/orders_event_handler.php
===================================================================
--- modules/in-commerce/units/orders/orders_event_handler.php
+++ modules/in-commerce/units/orders/orders_event_handler.php
@@ -37,8 +37,8 @@
 				// when POST is present, then check when is beeing submitted
 				$order_session_id = $this->Application->RecallVar($event->getPrefixSpecial(true) . '_id');
 
+				/** @var OrdersItem $order_dummy */
 				$order_dummy = $this->Application->recallObject($event->Prefix . '.-item', null, Array ('skip_autoload' => true));
-				/* @var $order_dummy OrdersItem */
 
 				foreach ($items_info as $id => $field_values) {
 					if ( $order_session_id != $id ) {
@@ -176,8 +176,8 @@
 
 	function OnQuietPreSave($event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$object->IgnoreValidation = true;
 		$event->CallSubEvent('OnPreSave');
@@ -195,21 +195,21 @@
 			return ;
 		}
 
+		/** @var OrdersItem $object */
 		$object = $event->getObject();
-		/* @var $object OrdersItem */
 
 		$shipping_address_id = $this->Application->GetVar('shipping_address_id');
 		$billing_address_id = $this->Application->GetVar('billing_address_id');
 
 		if ($shipping_address_id || $billing_address_id) {
+			/** @var kCountryStatesHelper $cs_helper */
 			$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-			/* @var $cs_helper kCountryStatesHelper */
 
+			/** @var AddressesItem $address */
 			$address = $this->Application->recallObject('addr.-item','addr', Array('skip_autoload' => true));
-			/* @var $address AddressesItem */
 
+			/** @var AddressesList $addr_list */
 			$addr_list = $this->Application->recallObject('addr', 'addr_List', Array('per_page'=>-1, 'skip_counting'=>true) );
-			/* @var $addr_list AddressesList */
 
 			$addr_list->Query();
 		}
@@ -301,8 +301,8 @@
 	 */
 	function updateUserID($order_id, $event)
 	{
+		/** @var UsersItem $user */
 		$user = $this->Application->recallObject('u.current');
-		/* @var $user UsersItem */
 
 		$affiliate_id = $this->isAffiliate( $user->GetID() );
 
@@ -327,8 +327,8 @@
 
 	function isAffiliate($user_id)
 	{
+		/** @var kDBItem $affiliate_user */
 		$affiliate_user = $this->Application->recallObject('affil.-item', null, Array('skip_autoload' => true) );
-		/* @var $affiliate_user kDBItem */
 
 		$affiliate_user->Load($user_id, 'PortalUserId');
 
@@ -383,8 +383,8 @@
 
 	function PrepareCoupons($event, &$order)
 	{
+		/** @var kDBList $order_items */
 		$order_items = $this->Application->recallObject('orditems.-inv','orditems_List',Array('skip_counting'=>true,'per_page'=>-1) );
-		/* @var $order_items kDBList */
 
 		$order_items->linkToParent($order->Special);
 		$order_items->Query();
@@ -399,8 +399,9 @@
 				if (isset($item_data['AssignedCoupon']) && $item_data['AssignedCoupon']) {
 					$coupon_id = $item_data['AssignedCoupon'];
 					// clone coupon, get new coupon ID
+					/** @var kDBItem $coupon */
 					$coupon = $this->Application->recallObject('coup',null,array('skip_autload' => true));
-					/* @var $coupon kDBItem */
+
 					$coupon->Load($coupon_id);
 					if (!$coupon->isLoaded()) continue;
 
@@ -415,7 +416,7 @@
 			}
 		}
 
-		/* @var $order OrdersItem */
+		/** @var OrdersItem $order */
 		if ($assigned_coupons) {
 			$comments = $order->GetDBField('AdminComment');
 			if ($comments) $comments .= "\r\n";
@@ -445,8 +446,8 @@
 
 		$this->ReserveItems($event);
 
+		/** @var OrdersItem $order */
 		$order = $event->getObject();
-		/* @var $order OrdersItem */
 
 		$charge_result = $this->ChargeOrder($order);
 
@@ -464,8 +465,8 @@
 		}
 
 		// call CompleteOrder events for items in order BEFORE SplitOrder (because ApproveEvents are called there)
+		/** @var kDBList $order_items */
 		$order_items = $this->Application->recallObject('orditems.-inv','orditems_List',Array('skip_counting'=>true,'per_page'=>-1) );
-		/* @var $order_items kDBList */
 
 		$order_items->linkToParent($order->Special);
 		$order_items->Query(true);
@@ -539,8 +540,8 @@
 	 */
 	function setBillingAddress($event)
 	{
+		/** @var OrdersItem $object */
 		$object = $event->getObject();
-		/* @var $object OrdersItem */
 
 		if ( $object->HasTangibleItems() ) {
 			if ( $this->Application->GetVar('same_address') ) {
@@ -585,8 +586,8 @@
 
 	function OnContinueShopping($event)
 	{
+		/** @var OrderHelper $order_helper */
 		$order_helper = $this->Application->recallObject('OrderHelper');
-		/* @var $order_helper OrderHelper */
 
 		$template = $this->Application->GetVar('continue_shopping_template');
 
@@ -602,8 +603,8 @@
 	{
 		$this->OnUpdateCart($event);
 		if ( !$event->getEventParam('RecalculateChangedCart') ) {
+			/** @var OrdersItem $object */
 			$object = $event->getObject();
-			/* @var $object OrdersItem */
 
 			if ( !$object->HasTangibleItems() ) {
 				$object->SetDBField('ShippingTo', '');
@@ -680,8 +681,8 @@
 		if ( $items_info ) {
 			list($id, $field_values) = each($items_info);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$payment_type_id = $object->GetDBField('PaymentType');
 
@@ -708,8 +709,8 @@
 	 */
 	protected function OnCancelRecurring($event)
 	{
+		/** @var OrdersItem $order */
 		$order = $event->getObject();
-		/* @var $order OrdersItem */
 
 		$order->SetDBField('IsRecurringBilling', 0);
 		$order->Update();
@@ -730,8 +731,8 @@
 	{
 		parent::OnAfterItemUpdate($event);
 
+		/** @var OrdersItem $object */
 		$object = $event->getObject();
-		/* @var $object OrdersItem */
 
 		$cvv2 = $object->GetDBField('PaymentCVV2');
 
@@ -766,8 +767,8 @@
 		}
 		else {
 			// strange: recalculate total amount on error
+			/** @var OrdersItem $object */
 			$object = $event->getObject();
-			/* @var $object OrdersItem */
 
 			$object->SetDBField('TotalAmount', $object->getTotalAmount());
 		}
@@ -784,16 +785,16 @@
 			return ;
 		}
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
+		/** @var kDBList $addr_list */
 		$addr_list = $this->Application->recallObject('addr', 'addr_List', Array ('per_page' => -1, 'skip_counting' => true));
-		/* @var $addr_list kDBList */
 
 		$addr_list->Query();
 
+		/** @var AddressesItem $address_dummy */
 		$address_dummy = $this->Application->recallObject('addr.-item', null, Array ('skip_autoload' => true));
-		/* @var $address_dummy AddressesItem */
 
 		$address_prefixes = Array ('Billing', 'Shipping');
 		$address_fields = Array (
@@ -851,8 +852,8 @@
 			return;
 		}
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		// 1. delete given order item by id
 		$delete_id = $this->Application->GetVar('delete_id');
@@ -882,8 +883,8 @@
 		// 4. remove "orditems" object of kDBItem class, since getOrderInfo uses kDBList object under same prefix
 		$this->Application->removeObject('orditems');
 
+		/** @var OrderHelper $order_helper */
 		$order_helper = $this->Application->recallObject('OrderHelper');
-		/* @var $order_helper OrderHelper */
 
 		$event->status = kEvent::erSTOP;
 		$currency = $this->Application->GetVar('currency', 'selected');
@@ -938,8 +939,8 @@
 
 			$item_data = $default_item_data;
 
+			/** @var ProductsItem $product */
 			$product = $this->Application->recallObject('p', null, Array('skip_autoload' => true));
-			/* @var $product ProductsItem */
 
 			$product->Load($item_id);
 
@@ -969,8 +970,8 @@
 			{
 				$package_content_ids = $product->GetPackageContentIds();
 
+				/** @var ProductsItem $product_package_item */
 				$product_package_item = $this->Application->recallObject('p.-packageitem');
-				/* @var $product_package_item ProductsItem */
 
 				$package_item_data = array();
 
@@ -1123,8 +1124,8 @@
 
 		if (!$options) return;
 
+		/** @var kDBItem $ord_item */
 		$ord_item = $this->Application->recallObject('orditems.-opt', null, Array ('skip_autoload' => true));
-		/* @var $ord_item kDBItem */
 
 		$ord_item->Load($this->Application->GetVar('orditems_id'));
 
@@ -1186,11 +1187,11 @@
 			return ;
 		}
 
+		/** @var OrdersItem $object */
 		$object = $event->getObject();
-		/* @var $object OrdersItem */
 
+		/** @var kDBItem $coupon */
 		$coupon = $this->Application->recallObject('coup', null, Array ('skip_autoload' => true));
-		/* @var $coupon kDBItem */
 
 		$coupon->Load($code, 'Code');
 
@@ -1231,8 +1232,9 @@
 		$coupon->Update();
 
 		$this->Application->setUnitOption('ord', 'AutoLoad', true);
+
+		/** @var OrdersItem $order */
 		$order = $this->Application->recallObject('ord');
-		/* @var $order OrdersItem */
 
 		$order->SetDBField('CouponId', $coupon->GetDBField('CouponId'));
 		$order->SetDBField('CouponName', $coupon->GetDBField('Name')); // calculated field
@@ -1251,8 +1253,8 @@
 	 */
 	function OnRemoveCoupon($event)
 	{
+		/** @var OrdersItem $object */
 		$object = $event->getObject();
-		/* @var $object OrdersItem */
 
 		$this->RemoveCoupon($object);
 		$object->setCheckoutError(OrderCheckoutErrorType::COUPON, OrderCheckoutError::COUPON_REMOVED);
@@ -1267,8 +1269,8 @@
 	 */
 	function RemoveCoupon(&$object)
 	{
+		/** @var kDBItem $coupon */
 		$coupon = $this->Application->recallObject('coup', null, Array('skip_autoload' => true));
-		/* @var $coupon kDBItem */
 
 		$coupon->Load( $object->GetDBField('CouponId') );
 
@@ -1411,8 +1413,8 @@
 			// if we already know, that there is no such order,
 			// then don't run database query, that will confirm that
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$object->Clear($id);
 			return;
@@ -1428,8 +1430,8 @@
 	 */
 	function _createNewCart($event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject( Array('skip_autoload' => true) );
-		/* @var $object kDBItem */
 
 		$this->setNextOrderNumber($event);
 		$object->SetDBField('Status', ORDER_STATUS_INCOMPLETE);
@@ -1437,8 +1439,8 @@
 
 		// get user
 		if ( $this->Application->LoggedIn() ) {
+			/** @var UsersItem $user */
 			$user = $this->Application->recallObject('u.current');
-			/* @var $user UsersItem */
 
 			$user_id = $user->GetID();
 			$object->SetDBField('BillingEmail', $user->GetDBField('Email'));
@@ -1522,11 +1524,11 @@
 	 */
 	function SetStepRequiredFields($event)
 	{
+		/** @var OrdersItem $order */
 		$order = $event->getObject();
-		/* @var $order OrdersItem */
 
+		/** @var kCountryStatesHelper $cs_helper */
 		$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-		/* @var $cs_helper kCountryStatesHelper */
 
 		$items_info = $this->Application->GetVar($event->getPrefixSpecial(true));
 		if ($items_info) {
@@ -1586,8 +1588,8 @@
 			return;
 		}
 
+		/** @var OrdersItem $order */
 		$order = $event->getObject();
-		/* @var $order OrdersItem */
 
 		$ses_user = $this->Application->RecallVar('user_id');
 
@@ -1616,8 +1618,8 @@
 	{
 		parent::OnPreCreate($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$this->setNextOrderNumber($event);
 
@@ -1665,8 +1667,8 @@
 
 	function OnReserveItems($event)
 	{
+		/** @var kDBList $order_items */
 		$order_items = $this->Application->recallObject('orditems.-inv','orditems_List',Array('skip_counting'=>true,'per_page'=>-1) );
-		/* @var $order_items kDBList */
 
 		$order_items->linkToParent('-inv');
 		// force re-query, since we are updateing through orditem ITEM, not the list, and
@@ -1678,16 +1680,16 @@
 		// query all combinations used in this order
 
 
+		/** @var kCatDBItem $product_object */
 		$product_object = $this->Application->recallObject('p', null, Array('skip_autoload' => true));
-		/* @var $product_object kCatDBItem */
 
 		$product_object->SwitchToLive();
 
+		/** @var kDBItem $order_item */
 		$order_item = $this->Application->recallObject('orditems.-item', null, Array('skip_autoload' => true));
-		/* @var $order_item kDBItem */
 
+		/** @var kDBItem $combination_item */
 		$combination_item = $this->Application->recallObject('poc.-item', null, Array('skip_autoload' => true));
-		/* @var $combination_item kDBItem */
 
 		$combinations = $this->queryCombinations($order_items);
 
@@ -1758,8 +1760,8 @@
 		$from_tab = substr($event->Name, strlen('OnResetTo'));
 
 		// load values from db
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		// update values from submit
 		$field_values = $this->getSubmittedFields($event);
@@ -1947,16 +1949,16 @@
 	 */
 	function restoreOrder(&$order_items)
 	{
+		/** @var kCatDBItem $product_object */
 		$product_object = $this->Application->recallObject('p', null, Array('skip_autoload' => true));
-		/* @var $product_object kCatDBItem */
 
 		$product_object->SwitchToLive();
 
+		/** @var kDBItem $order_item */
 		$order_item = $this->Application->recallObject('orditems.-item', null, Array('skip_autoload' => true));
-		/* @var $order_item kDBItem */
 
+		/** @var kDBItem $combination_item */
 		$combination_item = $this->Application->recallObject('poc.-item', null, Array('skip_autoload' => true));
-		/* @var $combination_item kDBItem */
 
 		$combinations = $this->queryCombinations($order_items);
 
@@ -1985,8 +1987,8 @@
 			$inv_object->SetDBField('QtyInStock', $inv_object->GetDBField('QtyInStock') + $rec['QuantityReserved']);
 			$inv_object->Update();
 
+			/** @var ProductsEventHandler $product_h */
 			$product_h = $this->Application->recallObject('p_EventHandler');
-			/* @var $product_h ProductsEventHandler */
 
 			if ($product_object->GetDBField('InventoryStatus') == 2) {
 				// inventory by options, then restore changed combination values back to common $combinations array !!!
@@ -2024,8 +2026,8 @@
 		}
 
 		// process order products
+		/** @var kDBItem $object */
 		$object = $this->Application->recallObject($event->Prefix . '.-inv', null, Array ('skip_autoload' => true));
-		/* @var $object kDBItem */
 
 		$ids = $this->StoreSelectedIDs($event);
 
@@ -2057,15 +2059,15 @@
 			'OnOrderProcess' 		=> ORDER_STATUS_TOSHIP,
 		);
 
+		/** @var kDBList $order_items */
 		$order_items = $this->Application->recallObject('orditems.-inv','orditems_List',Array('skip_counting'=>true,'per_page'=>-1) );
-		/* @var $order_items kDBList */
 
 		$order_items->linkToParent('-inv');
 		$order_items->Query();
 		$order_items->GoFirst();
 
+		/** @var OrdersItem $object */
 		$object = $this->Application->recallObject($event->Prefix.'.-inv');
-		/* @var $object OrdersItem */
 
 		if ($object->GetDBField('OnHold')) {
 			// any actions have no effect while on hold
@@ -2113,8 +2115,8 @@
 				$object->SetDBField('GWResult2', $gateway_object->getGWResponce() );
 
 				if ($charge_result) {
+					/** @var ProductsItem $product_object */
 					$product_object = $this->Application->recallObject('p', null, Array('skip_autoload' => true));
-					/* @var $product_object ProductsItem */
 
 					foreach ($order_items->Records as $product_item) {
 						if (!$product_item['ProductId']) {
@@ -2192,8 +2194,8 @@
 				$shipping_info = $object->GetDBField('ShippingInfo');
 
 				if ($shipping_info) {
+					/** @var ShippingQuoteCollector $quote_engine_collector */
 					$quote_engine_collector = $this->Application->recallObject('ShippingQuoteCollector');
-					/* @var $quote_engine_collector ShippingQuoteCollector */
 
 					$shipping_info = unserialize($shipping_info);
 					$sqe_class_name = $quote_engine_collector->GetClassByType($shipping_info, 1);
@@ -2201,8 +2203,8 @@
 
 				// try to create usps order
 				if (($object->GetDBField('ShippingType') == 0) && ($sqe_class_name !== false)) {
+					/** @var ShippingQuoteEngine $shipping_quote_engine */
 					$shipping_quote_engine = $this->Application->recallObject($sqe_class_name);
-					/* @var $shipping_quote_engine ShippingQuoteEngine */
 
 					$ret = $shipping_quote_engine->MakeOrder($object);
 				}
@@ -2411,8 +2413,8 @@
 	{
 		parent::OnAfterItemLoad($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		// get user fields
 		$user_id = $object->GetDBField('PortalUserId');
@@ -2436,8 +2438,8 @@
 
 		$object->SetDBField('PaymentCVV2', $this->Application->RecallVar('CVV2Code'));
 
+		/** @var kCountryStatesHelper $cs_helper */
 		$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-		/* @var $cs_helper kCountryStatesHelper */
 
 		$cs_helper->PopulateStates($event, 'ShippingState', 'ShippingCountry');
 		$cs_helper->PopulateStates($event, 'BillingState', 'BillingCountry');
@@ -2459,8 +2461,8 @@
 	{
 		parent::OnBeforeItemCreate($event);
 
+		/** @var kCountryStatesHelper $cs_helper */
 		$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-		/* @var $cs_helper kCountryStatesHelper */
 
 		$cs_helper->PopulateStates($event, 'ShippingState', 'ShippingCountry');
 		$cs_helper->PopulateStates($event, 'BillingState', 'BillingCountry');
@@ -2477,8 +2479,8 @@
 	{
 		parent::OnBeforeItemUpdate($event);
 
+		/** @var OrdersItem $object */
 		$object = $event->getObject();
-		/* @var $object OrdersItem */
 
 		$old_payment_type = $object->GetOriginalField('PaymentType');
 		$new_payment_type = $object->GetDBField('PaymentType');
@@ -2495,8 +2497,8 @@
 			}
 		}
 
+		/** @var kCountryStatesHelper $cs_helper */
 		$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-		/* @var $cs_helper kCountryStatesHelper */
 
 		$cs_helper->PopulateStates($event, 'ShippingState', 'ShippingCountry');
 		$cs_helper->PopulateStates($event, 'BillingState', 'BillingCountry');
@@ -2532,8 +2534,8 @@
 
 		// guess fields from "One Step Checkout" form
 		if ( $object->GetDBField('PaymentAccount') ) {
+			/** @var OrderHelper $order_helper */
 			$order_helper = $this->Application->recallObject('OrderHelper');
-			/* @var $order_helper OrderHelper */
 
 			$object->SetDBField(
 				'PaymentCardType',
@@ -2562,11 +2564,11 @@
 	 */
 	protected function createAccountFromOrder($event)
 	{
+		/** @var OrdersItem $order */
 		$order = $event->getObject();
-		/* @var $order OrdersItem */
 
+		/** @var OrderHelper $order_helper */
 		$order_helper = $this->Application->recallObject('OrderHelper');
-		/* @var $order_helper OrderHelper */
 
 		$user_fields = $order_helper->getUserFields($order);
 		$user_fields['Password'] = $order->GetDBField('UserPassword_plain');
@@ -2578,8 +2580,8 @@
 			$this->Application->HandleEvent(new kEvent('u.register:OnCreate'));
 		}
 		else {
+			/** @var UsersItem $user */
 			$user = $this->Application->recallObject('u.current');
-			/* @var $user UsersItem */
 
 			$user->SetFieldsFromHash($user_fields);
 			if ( !$user->Update() ) {
@@ -2600,8 +2602,8 @@
 	{
 		parent::SetCustomQuery($event);
 
+		/** @var kDBList $object */
 		$object = $event->getObject();
-		/* @var $object kDBList */
 
 		$types = $event->getEventParam('types');
 		if ( $types == 'myorders' || $types == 'myrecentorders' ) {
@@ -2908,8 +2910,8 @@
 
 		$skip_types = Array (PRODUCT_TYPE_TANGIBLE, PRODUCT_TYPE_DOWNLOADABLE);
 		foreach ($sub_orders as $sub_order_data) {
+			/** @var OrdersItem $sub_order */
 			$sub_order = $this->Application->recallObject('ord.-sub'.$next_sub_number, 'ord');
-			/* @var $sub_order OrdersItem */
 
 			if ( $this->UseTempTables($event) && $next_sub_number == 0 ) {
 				$sub_order =& $order;
@@ -3114,16 +3116,16 @@
 		}
 
 		// Loading product to add
+		/** @var kDBItem $product */
 		$product = $this->Application->recallObject('p.toadd', null, Array('skip_autoload' => true));
-		/* @var $product kDBItem */
 
 		$product->Load($item_id);
 
+		/** @var kDBItem $object */
 		$object = $this->Application->recallObject('orditems.-item', null, Array('skip_autoload' => true));
-		/* @var $object kDBItem */
 
+		/** @var kDBItem $order */
 		$order = $this->Application->recallObject('ord');
-		/* @var $order kDBItem */
 
 		if (!$order->isLoaded() && !$this->Application->isAdmin) {
 			// no order was created before -> create one now
@@ -3145,8 +3147,8 @@
 			return;
 		}
 
+		/** @var OrderManager $manager */
 		$manager = $this->Application->recallObject('OrderManager');
-		/* @var $manager OrderManager */
 
 		$manager->setOrder($order);
 		$manager->addProduct($product, $event->getEventParam('ItemData'), $qty, $package_num);
@@ -3166,8 +3168,8 @@
 			return;
 		}
 
+		/** @var OrdersItem $object */
 		$object = $event->getObject();
-		/* @var $object OrdersItem */
 
 		$shipping_total = $insurance_fee = 0;
 		$shipping_info = $object->GetDBField('ShippingInfo') ? unserialize($object->GetDBField('ShippingInfo')) : false;
@@ -3202,8 +3204,8 @@
 			return ;
 		}
 
+		/** @var OrdersItem $order */
 		$order = $event->getObject();
-		/* @var $order OrdersItem */
 
 		if ( !$order->isLoaded() ) {
 			$this->LoadItem($event); // try to load
@@ -3218,8 +3220,8 @@
 			return;
 		}
 
+		/** @var OrderManager $manager */
 		$manager = $this->Application->recallObject('OrderManager');
-		/* @var $manager OrderManager */
 
 		$manager->setOrder($order);
 		$result = $manager->calculate();
@@ -3328,8 +3330,8 @@
 	 */
 	function UpdateShippingTypes($event)
 	{
+		/** @var OrdersItem $object */
 		$object = $event->getObject();
-		/* @var $object OrdersItem */
 
 		$ord_id = $object->GetID();
 
@@ -3347,8 +3349,8 @@
 		$template = $this->Application->GetVar('t');
 		$shipping_templates = Array ('in-commerce/checkout/shipping', 'in-commerce/orders/orders_edit_shipping');
 
+		/** @var ShippingQuoteCollector $quote_engine_collector */
 		$quote_engine_collector = $this->Application->recallObject('ShippingQuoteCollector');
-		/* @var $quote_engine_collector ShippingQuoteCollector */
 
 		foreach ($shipping_ids as $package => $id) {
 			// try to validate
@@ -3356,8 +3358,8 @@
 			$sqe_class_name = $quote_engine_collector->GetClassByType($shipping_types, $package);
 
 			if (($object->GetDBField('ShippingType') == 0) && ($sqe_class_name !== false) && in_array($template, $shipping_templates)) {
+				/** @var ShippingQuoteEngine $shipping_quote_engine */
 				$shipping_quote_engine = $this->Application->recallObject($sqe_class_name);
-				/* @var $shipping_quote_engine ShippingQuoteEngine */
 
 				// USPS related part
 				// TODO: remove USPS condition from here
@@ -3410,8 +3412,8 @@
 
 	function RecalculateTax($event)
 	{
+		/** @var OrdersItem $object */
 		$object = $event->getObject();
-		/* @var $object OrdersItem */
 
 		if ($object->GetDBField('Status') > ORDER_STATUS_PENDING) {
 			return;
@@ -3436,8 +3438,8 @@
 
 	function UpdateTotals($event)
 	{
+		/** @var OrdersItem $object */
 		$object = $event->getObject();
-		/* @var $object OrdersItem */
 
 		$object->UpdateTotals();
 	}
@@ -3504,8 +3506,8 @@
 
 		$prefix_special = $event->Prefix.'.'.$this->getSpecialByType($order_status);
 
+		/** @var kDBList $orders_list */
 		$orders_list = $this->Application->recallObject($prefix_special, $event->Prefix.'_List', Array('per_page'=>-1) );
-		/* @var $orders_list kDBList */
 
 		$orders_list->Query();
 
@@ -3529,8 +3531,8 @@
 	 */
 	function OnResetToPending($event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject( Array('skip_autoload' => true) );
-		/* @var $object kDBItem */
 
 		$items_info = $this->Application->GetVar($event->getPrefixSpecial(true));
 
@@ -3665,8 +3667,8 @@
 		$this->Application->InitParser();
 		$o = $this->Application->ParseBlock(array('name'=>'in-commerce/orders/orders_pdf'));
 
+		/** @var FileHelper $file_helper */
 		$file_helper = $this->Application->recallObject('FileHelper');
-		/* @var $file_helper FileHelper */
 
 		$file_helper->CheckFolder(EXPORT_PATH);
 
@@ -3763,8 +3765,8 @@
 		$fields['Number']['format'] = str_replace('%06d', '%0'.$order_number.'d', $fields['Number']['format']);
 		$fields['SubNumber']['format'] = str_replace('%03d', '%0'.$order_sub_number.'d', $fields['SubNumber']['format']);
 
+		/** @var SiteHelper $site_helper */
 		$site_helper = $this->Application->recallObject('SiteHelper');
-		/* @var $site_helper SiteHelper */
 
 		$fields['BillingCountry']['default'] = $site_helper->getDefaultCountry('Billing');
 		$fields['ShippingCountry']['default'] = $site_helper->getDefaultCountry('Shipping');
@@ -3921,8 +3923,8 @@
 			return true;
 		}
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		if ( !$object->isLoaded() ) {
 			return true;
@@ -3945,11 +3947,11 @@
 			return;
 		}
 
+		/** @var OrdersItem $object */
 		$object = $event->getObject();
-		/* @var $object OrdersItem */
 
+		/** @var kDBItem $gift_certificate */
 		$gift_certificate = $this->Application->recallObject('gc', null, Array ('skip_autoload' => true));
-		/* @var $gift_certificate kDBItem */
 
 		$gift_certificate->Load($code, 'Code');
 
@@ -3986,8 +3988,8 @@
 	 */
 	function OnRemoveGiftCertificate($event)
 	{
+		/** @var OrdersItem $object */
 		$object = $event->getObject();
-		/* @var $object OrdersItem */
 
 		$this->RemoveGiftCertificate($object);
 		$object->setCheckoutError(OrderCheckoutErrorType::GIFT_CERTIFICATE, OrderCheckoutError::GC_REMOVED);
@@ -4002,8 +4004,8 @@
 
 	function RecalculateGift($event)
 	{
+		/** @var OrdersItem $object */
 		$object = $event->getObject();
-		/* @var $object OrdersItem */
 
 		if ($object->GetDBField('Status') > ORDER_STATUS_PENDING) {
 			return ;
@@ -4034,8 +4036,8 @@
 		ini_set('memory_limit', '300M');
 		ini_set('max_execution_time', '0');
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$file = $object->GetDBField('ShippingTracking') . '.pdf';
 		$full_path = USPS_LABEL_FOLDER . $file;
@@ -4062,8 +4064,8 @@
 
 		$create_account = $this->Application->GetVar('create_account');
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$required_fields = Array ('UserPassword', 'UserPassword_plain', 'VerifyUserPassword', 'VerifyUserPassword_plain');
 		$object->setRequired($required_fields, $create_account);
Index: modules/in-commerce/units/orders/orders_item.php
===================================================================
--- modules/in-commerce/units/orders/orders_item.php
+++ modules/in-commerce/units/orders/orders_item.php
@@ -118,8 +118,8 @@
 		 */
 		function getTaxPercent()
 		{
+			/** @var kCountryStatesHelper $cs_helper */
 			$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-			/* @var $cs_helper kCountryStatesHelper */
 
 			$shipping_country_id = $cs_helper->getCountryStateId($this->GetDBField('ShippingCountry'), DESTINATION_TYPE_COUNTRY);
 			$shipping_state_id = $cs_helper->getCountryStateId($this->GetDBField('ShippingState'), DESTINATION_TYPE_STATE);
@@ -292,8 +292,8 @@
 				return;
 			}
 
+			/** @var kDBItem $gc */
 			$gc = $this->Application->recallObject('gc', null, Array('skip_autoload' => true));
-			/* @var $gc kDBItem */
 
 			$gc->Load($gc_id);
 
@@ -333,8 +333,8 @@
 		{
 			$gc_id = $this->GetDBField('GiftCertificateId');
 
+			/** @var kDBItem $gc */
 			$gc = $this->Application->recallObject('gc', null, Array('skip_autoload' => true));
-			/* @var $gc kDBItem */
 
 			$gc->Load($gc_id);
 
Index: modules/in-commerce/units/orders/orders_tag_processor.php
===================================================================
--- modules/in-commerce/units/orders/orders_tag_processor.php
+++ modules/in-commerce/units/orders/orders_tag_processor.php
@@ -185,15 +185,15 @@
 
 		function ItemsInCart($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			if ( $object->GetDBField('Status') != ORDER_STATUS_INCOMPLETE || $object->GetID() == FAKE_ORDER_ID ) {
 				return 0;
 			}
 
+			/** @var kDBList $object */
 			$object = $this->Application->recallObject('orditems', 'orditems_List');
-			/* @var $object kDBList */
 
 			$object->Query();
 
@@ -242,8 +242,8 @@
 			$o = '';
 			$limitations_cache = Array ();
 
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			$ord_id = $object->GetID();
 			$oi_table = $this->Application->getUnitOption('orditems', 'TableName');
@@ -435,8 +435,8 @@
 		 */
 		function AddressValid($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			$address_type = isset($params['type']) ? strtolower($params['type']) : 'shipping';
 			$address_type = ucfirst($address_type);
@@ -856,19 +856,19 @@
 			}
 
 			if ( isset($params['user_prefix']) ) {
+				/** @var kDBItem $user */
 				$user = $this->Application->recallObject($params['user_prefix']);
-				/* @var $user kDBItem */
 			}
 			else {
+				/** @var kDBItem $user */
 				$user = $this->Application->recallObject('u', null, Array ('skip_autoload' => true));
-				/* @var $user kDBItem */
 			}
 
+			/** @var OrdersItem $order */
 			$order = $this->Application->recallObject($this->Prefix . '.last');
-			/* @var $order OrdersItem */
 
+			/** @var OrderHelper $order_helper */
 			$order_helper = $this->Application->recallObject('OrderHelper');
-			/* @var $order_helper OrderHelper */
 
 			$user_fields = $order_helper->getUserFields($order, $params['type'] == 'billing' ? 'Billing' : 'Shipping');
 
@@ -878,8 +878,8 @@
 				}
 			}
 
+			/** @var kCountryStatesHelper $cs_helper */
 			$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-			/* @var $cs_helper kCountryStatesHelper */
 
 			$cs_helper->PopulateStates(new kEvent('u:OnBuild'), 'State', 'Country');
 		}
@@ -1046,11 +1046,11 @@
 		 */
 		function PrintOrderInfo($params)
 		{
+			/** @var OrderHelper $order_helper */
 			$order_helper = $this->Application->recallObject('OrderHelper');
-			/* @var $order_helper OrderHelper */
 
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			$currency = isset($params['currency']) ? $params['currency'] : 'selected';
 
@@ -1107,8 +1107,8 @@
 
 		function GetFormAction($params)
 		{
+			/** @var OrdersItem $object */
 			$object = $this->getObject($params);
-			/* @var $object OrdersItem */
 
 			$gw_data = $object->getGatewayData( isset($params['payment_type_id']) ? $params['payment_type_id'] : null );
 
@@ -1120,8 +1120,8 @@
 
 		function GetFormHiddenFields($params)
 		{
+			/** @var OrdersItem $object */
 			$object = $this->getObject($params);
-			/* @var $object OrdersItem */
 
 			$gw_data = $object->getGatewayData( isset($params['payment_type_id']) ? $params['payment_type_id'] : null );
 
@@ -1146,8 +1146,8 @@
 
 		function NeedsPlaceButton($params)
 		{
+			/** @var OrdersItem $object */
 			$object = $this->getObject($params);
-			/* @var $object OrdersItem */
 
 			$gw_data = $object->getGatewayData( isset($params['payment_type_id']) ? $params['payment_type_id'] : null );
 
@@ -1171,8 +1171,8 @@
 
 		function ShippingType($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			$shipping_info = unserialize($object->GetDBField('ShippingInfo'));
 
@@ -1262,8 +1262,8 @@
 		 */
 		protected function PrintTotals($params)
 		{
+			/** @var OrdersItem $object */
 			$object = $this->getObject($params);
-			/* @var $object OrdersItem */
 
 			if ( isset($params['element_order']) ) {
 				// TODO: implement
@@ -1487,8 +1487,8 @@
 		 */
 		function TotalOrderWeight($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			$sql = 'SELECT SUM( IF(oi.Weight IS NULL, 0, oi.Weight * oi.Quantity) )
 					FROM '.TABLE_PREFIX.'OrderItems oi
@@ -1505,8 +1505,8 @@
 
 		function _formatWeight($weight)
 		{
+			/** @var kDBItem $regional */
 			$regional = $this->Application->recallObject('lang.current');
-			/* @var $regional kDBItem */
 
 			switch ( $regional->GetDBField('UnitSystem') ) {
 				case 1:
@@ -1585,8 +1585,8 @@
 				return '';
 			}
 
+			/** @var OrdersItem $object */
 			$object = $this->getObject($params);
-			/* @var $object OrdersItem */
 
 			$gw_data = $object->getGatewayData($payment_type_id);
 
@@ -1605,8 +1605,8 @@
 		 */
 		function USPSLabelFound($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			$full_path = USPS_LABEL_FOLDER . $object->GetDBField( $params['field'] ) . '.pdf';
 
@@ -1653,8 +1653,8 @@
 		 */
 		protected function ContinueShoppingLink($params)
 		{
+			/** @var OrderHelper $order_helper */
 			$order_helper = $this->Application->recallObject('OrderHelper');
-			/* @var $order_helper OrderHelper */
 
 			if ( isset($params['template']) ) {
 				$template = $params['template'];
@@ -1676,8 +1676,8 @@
 		 */
 		protected function AddressesTheSame($params)
 		{
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			$address_fields = Array ('To', 'Company', 'Address1', 'Address2', 'City', 'Country', 'State', 'Zip');
 
Index: modules/in-commerce/units/payment_type/payment_type_event_handler.php
===================================================================
--- modules/in-commerce/units/payment_type/payment_type_event_handler.php
+++ modules/in-commerce/units/payment_type/payment_type_event_handler.php
@@ -77,8 +77,8 @@
 
 	function OnMassDecline($event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject(Array ('skip_autoload' => true));
-		/* @var $object kDBItem */
 
 		$this->StoreSelectedIDs($event);
 		$ids = $this->getSelectedIDs($event);
@@ -117,8 +117,8 @@
 	{
 		parent::OnBeforeItemUpdate($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$status_field = $object->getStatusField();
 
@@ -154,8 +154,8 @@
 	protected function customProcessing(kEvent $event, $type)
 	{
 		if ( $event->Name == 'OnMassDelete' && $type == 'before' ) {
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$ids_ok = Array ();
 			$ids = $event->getEventParam('ids');
@@ -239,8 +239,8 @@
 	public function getPassedID(kEvent $event)
 	{
 		if ( $event->Special == 'auto-ord' ) {
+			/** @var kDBItem $main_object */
 			$main_object = $this->Application->recallObject('ord');
-			/* @var $main_object kDBItem */
 
 			return $main_object->GetDBField('PaymentType');
 		}
@@ -267,8 +267,8 @@
 	{
 		parent::SetCustomQuery($event);
 
+		/** @var kDBList $object */
 		$object = $event->getObject();
-		/* @var $object kDBList */
 
 		if ( in_array($event->Special, Array ('enabled', 'selected', 'available')) || !$this->Application->isAdminUser ) {
 			// "enabled" special or Front-End
@@ -277,8 +277,8 @@
 
 		// site domain payment type picker
 		if ( $event->Special == 'selected' || $event->Special == 'available' ) {
+			/** @var EditPickerHelper $edit_picker_helper */
 			$edit_picker_helper = $this->Application->recallObject('EditPickerHelper');
-			/* @var $edit_picker_helper EditPickerHelper */
 
 			$edit_picker_helper->applyFilter($event, 'PaymentTypes');
 		}
Index: modules/in-commerce/units/payment_type_currencies/payment_type_currencies_event_handler.php
===================================================================
--- modules/in-commerce/units/payment_type_currencies/payment_type_currencies_event_handler.php
+++ modules/in-commerce/units/payment_type_currencies/payment_type_currencies_event_handler.php
@@ -30,8 +30,8 @@
 				return;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject(Array ('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			$pt_id = $this->Application->GetVar('pt_id');
 
Index: modules/in-commerce/units/pricing/pricing_event_handler.php
===================================================================
--- modules/in-commerce/units/pricing/pricing_event_handler.php
+++ modules/in-commerce/units/pricing/pricing_event_handler.php
@@ -188,8 +188,8 @@
 	{
 		if( $this->Application->GetVar('pr_tang') ) {
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$product_id = $this->Application->GetVar('p_id');
 			$group_id = $this->Application->getVar('group_id');
@@ -255,8 +255,8 @@
 	 */
 	protected function customProcessing(kEvent $event, $type)
 	{
+		/** @var kDBItem $bracket */
 		$bracket = $event->getObject();
-		/* @var $bracket kDBItem */
 
 		switch ($type) {
 			case 'before':
@@ -405,8 +405,8 @@
 	{
 		parent::OnBeforeItemUpdate($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		if ( $object->GetDBField('IsPrimary') == 1 ) {
 			// make all prices non primary, when this one is
@@ -428,8 +428,8 @@
 	{
 		parent::OnBeforeItemCreate($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$table_info = $object->getLinkedInfo($event->Special);
 
@@ -463,8 +463,8 @@
 	 */
 	protected function SetCustomQuery(kEvent $event)
 	{
+		/** @var kDBList $object */
 		$object = $event->getObject();
-		/* @var $object kDBList */
 
 		if ( $this->Application->isAdminUser ) {
 			return;
Index: modules/in-commerce/units/pricing/pricing_tag_processor.php
===================================================================
--- modules/in-commerce/units/pricing/pricing_tag_processor.php
+++ modules/in-commerce/units/pricing/pricing_tag_processor.php
@@ -33,8 +33,8 @@
 
 		// convert primary currency to selected (if they are the same, converter will just return)
 
+		/** @var CurrencyRates $converter */
 		$converter = $this->Application->recallObject('CurrencyRates');
-		/* @var $converter CurrencyRates */
 
 		$price = $converter->Convert($price, 'PRIMARY', $iso);
 
@@ -94,8 +94,8 @@
 
 			usort($brackets, 'pr_bracket_comp');
 
+			/** @var kDBItem $dummy */
 			$dummy = $this->Application->recallObject($this->Prefix.'.-dummy', null, array('skip_autoload' => true));
-			/* @var $dummy kDBItem */
 
 			foreach($brackets as $id => $values)
 			{
Index: modules/in-commerce/units/product_option_combinations/product_option_combinations_event_handler.php
===================================================================
--- modules/in-commerce/units/product_option_combinations/product_option_combinations_event_handler.php
+++ modules/in-commerce/units/product_option_combinations/product_option_combinations_event_handler.php
@@ -32,8 +32,8 @@
 		switch ($event->Name) {
 			case 'OnCreate':
 			case 'OnUpdate':
+				/** @var kDBItem $object */
 				$object = $event->getObject();
-				/* @var $object kDBItem */
 
 				$options = unserialize($object->GetDBField('Combination'));
 				ksort($options);
@@ -42,8 +42,8 @@
 
 			case 'OnMassDelete':
 				// delete only option combinations that has no associated inventory
+				/** @var kDBItem $object */
 				$object = $event->getObject();
-				/* @var $object kDBItem */
 
 				$ids = $event->getEventParam('ids');
 
@@ -92,8 +92,8 @@
 		}
 
 		if (!$recursed) {
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$salt = $fields['Combination'];
 			ksort($salt);
@@ -137,8 +137,8 @@
 		}
 
 		if (!$recursed) {
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$edit_id = $object->GetId();
 			$salt = $fields['Combination'];
@@ -169,8 +169,8 @@
 	 */
 	protected function OnCreate(kEvent $event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject(Array ('skip_autoload' => true));
-		/* @var $object kDBItem */
 
 		$items_info = $this->Application->GetVar($event->getPrefixSpecial(true));
 
@@ -202,8 +202,8 @@
 	 */
 	protected function OnUpdate(kEvent $event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject( Array('skip_autoload' => true) );
-		/* @var $object kDBItem */
 
 		$items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) );
 		if($items_info)
@@ -248,8 +248,8 @@
 	 */
 	protected function OnItemBuild(kEvent $event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$this->dbBuild($object, $event);
 
@@ -265,8 +265,8 @@
 			$this->LoadItem($event);
 		}
 
+		/** @var Params $actions */
 		$actions = $this->Application->recallObject('kActions');
-		/* @var $actions Params */
 
 		$actions->Set($event->getPrefixSpecial() . '_GoTab', '');
 		$actions->Set($event->getPrefixSpecial() . '_GoId', '');
@@ -281,8 +281,8 @@
 	 */
 	protected function LoadItem(kEvent $event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$id = $this->getPassedID($event);
 
@@ -293,8 +293,8 @@
 		}
 
 		if ( $object->Load($id) ) {
+			/** @var Params $actions */
 			$actions = $this->Application->recallObject('kActions');
-			/* @var $actions Params */
 
 			$actions->Set($event->getPrefixSpecial() . '_id', $object->GetId());
 		}
@@ -336,8 +336,8 @@
 
 		$event->Init($event->Prefix, '-item');
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$options_mapping = $this->Application->GetVar('poc_mapping');
 		if ( !$options_mapping ) {
@@ -386,14 +386,14 @@
 		$inventory_status = $this->Conn->GetOne($sql);
 
 		if ( $inventory_status == ProductInventory::BY_OPTIONS ) {
+			/** @var kDBItem $live_object */
 			$live_object = $this->Application->recallObject($event->Prefix . '.itemlive', null, Array ('skip_autoload' => true));
-			/* @var $live_object kDBItem */
 
 			$live_object->SwitchToLive();
 			$live_object->Load($id);
 
+			/** @var kDBItem $temp_object */
 			$temp_object = $this->Application->recallObject($event->Prefix . '.itemtemp', null, Array ('skip_autoload' => true));
-			/* @var $temp_object kDBItem */
 
 			$temp_object->SwitchToTemp();
 			$temp_object->Load($id);
Index: modules/in-commerce/units/product_options/product_options_event_handler.php
===================================================================
--- modules/in-commerce/units/product_options/product_options_event_handler.php
+++ modules/in-commerce/units/product_options/product_options_event_handler.php
@@ -30,8 +30,8 @@
 			$selectable_only = $event->getEventParam('selectable_only');
 
 			if ( $selectable_only ) {
+				/** @var kDBList $object */
 				$object = $event->getObject();
-				/* @var $object kDBList */
 
 				$object->addFilter('types_filter', 'OptionType IN (1,3,6)');
 			}
Index: modules/in-commerce/units/product_options/product_options_tag_processor.php
===================================================================
--- modules/in-commerce/units/product_options/product_options_tag_processor.php
+++ modules/in-commerce/units/product_options/product_options_tag_processor.php
@@ -17,11 +17,11 @@
 
 	function ShowOptions($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
+		/** @var kProductOptionsHelper $opt_helper */
 		$opt_helper = $this->Application->recallObject('kProductOptionsHelper');
-		/* @var $opt_helper kProductOptionsHelper */
 
 		$parsed = $opt_helper->ExplodeOptionValues($object->GetFieldValues());
 		if ( !$parsed ) {
@@ -39,8 +39,8 @@
 		$combination_field = $this->SelectParam($params, 'combination_field');
 
 		if ( $mode == 'selected' ) {
+			/** @var kDBItem $comb */
 			$comb = $this->Application->recallObject($combination_prefix);
-			/* @var $comb kDBItem */
 
 			$options = unserialize($comb->GetDBField($combination_field));
 		}
@@ -49,8 +49,8 @@
 		$block_params['selected'] = '';
 		$block_params['pass_params'] = 1;
 
+		/** @var LanguagesItem $lang */
 		$lang = $this->Application->recallObject('lang.current');
-		/* @var $lang LanguagesItem */
 
 		$o = '';
 		$first_selected = false;
@@ -149,8 +149,8 @@
 		$opt_data = $this->Application->GetVar('options');
 		$options = getArrayValue($opt_data, $this->Application->GetVar('p_id'));
 		if (!$options && $this->Application->GetVar('orditems_id')) {
+			/** @var kDBItem $ord_item */
 			$ord_item = $this->Application->recallObject('orditems.-opt', null, Array ('skip_autoload' => true));
-			/* @var $ord_item kDBItem */
 
 			$ord_item->Load($this->Application->GetVar('orditems_id'));
 			$item_data = unserialize($ord_item->GetDBField('ItemData'));
@@ -161,8 +161,8 @@
 
 	function OptionData($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$options =& $this->GetOptions();
 
Index: modules/in-commerce/units/products/products_event_handler.php
===================================================================
--- modules/in-commerce/units/products/products_event_handler.php
+++ modules/in-commerce/units/products/products_event_handler.php
@@ -80,8 +80,8 @@
 	{
 		parent::OnBeforeItemCreate($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$product_approve_events = Array (
 			2 => 'p:OnSubscriptionApprove',
@@ -107,8 +107,8 @@
 	 */
 	function InventoryAction($event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$field_values = $this->getSubmittedFields($event);
 		$object->SetFieldsFromHash($field_values);
@@ -327,8 +327,8 @@
 	{
 		parent::OnBeforeDeleteFromLive($event);
 
+		/** @var kCatDBItem $product */
 		$product = $this->Application->recallObject($event->Prefix . '.itemlive', null, Array ('skip_autoload' => true));
-		/* @var $product kCatDBItem */
 
 		$product->SwitchToLive();
 		$id = $event->getEventParam('id');
@@ -338,8 +338,8 @@
 			return ;
 		}
 
+		/** @var kCatDBItem $temp */
 		$temp = $this->Application->recallObject($event->Prefix . '.itemtemp', null, Array ('skip_autoload' => true));
-		/* @var $temp kCatDBItem */
 
 		$temp->SwitchToTemp();
 		$temp->Load($id);
@@ -394,8 +394,8 @@
 	{
 		parent::onPreCreate($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$object->SetDBField('Type', $this->Application->GetVar($event->getPrefixSpecial(true) . '_new_type'));
 	}
@@ -414,8 +414,8 @@
 		$event->CallSubEvent('OnPreSave');
 		$this->LoadItem($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$from_type = $object->GetDBField('Type');
 		if ( $event->status == kEvent::erSUCCESS ) {
@@ -510,8 +510,8 @@
 		$except_types = $event->getEventParam('except');
 		$except_types = $except_types ? explode(',', $except_types) : Array ();
 
+		/** @var kDBList $object */
 		$object = $event->getObject();
-		/* @var $object kDBList */
 
 		$type_clauses = parent::getTypeClauses($event);
 
@@ -647,8 +647,8 @@
 			$object->removeFilter('category_filter');
 			$object->AddGroupByField('%1$s.ProductId');
 
+			/** @var ProductsItem $object_product */
 			$object_product = $this->Application->recallObject($event->Prefix);
-			/* @var $object_product ProductsItem */
 
 			$content_ids_array = $object_product->GetPackageContentIds();
 
@@ -691,8 +691,8 @@
 		$event->SetRedirectParam('pass', 'all,p');
 		$event->redirect = $this->Application->GetVar('success_template');
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$user_id = $this->Application->RecallVar('user_id');
 
@@ -762,7 +762,7 @@
 	{
 		// used for error reporting only -> rewrite code + theme (by Alex)
 		$object = $this->Application->recallObject('u', null, Array('skip_autoload' => true)); // TODO: change theme too
-		/* @var $object kDBItem */
+		/** @var kDBItem $object */
 
 		$friend_email = $this->Application->GetVar('friend_email');
 		$friend_name = $this->Application->GetVar('friend_name');
@@ -871,8 +871,8 @@
 	 */
 	function OnDeleteListingType($event)
 	{
+		/** @var kDBItem $listing_type */
 		$listing_type = $event->MasterEvent->getObject();
-		/* @var $listing_type kDBItem */
 
 		$product_id = $listing_type->GetDBField('VirtualProductId');
 
@@ -957,8 +957,8 @@
 		$item_data = unserialize($field_values['ItemData']);
 		$package_content_ids = $item_data['PackageContent'];
 
+		/** @var ProductsItem $object_item */
 		$object_item = $this->Application->recallObject('p.packageitem', null, array ('skip_autoload' => true));
-		/* @var $object_item ProductsItem */
 
 		foreach ($package_content_ids as $package_item_id) {
 			$object_field_values = array ();
@@ -1037,8 +1037,8 @@
 	 */
 	function _updateProductPrice($event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$price = $object->GetDBField('Price');
 
@@ -1074,8 +1074,8 @@
 	 */
 	function setPrimaryPrice($product_id, $price, $additional_fields = Array())
 	{
+		/** @var kDBItem $pr_object */
 		$pr_object = $this->Application->recallObject('pr.-item', null, Array('skip_autoload' => true) );
-		/* @var $pr_object kDBItem */
 
 		$pr_object->Load( Array('ProductId' => $product_id, 'IsPrimary' => 1) );
 
@@ -1143,8 +1143,8 @@
 	{
 		parent::OnAfterItemLoad($event);
 
+		/** @var ProductsItem $object */
 		$object = $event->getObject();
-		/* @var $object ProductsItem */
 
 		$a_pricing = $object->getPrimaryPricing();
 		if ( !$a_pricing ) {
@@ -1200,8 +1200,8 @@
 
 		// update current package content with selected products
 
+		/** @var ProductsItem $object */
 		$object = $event->getObject();
-		/* @var $object ProductsItem */
 
 		$product_ids = $selected_ids['p'] ? explode(',', $selected_ids['p']) : Array();
 
@@ -1230,8 +1230,8 @@
 	{
 		//$this->Application->SetVar('p_mode', 't');
 
+		/** @var ProductsItem $object */
 		$object = $event->getObject();
-		/* @var $object ProductsItem */
 
 		$content_ids = $object->GetPackageContentIds();
 
@@ -1331,8 +1331,8 @@
 	{
 		parent::OnBeforeItemDelete($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$sql = 'SELECT COUNT(*)
 				FROM ' . TABLE_PREFIX . 'Products
@@ -1372,16 +1372,16 @@
 	{
 		parent::setCustomExportColumns($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$this->setPrimaryPrice($object->GetID(), (double)$object->GetDBField('Price'), Array ('Cost' => (double)$object->GetDBField('Cost')));
 	}
 
 	function OnPreSaveAndOpenPopup($event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$this->RemoveRequiredFields($object);
 		$event->CallSubEvent('OnPreSave');
@@ -1418,8 +1418,8 @@
 
 		if ( $this->Application->isAdminUser ) {
 			// we may get product id out of OrderItem, if it exists
+			/** @var OrdersItem $ord_item */
 			$ord_item = $this->Application->recallObject('orditems', null, Array ('raise_warnings' => 0));
-			/* @var $ord_item OrdersItem */
 
 			if ( $ord_item->GetDBField('ProductId') ) {
 				$passed = $ord_item->GetDBField('ProductId');
Index: modules/in-commerce/units/products/products_tag_processor.php
===================================================================
--- modules/in-commerce/units/products/products_tag_processor.php
+++ modules/in-commerce/units/products/products_tag_processor.php
@@ -501,8 +501,8 @@
 
 	function Available($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		if ( !$object->GetDBField('InventoryStatus') ) {
 			return true;
@@ -539,16 +539,16 @@
 
 	function IsSubscription($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		return ($object->GetDBField('Type') == 2);
 	}
 
 	function IsTangible($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		return ($object->GetDBField('Type') == 1);
 	}
@@ -654,8 +654,8 @@
 
 	function ListShippingTypes($params)
 	{
+		/** @var ShippingQuoteCollector $quote_engine_collector */
 		$quote_engine_collector = $this->Application->recallObject('ShippingQuoteCollector');
-		/* @var $quote_engine_collector ShippingQuoteCollector */
 
 		$types = $quote_engine_collector->GetAvailableShippingTypes();
 
@@ -694,8 +694,8 @@
 	 */
 	function Savings($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$price = $object->GetDBField('Price');
 		$msrp = $object->GetDBField('MSRP');
@@ -713,8 +713,8 @@
 		}
 
 		if (isset($params['currency'])) {
+			/** @var LanguagesItem $lang */
 			$lang = $this->Application->recallObject('lang.current');
-			/* @var $lang LanguagesItem */
 
 			$iso = $this->GetISO($params['currency']);
 			$value = $this->ConvertCurrency($value, $iso);
@@ -735,8 +735,8 @@
 		$edit_tab_presets = $this->Application->getUnitOption($this->Prefix, 'EditTabPresets');
 		$edit_tab_preset = $edit_tab_presets['Default'];
 
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$product_type = $object->GetDBField('Type');
 
@@ -779,8 +779,8 @@
 	 */
 	protected function InCompare($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$products = $this->Application->GetVarDirect('compare_products', 'Cookie');
 		$products = $products ? explode('|', $products) : Array ();
Index: modules/in-commerce/units/reports/reports_event_handler.php
===================================================================
--- modules/in-commerce/units/reports/reports_event_handler.php
+++ modules/in-commerce/units/reports/reports_event_handler.php
@@ -751,11 +751,11 @@
 
 	function OnExportReport($event)
 	{
+		/** @var kDBList $report */
 		$report = $this->Application->recallObject($event->getPrefixSpecial(),'rep_List',Array('skip_counting'=>true,'per_page'=>-1) );
-		/* @var $report kDBList*/
 
+		/** @var kDBItem $ReportItem */
 		$ReportItem = $this->Application->recallObject('rep.item', 'rep', Array('skip_autoload' => true));
-		/* @var $ReportItem kDBItem*/
 
  		$a_grids = $this->Application->getUnitOption('rep', 'Grids');
  		$a_fields = $a_grids['Default']['Fields'];
Index: modules/in-commerce/units/reports/reports_tag_processor.php
===================================================================
--- modules/in-commerce/units/reports/reports_tag_processor.php
+++ modules/in-commerce/units/reports/reports_tag_processor.php
@@ -102,8 +102,8 @@
 		}
 
 
+		/** @var kDBItem $object */
 		$object = $this->Application->recallObject('rep.params', null, Array('skip_autoload' => true));
-		/* @var $object kDBItem */
 
 		$object->setID(1);
 		$object->SetDBField('Metric', $metric);
Index: modules/in-commerce/units/shipping/shipping_event_handler.php
===================================================================
--- modules/in-commerce/units/shipping/shipping_event_handler.php
+++ modules/in-commerce/units/shipping/shipping_event_handler.php
@@ -49,14 +49,14 @@
 			return;
 		}
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$format = '%01.' . $object->GetDBField('PrecisionAfterSep') . 'f'; // %01.2f
 		$zero_if_empty = $object->GetDBField('ZeroIfEmpty');
 
+		/** @var kDBItem $sc_object */
 		$sc_object = $this->Application->recallObject('sc', null, Array ('raise_warnings' => 0));
-		/* @var $sc_object kDBItem */
 
 		// change default shipping cost values ("Costs" tab on shipping editing) based on field from "Shipping Type"
 		$flat_options = $sc_object->GetFieldOptions('Flat');
@@ -78,16 +78,16 @@
 	 */
 	function OnApplyModifier($event)
 	{
+		/** @var kDBItem $cost_object */
 		$cost_object = $this->Application->recallObject('sc');
-		/* @var $cost_object kDBItem */
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$operation = $this->Application->GetVar('operation');
 
+		/** @var kFormatter $formatter */
 		$formatter = $this->Application->recallObject('kFormatter');
-		/* @var $formatter kFormatter */
 
 		$modify_by = $formatter->TypeCast($this->Application->GetVar('modify_by'), array('type'=>'float'));
 		$cost_type = $object->GetDBField('CostType');
@@ -233,16 +233,16 @@
 	{
 		parent::OnPreSaveCreated($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject( Array ('skip_autoload' => true) );
-		/* @var $object kDBItem */
 
 		$object->SetDBField('PortalGroups', ',' . $this->Application->ConfigValue('User_LoggedInGroup') . ',');
 	}
 
 	function UpdateGroups($event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		if ( $event->Name == 'OnPreSaveCreated' ) {
 			$default_group = $this->Application->ConfigValue('User_LoggedInGroup');
Index: modules/in-commerce/units/shipping/shipping_tag_processor.php
===================================================================
--- modules/in-commerce/units/shipping/shipping_tag_processor.php
+++ modules/in-commerce/units/shipping/shipping_tag_processor.php
@@ -32,8 +32,8 @@
 		$zones_object = $this->Application->recallObject('z');
 		$brackets_object = $this->Application->recallObject('br');
 
+		/** @var kDBItem $costs_object */
 		$costs_object = $this->Application->recallObject('sc');
-		/* @var $costs_object kDBItem */
 
 		$main_processor = $this->Application->recallObject('m_TagProcessor');
 
@@ -181,8 +181,8 @@
 
 		$this->Application->recallObject('ShippingQuoteEngine'); // TODO: why call this here?
 
+		/** @var ShippingQuoteCollector $quote_engine_collector */
 		$quote_engine_collector = $this->Application->recallObject('ShippingQuoteCollector');
-		/* @var $quote_engine_collector ShippingQuoteCollector */
 
 		$shipping_quote_params = Array (
 			'dest_country'	=>	$user_country_id,
@@ -223,8 +223,8 @@
 			$last_shippings = unserialize($last_shippings);
 		}
 
+		/** @var OrdersItem $order_object */
 		$order_object = $this->Application->recallObject('ord');
-		/* @var $order_object OrdersItem */
 
 		$original_shipping = $order_object->GetDBField('ShippingInfo');
 		$original_shipping = unserialize($original_shipping);
@@ -264,8 +264,8 @@
 			return '';
 		}
 
+		/** @var LanguagesItem $lang */
 		$lang = $this->Application->recallObject('lang.current');
-		/* @var $lang LanguagesItem */
 
 		foreach ($shipping_types as $shipping_type) {
 			if ( isset($shipping_type['InsuranceFee']) ) {
@@ -294,8 +294,8 @@
 
 	function AvailableTypes($params)
 	{
+		/** @var ShippingQuoteCollector $quote_engine_collector */
 		$quote_engine_collector = $this->Application->recallObject('ShippingQuoteCollector');
-		/* @var $quote_engine_collector ShippingQuoteCollector */
 
 		$types = $quote_engine_collector->GetAvailableShippingTypes();
 
@@ -311,8 +311,8 @@
 
 	protected function ListGroups($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$o = '';
 		$selected = trim($object->GetDBField('PortalGroups'), ',');
Index: modules/in-commerce/units/shipping_costs/shipping_costs_event_handler.php
===================================================================
--- modules/in-commerce/units/shipping_costs/shipping_costs_event_handler.php
+++ modules/in-commerce/units/shipping_costs/shipping_costs_event_handler.php
@@ -44,8 +44,8 @@
 	 */
 	protected function OnCreate(kEvent $event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject(Array ('skip_autoload' => true));
-		/* @var $object kDBItem */
 
 		$zones_object = $this->Application->recallObject('z');
 
@@ -172,11 +172,11 @@
 	 */
 	function OnClearAll($event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject(Array ('skip_autoload' => true));
-		/* @var $object kDBItem */
 
+		/** @var kDBItem $zones_object */
 		$zones_object = $this->Application->recallObject('z');
-		/* @var $zones_object kDBItem */
 
 		$sql = 'SELECT ZoneID
 				FROM ' . $zones_object->TableName . '
@@ -202,11 +202,11 @@
 	protected function customProcessing(kEvent $event, $type)
 	{
 		if ( $type == 'before' && $this->Application->GetVar('sc') ) {
+			/** @var kDBItem $shipping_obj */
 			$shipping_obj = $this->Application->recallObject('s');
-			/* @var $shipping_obj kDBItem */
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$zero_if_empty = $shipping_obj->GetDBField('ZeroIfEmpty');
 
@@ -247,17 +247,17 @@
 
 		$id = $event->getEventParam('id');
 
+		/** @var kDBItem $object */
 		$object = $this->Application->recallObject($event->Prefix . '.-item', $event->Prefix);
-		/* @var $object kDBItem */
 
 		$object->SwitchToTemp();
 		$object->Load($id);
 
+		/** @var kDBItem $shipping_obj */
 		$shipping_obj = $this->Application->recallObject('s');
-		/* @var $shipping_obj kDBItem */
 
+		/** @var LanguagesItem $lang_object */
 		$lang_object = $this->Application->recallObject('lang.current');
-		/* @var $lang_object LanguagesItem */
 
 		// by weight and US/UK system - we need to store recalculated price per Kg cause shipping calculation is done per Kg!
 		if ( $shipping_obj->GetDBField('Type') == 1 && $lang_object->GetDBField('UnitSystem') == 2 ) {
@@ -280,17 +280,17 @@
 
 		$id = $event->getEventParam('id');
 
+		/** @var kDBItem $object */
 		$object = $this->Application->recallObject($event->Prefix . '.-item', $event->Prefix);
-		/* @var $object kDBItem */
 
 		$object->SwitchToTemp();
 		$object->Load($id);
 
+		/** @var kDBItem $shipping_obj */
 		$shipping_obj = $this->Application->recallObject('s');
-		/* @var $shipping_obj kDBItem */
 
+		/** @var LanguagesItem $lang_object */
 		$lang_object = $this->Application->recallObject('lang.current');
-		/* @var $lang_object LanguagesItem */
 
 		// by weight and US/UK system - we need to store recalculated price per Kg cause shipping calculation is done per Kg!
 		if ( $shipping_obj->GetDBField('Type') == 1 && $lang_object->GetDBField('UnitSystem') == 2 ) {
Index: modules/in-commerce/units/shipping_quote_engines/custom_shipping_quote_engine.php
===================================================================
--- modules/in-commerce/units/shipping_quote_engines/custom_shipping_quote_engine.php
+++ modules/in-commerce/units/shipping_quote_engines/custom_shipping_quote_engine.php
@@ -39,8 +39,8 @@
 
 	function QueryShippingCost($user_country, $user_state, $user_zip, $weight, $items, $amount, $shipping_type=null, $promo_params)
 	{
+		/** @var kCountryStatesHelper $cs_helper */
 		$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-		/* @var $cs_helper kCountryStatesHelper */
 
 		$user_country_id = $cs_helper->getCountryStateId($user_country, DESTINATION_TYPE_COUNTRY);
 		$user_state_id = $cs_helper->getCountryStateId($user_state, DESTINATION_TYPE_STATE);
Index: modules/in-commerce/units/shipping_quote_engines/intershipper.php
===================================================================
--- modules/in-commerce/units/shipping_quote_engines/intershipper.php
+++ modules/in-commerce/units/shipping_quote_engines/intershipper.php
@@ -171,8 +171,8 @@
 			$params['orig_country']		=	$this->Application->ConfigValue('Comm_Shipping_Country');
 		}
 
+		/** @var kCountryStatesHelper $cs_helper */
 		$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-		/* @var $cs_helper kCountryStatesHelper */
 
 		if (strlen($params['orig_country']) == 3) {
 			// got 3symbol ISO code -> resolve to 2symbol ISO code
@@ -253,8 +253,8 @@
 		xml_set_element_handler( $xml_parser, Array(&$this, 'startElement'), Array(&$this, 'endElement') );
 		xml_set_character_data_handler( $xml_parser, Array(&$this, 'characterData') );
 
+		/** @var kCurlHelper $curl_helper */
 		$curl_helper = $this->Application->recallObject('CurlHelper');
-		/* @var $curl_helper kCurlHelper */
 
 		$curl_helper->SetPostData($target_url['uri']);
 		$newdata = $curl_helper->Send($target_url['url']);
Index: modules/in-commerce/units/shipping_quote_engines/shipping_quote_collector.php
===================================================================
--- modules/in-commerce/units/shipping_quote_engines/shipping_quote_collector.php
+++ modules/in-commerce/units/shipping_quote_engines/shipping_quote_collector.php
@@ -17,8 +17,8 @@
 
 	function GetShippingQuotes($params)
 	{
+		/** @var kCountryStatesHelper $cs_helper */
 		$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-		/* @var $cs_helper kCountryStatesHelper */
 
 		$has_states = $cs_helper->CountryHasStates( $cs_helper->getCountryIso($params['dest_country'], true) );
 
@@ -43,8 +43,8 @@
 		$classes = $this->getEngineClasses();
 
 		foreach ($classes as $class) {
+			/** @var ShippingQuoteEngine $object */
 			$object = $this->Application->recallObject($class);
-			/* @var $object ShippingQuoteEngine */
 
 			$new_shipping_types = $object->GetShippingQuotes($params);
 
@@ -115,8 +115,8 @@
 		$classes = $this->getEngineClasses();
 
 		foreach ($classes as $class) {
+			/** @var ShippingQuoteEngine $object */
 			$object = $this->Application->recallObject($class);
-			/* @var $object ShippingQuoteEngine */
 
 			$new_shipping_types = $object->GetAvailableTypes();
 			$shipping_types = array_merge($shipping_types, $new_shipping_types);
@@ -162,8 +162,8 @@
 		$shipping_id = $shipping_info[$package_num]['ShippingId'];
 
 		foreach ($classes as $class) {
+			/** @var ShippingQuoteEngine $object */
 			$object = $this->Application->recallObject($class);
-			/* @var $object ShippingQuoteEngine */
 
 			$shipping_types = $object->GetAvailableTypes();
 
Index: modules/in-commerce/units/shipping_quote_engines/shipping_quote_engine_event_handler.php
===================================================================
--- modules/in-commerce/units/shipping_quote_engines/shipping_quote_engine_event_handler.php
+++ modules/in-commerce/units/shipping_quote_engines/shipping_quote_engine_event_handler.php
@@ -26,11 +26,11 @@
 	{
 		parent::OnBeforeItemUpdate($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
+		/** @var ShippingQuoteEngine $engine */
 		$engine = $this->Application->recallObject($object->GetDBField('ClassName'));
-		/* @var $engine ShippingQuoteEngine */
 
 		$engine_fields = $engine->GetEngineFields();
 		$properties = $object->GetDBField('Properties');
@@ -49,8 +49,8 @@
 
 		$object->SetDBField('Properties', serialize($properties));
 
+		/** @var kCountryStatesHelper $cs_helper */
 		$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-		/* @var $cs_helper kCountryStatesHelper */
 
 		$from_country = $this->Application->ConfigValue('Comm_Shipping_Country');
 		$has_states = strlen($from_country) == 3 ? $cs_helper->CountryHasStates($from_country) : false;
@@ -76,8 +76,8 @@
 	{
 		parent::OnAfterItemLoad($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$properties = $object->GetDBField('Properties');
 
Index: modules/in-commerce/units/shipping_quote_engines/usps.php
===================================================================
--- modules/in-commerce/units/shipping_quote_engines/usps.php
+++ modules/in-commerce/units/shipping_quote_engines/usps.php
@@ -757,11 +757,11 @@
 
 		// parse response
 
+		/** @var kXMLHelper $xml_helper */
 		$xml_helper = $this->Application->recallObject('kXMLHelper');
-		/* @var $xml_helper kXMLHelper */
 
+		/** @var kXMLNode $root_node */
 		$root_node =& $xml_helper->Parse($body);
-		/* @var $root_node kXMLNode */
 
 		$rates = Array();
 		// Domestic shipping
@@ -957,8 +957,9 @@
 
 		// parse response
 		$xml_helper = $this->Application->recallObject('kXMLHelper');
+
+		/** @var kXMLNode $root_node */
 		$root_node =& $xml_helper->Parse($body);
-		/* @var $root_node kXMLNode */
 		$Postage = 0;
 
 		$label_file = $TrackingNumber = $PostnetBarCode = '';
@@ -1000,8 +1001,8 @@
 		}
 
 		if ( $label_file != '' ) {
+			/** @var FileHelper $file_helper */
 			$file_helper = $this->Application->recallObject('FileHelper');
-			/* @var $file_helper FileHelper */
 
 			$file_helper->CheckFolder(USPS_LABEL_FOLDER);
 
@@ -1014,8 +1015,8 @@
 
 	function GetUSPSCountry($country, $default = 'US')
 	{
+		/** @var kCountryStatesHelper $cs_helper */
 		$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-		/* @var $cs_helper kCountryStatesHelper */
 
 		$country = $cs_helper->getCountryIso($country);
 
@@ -1100,8 +1101,9 @@
 			}
 
 			$xml_helper = $this->Application->recallObject('kXMLHelper');
+
+			/** @var kXMLNode $root_node */
 			$root_node =& $xml_helper->Parse($body);
-			/* @var $root_node kXMLNode */
 
 			// Tracking Shipping
 			$delivery_node =& $root_node->FindChild('TrackInfo');
Index: modules/in-commerce/units/taxes/taxes_event_handler.php
===================================================================
--- modules/in-commerce/units/taxes/taxes_event_handler.php
+++ modules/in-commerce/units/taxes/taxes_event_handler.php
@@ -66,12 +66,12 @@
 	 */
 	protected function customProcessing(kEvent $event, $type)
 	{
+		/** @var kDBItem $zone_object */
 		$zone_object = $event->getObject();
-		/* @var $zone_object kDBItem */
 
 		if ( $type == 'after' ) {
+			/** @var kDBItem $dst_object */
 			$dst_object = $this->Application->recallObject('taxdst');
-			/* @var $dst_object kDBItem */
 
 			if ( $event->Name == 'OnUpdate' ) {
 				$sql = 'DELETE FROM ' . $dst_object->TableName . '
@@ -239,8 +239,8 @@
 
 	function OnCountryChange($event)
 	{
+		/** @var kDBItem $destinations */
 		$destinations = $this->Application->recallObject('taxdst');
-		/* @var $destinations kDBItem */
 
 		$queryDel="DELETE FROM ".$destinations->TableName." WHERE TaxZoneId=".(int)$this->Application->GetVar('tax_id');
 		$this->Conn->Query($queryDel);
Index: modules/in-commerce/units/taxes/taxes_tag_processor.php
===================================================================
--- modules/in-commerce/units/taxes/taxes_tag_processor.php
+++ modules/in-commerce/units/taxes/taxes_tag_processor.php
@@ -18,8 +18,8 @@
 
 	function ShowCountries($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$destination_table = $this->getDestinationsTable($params);
 		$selected_country_id = (int)$this->Application->GetVar('CountrySelector');
@@ -68,8 +68,8 @@
 				break;
 
 			case 'has_states':
+				/** @var kCountryStatesHelper $cs_helper */
 				$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-				/* @var $cs_helper kCountryStatesHelper */
 
 				$has_states = $cs_helper->getCountriesWithStates();
 
@@ -126,8 +126,8 @@
 
 	function ShowStates($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$destination_table = $this->getDestinationsTable($params);
 
@@ -193,8 +193,8 @@
 
 	function ShowZips($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$destination_table = $this->getDestinationsTable($params);
 
@@ -258,8 +258,8 @@
 		static $table_name = '';
 
 		if (!$table_name) {
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			$table_name = $this->Application->getUnitOption('taxdst', 'TableName');
 
Index: modules/in-commerce/units/taxesdestinations/taxes_dst_event_handler.php
===================================================================
--- modules/in-commerce/units/taxesdestinations/taxes_dst_event_handler.php
+++ modules/in-commerce/units/taxesdestinations/taxes_dst_event_handler.php
@@ -22,19 +22,19 @@
 	 */
 	function OnSaveDestinations($event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject(Array ('skip_autoload' => true));
-		/* @var $object kDBItem */
 
 		$items_info = $this->Application->GetVar($event->getPrefixSpecial(true));
 
+		/** @var kDBItem $tax_object */
 		$tax_object = $this->Application->recallObject('tax');
-		/* @var $tax_object kDBItem */
 
 		$std_dest_id = $this->Application->GetVar('StatesCountry');
 
 		if ( $items_info ) {
+			/** @var kDBItem $taxdest */
 			$taxdest = $this->Application->recallObject($event->getPrefixSpecial(true), null);
-			/* @var $taxdest kDBItem */
 
 			$parent_info =& $object->GetLinkedInfo();
 
@@ -77,8 +77,8 @@
 	 */
 	protected function OnCreate(kEvent $event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject(Array ('skip_autoload' => true));
-		/* @var $object kDBItem */
 
 		$items_info = $this->Application->GetVar($event->getPrefixSpecial(true));
 		if ( !$items_info ) {
@@ -116,8 +116,8 @@
 	{
 		switch ($type) {
 			case 'before':
+				/** @var kDBItem $object */
 				$object = $event->getObject();
-				/* @var $object kDBItem */
 
 				$events = $this->Application->GetVar('events');
 
@@ -125,8 +125,8 @@
 					$object->SetDBField('TaxZoneId', $this->Application->GetVar('tax_id'));
 				}
 
+				/** @var kDBItem $tax_object */
 				$tax_object = $this->Application->recallObject('tax');
-				/* @var $tax_object kDBItem */
 
 				if ( $tax_object->GetDBField('Type') == 3 ) {
 					$tax_object->SetDBField('StdDestId', $this->Application->GetVar('StatesCountry'));
@@ -142,11 +142,11 @@
 	 */
 	function OnZoneUpdate($event) {
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
+		/** @var kDBItem $zone_object */
 		$zone_object = $this->Application->recallObject('tax');
-		/* @var $zone_object kDBItem */
 
 		$zone_id = (int)$this->Application->GetVar('tax_id');
 		$zone_type = $zone_object->GetDBField('Type');
Index: modules/in-commerce/units/zones/zones_event_handler.php
===================================================================
--- modules/in-commerce/units/zones/zones_event_handler.php
+++ modules/in-commerce/units/zones/zones_event_handler.php
@@ -66,8 +66,8 @@
 	 */
 	protected function customProcessing(kEvent $event, $type)
 	{
+		/** @var kDBItem $zone_object */
 		$zone_object = $event->getObject();
-		/* @var $zone_object kDBItem */
 
 		switch ($type) {
 			case 'before':
@@ -77,8 +77,8 @@
 				break;
 
 			case 'after':
+				/** @var kDBItem $dst_object */
 				$dst_object = $this->Application->recallObject('dst');
-				/* @var $dst_object kDBItem */
 
 				if ( $event->Name == 'OnUpdate' ) {
 					$sql = 'DELETE FROM ' . $dst_object->TableName . '
@@ -220,8 +220,8 @@
 
 	function OnCountryChange($event)
 	{
+		/** @var kDBItem $destinations */
 		$destinations = $this->Application->recallObject('dst');
-		/* @var $destinations kDBItem */
 
 		$queryDel="DELETE FROM ".$destinations->TableName." WHERE ShippingZoneId=".$this->Application->GetVar($event->Prefix.'_id');
 		$this->Conn->Query($queryDel);
@@ -243,8 +243,8 @@
 	{
 		parent::OnCancel($event);
 
+		/** @var kDBItem $dst_object */
 		$dst_object = $this->Application->recallObject('dst');
-		/* @var $dst_object kDBItem */
 
 		$sql = 'DELETE FROM ' . $dst_object->TableName . '
 				WHERE ShippingZoneId = 0';
@@ -252,8 +252,8 @@
 
 		// if cancelling after create
 		if ( $this->Application->RecallVar('zone_mode' . $this->Application->GetVar('m_wid')) == 'create' ) {
+			/** @var kDBItem $zone */
 			$zone = $event->getObject();
-			/* @var $zone kDBItem */
 
 			$zone->Delete();
 		}
Index: modules/in-commerce/units/zones/zones_tag_processor.php
===================================================================
--- modules/in-commerce/units/zones/zones_tag_processor.php
+++ modules/in-commerce/units/zones/zones_tag_processor.php
@@ -17,8 +17,8 @@
 {
 	function ShowCountries($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$destination_table = $this->getDestinationsTable($params);
 		$selected_country_id = (int)$this->Application->GetVar('CountrySelector');
@@ -67,8 +67,8 @@
 				break;
 
 			case 'has_states':
+				/** @var kCountryStatesHelper $cs_helper */
 				$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-				/* @var $cs_helper kCountryStatesHelper */
 
 				$has_states = $cs_helper->getCountriesWithStates();
 
@@ -125,8 +125,8 @@
 
 	function ShowStates($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$destination_table = $this->getDestinationsTable($params);
 
@@ -192,8 +192,8 @@
 
 	function ShowZips($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$destination_table = $this->getDestinationsTable($params);
 
@@ -257,8 +257,8 @@
 		static $table_name = '';
 
 		if (!$table_name) {
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			$table_name = $this->Application->getUnitOption('dst', 'TableName');
 
Index: modules/in-link/install.php
===================================================================
--- modules/in-link/install.php
+++ modules/in-link/install.php
@@ -32,8 +32,8 @@
 }
 else {
 	// install, using installation wizard
+	/** @var kInstallToolkit $toolkit */
 	$toolkit =& $this->toolkit;
-	/* @var $toolkit kInstallToolkit */
 }
 
 $application =& kApplication::Instance();
Index: modules/in-link/units/link_validation/link_validation_eh.php
===================================================================
--- modules/in-link/units/link_validation/link_validation_eh.php
+++ modules/in-link/units/link_validation/link_validation_eh.php
@@ -75,8 +75,8 @@
 
 				$perm_value = true;
 				if ( $ids ) {
+					/** @var kPermissionsHelper $perm_helper */
 					$perm_helper = $this->Application->recallObject('PermissionsHelper');
-					/* @var $perm_helper kPermissionsHelper */
 
 					$items = $perm_helper->GetCategoryItemData('l', $ids);
 					$check_method = $event->Name == 'OnDeleteLinks' ? 'DeleteCheckPermission' : 'ModifyCheckPermission';
@@ -126,8 +126,8 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			$object->addFilter('primary_category_filter', 'ci.PrimaryCat = 1');
 
@@ -161,8 +161,8 @@
 			$ids = $this->Conn->GetCol($sql);
 
 			if ($ids) {
+				/** @var kTempTablesHandler $temp_handler */
 				$temp_handler = $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler');
-				/* @var $temp_handler kTempTablesHandler */
 
 				$temp_handler->DeleteItems($event->Prefix, $event->Special, $ids);
 			}
@@ -319,8 +319,8 @@
 
 		function _validateLink($link_id)
 		{
+			/** @var kCurlHelper $curl_helper */
 			$curl_helper = $this->Application->recallObject('CurlHelper');
-			/* @var $curl_helper kCurlHelper */
 
 			$sql = 'SELECT Url, ResourceId
 					FROM ' . $this->Application->getUnitOption('l', 'TableName') . '
@@ -338,8 +338,8 @@
 				$curl_helper->lastHTTPCode = 500;
 			}
 
+			/** @var kDBItem $link_validation */
 			$link_validation = $this->Application->recallObject($this->Prefix . '.-item', null, Array ('skip_autoload' => true));
-			/* @var $link_validation kDBItem */
 
 			$link_validation->Load($link_id, 'LinkId');
 
@@ -379,8 +379,8 @@
 				return ;
 			}
 
+			/** @var kTempTablesHandler $temp_handler */
 			$temp_handler = $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler');
-			/* @var $temp_handler kTempTablesHandler */
 
 			$temp_handler->DeleteItems($event->Prefix, $event->Special, $ids);
 		}
@@ -435,8 +435,8 @@
 				return;
 			}
 
+			/** @var kCatDBItem $object */
 			$object = $this->Application->recallObject('l.-item', null, Array ('skip_autoload' => true));
-			/* @var $object kCatDBItem */
 
 			foreach ($ids as $id) {
 				$object->Load($id);
@@ -470,8 +470,8 @@
 				return ;
 			}
 
+			/** @var kTempTablesHandler $temp_handler */
 			$temp_handler = $this->Application->recallObject('l_TempHandler', 'kTempTablesHandler');
-			/* @var $temp_handler kTempTablesHandler */
 
 			$temp_handler->DeleteItems('l', '', $ids);
 		}
Index: modules/in-link/units/links/link_tag_processor.php
===================================================================
--- modules/in-link/units/links/link_tag_processor.php
+++ modules/in-link/units/links/link_tag_processor.php
@@ -56,8 +56,8 @@
 	 */
 	function LinkIsEnhanced($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		if ($object->GetDBField('Status') == STATUS_PENDING || $object->GetDBField('Status') == STATUS_PENDING_EDITING) {
 			return false;
@@ -77,8 +77,8 @@
 	 */
 	function EnhancementIsPending($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$status = $this->getListingInfo($object->GetDBField('ResourceId'), 'Status');
 
@@ -87,8 +87,8 @@
 
 	function ListingTypeField($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$lst_id = $this->getListingInfo($object->GetDBField('ResourceId'), 'ListingTypeId');
 
@@ -100,8 +100,8 @@
 
 	function EnhancementField($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$listing_id = $this->getListingInfo($object->GetDBField('ResourceId'), 'ListingId');
 
@@ -113,8 +113,8 @@
 
 	function IsRenewalPeriod($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$listing_info = $this->getListingInfo($object->GetDBField('ResourceId'));
 
@@ -150,8 +150,8 @@
 			return 0;
 		}
 
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$listtype_id = $this->getListingInfo($object->GetDBField('ResourceId'), 'ListingTypeId');
 
@@ -180,16 +180,16 @@
 
 	function ListingDescription($params)
 	{
+		/** @var kDBItem $listing_type */
 		$listing_type = $this->Application->recallObject('lst');
-		/* @var $listing_type kDBItem */
 
 		return $listing_type->GetDBField('Description');
 	}
 
 	function ListingTypeDetailsLink($params)
 	{
+		/** @var kDBList $listing_type */
 		$listing_type = $this->Application->recallObject('lst', null, Array ('raise_warnings' => 0));
-		/* @var $listing_type kDBList */
 
 		$params['lst_id'] = $listing_type->isLoaded() ? $listing_type->GetID() : $this->Application->Parser->GetParam('key');
 
@@ -203,8 +203,8 @@
 	 */
 	function FollowLocation($params)
 	{
+		/** @var kCatDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kCatDBItem */
 
 		if (!$object->isLoaded()) {
 			throw new Exception('No Link ID for redirect');
@@ -217,8 +217,8 @@
 			$resource_id = $object->GetDBField('ResourceId');
 			$user_id = $this->Application->RecallVar('user_id');
 
+			/** @var kDBItem $link_visit */
 			$link_visit = $this->Application->recallObject('l-visit', null, Array ('skip_autoload' => true));
-			/* @var $link_visit kDBItem */
 
 			$link_visit->Load( Array ('ResourceId' => $resource_id, 'PortalUserId' => $user_id) );
 			if ($link_visit->isLoaded()) {
@@ -289,8 +289,8 @@
 
 		static $link_visited = Array ();
 
+		/** @var kDBList $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBList */
 
 		if (!isset($link_visited[$this->Special])) {
 			$resource_ids = $object->GetCol('ResourceId');
@@ -344,8 +344,8 @@
 
 		$fields = explode(',', $fields);
 
+		/** @var kDBList $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBList */
 
 		switch ($condition) {
 			case 'or':
@@ -376,8 +376,8 @@
 	 */
 	function DisplayDetailTemplate($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$template_name = $object->GetDBField('CustomTemplate');
 		if (!$template_name || !$this->Application->TemplatesCache->TemplateExists($template_name)) {
@@ -403,8 +403,8 @@
 			return ;
 		}
 
+		/** @var LinkHelper $link_helper */
 		$link_helper = $this->Application->recallObject('LinkHelper');
-		/* @var $link_helper LinkHelper */
 
 		// 1. get current grouping
 		$grouping = $link_helper->getGrouping( $this->getPrefixSpecial() );
@@ -441,8 +441,8 @@
 		static $grouping = null;
 
 		if (!isset($grouping)) {
+			/** @var LinkHelper $link_helper */
 			$link_helper = $this->Application->recallObject('LinkHelper');
-			/* @var $link_helper LinkHelper */
 
 			// 1. get current grouping
 			$grouping = $link_helper->getGrouping( $this->getPrefixSpecial() );
Index: modules/in-link/units/links/links_event_handler.php
===================================================================
--- modules/in-link/units/links/links_event_handler.php
+++ modules/in-link/units/links/links_event_handler.php
@@ -50,8 +50,8 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			if ( !$this->Application->isAdminUser ) {
 				$object->addFilter('expire_filter', '(Expire > ' . adodb_mktime() . ' OR Expire IS NULL)');
@@ -60,8 +60,8 @@
 			if ( substr($event->Special, 0, 10) == 'duplicates' ) {
 				$object->removeFilter('category_filter');
 
+				/** @var LinkHelper $link_helper */
 				$link_helper = $this->Application->recallObject('LinkHelper');
-				/* @var $link_helper LinkHelper */
 
 				$grouping = $link_helper->getGrouping($event->getPrefixSpecial());
 
@@ -75,8 +75,8 @@
 						break;
 
 					case 'duplicates-sub':
+						/** @var kDBItem $main_object */
 						$main_object = $this->Application->recallObject($event->Prefix . '.duplicates');
-						/* @var $main_object kDBItem */
 
 						foreach ($grouping as $field_index => $group_field) {
 							$object->addFilter('dupe_filter_' . $field_index, '%1$s.`' . $group_field . '` = ' . $this->Conn->qstr($main_object->GetDBField($group_field)));
@@ -105,8 +105,8 @@
 		 */
 		function OnMerge($event)
 		{
+			/** @var LinkHelper $link_helper */
 			$link_helper = $this->Application->recallObject('LinkHelper');
-			/* @var $link_helper LinkHelper */
 
 			$grouping = $link_helper->getGrouping($event->getPrefixSpecial());
 
@@ -144,8 +144,8 @@
 			}
 
 			if ( !$groping_error ) {
+				/** @var kTempTablesHandler $temp_handler */
 				$temp_handler = $this->Application->recallObject($event->getPrefixSpecial() . '_TempHandler', 'kTempTablesHandler');
-				/* @var $temp_handler kTempTablesHandler */
 
 				$categories_sql = '	SELECT main_table.ResourceId, ci.CategoryId, main_table.' . $id_field . '
 									FROM ' . $table_name . ' main_table
@@ -216,8 +216,8 @@
 				return;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			// replace 0 id in post with actual created id (used in enhancement process)
 			$items_info = $this->Application->GetVar($event->getPrefixSpecial(true));
@@ -293,8 +293,8 @@
 						if (!strlen($field_value) || ($field_value != $this->Application->RecallVar($event->Prefix . '_captcha_code'))) {
 							$this->Application->SetVar('error_'.$field_name, 1);
 
+							/** @var kCaptchaHelper $captcha_helper */
 							$captcha_helper = $this->Application->recallObject('CaptchaHelper');
-							/* @var $captcha_helper kCaptchaHelper */
 							$this->Application->StoreVar($event->Prefix . '_captcha_code', $captcha_helper->GenerateCaptchaCode());
 
 							$event->status = kEvent::erFAIL;
@@ -318,7 +318,7 @@
 			}
 
 			$object = $event->getObject(); // get link object
-			/* @var $object kDBItem */
+			/** @var kDBItem $object */
 
 			$send_params = Array(
 				'from_name' => $this->Application->GetVar('ContactFormFullName'),
@@ -389,14 +389,14 @@
 				return ;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ($object->GetDBField('Url') != $object->GetOriginalField('Url')) {
 				// check only when url was changed
 
+				/** @var LinkHelper $link_helper */
 				$link_helper = $this->Application->recallObject('LinkHelper');
-				/* @var $link_helper LinkHelper */
 
 				$link_checked = $link_helper->CheckReciprocalURL($object->GetDBField('Url'));
 
@@ -419,11 +419,11 @@
 				return;
 			}
 
+			/** @var kCatDBItem $object */
 			$object = $event->getObject( Array('skip_autoload' => true) );
-			/* @var $object kCatDBItem */
 
+			/** @var LinkHelper $link_helper */
 			$link_helper = $this->Application->recallObject('LinkHelper');
-			/* @var $link_helper LinkHelper */
 
 			$id_field = $this->Application->getUnitOption($event->Prefix, 'IDField');
 			$table_name = $this->Application->getUnitOption($event->Prefix, 'TableName');
@@ -557,8 +557,8 @@
 		{
 			parent::OnBeforeDeleteOriginal($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$link_id = $event->getEventParam('original_id');
 			$new_resource_id = $object->GetDBField('ResourceId');
@@ -583,8 +583,8 @@
 		{
 			parent::OnAfterDeleteOriginal($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$old_resource_id = $this->Application->GetVar('original_resource_id');
 			$new_resource_id = $object->GetDBField('ResourceId');
Index: modules/in-link/units/listing_types/listing_types_event_handler.php
===================================================================
--- modules/in-link/units/listing_types/listing_types_event_handler.php
+++ modules/in-link/units/listing_types/listing_types_event_handler.php
@@ -89,9 +89,9 @@
 		{
 			parent::OnBeforeItemUpdate($event);
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$object->setRequired('ShopCartName', $object->GetDBField('EnableBuying'));
 		}
 	}
\ No newline at end of file
Index: modules/in-link/units/listing_types/listing_types_tag_processor.php
===================================================================
--- modules/in-link/units/listing_types/listing_types_tag_processor.php
+++ modules/in-link/units/listing_types/listing_types_tag_processor.php
@@ -21,8 +21,8 @@
 			$object = $this->getObject($params);
 			$params['cat_id'] = $object->GetDBField($params['field']);
 
+			/** @var kNavigationBar $navigation_bar */
 			$navigation_bar = $this->Application->recallObject('kNavigationBar');
-			/* @var $navigation_bar kNavigationBar */
 
 			return $navigation_bar->build($params);
 		}
@@ -37,8 +37,8 @@
 		{
 			static $listing_type_id = null;
 
+			/** @var kDBItem $object */
 			$object = $this->getObject($params);
-			/* @var $object kDBItem */
 
 			if (!isset($listing_type_id)) {
 				$listing_type_id = $object->GetID();
Index: modules/in-link/units/listings/listings_event_handler.php
===================================================================
--- modules/in-link/units/listings/listings_event_handler.php
+++ modules/in-link/units/listings/listings_event_handler.php
@@ -82,8 +82,8 @@
 	 */
 	protected function OnBeforeItemUpdate(kEvent $event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		if ( $object->IgnoreValidation ) {
 			$object->UpdateFormattersMasterFields();
@@ -101,8 +101,8 @@
 	{
 		parent::OnBeforeItemCreate($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		if ( $object->IgnoreValidation ) {
 			$object->UpdateFormattersMasterFields();
@@ -122,8 +122,8 @@
 	{
 		parent::OnBeforeDeleteFromLive($event);
 
+		/** @var kDBItem $object */
 		$object = $event->getObject();
-		/* @var $object kDBItem */
 
 		$sql = 'SELECT *
 				FROM ' . $this->Application->getUnitOption($event->Prefix, 'TableName') . '
@@ -315,8 +315,8 @@
 		$new_processing = false;
 		$link_id = $listing_type_id = 0;
 
+		/** @var kDBItem $object */
 		$object = $event->getObject( Array('skip_autoload' => true) );
-		/* @var $object kDBItem */
 
 		switch ($event->Name) {
 			case 'EnhanceLinkAfterOrderApprove':
@@ -465,8 +465,8 @@
 	 */
 	function EnhanceLinkAfterOrderApprove($event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject( Array('skip_autoload' => true) );
-		/* @var $object kDBItem */
 
 		$fields = $event->getEventParam('field_values');
 		$item_data = unserialize($fields['ItemData']);
@@ -518,8 +518,8 @@
 	 */
 	function ExpireLink($event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject(Array ('skip_autoload' => true));
-		/* @var $object kDBItem */
 
 		$fields = $event->getEventParam('field_values');
 		$item_data = unserialize($fields['ItemData']);
@@ -550,8 +550,8 @@
 	 */
 	protected function iterateItems(kEvent $event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject(Array ('skip_autoload' => true));
-		/* @var $object kDBItem */
 
 		$ids = $this->StoreSelectedIDs($event);
 
@@ -586,8 +586,8 @@
 
 		// extend period for pending/renewal links (if owner has agreed)
 		if ( $event->Name == 'OnMassApprove' ) {
+			/** @var kDBItem $lst_object */
 			$lst_object = $this->Application->recallObject('lst', null, Array ('skip_autoload' => true));
-			/* @var $lst_object kDBItem */
 
 			foreach ($ids as $id) {
 				$object->Load($id);
@@ -705,8 +705,8 @@
 			return;
 		}
 
+		/** @var kDBItem $object */
 		$object = $event->getObject(Array ('skip_autoload' => true));
-		/* @var $object kDBItem */
 
 		$object->Load($listing_id);
 
@@ -735,8 +735,8 @@
 		$expired_listings = $this->Conn->GetCol($sql);
 		if(is_array($expired_listings) && count($expired_listings) > 0)
 		{
+			/** @var kDBItem $object */
 			$object = $this->Application->recallObject($event->Prefix.'.-item', null, Array('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			foreach($expired_listings as $listing_id)
 			{
@@ -787,8 +787,8 @@
 	 */
 	protected function OnMassDelete(kEvent $event)
 	{
+		/** @var kDBItem $object */
 		$object = $event->getObject(Array ('skip_autoload' => true));
-		/* @var $object kDBItem */
 
 		$ids = $this->StoreSelectedIDs($event);
 
Index: modules/in-link/units/listings/listings_tag_processor.php
===================================================================
--- modules/in-link/units/listings/listings_tag_processor.php
+++ modules/in-link/units/listings/listings_tag_processor.php
@@ -24,8 +24,8 @@
 	 */
 	function ListingTypeLink($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		return $this->Application->HREF($params['edit_template'],'', Array(
 				'm_opener'		=>	'd',
@@ -38,8 +38,8 @@
 
 	function LinkEditLink($params)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
 		$sql = 'SELECT '.$this->Application->getUnitOption('l', 'IDField').'
 				FROM '.$this->Application->getUnitOption('l', 'TableName').'
@@ -66,11 +66,11 @@
 
 	protected function _expirationField($params, $format_field)
 	{
+		/** @var kDBItem $object */
 		$object = $this->getObject($params);
-		/* @var $object kDBItem */
 
+		/** @var kDBItem $listing_type */
 		$listing_type = $this->Application->recallObject( 'lst', 'lst', $params );
-		/* @var $listing_type kDBItem */
 
 		$dur_type_mapping = Array (
 			1 => 1, 2 => 60, 3 => 3600, 4 => 3600 * 24,
@@ -82,9 +82,9 @@
 		$expiration_interval = $duration * $dur_type_mapping[$duration_type];
 		$expiration_date = adodb_mktime() + $expiration_interval;
 
+		/** @var LanguagesItem $lang */
 		$lang = $this->Application->recallObject('lang.current');
-		/* @var $lang LanguagesItem */
 
 		return adodb_date($lang->GetDBField($format_field), $expiration_date);
 	}
 }
\ No newline at end of file
Index: modules/in-news/install.php
===================================================================
--- modules/in-news/install.php
+++ modules/in-news/install.php
@@ -32,8 +32,8 @@
 }
 else {
 	// install, using installation wizard
+	/** @var kInstallToolkit $toolkit */
 	$toolkit =& $this->toolkit;
-	/* @var $toolkit kInstallToolkit */
 }
 
 $application =& kApplication::Instance();
Index: modules/in-news/units/articles/articles_event_handler.php
===================================================================
--- modules/in-news/units/articles/articles_event_handler.php
+++ modules/in-news/units/articles/articles_event_handler.php
@@ -28,8 +28,8 @@
 		{
 			parent::SetCustomQuery($event);
 
+			/** @var kDBList $object */
 			$object = $event->getObject();
-			/* @var $object kDBList */
 
 			if ( !$this->Application->isAdminUser ) {
 				$where_clause = '(Archived = 0) AND (StartDate < ' . adodb_mktime() . ' OR StartDate = 0) AND (EndOn > ' . adodb_mktime() . ' OR EndOn IS NULL)';
@@ -129,8 +129,8 @@
 								(LENGTH(cd.'.$article_custom_fields['RssOriginalURL'].') > 0)';
 				$article_ids = $this->Conn->GetCol($sql);
 				if ($article_ids) {
+					/** @var kTempTablesHandler $temp_handler */
 					$temp_handler = $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler');
-					/* @var $temp_handler kTempTablesHandler */
 
 					$temp_handler->DeleteItems($event->Prefix, $event->Special, $article_ids);
 				}
@@ -179,8 +179,8 @@
 				return true;
 			}
 
+			/** @var kCurlHelper $curl_helper */
 			$curl_helper = $this->Application->recallObject('CurlHelper');
-			/* @var $curl_helper kCurlHelper */
 
 			$curl_helper->followLocation = true;
 			$curl_helper->setOptions( Array (CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows; U; Windows NT 5.2; ru; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)') ); // otherwise FeedBurner will return HTML
@@ -191,8 +191,8 @@
 				return false;
 			}
 
+			/** @var kXMLHelper $xml_helper */
 			$xml_helper = $this->Application->recallObject('kXMLHelper');
-			/* @var $xml_helper kXMLHelper */
 
 			$root_node =& $xml_helper->Parse($xml_data, kXMLHelper::XML_WITH_TEXT_NODES);
 
@@ -230,8 +230,8 @@
 		 */
 		function _getMLFields(&$object)
 		{
+			/** @var kMultiLanguage $ml_formatter */
 			$ml_formatter = $this->Application->recallObject('kMultiLanguage');
-			/* @var $ml_formatter kMultiLanguage */
 
 			$title_field = 'Title';
 			$title_formatter = $object->GetFieldOption($title_field, 'formatter');
@@ -261,8 +261,8 @@
 			$current_node = $root_node->firstChild;
 			$feed_articles = $this->getFeedArticles($event);
 
+			/** @var kDBItem $object */
 			$object = $this->Application->recallObject($event->Prefix.'.-item', null, Array('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			$category_id = $event->getEventParam('category_id');
 			list ($title_field, $body_field) = $this->_getMLFields($object);
@@ -272,8 +272,9 @@
 				if ($current_node->Name != 'ITEM') continue;
 				// collect item data
 				$data = Array();
+
+				/** @var kXMLNode $sub_node */
 				$sub_node =& $current_node->firstChild;
-				/* @var $sub_node kXMLNode */
 
 				do {
 					if ($sub_node->Name == 'ATOM:SUMMARY') {
@@ -351,8 +352,8 @@
 			$current_node = $root_node->firstChild;
 			$feed_articles = $this->getFeedArticles($event);
 
+			/** @var kDBItem $object */
 			$object = $this->Application->recallObject($event->Prefix.'.-item', null, Array('skip_autoload' => true));
-			/* @var $object kDBItem */
 
 			$category_id = $event->getEventParam('category_id');
 			list ($title_field, $body_field) = $this->_getMLFields($object);
@@ -361,8 +362,9 @@
 				if ($current_node->Name != 'ENTRY') continue;
 				// collect item data
 				$data = Array();
+
+				/** @var kXMLNode $sub_node */
 				$sub_node =& $current_node->firstChild;
-				/* @var $sub_node kXMLNode */
 
 				do {
 					if ($sub_node->Name == 'LINK') {
@@ -406,8 +408,8 @@
 
 		function getCustomColumns($prefix)
 		{
+			/** @var kMultiLanguage $ml_formatter */
 			$ml_formatter = $this->Application->recallObject('kMultiLanguage');
-			/* @var $ml_formatter kMultiLanguage */
 
 			$custom_fields = array_flip($this->Application->getUnitOption($prefix, 'CustomFields'));
 			foreach ($custom_fields as $custom_name => $custom_id) {
@@ -454,8 +456,8 @@
 		 */
 		function createExcerpt($event)
 		{
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			if ( !$object->GetField('Excerpt') || $object->GetDBField('GenerateExcerpt') ) {
 				$excerpt = strip_tags($object->GetField('Body'));
@@ -480,8 +482,8 @@
 				$excerpt_formatter = $object->GetFieldOption('Excerpt', 'formatter');
 
 				if ( $excerpt_formatter == 'kMultiLanguage' ) {
+					/** @var kMultiLanguage $ml_formatter */
 					$ml_formatter = $this->Application->recallObject('kMultiLanguage');
-					/* @var $ml_formatter kMultiLanguage */
 
 					$excerpt_field = $ml_formatter->LangFieldName($excerpt_field);
 				}
@@ -529,8 +531,8 @@
 				return ;
 			}
 
+			/** @var kDBItem $object */
 			$object = $event->getObject();
-			/* @var $object kDBItem */
 
 			$archive_days = $this->Application->ConfigValue('News_Archive');
 			if ( $archive_days ) {