Index: core/install/cache/class_structure.php
===================================================================
--- core/install/cache/class_structure.php
+++ core/install/cache/class_structure.php
@@ -5,7 +5,7 @@
  * This file is automatically @generated. Use 'php tools/build_class_map.php' to rebuild it.
  */
 return array(
-	'cache_format' => 1,
+	'cache_format' => 2,
 	'classes' => array(
 		'AdminEventsHandler' => '/core/units/admin/admin_events_handler.php',
 		'AdminTagProcessor' => '/core/units/admin/admin_tag_processor.php',
@@ -338,4 +338,2200 @@
 		'kZendPDFRenderer' => '/core/units/pdf/pdf_renderer_zend.php',
 		'kiCacheable' => '/core/kernel/interfaces/cacheable.php',
 	),
+	'class_info' => array(
+		'AdminEventsHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'AdminTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'AjaxFormHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'ApcCacheHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kCacheHandler',
+			),
+		),
+		'BackupHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'BaseSession' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'BaseSessionStorage' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBBase',
+			),
+		),
+		'CacheSettings' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'CaptchaEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kEventHandler',
+			),
+		),
+		'CategoriesEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'CategoriesItem' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBItem',
+			),
+		),
+		'CategoriesTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'CategoryHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'CategoryItemRewrite' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'CategoryItemsEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'CategoryItemsTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'CategoryPermissionRebuild' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'ChangeLog' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'ChangeLogEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'ChangeLogTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'ColumnSet' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'ConfigSearchEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'ConfigSearchTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'ConfigurationEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'ConfigurationItem' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBItem',
+			),
+		),
+		'ConfigurationTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'ConfigurationValidator' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kValidator',
+			),
+		),
+		'ContentEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'ContentTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'CoreUpgrades' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kUpgradeHelper',
+			),
+		),
+		'CountryStateEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'CssMinifyHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'CustomDataEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'CustomFieldsEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'CustomFieldsTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'Debugger' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'DebuggerUtil' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'DeploymentHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'DraftEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'EditPickerHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'EmailDelivery' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'EmailLogEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'EmailLogStatus' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'EmailLogTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'EmailQueueEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'EmailQueueTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'EmailTemplate' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'EmailTemplateEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'EmailTemplateTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'FakeCacheHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kCacheHandler',
+			),
+		),
+		'FavoritesEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'FckEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'FckTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'FileEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'FileHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'FileTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'FormFieldEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'FormFieldsTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'FormSubmissionHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'FormSubmissionTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'FormSubmissionsEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'FormsEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'FormsTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'GeoCodeHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'GroupTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'GroupsEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'IDBConnection' => array(
+			'type' => 2,
+		),
+		'ImageEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'ImageHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'ImageTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'ImagesItem' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBItem',
+			),
+		),
+		'InPortalPrerequisites' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'InpCustomFieldsHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'Intechnic\\InPortal\\Core\\kernel\\utility\\ClassDiscovery\\ClassDetector' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'PhpParser\\NodeVisitorAbstract',
+			),
+		),
+		'Intechnic\\InPortal\\Core\\kernel\\utility\\ClassDiscovery\\ClassMapBuilder' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'Intechnic\\InPortal\\Core\\kernel\\utility\\ClassDiscovery\\CodeFolderFilterIterator' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'RecursiveFilterIterator',
+			),
+		),
+		'ItemFilterEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'ItemFilterTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'JSONHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'JsMinifyHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'Language' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'LanguageImportHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'LanguagesEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'LanguagesItem' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBItem',
+			),
+		),
+		'LanguagesTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'LeftJoinOptimizer' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'ListHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'LoginResult' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'MInputHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'MailboxHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'MailingList' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'MailingListEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'MailingListHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'MailingListTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'MaintenanceMode' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'MassImageResizer' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'MemcacheCacheHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kCacheHandler',
+			),
+		),
+		'MenuHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'MimeDecodeHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'MinifyHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'ModuleDeploymentLog' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'ModuleDeploymentLogEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'ModulesEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'ModulesTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'NParser' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'NParserCompiler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'POP3Helper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'PageHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'PageRevisionEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'PageRevisionTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'Params' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'ParserException' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'Exception',
+			),
+		),
+		'PasswordHash' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'PasswordHashingMethod' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'PermissionTypeEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'PermissionsEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'PermissionsTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'PhraseTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'PhrasesEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'PriorityEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'PromoBlockEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'PromoBlockGroupEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'PromoBlockGroupTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'PromoBlockTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'PromoBlockType' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'RatingHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'RelatedSearchEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'RelatedSearchTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'RelationshipEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'RelationshipTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'ReviewsEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'ReviewsTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'ScheduledTask' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'ScheduledTaskEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'SelectorsEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'SelectorsItem' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBItem',
+			),
+		),
+		'SelectorsTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'Session' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'BaseSession',
+			),
+		),
+		'SessionLogEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'SessionStorage' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'BaseSessionStorage',
+			),
+		),
+		'SiteConfigEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kEventHandler',
+			),
+		),
+		'SiteConfigHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'SiteConfigTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kTagProcessor',
+			),
+		),
+		'SiteDomainEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'SiteHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'SkinEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'SkinHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'SpamHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'SpamReportEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'SpamReportTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'StatisticsEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'StatisticsTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'StorageEngine' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'StylesheetsEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'StylesheetsItem' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBItem',
+			),
+		),
+		'SubmissionFormField' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'SubmissionLogEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'SubmissionLogTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'SystemEventSubscriptionEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'SystemEventSubscriptionTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'SystemLogEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'SystemLogTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'TemplateHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'TemplatesCache' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'ThemeFileEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'ThemeItem' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBItem',
+			),
+		),
+		'ThemesEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'ThemesTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'ThesaurusEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'ThesaurusTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'TranslationSaveMode' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'TranslatorEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'TranslatorTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'UnitConfigDecorator' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'UserGroupsEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'UserHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'UserProfileEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'UserProfileTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'UserType' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'UsersEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'UsersItem' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBItem',
+			),
+		),
+		'UsersSyncronize' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'UsersSyncronizeManager' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'UsersTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'VisitsEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'VisitsList' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBList',
+			),
+		),
+		'VisitsTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'XCacheCacheHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kCacheHandler',
+			),
+		),
+		'XMLIterator' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'Iterator',
+			),
+		),
+		'_BlockTag' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'_Tag_Cache' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => '_BlockTag',
+			),
+		),
+		'_Tag_Capture' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => '_Tag_DefineElement',
+			),
+		),
+		'_Tag_Comment' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => '_BlockTag',
+			),
+		),
+		'_Tag_Compress' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => '_BlockTag',
+			),
+		),
+		'_Tag_DefaultParam' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => '_BlockTag',
+			),
+		),
+		'_Tag_DefineElement' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => '_BlockTag',
+			),
+		),
+		'_Tag_If' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => '_BlockTag',
+			),
+		),
+		'_Tag_IfDataExists' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => '_BlockTag',
+			),
+		),
+		'_Tag_IfNot' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => '_Tag_If',
+			),
+		),
+		'_Tag_Include' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => '_BlockTag',
+			),
+		),
+		'_Tag_Param' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => '_BlockTag',
+			),
+		),
+		'_Tag_RenderElement' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => '_Tag_DefineElement',
+			),
+		),
+		'_Tag_RenderElements' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => '_BlockTag',
+			),
+		),
+		'_Tag_SetParam' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => '_BlockTag',
+			),
+		),
+		'clsCachedPermissions' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'clsRecursionStack' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'fckFCKHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'kApplication' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kiCacheable',
+			),
+		),
+		'kArray' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+				1 => 'kiCacheable',
+			),
+		),
+		'kBase' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'kBracketsHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'kCCDateFormatter' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kFormatter',
+			),
+		),
+		'kCSSDefaults' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'kCSVHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'kCache' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'kCacheHandler' => array(
+			'type' => 1,
+			'modifiers' => 1,
+		),
+		'kCacheManager' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+				1 => 'kiCacheable',
+			),
+		),
+		'kCaptchaHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'kCatDBEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'kCatDBItem' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBItem',
+			),
+		),
+		'kCatDBItemExportHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'kCatDBList' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBList',
+			),
+		),
+		'kCatDBTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'kChangesFormatter' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kFormatter',
+			),
+		),
+		'kChartHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'kClipboardHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'kColumnPickerHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'kCookieHasher' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'kCountHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'kCountryStatesHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'kCronField' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'kCronHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'kCurlHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'kCustomFieldFormatter' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kFormatter',
+			),
+		),
+		'kDBBase' => array(
+			'type' => 1,
+			'modifiers' => 1,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'kDBConnection' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+				1 => 'IDBConnection',
+			),
+		),
+		'kDBConnectionDebug' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBConnection',
+			),
+		),
+		'kDBEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kEventHandler',
+			),
+		),
+		'kDBItem' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBBase',
+			),
+		),
+		'kDBList' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBBase',
+				1 => 'Iterator',
+				2 => 'Countable',
+			),
+		),
+		'kDBLoadBalancer' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+				1 => 'IDBConnection',
+			),
+		),
+		'kDBTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kTagProcessor',
+			),
+		),
+		'kDateFormatter' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kFormatter',
+			),
+		),
+		'kEmail' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'kEmailSendingHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'kEmailTemplateHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'kErrorHandlerStack' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHandlerStack',
+			),
+		),
+		'kEvent' => array(
+			'type' => 1,
+			'modifiers' => 2,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'kEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'kEventManager' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+				1 => 'kiCacheable',
+			),
+		),
+		'kExceptionHandlerStack' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHandlerStack',
+			),
+		),
+		'kFactory' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+				1 => 'kiCacheable',
+			),
+		),
+		'kFactoryException' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'Exception',
+			),
+		),
+		'kFilenamesHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'kFilesizeFormatter' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kFormatter',
+			),
+		),
+		'kFormatter' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'kHTTPQuery' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'Params',
+			),
+		),
+		'kHandlerStack' => array(
+			'type' => 1,
+			'modifiers' => 1,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'kHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'kHookManager' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+				1 => 'kiCacheable',
+			),
+		),
+		'kInstallToolkit' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'kInstallator' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'kLEFTFormatter' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kFormatter',
+			),
+		),
+		'kLogger' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'kMainTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kTagProcessor',
+			),
+		),
+		'kModulesHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'kMultiLanguage' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kFormatter',
+			),
+		),
+		'kMultiLanguageHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'kMultipleFilter' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'kMySQLQuery' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'Iterator',
+				1 => 'Countable',
+				2 => 'SeekableIterator',
+			),
+		),
+		'kMySQLQueryCol' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kMySQLQuery',
+			),
+		),
+		'kNavigationBar' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'kNoPermissionException' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kRedirectException',
+			),
+		),
+		'kOpenerStack' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'kOptionsFormatter' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kFormatter',
+			),
+		),
+		'kPDFElemFactory' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'kPDFElement' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'kPDFHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'kPDFImage' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kPDFElement',
+			),
+		),
+		'kPDFLine' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kPDFElement',
+			),
+		),
+		'kPDFRenderer' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'kPDFStylesheet' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'kPDFTable' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kPDFElement',
+			),
+		),
+		'kPDFTableRow' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kPDFElement',
+			),
+		),
+		'kPDFTextElement' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kPDFElement',
+			),
+		),
+		'kPasswordFormatter' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kFormatter',
+			),
+		),
+		'kPermCacheUpdater' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'kPermissionsHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'kPhraseCache' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'kPictureFormatter' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kUploadFormatter',
+			),
+		),
+		'kPlainUrlProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kUrlProcessor',
+			),
+		),
+		'kPriorityHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'kRecursiveHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'kRedirectException' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'Exception',
+			),
+		),
+		'kRequestManager' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'kRewriteUrlProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kUrlProcessor',
+			),
+		),
+		'kScheduledTaskManager' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+				1 => 'kiCacheable',
+			),
+		),
+		'kSearchHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'kSectionsHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'kSerializedFormatter' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kFormatter',
+			),
+		),
+		'kSocket' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'kSubscriptionAnalyzer' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'kSubscriptionItem' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'kSubscriptionManager' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'kSystemConfig' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'kSystemConfigException' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'Exception',
+			),
+		),
+		'kTCPDFRenderer' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kPDFRenderer',
+			),
+		),
+		'kTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'kTempHandlerSubTable' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kTempHandlerTable',
+			),
+		),
+		'kTempHandlerTable' => array(
+			'type' => 1,
+			'modifiers' => 1,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'kTempHandlerTopTable' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kTempHandlerTable',
+			),
+		),
+		'kTempTablesHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'kThemesHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'kUnitConfig' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'kUnitConfigCloner' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+				1 => 'kiCacheable',
+			),
+		),
+		'kUnitConfigReader' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+				1 => 'kiCacheable',
+			),
+		),
+		'kUnitFormatter' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kFormatter',
+			),
+		),
+		'kUpgradeHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'kUploadFormatter' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kFormatter',
+			),
+		),
+		'kUploadHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'kUploaderException' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'Exception',
+			),
+		),
+		'kUrlManager' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'kUrlProcessor' => array(
+			'type' => 1,
+			'modifiers' => 1,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'kUtil' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'kValidator' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'kXMLHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'kXMLNode' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'kXMLNode5' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kXMLNode',
+				1 => 'IteratorAggregate',
+			),
+		),
+		'kZendPDFRenderer' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kPDFRenderer',
+			),
+		),
+		'kiCacheable' => array(
+			'type' => 2,
+		),
+	),
 );
Index: core/kernel/application.php
===================================================================
--- core/kernel/application.php
+++ core/kernel/application.php
@@ -2275,6 +2275,19 @@
 	}
 
 	/**
+	 * Returns sub-classes of given ancestor class.
+	 *
+	 * @param string  $ancestor_class Ancestor class.
+	 * @param boolean $concrete_only  Return only non-abstract classes.
+	 *
+	 * @return array
+	 */
+	public function getSubClasses($ancestor_class, $concrete_only = true)
+	{
+		return $this->Factory->getSubClasses($ancestor_class, $concrete_only);
+	}
+
+	/**
 	 * Checks if application is in debug mode
 	 *
 	 * @param bool $check_debugger check if kApplication debugger is initialized too, not only for defined DEBUG_MODE constant
Index: core/kernel/managers/cache_manager.php
===================================================================
--- core/kernel/managers/cache_manager.php
+++ core/kernel/managers/cache_manager.php
@@ -302,7 +302,7 @@
 	{
 		// maybe discover keys automatically from corresponding classes
 		$cache_keys = Array (
-			'Factory.Files', 'Factory.Namespaces', 'Factory.realClasses',
+			'Factory.Files', 'Factory.ClassInfo', 'Factory.ClassTree', 'Factory.Namespaces', 'Factory.realClasses',
 			'ConfigReader.prefixFiles', 'ConfigCloner.clones',
 			'EventManager.beforeHooks', 'EventManager.afterHooks', 'EventManager.scheduledTasks', 'EventManager.buildEvents',
 			'Application.ReplacementTemplates', 'Application.RewriteListeners', 'Application.ModuleInfo',
Index: core/kernel/utility/ClassDiscovery/ClassDetector.php
===================================================================
--- core/kernel/utility/ClassDiscovery/ClassDetector.php
+++ core/kernel/utility/ClassDiscovery/ClassDetector.php
@@ -16,7 +16,10 @@
 
 
 use PhpParser\Node;
+use PhpParser\Node\Stmt\Class_;
 use PhpParser\Node\Stmt\ClassLike;
+use PhpParser\Node\Stmt\Interface_;
+use PhpParser\Node\Stmt\Trait_;
 use PhpParser\NodeVisitorAbstract;
 
 defined('FULL_PATH') or die('restricted access!');
@@ -58,7 +61,54 @@
 	public function enterNode(Node $node)
 	{
 		if ( $node instanceof ClassLike ) {
-			$this->classMapBuilder->addClass((string)$node->namespacedName);
+			$class_info = array();
+
+			if ( $node instanceof Class_ ) {
+				$class_info['type'] = \kFactory::TYPE_CLASS;
+				$class_info['modifiers'] = 0;
+
+				if ( $node->isAbstract() ) {
+					$class_info['modifiers'] |= \kFactory::MODIFIER_ABSTRACT;
+				}
+
+				if ( $node->isFinal() ) {
+					$class_info['modifiers'] |= \kFactory::MODIFIER_FINAL;
+				}
+
+				$extends = array();
+
+				if ( $node->extends ) {
+					$extends[] = (string)$node->extends;
+				}
+
+				if ( $node->implements ) {
+					foreach ( $node->implements as $interface ) {
+						$extends[] = (string)$interface;
+					}
+				}
+
+				if ( $extends ) {
+					$class_info['extends'] = $extends;
+				}
+			}
+			elseif ( $node instanceof Interface_ ) {
+				$class_info['type'] = \kFactory::TYPE_INTERFACE;
+
+				if ( $node->extends ) {
+					$extends = array();
+
+					foreach ( $node->extends as $interface ) {
+						$extends[] = (string)$interface;
+					}
+
+					$class_info['extends'] = $extends;
+				}
+			}
+			elseif ( $node instanceof Trait_ ) {
+				$class_info['type'] = \kFactory::TYPE_TRAIT;
+			}
+
+			$this->classMapBuilder->addClass((string)$node->namespacedName, $class_info);
 		}
 	}
 
Index: core/kernel/utility/ClassDiscovery/ClassMapBuilder.php
===================================================================
--- core/kernel/utility/ClassDiscovery/ClassMapBuilder.php
+++ core/kernel/utility/ClassDiscovery/ClassMapBuilder.php
@@ -25,7 +25,7 @@
 class ClassMapBuilder
 {
 
-	const CACHE_FORMAT = 1;
+	const CACHE_FORMAT = 2;
 
 	const CACHE_FILE_STRUCTURE = 'class_structure.php';
 
@@ -53,11 +53,18 @@
 	protected $classToFileMap = array();
 
 	/**
-	 * List of classes, declared in each file (key - file, value - class list).
+	 * Class information used during cache building (file > class > class_info).
 	 *
 	 * @var array
 	 */
-	protected $fileToClassMap = array();
+	protected $buildingCache = array();
+
+	/**
+	 * Class information (type, extends, implements, etc.).
+	 *
+	 * @var array
+	 */
+	protected $classInfo = array();
 
 	/**
 	 * Stores hash of each file on given path.
@@ -152,7 +159,7 @@
 	}
 
 	/**
-	 * Returns class map, that was build previously.
+	 * Returns class map and class information, that was built previously.
 	 *
 	 * @return array
 	 */
@@ -160,7 +167,7 @@
 	{
 		$this->load(self::CACHE_FILE_STRUCTURE, false);
 
-		return $this->classToFileMap;
+		return array($this->classToFileMap, $this->classInfo);
 	}
 
 	/**
@@ -172,8 +179,8 @@
 	public function build()
 	{
 		if ( !class_exists('PhpParser\Parser') ) {
-			$error_msg = 'PHP Parser not found. ';
-			$error_msg .= 'Make sure, that Composer dependencies were installed using "php composer.phar install --dev" command.';
+			$error_msg = 'PHP Parser not found. Make sure, that Composer dependencies were ';
+			$error_msg .= 'installed using "php composer.phar install --dev" command.';
 			throw new \RuntimeException($error_msg);
 		}
 
@@ -201,6 +208,7 @@
 
 		ksort($this->classToFileMap);
 		ksort($this->fileHashes);
+		ksort($this->classInfo);
 
 		$this->store(self::CACHE_FILE_STRUCTURE);
 		$this->store(self::CACHE_FILE_HASHES);
@@ -237,22 +245,25 @@
 
 		$cache = include $file_path;
 
-		if ( $cache['cache_format'] < self::CACHE_FORMAT ) {
+		if ( $cache['cache_format'] != self::CACHE_FORMAT ) {
 			return;
 		}
 
 		if ( $filename === self::CACHE_FILE_STRUCTURE ) {
+			$class_info = $cache['class_info'];
+
 			if ( $for_writing ) {
 				foreach ( $cache['classes'] as $class => $file ) {
-					if ( !isset($this->fileToClassMap[$file]) ) {
-						$this->fileToClassMap[$file] = array();
+					if ( !isset($this->buildingCache[$file]) ) {
+						$this->buildingCache[$file] = array();
 					}
 
-					$this->fileToClassMap[$file][] = $class;
+					$this->buildingCache[$file][$class] = $class_info[$class];
 				}
 			}
 			else {
 				$this->classToFileMap = $cache['classes'];
+				$this->classInfo = $class_info;
 			}
 		}
 		elseif ( $filename === self::CACHE_FILE_HASHES ) {
@@ -330,15 +341,14 @@
 
 		if ( $current_hash === $previous_hash ) {
 			// File wasn't change since time, when cache was built.
-			if ( isset($this->fileToClassMap[$file]) ) {
-				foreach ( $this->fileToClassMap[$file] as $class ) {
-					$this->addClass($class);
+			if ( isset($this->buildingCache[$file]) ) {
+				foreach ( $this->buildingCache[$file] as $class => $class_info ) {
+					$this->addClass($class, $class_info);
 				}
 			}
 		}
 		else {
 			// Parse file, because it's content doesn't match the cache.
-			$this->fileToClassMap[$file] = array();
 			$this->fileHashes[$file] = $current_hash;
 
 			$statements = $this->parser->parse($code);
@@ -360,6 +370,7 @@
 
 		if ( $filename === self::CACHE_FILE_STRUCTURE ) {
 			$cache['classes'] = $this->classToFileMap;
+			$cache['class_info'] = $this->classInfo;
 		}
 		elseif ( $filename === self::CACHE_FILE_HASHES ) {
 			$cache['file_hashes'] = $this->fileHashes;
@@ -422,14 +433,15 @@
 	/**
 	 * Adds class to the map.
 	 *
-	 * @param string $class Class.
+	 * @param string $class      Class.
+	 * @param array  $class_info Class info.
 	 *
 	 * @return void
 	 */
-	public function addClass($class)
+	public function addClass($class, array $class_info)
 	{
+		$this->classInfo[$class] = $class_info;
 		$this->classToFileMap[$class] = $this->currentFile;
-		$this->fileToClassMap[$this->currentFile][] = $class;
 	}
 
 }
Index: core/kernel/utility/factory.php
===================================================================
--- core/kernel/utility/factory.php
+++ core/kernel/utility/factory.php
@@ -18,6 +18,13 @@
 
 class kFactory extends kBase implements kiCacheable {
 
+	const TYPE_CLASS = 1;
+	const TYPE_INTERFACE = 2;
+	const TYPE_TRAIT = 3;
+
+	const MODIFIER_ABSTRACT = 1;
+	const MODIFIER_FINAL = 2;
+
 	/**
 	 * Mapping between class name and file name
 	 * where class definition can be found.
@@ -29,6 +36,20 @@
 	protected $classMap = Array ();
 
 	/**
+	 * Class information.
+	 *
+	 * @var array
+	 */
+	protected $classInfo = array();
+
+	/**
+	 * Information about class usage among other classes.
+	 *
+	 * @var array
+	 */
+	protected $classTree = array();
+
+	/**
 	 * The PSR-4 compliant namespace-to-folder mapping.
 	 *
 	 * @var array
@@ -91,11 +112,24 @@
 		}
 
 		foreach ( $class_map_builders as $class_map_builder ) {
-			$class_map = $class_map_builder->get();
+			list($class_map, $class_info) = $class_map_builder->get();
 			$class_names = array_keys($class_map);
 
 			$this->classMap = array_merge($this->classMap, $class_map);
+			$this->classInfo = array_merge($this->classInfo, $class_info);
 			$this->realClasses = array_merge($this->realClasses, array_combine($class_names, $class_names));
+
+			foreach ( $class_info as $class => $class_data ) {
+				if ( isset($class_data['extends']) ) {
+					foreach ( $class_data['extends'] as $extends_class ) {
+						if ( !isset($this->classTree[$extends_class]) ) {
+							$this->classTree[$extends_class] = array();
+						}
+
+						$this->classTree[$extends_class][] = $class;
+					}
+				}
+			}
 		}
 	}
 
@@ -109,6 +143,8 @@
 	public function setFromCache(&$data)
 	{
 		$this->classMap = $data['Factory.Files'];
+		$this->classInfo = $data['Factory.ClassInfo'];
+		$this->classTree = $data['Factory.ClassTree'];
 		$this->namespaceMap = $data['Factory.Namespaces'];
 		$this->realClasses = $data['Factory.realClasses'];
 	}
@@ -191,11 +227,15 @@
 	public function getToCache()
 	{
 		ksort($this->classMap);
+		ksort($this->classInfo);
+		ksort($this->classTree);
 		ksort($this->namespaceMap);
 		ksort($this->realClasses);
 
 		return Array (
 			'Factory.Files' => $this->classMap,
+			'Factory.ClassInfo' => $this->classInfo,
+			'Factory.ClassTree' => $this->classTree,
 			'Factory.Namespaces' => $this->namespaceMap,
 			'Factory.realClasses' => $this->realClasses,
 		);
@@ -352,6 +392,65 @@
 	}
 
 	/**
+	 * Returns sub-classes of given ancestor class.
+	 *
+	 * @param string  $ancestor_class Ancestor class.
+	 * @param boolean $concrete_only  Return only non-abstract classes.
+	 *
+	 * @return array
+	 * @throws kFactoryException When ancestor class not found.
+	 */
+	public function getSubClasses($ancestor_class, $concrete_only = true)
+	{
+		if ( !isset($this->classMap[$ancestor_class]) ) {
+			throw new kFactoryException(
+				'Class "<strong>' . $ancestor_class . '</strong>" is not registered in the Factory'
+			);
+		}
+
+		if ( !isset($this->classTree[$ancestor_class]) ) {
+			return array();
+		}
+
+		$all_sub_classes = array();
+
+		foreach ( $this->classTree[$ancestor_class] as $sub_class ) {
+			$real_sub_class = $this->realClasses[$sub_class];
+			$all_sub_classes[$real_sub_class] = $sub_class;
+			$all_sub_classes = array_merge($all_sub_classes, $this->getSubClasses($sub_class, false));
+		}
+
+		if ( $concrete_only ) {
+			$concrete_sub_classes = array();
+
+			foreach ( $all_sub_classes as $real_sub_class => $sub_class ) {
+				if ( $this->classInfo[$sub_class]['type'] == self::TYPE_CLASS
+					&& !$this->classHasModifier($sub_class, self::MODIFIER_ABSTRACT)
+				) {
+					$concrete_sub_classes[$real_sub_class] = $sub_class;
+				}
+			}
+
+			return $concrete_sub_classes;
+		}
+
+		return $all_sub_classes;
+	}
+
+	/**
+	 * Determines of class has modifier.
+	 *
+	 * @param string  $class    Class.
+	 * @param integer $modifier Modifier.
+	 *
+	 * @return boolean
+	 */
+	protected function classHasModifier($class, $modifier)
+	{
+		return ($this->classInfo[$class]['modifiers'] & $modifier) == $modifier;
+	}
+
+	/**
 	 * Registers new class in the factory
 	 *
 	 * @param string $real_class Real name of class as in class declaration
Index: modules/custom/install/cache/class_structure.php
===================================================================
--- modules/custom/install/cache/class_structure.php
+++ modules/custom/install/cache/class_structure.php
@@ -5,7 +5,7 @@
  * This file is automatically @generated. Use 'php tools/build_class_map.php' to rebuild it.
  */
 return array(
-	'cache_format' => 1,
+	'cache_format' => 2,
 	'classes' => array(
 		'CustomEventHandler' => '/modules/custom/units/sections/custom_eh.php',
 		'CustomUpgrades' => '/modules/custom/install/upgrades.php',
@@ -24,4 +24,118 @@
 		'WidgetEventHandler' => '/modules/custom/units/widgets/widget_eh.php',
 		'WidgetTagProcessor' => '/modules/custom/units/widgets/widget_tp.php',
 	),
+	'class_info' => array(
+		'CustomEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kEventHandler',
+			),
+		),
+		'CustomUpgrades' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kUpgradeHelper',
+			),
+		),
+		'EArticleEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'ArticlesEventHandler',
+			),
+		),
+		'EArticleTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'ArticlesTagProcessor',
+			),
+		),
+		'ECategoryEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'CategoriesEventHandler',
+			),
+		),
+		'ECategoryTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'CategoriesTagProcessor',
+			),
+		),
+		'ELinkEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'LinksEventHandler',
+			),
+		),
+		'ELinkTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'LinkTagProcessor',
+			),
+		),
+		'EProductEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'ProductsEventHandler',
+			),
+		),
+		'EProductTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'ProductsTagProcessor',
+			),
+		),
+		'EReviewEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'ReviewsEventHandler',
+			),
+		),
+		'EUserEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'UsersEventHandler',
+			),
+		),
+		'EUserTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'UsersTagProcessor',
+			),
+		),
+		'SampleHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'WidgetEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'WidgetTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+	),
 );
Index: modules/in-auction/install/cache/class_structure.php
===================================================================
--- modules/in-auction/install/cache/class_structure.php
+++ modules/in-auction/install/cache/class_structure.php
@@ -5,7 +5,7 @@
  * This file is automatically @generated. Use 'php tools/build_class_map.php' to rebuild it.
  */
 return array(
-	'cache_format' => 1,
+	'cache_format' => 2,
 	'classes' => array(
 		'CatSelectHelper' => '/modules/in-auction/units/helpers/catselect_helper.php',
 		'CategoryListingEventHandler' => '/modules/in-auction/units/category_listing/category_listing_eh.php',
@@ -32,4 +32,165 @@
 		'eBaySOAP' => '/modules/in-auction/units/helpers/ebay_soap.php',
 		'eBaySession' => '/modules/in-auction/units/helpers/ebay_soap.php',
 	),
+	'class_info' => array(
+		'CatSelectHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'CategoryListingEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'CategoryListingTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'DetailTemplateEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'EbayEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kEventHandler',
+			),
+		),
+		'EbayShippingEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'EbayShippingTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'EbayTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'ErrorLogEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'ErrorLogTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'InAuctionPrerequisites' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'InAuctionUpgrades' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kUpgradeHelper',
+			),
+		),
+		'ListingEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'ListingItem' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBItem',
+			),
+		),
+		'ListingTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'ProductListingEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'ProductListingTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'ScheduleEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'XMLHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'Xml' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'eBayHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'eBayPlatformNotificationListener' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'eBaySOAP' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'SoapClient',
+			),
+		),
+		'eBaySession' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+	),
 );
Index: modules/in-bulletin/install/cache/class_structure.php
===================================================================
--- modules/in-bulletin/install/cache/class_structure.php
+++ modules/in-bulletin/install/cache/class_structure.php
@@ -5,7 +5,7 @@
  * This file is automatically @generated. Use 'php tools/build_class_map.php' to rebuild it.
  */
 return array(
-	'cache_format' => 1,
+	'cache_format' => 2,
 	'classes' => array(
 		'EmoticonEventHandler' => '/modules/in-bulletin/units/emoticons/emoticon_eh.php',
 		'InBulletinPrerequisites' => '/modules/in-bulletin/install/prerequisites.php',
@@ -22,4 +22,104 @@
 		'TopicsEventHandler' => '/modules/in-bulletin/units/topics/topics_event_handler.php',
 		'TopicsTagProcessor' => '/modules/in-bulletin/units/topics/topics_tag_processor.php',
 	),
+	'class_info' => array(
+		'EmoticonEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'InBulletinPrerequisites' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'InBulletinUpgrades' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kUpgradeHelper',
+			),
+		),
+		'PollCommentEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'PollEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'PollTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'PostEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'PostHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'PostTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'PrivateMessageBodyEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'PrivateMessageEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'PrivateMessageTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'TopicsEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kCatDBEventHandler',
+			),
+		),
+		'TopicsTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kCatDBTagProcessor',
+			),
+		),
+	),
 );
Index: modules/in-commerce/install/cache/class_structure.php
===================================================================
--- modules/in-commerce/install/cache/class_structure.php
+++ modules/in-commerce/install/cache/class_structure.php
@@ -5,7 +5,7 @@
  * This file is automatically @generated. Use 'php tools/build_class_map.php' to rebuild it.
  */
 return array(
-	'cache_format' => 1,
+	'cache_format' => 2,
 	'classes' => array(
 		'AddressesEventHandler' => '/modules/in-commerce/units/addresses/addresses_event_handler.php',
 		'AddressesItem' => '/modules/in-commerce/units/addresses/addresses_item.php',
@@ -117,4 +117,739 @@
 		'kSellaGuestPayGW' => '/modules/in-commerce/units/gateways/gw_classes/sella_guestpay.php',
 		'kVerisignPfLinkGW' => '/modules/in-commerce/units/gateways/gw_classes/verisign_pflink.php',
 	),
+	'class_info' => array(
+		'AddressesEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'AddressesItem' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBItem',
+			),
+		),
+		'AddressesList' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBList',
+			),
+		),
+		'AddressesTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'AffiliatePaymentTypeTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'AffiliatePaymentTypesEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'AffiliatePaymentsEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'AffiliatePaymentsTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'AffiliatePlansBracketsEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'AffiliatePlansBracketsTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'AffiliatePlansEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'AffiliatePlansItemsEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'AffiliatePlansItemsTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'AffiliatesEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'AffiliatesTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'BankLVCurrencyRates' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'CurrencyRates',
+			),
+		),
+		'BracketsEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'BracketsTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'CouponItemType' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'CouponItemsEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'CouponItemsTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'CouponType' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'CouponsEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'CouponsTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'CurrenciesEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'CurrenciesTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'CurrencyRates' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'CustomShippingQuoteEngine' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'ShippingQuoteEngine',
+			),
+		),
+		'DiscountItemType' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'DiscountItemsEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'DiscountItemsTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'DiscountType' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'DiscountsEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'DownloadHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'DstEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'ECBCurrencyRates' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'CurrencyRates',
+			),
+		),
+		'FRNYCurrencyRates' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'CurrencyRates',
+			),
+		),
+		'FilesEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'FilesItem' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBItem',
+			),
+		),
+		'GatewayEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'GatewayTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'GiftCertificateEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'GiftCertificateTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'InCommerceEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kEventHandler',
+			),
+		),
+		'InCommercePrerequisites' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'InCommerceUpgrades' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kUpgradeHelper',
+			),
+		),
+		'Intershipper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'ShippingQuoteEngine',
+			),
+		),
+		'ManufacturersEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'ManufacturersTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'OptionCombinationPriceType' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'OptionType' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'OrderCalculator' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'OrderCheckoutError' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'OrderCheckoutErrorType' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'OrderHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'OrderItemsEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'OrderItemsTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'OrderManager' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'OrderValidator' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kValidator',
+			),
+		),
+		'OrdersEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'OrdersItem' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBItem',
+			),
+		),
+		'OrdersTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'PaymentTypeCurrenciesEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'PaymentTypeCurrenciesTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'PaymentTypeEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'PaymentTypeTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'PricingEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'PricingTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'ProductBackorder' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'ProductInventory' => array(
+			'type' => 1,
+			'modifiers' => 0,
+		),
+		'ProductOptionCombinationsEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'ProductOptionCombinationsTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'ProductOptionsEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'ProductOptionsTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'ProductsEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kCatDBEventHandler',
+			),
+		),
+		'ProductsItem' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kCatDBItem',
+			),
+		),
+		'ProductsTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kCatDBTagProcessor',
+			),
+		),
+		'ReportsEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'ReportsTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'ShippingCostsEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'ShippingEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'ShippingQuoteCollector' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'ShippingQuoteEngine',
+			),
+		),
+		'ShippingQuoteEngine' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'ShippingQuoteEngineEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'ShippingTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'TaxDstEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'TaxesEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'TaxesTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'USPS' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'ShippingQuoteEngine',
+			),
+		),
+		'ZonesEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'ZonesTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'kAtosOriginGW' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kGWBase',
+			),
+		),
+		'kCombPriceFormatter' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kFormatter',
+			),
+		),
+		'kCombinationFormatter' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kFormatter',
+			),
+		),
+		'kGWAuthorizeNet' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kGWBase',
+			),
+		),
+		'kGWBase' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kBase',
+			),
+		),
+		'kGWGoogleCheckout' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kGWBase',
+			),
+		),
+		'kGWPayPal' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kGWBase',
+			),
+		),
+		'kGWPaypalDirect' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kGWBase',
+			),
+		),
+		'kGWRightConnect' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kGWBase',
+			),
+		),
+		'kGWWorldPay' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kGWBase',
+			),
+		),
+		'kGWiDEALnl' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kGWBase',
+			),
+		),
+		'kMultiCardsGW' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kGWBase',
+			),
+		),
+		'kPOCItem' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBItem',
+			),
+		),
+		'kPayboxGW' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kGWBase',
+			),
+		),
+		'kPaymentechGW' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kGWBase',
+			),
+		),
+		'kProductOptionsHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'kSellaGuestPayGW' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kGWBase',
+			),
+		),
+		'kVerisignPfLinkGW' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kGWBase',
+			),
+		),
+	),
 );
Index: modules/in-link/install/cache/class_structure.php
===================================================================
--- modules/in-link/install/cache/class_structure.php
+++ modules/in-link/install/cache/class_structure.php
@@ -5,7 +5,7 @@
  * This file is automatically @generated. Use 'php tools/build_class_map.php' to rebuild it.
  */
 return array(
-	'cache_format' => 1,
+	'cache_format' => 2,
 	'classes' => array(
 		'InLinkPrerequisites' => '/modules/in-link/install/prerequisites.php',
 		'InLinkUpgrades' => '/modules/in-link/install/upgrades.php',
@@ -20,4 +20,90 @@
 		'ListingsEventHandler' => '/modules/in-link/units/listings/listings_event_handler.php',
 		'ListingsTagProcessor' => '/modules/in-link/units/listings/listings_tag_processor.php',
 	),
+	'class_info' => array(
+		'InLinkPrerequisites' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'InLinkUpgrades' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kUpgradeHelper',
+			),
+		),
+		'LinkHelper' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'LinkTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kCatDBTagProcessor',
+			),
+		),
+		'LinkValidationEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'LinkValidationTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'LinkVisitEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'LinksEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kCatDBEventHandler',
+			),
+		),
+		'ListingTypesEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'ListingTypesTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+		'ListingsEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBEventHandler',
+			),
+		),
+		'ListingsTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kDBTagProcessor',
+			),
+		),
+	),
 );
Index: modules/in-news/install/cache/class_structure.php
===================================================================
--- modules/in-news/install/cache/class_structure.php
+++ modules/in-news/install/cache/class_structure.php
@@ -5,11 +5,41 @@
  * This file is automatically @generated. Use 'php tools/build_class_map.php' to rebuild it.
  */
 return array(
-	'cache_format' => 1,
+	'cache_format' => 2,
 	'classes' => array(
 		'ArticlesEventHandler' => '/modules/in-news/units/articles/articles_event_handler.php',
 		'ArticlesTagProcessor' => '/modules/in-news/units/articles/articles_tag_processor.php',
 		'InNewsPrerequisites' => '/modules/in-news/install/prerequisites.php',
 		'InNewsUpgrades' => '/modules/in-news/install/upgrades.php',
 	),
+	'class_info' => array(
+		'ArticlesEventHandler' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kCatDBEventHandler',
+			),
+		),
+		'ArticlesTagProcessor' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kCatDBTagProcessor',
+			),
+		),
+		'InNewsPrerequisites' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kHelper',
+			),
+		),
+		'InNewsUpgrades' => array(
+			'type' => 1,
+			'modifiers' => 0,
+			'extends' => array(
+				0 => 'kUpgradeHelper',
+			),
+		),
+	),
 );