diff --git a/.htaccess b/.htaccess
index 1f3a113..4449202 100644
--- a/.htaccess
+++ b/.htaccess
@@ -319,6 +319,7 @@ AddDefaultCharset utf-8
 
 	# Файл sitemap.xml
 	RewriteRule ^sitemap.xml$ inc/sitemap.php [QSA,L]
+	RewriteRule ^sitemap-([0-9]+).xml$ inc/sitemap.php?id=$1 [QSA,L]
 
 #--start-ave-editor--#
 
diff --git a/README.md b/README.md
index b79c5e7..1304dd9 100644
--- a/README.md
+++ b/README.md
@@ -21,10 +21,8 @@
  * ПО WEB сервера: 
    * Apache >= 1.3
    * Nginx >= 1.6.2
-   * IIS >= 5
-   * PHP >= 5.5 
-   * PHP >= 5.5.x ... <= 5.6.x разрешить использовать короткие теги short_open_tag = On (zlib, cURL, mbString, JSON)
-   * PHP >= 7.x ... <= 7.1.x
+   * PHP >= 5.6.x разрешить использовать короткие теги short_open_tag = On (zlib, cURL, mbString, JSON)
+   * PHP >= 7.x ... <= 7.2.x
 
 
 ## Модули
@@ -55,7 +53,7 @@
 
 1. Распакуйте содержимое архива в новую папку на вашем локальном компьютере.
 2. Загрузить эту папку целиком через FTP-клиент на ваш хост.
-3. Вам также может потребоваться установить права доступа (CHMOD 777) рекурсивно, на папки /cache/, /session/ и /uploads/, если ваш хостинг не установливает это по умолчанию.
+3. Вам также может потребоваться установить права доступа (CHMOD 777) рекурсивно, на папки /tmp/cache/, /tmp/session/ и /uploads/, если ваш хостинг не установливает это по умолчанию.
 4. Также вам может потребоваться установить права доступа (CHMOD 777) рекурсивно, на файлы inc/db.config.php и inc/config.inc.php, если ваш хостинг не установливает это по умолчанию.
 5. Наберите http://адрес вашего сайта/ в браузере.
 6. Следуйте инструкциям.
diff --git a/admin/admin.php b/admin/admin.php
index 7b04b1f..5c5cdff 100644
--- a/admin/admin.php
+++ b/admin/admin.php
@@ -15,7 +15,7 @@
 	define('ACPL', 1);
 	define('BASE_DIR', str_replace("\\", "/", dirname(dirname(__FILE__))));
 
-	if (! @filesize(BASE_DIR . '/inc/db.config.php'))
+	if (! @filesize(BASE_DIR . '/config/db.config.php'))
 	{
 		header('Location:/install/index.php');
 		exit;
diff --git a/admin/dbsettings.php b/admin/dbsettings.php
index ee164a2..55284ca 100644
--- a/admin/dbsettings.php
+++ b/admin/dbsettings.php
@@ -46,7 +46,7 @@
 				exit;
 
 			case 'restore':
-				$AVE_DB_Service->databaseDumpImport(BASE_DIR . "/" . ATTACH_DIR . "/");
+				$AVE_DB_Service->databaseDumpImport(BASE_DIR . "/tmp/" . ATTACH_DIR . "/");
 				break;
 
 			case 'download':
diff --git a/admin/functions/func.admin.common.php b/admin/functions/func.admin.common.php
index 931494f..00b87ad 100644
--- a/admin/functions/func.admin.common.php
+++ b/admin/functions/func.admin.common.php
@@ -48,22 +48,22 @@
 		$log404 = array();
 		$logsql = array();
 
-		$_404dir = BASE_DIR . '/cache/404.php';
-		$_logdir = BASE_DIR . '/cache/log.php';
-		$_sqldir = BASE_DIR . '/cache/sql.php';
+		$_404dir = BASE_DIR . '/tmp/logs/404.php';
+		$_logdir = BASE_DIR . '/tmp/logs/log.php';
+		$_sqldir = BASE_DIR . '/tmp/logs/sql.php';
 
-		if(file_exists($_logdir))
-			@eval('?>' . file_get_contents($_logdir) . '');
+		if (file_exists($_logdir))
+			@eval(' ?>' . file_get_contents($_logdir) . '' . file_get_contents($_404dir) . '');
+		if (file_exists($_404dir))
+			@eval(' ?>' . file_get_contents($_404dir) . '' . file_get_contents($_sqldir) . '');
+		if (file_exists($_sqldir))
+			@eval(' ?>' . file_get_contents($_sqldir) . 'Query("SELECT * FROM ".PREFIX."_users WHERE last_visit>".$time." ORDER BY last_visit DESC");
@@ -283,7 +284,7 @@
 
 		foreach ($modules AS $module)
 		{
-			if ($module['ModuleAdminEdit'] == 1 && $module['status'])
+			if ($module['ModuleAdminEdit'] == 1 && $module['ModuleStatus'])
 				$modules_instaled[] = array(
 					'ModuleName'		=> $module['ModuleName'],
 					'ModuleSysName'		=> $module['ModuleSysName']
@@ -503,7 +504,7 @@
 				$row->canDelete	   = 0;
 				$row->canEndDel	   = 0;
 				$row->canOpenClose	= 0;
-				$row->rubric_admin_teaser_template=@eval2var('?>'.($row->rubric_admin_teaser_template>'' ? @showrequestelement($row,$row->rubric_admin_teaser_template) : '').'');
+				$row->rubric_admin_teaser_template=@eval2var(' ?>'.($row->rubric_admin_teaser_template>'' ? @showrequestelement($row,$row->rubric_admin_teaser_template) : '').'assign('content', $config_vars['MAIN_NO_PERMISSION']);
diff --git a/admin/rubs.php b/admin/rubs.php
index 80ca6a8..554f5dc 100755
--- a/admin/rubs.php
+++ b/admin/rubs.php
@@ -1,659 +1,670 @@
 config_load(BASE_DIR . '/admin/lang/' . $_SESSION['admin_language'] . '/rubs.txt', 'rubs');
+	$AVE_Template->config_load(BASE_DIR . '/admin/lang/' . $_SESSION['admin_language'] . '/rubs.txt', 'rubs');
 
-switch($_REQUEST['action'])
-{
-	case '' :
-		if(check_permission('rubric_view'))
-		{
+	switch($_REQUEST['action'])
+	{
+		case '' :
+			if(check_permission('rubric_view'))
+			{
+				if(check_permission('rubric_edit'))
+				{
+					switch($_REQUEST['sub'])
+					{
+						case 'quicksave':
+							$AVE_Rubric->quickSave();
+							break;
+					}
+				}
+				$AVE_Rubric->rubricList();
+				$AVE_Template->assign('templates', get_all_templates());
+				$AVE_Template->assign('content', $AVE_Template->fetch('rubs/list.tpl'));
+			}
+			else
+			{
+				$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_VIEW'));
+				$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
+			}
+			break;
+
+		case 'new':
+			if(check_permission('rubric_edit'))
+			{
+				$AVE_Template->assign('templates', get_all_templates());
+				$AVE_Rubric->rubricNew();
+			}
+			else
+			{
+				$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_CHANGE3'));
+				$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
+			}
+			break;
+
+		case 'template':
 			if(check_permission('rubric_edit'))
 			{
 				switch($_REQUEST['sub'])
 				{
-					case 'quicksave':
-						$AVE_Rubric->quickSave();
+					case '':
+						$AVE_Rubric->rubricTemplateShow();
+						break;
+
+					case 'save':
+
+						$Rtemplate = $_POST['rubric_template'];
+						$Htemplate = $_POST['rubric_header_template'];
+						$Ftemplate = $_POST['rubric_footer_template'];
+						$Ttemplate = $_POST['rubric_teaser_template'];
+						$Atemplate = $_POST['rubric_admin_teaser_template'];
+
+						$check_code = strtolower($Rtemplate.$Htemplate.$Ttemplate.$Atemplate.$Ftemplate);
+
+						$ok = true;
+
+						if ((is_php_code($check_code)) && !check_permission('rubric_php') )
+						{
+							$AVE_Template->assign('php_forbidden', 1);
+
+							$ok = false;
+						}
+
+						if (! $ok)
+						{
+							$message = $AVE_Template->get_config_vars('RUBRIC_SAVED_PHP_ERR');
+							$header = $AVE_Template->get_config_vars('RUBRIC_ERROR');
+							$theme = 'error';
+
+							if (isAjax())
+							{
+								echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
+								exit;
+							}
+							else
+							{
+								$AVE_Rubric->rubricTemplateShow(1);
+							}
+						}
+						else
+						{
+							$AVE_Rubric->rubricTemplateSave($Rtemplate, $Htemplate, $Ttemplate, $Atemplate, $Ftemplate);
+						}
 						break;
 				}
 			}
-			$AVE_Rubric->rubricList();
-			$AVE_Template->assign('templates', get_all_templates());
-			$AVE_Template->assign('content', $AVE_Template->fetch('rubs/list.tpl'));
-		}
-		else
-		{
-			$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_VIEW'));
-			$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
-		}
-		break;
-
-	case 'new':
-		if(check_permission('rubric_edit'))
-		{
-			$AVE_Template->assign('templates', get_all_templates());
-			$AVE_Rubric->rubricNew();
-		}
-		else
-		{
-			$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_CHANGE3'));
-			$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
-		}
-		break;
-
-	case 'template':
-		if(check_permission('rubric_edit'))
-		{
-			switch($_REQUEST['sub'])
+			else
 			{
-				case '':
-					$AVE_Rubric->rubricTemplateShow();
-					break;
-
-				case 'save':
-
-					$Rtemplate = $_POST['rubric_template'];
-					$Htemplate = $_POST['rubric_header_template'];
-					$Ftemplate = $_POST['rubric_footer_template'];
-					$Ttemplate = $_POST['rubric_teaser_template'];
-					$Atemplate = $_POST['rubric_admin_teaser_template'];
-
-					$check_code = strtolower($Rtemplate.$Htemplate.$Ttemplate.$Atemplate.$Ftemplate);
-
-					$ok = true;
-
-					if ((is_php_code($check_code)) && !check_permission('rubric_php') )
-					{
-						$AVE_Template->assign('php_forbidden', 1);
-
-						$ok = false;
-					}
-
-					if (! $ok)
-					{
-						$message = $AVE_Template->get_config_vars('RUBRIC_SAVED_PHP_ERR');
-						$header = $AVE_Template->get_config_vars('RUBRIC_ERROR');
-						$theme = 'error';
-
-						if (isAjax())
-						{
-							echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
-							exit;
-						}
-						else
-						{
-							$AVE_Rubric->rubricTemplateShow(1);
-						}
-					}
-					else
-					{
-						$AVE_Rubric->rubricTemplateSave($Rtemplate, $Htemplate, $Ttemplate, $Atemplate, $Ftemplate);
-					}
-					break;
+				$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_CHANGE2'));
+				$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
 			}
-		}
-		else
-		{
-			$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_CHANGE2'));
-			$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
-		}
-		break;
-
-	case 'delete':
-		if(check_permission('rubric_edit'))
-		{
-			$AVE_Rubric->rubricDelete();
-		}
-		else
-		{
-			$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_PERMISSION'));
-			$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
-		}
-		break;
-
-	case 'multi':
-		if(check_permission('rubric_edit'))
-		{
-			switch($_REQUEST['sub'])
-			{
-				case 'save':
-					$AVE_Rubric->rubricCopy();
-					break;
-			}
-			$AVE_Template->assign('content', $AVE_Template->fetch('rubs/multi.tpl'));
-		}
-		else
-		{
-			$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_MULTIPLY'));
-			$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
-		}
-		break;
-
-	case 'edit':
-		if(check_permission('rubric_edit'))
-		{
-			switch($_REQUEST['sub'])
-			{
-				case '':
-					switch($_REQUEST['submit'])
-					{
-						case 'saveperms':
-							if (check_permission('rubric_perms')){
-								$AVE_Rubric->rubricPermissionSave((int)$_REQUEST['Id']);
-							}
-							break;
-
-						case 'save':
-							$AVE_Rubric->rubricFieldSave((int)$_REQUEST['Id']);
-							break;
-
-						case 'linked_rubric':
-							$AVE_Rubric->rubricShow(1);
-							break;
-
-						case 'code':
-							if (check_permission('rubric_code')){
-								$AVE_Rubric->rubricCode((int)$_REQUEST['Id']);
-							}
-							break;
-
-						case 'description':
-							$AVE_Rubric->rubricDesc((int)$_REQUEST['Id']);
-							break;
-					}
-			}
-			$AVE_Rubric->rubricFieldShow((int)$_REQUEST['Id'], null);
 			break;
-		}
-		else
-		{
-			$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_CHANGE1'));
-			$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
-		}
-		break;
 
-	case 'alias_add':
-		if(check_permission_acp('rubric_edit'))
-		{
-			$AVE_Rubric->rubricAliasAdd();
-		}
-		break;
-
-	case 'code':
-		if (check_permission('rubric_code'))
-		{
-			$AVE_Rubric->rubricCodeEdit($_REQUEST['Id']);
-		}
-		break;
-
-	case 'field_template':
-		if(check_permission_acp('rubric_edit'))
-		{
-			$AVE_Rubric->rubricFieldTemplate();
-		}
-		break;
-
-	case 'field_template_save':
-		if(check_permission_acp('rubric_edit'))
-		{
-			$AVE_Rubric->rubricFieldTemplateSave((int)$_REQUEST['field_id'], (int)$_REQUEST['rubric_id']);
-		}
-		break;
-
-	case 'fieldssort':
-		if(check_permission_acp('rubric_edit'))
-		{
-			$AVE_Rubric->rubricFieldsSort((array)$_REQUEST['sort']);
-		}
-		exit;
-
-	case 'rubssort':
-		if(check_permission_acp('rubric_edit'))
-		{
-			$AVE_Rubric->rubricsSort((array)$_REQUEST['sort']);
-		}
-		exit;
-
-	case 'alias_check':
-		if(check_permission_acp('rubric_edit'))
-		{
-			$AVE_Rubric->rubricAliasCheck((int)$_REQUEST['rubric_id'],(int)$_REQUEST['field_id'], $_REQUEST['rubric_field_alias']);
-		}
-		break;
-
-	case 'newfield':
-		if(check_permission_acp('rubric_edit'))
-		{
-			$AVE_Rubric->rubricFieldNew((int)$_REQUEST['Id'], $_REQUEST['ajax']);
-		}
-		break;
-
-	case 'fields':
-		if(check_permission_acp('rubric_edit'))
-		{
-			$AVE_Rubric->rubricFieldShow((int)$_REQUEST['Id'], $_REQUEST['ajax']);
-		}
-		break;
-
-	case 'change':
-		if(check_permission_acp('rubric_edit'))
-		{
-			$AVE_Rubric->rubricFieldChange((int)$_REQUEST['field_id'], (int)$_REQUEST['rubric_id']);
-		}
-		break;
-
-	case 'changesave':
-		if(check_permission_acp('rubric_edit'))
-		{
-			$AVE_Rubric->rubricFieldChangeSave((int)$_REQUEST['field_id'], (int)$_REQUEST['rubric_id']);
-		}
-		break;
-
-	case 'changegroup':
-		if(check_permission_acp('rubric_edit'))
-		{
-			$AVE_Rubric->rubricFieldGroupChange((int)$_REQUEST['field_id'], (int)$_REQUEST['rubric_id']);
-		}
-		break;
-
-	case 'changegroupsave':
-		if(check_permission_acp('rubric_edit'))
-		{
-			$AVE_Rubric->rubricFieldGroupChangeSave((int)$_REQUEST['field_id'], (int)$_REQUEST['rubric_id']);
-		}
-		break;
-
-	case 'fieldsgroups':
-		if(check_permission_acp('rubric_edit'))
-		{
-			$AVE_Rubric->rubricFieldsGroups((int)$_REQUEST['Id']);
-		}
-		break;
-
-	case 'newfieldsgroup':
-		if(check_permission_acp('rubric_edit'))
-		{
-			$AVE_Rubric->rubricNewGroupFields((int)$_REQUEST['Id']);
-		}
-		break;
-
-	case 'savefieldsgroup':
-		if(check_permission_acp('rubric_edit'))
-		{
-			$AVE_Rubric->rubricEditGroupFields((int)$_REQUEST['Id']);
-		}
-		break;
-
-	case 'delfieldsgroup':
-		if(check_permission_acp('rubric_edit'))
-		{
-			$AVE_Rubric->rubricDelGroupFields((int)$_REQUEST['Id'], (int)$_REQUEST['rubric_id']);
-		}
-		break;
-
-	case 'fieldsgroupssort':
-		if(check_permission_acp('rubric_edit'))
-		{
-			$AVE_Rubric->rubricFieldsGroupsSort((array)$_REQUEST['sort']);
-		}
-		exit;
-
-	case 'tmpls':
-		if (check_permission_acp('rubric_edit'))
-		{
-			$AVE_Rubric->tmplsList();
-			$AVE_Template->assign('content', $AVE_Template->fetch('rubs/tmpls.tpl'));
-		}
-		break;
-
-	case 'tmpls_edit':
-		if(check_permission('rubric_edit'))
-		{
-			switch($_REQUEST['sub'])
+		case 'delete':
+			if(check_permission('rubric_edit'))
 			{
-				case '':
-					$AVE_Rubric->tmplsEdit();
-					break;
-
-				case 'save':
-
-					$title = $_POST['template_title'];
-					$template = $_POST['rubric_template'];
-
-					$check_code = strtolower($template);
-
-					$ok = true;
-
-					if((is_php_code($check_code)) && !check_permission('rubric_php') )
-					{
-						$AVE_Template->assign('php_forbidden', 1);
-
-						$ok = false;
-					}
-
-					if(! $ok)
-					{
-						$message = $AVE_Template->get_config_vars('RUBRIC_SAVED_PHP_ERR');
-						$header = $AVE_Template->get_config_vars('RUBRIC_ERROR');
-						$theme = 'error';
-
-						if (isAjax())
-						{
-							echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
-							exit;
-						}
-						else
-						{
-							$AVE_Rubric->tmplsEdit();
-						}
-					}
-					else
-					{
-						$AVE_Rubric->tmplsSave($template, $title);
-					}
-					break;
+				$AVE_Rubric->rubricDelete();
 			}
-		}
-		else
-		{
-			$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_CHANGE2'));
-			$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
-		}
-		break;
-
-	case 'tmpls_new':
-		if(check_permission('rubric_edit'))
-		{
-			switch($_REQUEST['sub'])
+			else
 			{
-				case '':
-					$AVE_Rubric->tmplsEdit();
-					break;
-
-				case 'save':
-
-					$title = $_POST['template_title'];
-					$template = $_POST['rubric_template'];
-
-					$check_code = strtolower($template);
-
-					$ok = true;
-
-					if((is_php_code($check_code)) && !check_permission('rubric_php') )
-					{
-						$AVE_Template->assign('php_forbidden', 1);
-
-						$ok = false;
-					}
-
-					if(! $ok)
-					{
-						$message = $AVE_Template->get_config_vars('RUBRIC_SAVED_PHP_ERR');
-						$header = $AVE_Template->get_config_vars('RUBRIC_ERROR');
-						$theme = 'error';
-
-						if (isAjax())
-						{
-							echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
-							exit;
-						}
-						else
-						{
-							$AVE_Rubric->tmplsEdit();
-						}
-					}
-					else
-					{
-						$AVE_Rubric->tmplsSave($template, $title);
-					}
-					break;
+				$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_PERMISSION'));
+				$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
 			}
-		}
-		else
-		{
-			$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_CHANGE2'));
-			$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
-		}
-		break;
-
-	case 'tmpls_from':
-		if(check_permission('rubric_edit'))
-		{
-			switch($_REQUEST['sub'])
-			{
-				case '':
-					$AVE_Rubric->tmplsEdit();
-					break;
-
-				case 'save':
-
-					$title = $_POST['template_title'];
-					$template = $_POST['rubric_template'];
-
-					$check_code = strtolower($template);
-
-					$ok = true;
-
-					if((is_php_code($check_code)) && !check_permission('rubric_php') )
-					{
-						$AVE_Template->assign('php_forbidden', 1);
-
-						$ok = false;
-					}
-
-					if(! $ok)
-					{
-						$message = $AVE_Template->get_config_vars('RUBRIC_SAVED_PHP_ERR');
-						$header = $AVE_Template->get_config_vars('RUBRIC_ERROR');
-						$theme = 'error';
-
-						if (isAjax())
-						{
-							echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
-							exit;
-						}
-						else
-						{
-							$AVE_Rubric->tmplsEdit();
-						}
-					}
-					else
-					{
-						$AVE_Rubric->tmplsSave($template, $title);
-					}
-					break;
-			}
-		}
-		else
-		{
-			$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_CHANGE2'));
-			$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
-		}
-		break;
-
-	case 'tmpls_copy':
-		if(check_permission('rubric_edit'))
-		{
-			switch($_REQUEST['sub'])
-			{
-				case '':
-					$AVE_Rubric->tmplsEdit();
-					break;
-
-				case 'save':
-
-					$title = $_POST['template_title'];
-					$template = $_POST['rubric_template'];
-
-					$check_code = strtolower($template);
-
-					$ok = true;
-
-					if((is_php_code($check_code)) && !check_permission('rubric_php') )
-					{
-						$AVE_Template->assign('php_forbidden', 1);
-
-						$ok = false;
-					}
-
-					if(! $ok)
-					{
-						$message = $AVE_Template->get_config_vars('RUBRIC_SAVED_PHP_ERR');
-						$header = $AVE_Template->get_config_vars('RUBRIC_ERROR');
-						$theme = 'error';
-
-						if (isAjax())
-						{
-							echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
-							exit;
-						}
-						else
-						{
-							$AVE_Rubric->tmplsEdit();
-						}
-					}
-					else
-					{
-						$AVE_Rubric->tmplsSave($template, $title);
-					}
-					break;
-			}
-		}
-		else
-		{
-			$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_CHANGE2'));
-			$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
-		}
-		break;
-
-	case 'tmpls_del':
-		if(check_permission('rubric_edit'))
-		{
-			$AVE_Rubric->tmplsDelete();
-		}
-		else
-		{
-			$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_PERMISSION'));
-			$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
-		}
-		break;
-
-	case 'rules':
-		if (check_permission('rubric_edit'))
-		{
-			switch($_REQUEST['sub'])
-			{
-				case '':
-					switch($_REQUEST['submit'])
-					{
-						case 'saveperms':
-							if (check_permission('rubric_perms'))
-								$AVE_Rubric->rubricPermissionSave((int)$_REQUEST['Id']);
-							break;
-					}
-			}
-			$AVE_Rubric->rubricRulesShow((int)$_REQUEST['Id'], null);
 			break;
-		}
-		else
-		{
-			$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_CHANGE1'));
-			$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
-		}
-		break;
 
-	case 'ftlist':
-		if (check_permission('rubric_edit'))
-		{
-			$AVE_Rubric->ShowFields();
-		}
-		else
-		{
-			$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_PERMISSION'));
-			$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
-		}
-		break;
+		case 'multi':
+			if(check_permission('rubric_edit'))
+			{
+				switch($_REQUEST['sub'])
+				{
+					case 'save':
+						$AVE_Rubric->rubricCopy();
+						break;
+				}
+				$AVE_Template->assign('content', $AVE_Template->fetch('rubs/multi.tpl'));
+			}
+			else
+			{
+				$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_MULTIPLY'));
+				$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
+			}
+			break;
 
-	case 'ftshowfield':
-		if (check_permission('rubric_edit'))
-		{
-			$AVE_Rubric->ShowFieldsByType($_REQUEST['type']);
-		}
-		else
-		{
-			$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_PERMISSION'));
-			$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
-		}
-		break;
+		case 'edit':
+			if(check_permission('rubric_edit'))
+			{
+				switch($_REQUEST['sub'])
+				{
+					case '':
+						switch($_REQUEST['submit'])
+						{
+							case 'saveperms':
+								if (check_permission('rubric_perms')){
+									$AVE_Rubric->rubricPermissionSave((int)$_REQUEST['Id']);
+								}
+								break;
+
+							case 'save':
+								$AVE_Rubric->rubricFieldSave((int)$_REQUEST['Id']);
+								break;
+
+							case 'linked_rubric':
+								$AVE_Rubric->rubricShow(1);
+								break;
+
+							case 'code':
+								if (check_permission('rubric_code')){
+									$AVE_Rubric->rubricCode((int)$_REQUEST['Id']);
+								}
+								break;
+
+							case 'description':
+								$AVE_Rubric->rubricDesc((int)$_REQUEST['Id']);
+								break;
+						}
+				}
+				$AVE_Rubric->rubricFieldShow((int)$_REQUEST['Id'], null);
+				break;
+			}
+			else
+			{
+				$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_CHANGE1'));
+				$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
+			}
+			break;
+
+		case 'alias_add':
+			if(check_permission_acp('rubric_edit'))
+			{
+				$AVE_Rubric->rubricAliasAdd();
+			}
+			break;
+
+		case 'code':
+			if (check_permission('rubric_code'))
+			{
+				$AVE_Rubric->rubricCodeEdit($_REQUEST['Id']);
+			}
+			break;
+
+		case 'field_template':
+			if(check_permission_acp('rubric_edit'))
+			{
+				$AVE_Rubric->rubricFieldTemplate();
+			}
+			break;
+
+		case 'field_template_save':
+			if(check_permission_acp('rubric_edit'))
+			{
+				$AVE_Rubric->rubricFieldTemplateSave((int)$_REQUEST['field_id'], (int)$_REQUEST['rubric_id']);
+			}
+			break;
+
+		case 'fieldssort':
+			if(check_permission_acp('rubric_edit'))
+			{
+				$AVE_Rubric->rubricFieldsSort((array)$_REQUEST['sort']);
+			}
+			exit;
+
+		case 'rubssort':
+			if(check_permission_acp('rubric_edit'))
+			{
+				$AVE_Rubric->rubricsSort((array)$_REQUEST['sort']);
+			}
+			exit;
+
+		case 'alias_check':
+			if(check_permission_acp('rubric_edit'))
+			{
+				$AVE_Rubric->rubricAliasCheck((int)$_REQUEST['rubric_id'],(int)$_REQUEST['field_id'], $_REQUEST['rubric_field_alias']);
+			}
+			break;
+
+		case 'newfield':
+			if(check_permission_acp('rubric_edit'))
+			{
+				$AVE_Rubric->rubricFieldNew((int)$_REQUEST['Id'], $_REQUEST['ajax']);
+			}
+			break;
+
+		case 'fields':
+			if(check_permission_acp('rubric_edit'))
+			{
+				$AVE_Rubric->rubricFieldShow((int)$_REQUEST['Id'], $_REQUEST['ajax']);
+			}
+			break;
+
+		case 'change':
+			if(check_permission_acp('rubric_edit'))
+			{
+				$AVE_Rubric->rubricFieldChange((int)$_REQUEST['field_id'], (int)$_REQUEST['rubric_id']);
+			}
+			break;
+
+		case 'changesave':
+			if(check_permission_acp('rubric_edit'))
+			{
+				$AVE_Rubric->rubricFieldChangeSave((int)$_REQUEST['field_id'], (int)$_REQUEST['rubric_id']);
+			}
+			break;
+
+		case 'changegroup':
+			if(check_permission_acp('rubric_edit'))
+			{
+				$AVE_Rubric->rubricFieldGroupChange((int)$_REQUEST['field_id'], (int)$_REQUEST['rubric_id']);
+			}
+			break;
+
+		case 'changegroupsave':
+			if(check_permission_acp('rubric_edit'))
+			{
+				$AVE_Rubric->rubricFieldGroupChangeSave((int)$_REQUEST['field_id'], (int)$_REQUEST['rubric_id']);
+			}
+			break;
+
+		case 'fieldsgroups':
+			if(check_permission_acp('rubric_edit'))
+			{
+				$AVE_Rubric->rubricFieldsGroups((int)$_REQUEST['Id']);
+			}
+			break;
+
+		case 'newfieldsgroup':
+			if(check_permission_acp('rubric_edit'))
+			{
+				$AVE_Rubric->rubricNewGroupFields((int)$_REQUEST['Id']);
+			}
+			break;
+
+		case 'savefieldsgroup':
+			if(check_permission_acp('rubric_edit'))
+			{
+				$AVE_Rubric->rubricEditGroupFields((int)$_REQUEST['Id']);
+			}
+			break;
+
+		case 'delfieldsgroup':
+			if(check_permission_acp('rubric_edit'))
+			{
+				$AVE_Rubric->rubricDelGroupFields((int)$_REQUEST['Id'], (int)$_REQUEST['rubric_id']);
+			}
+			break;
+
+		case 'fieldsgroupssort':
+			if(check_permission_acp('rubric_edit'))
+			{
+				$AVE_Rubric->rubricFieldsGroupsSort((array)$_REQUEST['sort']);
+			}
+			exit;
+
+		case 'tmpls':
+			if (check_permission_acp('rubric_edit'))
+			{
+				$AVE_Rubric->tmplsList();
+				$AVE_Template->assign('content', $AVE_Template->fetch('rubs/tmpls.tpl'));
+			}
+			break;
+
+		case 'tmpls_edit':
+			if(check_permission('rubric_edit'))
+			{
+				switch($_REQUEST['sub'])
+				{
+					case '':
+						$AVE_Rubric->tmplsEdit();
+						break;
+
+					case 'save':
+
+						$title = $_POST['template_title'];
+						$template = $_POST['rubric_template'];
+
+						$check_code = strtolower($template);
+
+						$ok = true;
+
+						if((is_php_code($check_code)) && !check_permission('rubric_php') )
+						{
+							$AVE_Template->assign('php_forbidden', 1);
+
+							$ok = false;
+						}
+
+						if(! $ok)
+						{
+							$message = $AVE_Template->get_config_vars('RUBRIC_SAVED_PHP_ERR');
+							$header = $AVE_Template->get_config_vars('RUBRIC_ERROR');
+							$theme = 'error';
+
+							if (isAjax())
+							{
+								echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
+								exit;
+							}
+							else
+							{
+								$AVE_Rubric->tmplsEdit();
+							}
+						}
+						else
+						{
+							$AVE_Rubric->tmplsSave($template, $title);
+						}
+						break;
+				}
+			}
+			else
+			{
+				$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_CHANGE2'));
+				$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
+			}
+			break;
+
+		case 'tmpls_new':
+			if(check_permission('rubric_edit'))
+			{
+				switch($_REQUEST['sub'])
+				{
+					case '':
+						$AVE_Rubric->tmplsEdit();
+						break;
+
+					case 'save':
+
+						$title = $_POST['template_title'];
+						$template = $_POST['rubric_template'];
+
+						$check_code = strtolower($template);
+
+						$ok = true;
+
+						if((is_php_code($check_code)) && !check_permission('rubric_php') )
+						{
+							$AVE_Template->assign('php_forbidden', 1);
+
+							$ok = false;
+						}
+
+						if(! $ok)
+						{
+							$message = $AVE_Template->get_config_vars('RUBRIC_SAVED_PHP_ERR');
+							$header = $AVE_Template->get_config_vars('RUBRIC_ERROR');
+							$theme = 'error';
+
+							if (isAjax())
+							{
+								echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
+								exit;
+							}
+							else
+							{
+								$AVE_Rubric->tmplsEdit();
+							}
+						}
+						else
+						{
+							$AVE_Rubric->tmplsSave($template, $title);
+						}
+						break;
+				}
+			}
+			else
+			{
+				$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_CHANGE2'));
+				$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
+			}
+			break;
+
+		case 'tmpls_from':
+			if(check_permission('rubric_edit'))
+			{
+				switch($_REQUEST['sub'])
+				{
+					case '':
+						$AVE_Rubric->tmplsEdit();
+						break;
+
+					case 'save':
+
+						$title = $_POST['template_title'];
+						$template = $_POST['rubric_template'];
+
+						$check_code = strtolower($template);
+
+						$ok = true;
+
+						if((is_php_code($check_code)) && !check_permission('rubric_php') )
+						{
+							$AVE_Template->assign('php_forbidden', 1);
+
+							$ok = false;
+						}
+
+						if(! $ok)
+						{
+							$message = $AVE_Template->get_config_vars('RUBRIC_SAVED_PHP_ERR');
+							$header = $AVE_Template->get_config_vars('RUBRIC_ERROR');
+							$theme = 'error';
+
+							if (isAjax())
+							{
+								echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
+								exit;
+							}
+							else
+							{
+								$AVE_Rubric->tmplsEdit();
+							}
+						}
+						else
+						{
+							$AVE_Rubric->tmplsSave($template, $title);
+						}
+						break;
+				}
+			}
+			else
+			{
+				$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_CHANGE2'));
+				$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
+			}
+			break;
+
+		case 'tmpls_copy':
+			if(check_permission('rubric_edit'))
+			{
+				switch($_REQUEST['sub'])
+				{
+					case '':
+						$AVE_Rubric->tmplsEdit();
+						break;
+
+					case 'save':
+
+						$title = $_POST['template_title'];
+						$template = $_POST['rubric_template'];
+
+						$check_code = strtolower($template);
+
+						$ok = true;
+
+						if((is_php_code($check_code)) && !check_permission('rubric_php') )
+						{
+							$AVE_Template->assign('php_forbidden', 1);
+
+							$ok = false;
+						}
+
+						if(! $ok)
+						{
+							$message = $AVE_Template->get_config_vars('RUBRIC_SAVED_PHP_ERR');
+							$header = $AVE_Template->get_config_vars('RUBRIC_ERROR');
+							$theme = 'error';
+
+							if (isAjax())
+							{
+								echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
+								exit;
+							}
+							else
+							{
+								$AVE_Rubric->tmplsEdit();
+							}
+						}
+						else
+						{
+							$AVE_Rubric->tmplsSave($template, $title);
+						}
+						break;
+				}
+			}
+			else
+			{
+				$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_CHANGE2'));
+				$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
+			}
+			break;
+
+		case 'tmpls_del':
+			if(check_permission('rubric_edit'))
+			{
+				$AVE_Rubric->tmplsDelete();
+			}
+			else
+			{
+				$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_PERMISSION'));
+				$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
+			}
+			break;
+
+		case 'rules':
+			if (check_permission('rubric_edit'))
+			{
+				switch($_REQUEST['sub'])
+				{
+					case '':
+						switch($_REQUEST['submit'])
+						{
+							case 'saveperms':
+								if (check_permission('rubric_perms'))
+									$AVE_Rubric->rubricPermissionSave((int)$_REQUEST['Id']);
+								break;
+						}
+				}
+				$AVE_Rubric->rubricRulesShow((int)$_REQUEST['Id'], null);
+				break;
+			}
+			else
+			{
+				$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_CHANGE1'));
+				$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
+			}
+			break;
+
+		case 'ftlist':
+			if (check_permission('rubric_edit'))
+			{
+				$AVE_Rubric->ShowFields();
+			}
+			else
+			{
+				$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_PERMISSION'));
+				$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
+			}
+			break;
+
+		case 'ftshowfield':
+			if (check_permission('rubric_edit'))
+			{
+				$AVE_Rubric->ShowFieldsByType($_REQUEST['type']);
+			}
+			else
+			{
+				$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_PERMISSION'));
+				$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
+			}
+			break;
 
 
-	case 'ftcreate':
-		if (check_permission('rubric_edit'))
-		{
-			$AVE_Rubric->EditFieldTpl((int)$_REQUEST['id'], $_REQUEST['fld'], $_REQUEST['type']);
-		}
-		else
-		{
-			$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_PERMISSION'));
-			$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
-		}
-		break;
+		case 'ftcreate':
+			if (check_permission('rubric_edit'))
+			{
+				$AVE_Rubric->EditFieldTpl((int)$_REQUEST['id'], $_REQUEST['fld'], $_REQUEST['type']);
+			}
+			else
+			{
+				$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_PERMISSION'));
+				$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
+			}
+			break;
 
-	case 'ftedit':
-		if (check_permission('rubric_edit'))
-		{
-			$AVE_Rubric->EditFieldTpl((int)$_REQUEST['id'], $_REQUEST['fld'], $_REQUEST['type']);
-		}
-		else
-		{
-			$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_PERMISSION'));
-			$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
-		}
-		break;
+		case 'ftedit':
+			if (check_permission('rubric_edit'))
+			{
+				$AVE_Rubric->EditFieldTpl((int)$_REQUEST['id'], $_REQUEST['fld'], $_REQUEST['type']);
+			}
+			else
+			{
+				$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_PERMISSION'));
+				$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
+			}
+			break;
 
-	case 'ftsave':
-		if (check_permission('rubric_edit'))
-		{
-			$AVE_Rubric->SaveFieldTpl((int)$_REQUEST['field_id'], $_REQUEST['field_name'], $_REQUEST['field_type'], $_REQUEST['func']);
-		}
-		else
-		{
-			$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_PERMISSION'));
-			$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
-		}
-		break;
+		case 'ftempledit':
+			if (check_permission('rubric_edit'))
+			{
+				$AVE_Rubric->EditFieldTpl('', $_REQUEST['fld'], $_REQUEST['type']);
+			}
+			else
+			{
+				$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_PERMISSION'));
+				$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
+			}
+			break;
+
+		case 'ftsave':
+			if (check_permission('rubric_edit'))
+			{
+				$AVE_Rubric->SaveFieldTpl((int)$_REQUEST['field_id'], $_REQUEST['field_name'], $_REQUEST['field_type'], $_REQUEST['func']);
+			}
+			else
+			{
+				$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_PERMISSION'));
+				$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
+			}
+			break;
 
 
-	case 'ftdelete':
-		if (check_permission('rubric_edit'))
-		{
-			$AVE_Rubric->DeleteFieldTpl((int)$_REQUEST['id'], $_REQUEST['fld'], $_REQUEST['type'], $_REQUEST['func']);
-		}
-		else
-		{
-			$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_PERMISSION'));
-			$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
-		}
-		break;
-}
-
-?>
+		case 'ftdelete':
+			if (check_permission('rubric_edit'))
+			{
+				$AVE_Rubric->DeleteFieldTpl((int)$_REQUEST['id'], $_REQUEST['fld'], $_REQUEST['type'], $_REQUEST['func']);
+			}
+			else
+			{
+				$AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_PERMISSION'));
+				$AVE_Template->assign('content', $AVE_Template->fetch('error.tpl'));
+			}
+			break;
+	}
+?>
\ No newline at end of file
diff --git a/admin/start.php b/admin/start.php
index 040683b..f380260 100644
--- a/admin/start.php
+++ b/admin/start.php
@@ -1,35 +1,34 @@
 config_load(BASE_DIR . '/admin/lang/' . $_SESSION['admin_language'] . '/main.txt', 'index');
-$AVE_Template->assign('php_version', (@PHP_VERSION != '') ? @PHP_VERSION : 'unknow');
-$AVE_Template->assign('domain', $_SERVER["HTTP_HOST"]);
-$AVE_Template->assign('mysql_version', $GLOBALS['AVE_DB']->mysql_version());
-$AVE_Template->assign('mysql_size', get_mysql_size());
-$AVE_Template->assign('navi', $AVE_Template->fetch('navi/navi.tpl'));
-$AVE_Template->assign('navi_top', $AVE_Template->fetch('navi/navi_top.tpl'));
-$AVE_Template->assign('content', $AVE_Template->fetch('start.tpl'));
+	get_ave_info();
+	getInstaledModules();
+	DisplayMainDocuments();
+	get_online_users();
+	getLogRecords();
 
+	//$AVE_Template->config_load(BASE_DIR . '/admin/lang/' . $_SESSION['admin_language'] . '/main.txt', 'index');
+	$AVE_Template->assign('php_version', (@PHP_VERSION != '') ? @PHP_VERSION : 'unknow');
+	$AVE_Template->assign('domain', $_SERVER["HTTP_HOST"]);
+	$AVE_Template->assign('mysql_version', $GLOBALS['AVE_DB']->mysql_version());
+	$AVE_Template->assign('mysql_size', get_mysql_size());
+	$AVE_Template->assign('navi', $AVE_Template->fetch('navi/navi.tpl'));
+	$AVE_Template->assign('navi_top', $AVE_Template->fetch('navi/navi_top.tpl'));
+	$AVE_Template->assign('content', $AVE_Template->fetch('start.tpl'));
 ?>
\ No newline at end of file
diff --git a/admin/templates/browser/browser_upload.tpl b/admin/templates/browser/browser_upload.tpl
index 6ec1f1f..ee3ff5d 100644
--- a/admin/templates/browser/browser_upload.tpl
+++ b/admin/templates/browser/browser_upload.tpl
@@ -39,7 +39,7 @@ $(function() {
 			{title : "Image files", extensions : "jpg,jpeg,jpe,gif,png"},
 			{title : "Video files", extensions : "mp4,avi,mov,wmv,wmf"},
 			{title : "Music files", extensions : "mp3"},
-			{title : "Documents", extensions : "doc,xls,pdf"},
+			{title : "Documents", extensions : "doc,docx,xls,xlsx,pdf"},
 			{title : "Zip files", extensions : "zip,rar"}
 		],
 		// Flash settings
diff --git a/admin/templates/modules/modules.tpl b/admin/templates/modules/modules.tpl
index 8948a5e..290d220 100644
--- a/admin/templates/modules/modules.tpl
+++ b/admin/templates/modules/modules.tpl
@@ -88,7 +88,7 @@ $(document).ready(function(){ldelim}
 
 				
 				{if check_permission('modules_admin')}
-					{if $module.ModuleAdminEdit && $module.status && $module.permission}
+					{if $module.ModuleAdminEdit && $module.ModuleStatus && $module.permission}
 						{$module.ModuleName}
 						{if (isset($module.ModuleTagLink) && $module.ModuleTagLink  != "")}
 							 {$module.ModuleTagLink}
@@ -104,7 +104,7 @@ $(document).ready(function(){ldelim}
 				 | 
 					{if $module.template}
 						{assign var=module_id value=$module.id}
-						{if $module.status && $module.permission}
+						{if $module.ModuleStatus && $module.permission}
 							{html_options name=Template[$module_id] options=$all_templates selected=$module.template style="width: 200px"}
 						{else}
 							{html_options name=Template[$module_id] options=$all_templates selected=$module.template style="width: 200px" disabled="disabled"}
@@ -120,7 +120,7 @@ $(document).ready(function(){ldelim}
 
 				{if check_permission('modules_system')}
 					 | 
-						{if $module.status}
+						{if $module.ModuleStatus}
 							
 						{else}
 							
diff --git a/admin/templates/rubs/_field_code.tpl b/admin/templates/rubs/_field_code.tpl
index fef66cf..c49f2c5 100755
--- a/admin/templates/rubs/_field_code.tpl
+++ b/admin/templates/rubs/_field_code.tpl
@@ -59,7 +59,7 @@
 
 
 
-{include file="$codemirror_editor" conn_id="ftpl" textarea_id='code_text' ctrls='$("#code_templ").ajaxSubmit(sett_options);' height=400}
+{include file="$codemirror_editor" conn_id="ftpl" textarea_id='code_text' ctrls='$("#code_templ").ajaxSubmit(sett_options);' height=400 mode='smartymixed'}
 
 ';
+			$out .= PHP_EOL;
+			$out .= '
+				
+					 
+					 
+			';
+			$out .= PHP_EOL;
+			$out .= ' ' . PHP_EOL;
+			$out .= 'Time generation: ' . self::getStatistic('time') . ' sec';
+			$out .= ' ';
+			$out .= 'Memory usage: ' . self::getStatistic('memory');
+			$out .= ' ';
+			$out .= 'Memory peak usage: ' . self::getStatistic('peak');
+			$out .= ' ';
+			$out .= 'SQL Queries: ' . $AVE_DB->DBProfilesGet('count') . ' for ' . $AVE_DB->DBProfilesGet('time') . ' sec';
+			$out .= ' ';
+
+			$out .= PHP_EOL;
+			$out .= ' ' . PHP_EOL;
+			$out .= 'GET:';
+			$out .= self::getStatistic('get');
+			$out .= ' ';
+			$out .= 'POST:';
+			$out .= self::getStatistic('post');
+			$out .= ' ';
+			$out .= 'REQUEST:';
+			$out .= self::getStatistic('request');
+			$out .= ' ';
+			$out .= 'SESSION:';
+			$out .= self::getStatistic('session');
+			$out .= ' ';
+			$out .= 'SERVER:';
+			$out .= self::getStatistic('server');
+			$out .= ' ';
+
+			$out .= PHP_EOL;
+			$out .= ' ' . PHP_EOL;
+			$out .= self::getStatistic('globals');
+			$out .= ' ';
+
+			$out .= PHP_EOL;
+			$out .= ' ' . PHP_EOL;
+			$out .= $AVE_DB->DBProfilesGet('list');
+			$out .= ' ';
+
+			$out .= PHP_EOL;
+			$out .= ' ' . PHP_EOL;
+			$out .= $AVE_DB->showAllQueries();
+			$out .= ' ';
+
+			$out .= PHP_EOL;
+			$out .= ' ';
+
+			echo $out;
+		}
 	}
 ?>
\ No newline at end of file
diff --git a/class/class.docs.php b/class/class.docs.php
index 22ff970..1ad6aa6 100755
--- a/class/class.docs.php
+++ b/class/class.docs.php
@@ -322,7 +322,7 @@ class AVE_Document
 		$sql_where_field = '';
 		$field_link = '';
 
-		if ($_REQUEST['field_id'] && (int)$_REQUEST['field_id'] > 0)
+		if (isset($_REQUEST['field_id']) && (int)$_REQUEST['field_id'] > 0)
 		{
 			$sql_join_field = "
 				LEFT JOIN
@@ -415,6 +415,8 @@ class AVE_Document
 
 			$nav_lang = '&lang_id=' . $_REQUEST['lang_id'];
 		}
+		else
+			$nav_lang = '';
 
 		// Поиск с выводом всех результатов из всех рубрик
 		if (@$_REQUEST['rubric_id'] == 'all')
@@ -699,9 +701,9 @@ class AVE_Document
 			$row->canDelete       = 0;
 			$row->canEndDel       = 0;
 			$row->canOpenClose    = 0;
-			$row->rubric_admin_teaser_template = @eval2var('?>'.($row->rubric_admin_teaser_template>''
+			$row->rubric_admin_teaser_template = @eval2var(' ?>'.($row->rubric_admin_teaser_template>''
 				? @showrequestelement($row, $row->rubric_admin_teaser_template)
-				: '').'');
+				: '').'document_title  = stripslashes(htmlspecialchars_decode($row->document_title));
 			$row->document_breadcrum_title  = stripslashes(htmlspecialchars_decode($row->document_breadcrum_title));
@@ -915,7 +917,7 @@ class AVE_Document
 			{
 				$key = trim(mb_substr($v, 0, 254));
 
-				$res= $AVE_DB->Query("INSERT INTO ".PREFIX."_document_keywords
+				$res = $AVE_DB->Query("INSERT INTO ".PREFIX."_document_keywords
 					(
 						document_id,
 						keyword
@@ -1511,7 +1513,7 @@ class AVE_Document
 			}
 		}
 
-		unset($sql, $query);
+		unset ($sql, $query);
 
 		$where = ($oper == 'UPDATE' ? 'WHERE Id = ' . $document_id : '');
 		$author = ($oper != 'UPDATE' ? 'document_author_id = ' . $_SESSION['user_id'] . ',' : '');
@@ -1521,6 +1523,10 @@ class AVE_Document
 			? $data['document_breadcrum_title']
 			: '';
 
+		$document_tags = isset($data['document_tags'])
+			? $data['document_tags']
+			: '';
+
 		// Сохраняем все параметры документа
 		$sql = "
 			$operator
@@ -1531,7 +1537,7 @@ class AVE_Document
 				document_title				= '" . htmlspecialchars(clean_no_print_char($data['document_title']), ENT_QUOTES) . "',
 				document_breadcrum_title	= '" . htmlspecialchars(clean_no_print_char($breadcrumb_title), ENT_QUOTES) . "',
 				document_alias				= '" . $data['document_alias'] . "',
-				document_alias_history		= '" . $data['document_alias_log'] . "',
+				document_alias_history		= '" . $data['document_alias_history'] . "',
 				document_published			= '" . $data["document_published"] . "',
 				document_expire				= '" . $data["document_expire"] . "',
 				document_changed			= '" . $data["document_changed"] . "',
@@ -1544,7 +1550,7 @@ class AVE_Document
 				document_sitemap_pr			= '" . $data['document_sitemap_pr'] . "',
 				document_status				= '" . $data['document_status'] . "',
 				document_linked_navi_id		= '" . (int)$data['document_linked_navi_id'] . "',
-				document_tags				= '" . addslashes(htmlspecialchars(clean_no_print_char($data['document_tags']))). "',
+				document_tags				= '" . addslashes(htmlspecialchars(clean_no_print_char($document_tags))). "',
 				document_lang				= '" . (empty($data['document_lang']) ? DEFAULT_LANGUAGE : $data['document_lang']). "',
 				document_lang_group			= '" . (empty($data['document_lang_group']) ? '0' : (int)$data['document_lang_group']). "',
 				document_property			= '" . (empty($data['document_property']) ? '' : $data['document_property']). "'
@@ -1757,17 +1763,27 @@ class AVE_Document
 				doc_id = '" . $document_id . "'
 		");
 
+		$field_module = isset($data['field_module'])
+			? $data['field_module']
+			: '';
+
 		// Запускаем триггер после сохранения
-		Hooks::trigger('DocumentAfterSave', array('rubric_id' => $rubric_id, 'document_id' => $document_id, 'data' => $data, 'field_module' => $data['field_module']));
+		Hooks::trigger('DocumentAfterSave', array('rubric_id' => $rubric_id, 'document_id' => $document_id, 'data' => $data, 'field_module' => $field_module));
 
 		// Выполняем код рубрики, после сохранения
 		if ($rubric_code)
-			eval ('?>' . $_rubric->rubric_code_end . '');
+			eval (' ?>' . $_rubric->rubric_code_end . 'clearcache('rub_' . $rubric_id);
 		$AVE_DB->clearcache('doc_' . $document_id);
 		$AVE_DB->clearcompile('doc_' . $document_id);
+		$AVE_DB->clearCacheUrl('url_' . $hash_url);
 		$AVE_DB->clearcacherequest('doc_' . $document_id);
 
 		unset ($_rubric, $fields);
diff --git a/class/class.hooks.php b/class/class.hooks.php
index da62262..82bf230 100644
--- a/class/class.hooks.php
+++ b/class/class.hooks.php
@@ -1,174 +1,175 @@
  $function
+					);
+				}
+			}
+			else
 			{
 				// Store the action hook in the $hooks array
-				self::$hooks[$item][$priority][$function] = array(
+				self::$hooks[$name][$priority][$function] = array(
 					"function" => $function
 				);
 			}
-		}
-		else
-		{
-			// Store the action hook in the $hooks array
-			self::$hooks[$name][$priority][$function] = array(
-				"function" => $function
-			);
+
+			return true;
 		}
 
-		return true;
-	}
-
-	/**
-	 * Do Hook
-	 */
-	public static function trigger($name, $arguments = "")
-	{
-		// Oh, no you didn't. Are you trying to run an action hook that doesn't exist?
-		if (! isset(self::$hooks[$name]))
+		/**
+		 * Do Hook
+		 */
+		public static function trigger($name, $arguments = "")
 		{
+			// Oh, no you didn't. Are you trying to run an action hook that doesn't exist?
+			if (! isset(self::$hooks[$name]))
+			{
+				return $arguments;
+			}
+
+			// Set the current running hook to this
+			self::$current_hook = $name;
+
+			// Key sort our action hooks
+			ksort(self::$hooks[$name]);
+			foreach (self::$hooks[$name] AS $priority => $names)
+			{
+				if (is_array($names))
+				{
+					foreach ($names AS $name)
+					{
+						$return = call_user_func_array($name['function'], array(
+							&$arguments
+						));
+
+						if ($return)
+						{
+							$arguments = $return;
+						}
+
+						self::$run_hooks[$name][$priority];
+					}
+				}
+			}
+
+			self::$current_hook = '';
+
 			return $arguments;
 		}
 
-		// Set the current running hook to this
-		self::$current_hook = $name;
-
-		// Key sort our action hooks
-		ksort(self::$hooks[$name]);
-		foreach (self::$hooks[$name] AS $priority => $names)
+		/**
+		 * Remove Hook
+		 */
+		public static function unregister($name, $function, $priority = 10)
 		{
-			if (is_array($names))
+			// If the action hook doesn't, just return true
+			if (!isset(self::$hooks[$name][$priority][$function]))
 			{
-				foreach ($names AS $name)
-				{
-					$return = call_user_func_array($name['function'], array(
-						&$arguments
-					));
+				return true;
+			}
+			// Remove the action hook from our hooks array
+			unset(self::$hooks[$name][$priority][$function]);
 
-					if ($return)
-					{
-						$arguments = $return;
-					}
+			return '';
+		}
 
-					self::$run_hooks[$name][$priority];
-				}
+
+		/**
+		 * Current Hook
+		 *
+		 * Get the currently running action hook
+		 *
+		 */
+		public static function current()
+		{
+			return self::$current_hook;
+		}
+
+
+		/**
+		 * Has Run
+		 */
+		public static function has($hook, $priority = 10)
+		{
+			if (isset(self::$hooks[$hook][$priority]))
+			{
+				return true;
+			}
+			else
+			{
+				return false;
 			}
 		}
 
-		self::$current_hook = '';
 
-		return $arguments;
-	}
-
-	/**
-	 * Remove Hook
-	 */
-	public static function unregister($name, $function, $priority = 10)
-	{
-		// If the action hook doesn't, just return true
-		if (!isset(self::$hooks[$name][$priority][$function]))
+		/**
+		 * Hook Exists
+		 */
+		public static function exists($name)
 		{
-			return true;
-		}
-		// Remove the action hook from our hooks array
-		unset(self::$hooks[$name][$priority][$function]);
-
-		return '';
-	}
-
-
-	/**
-	 * Current Hook
-	 *
-	 * Get the currently running action hook
-	 *
-	 */
-	public static function current()
-	{
-		return self::$current_hook;
-	}
-
-
-	/**
-	 * Has Run
-	 */
-	public static function has($hook, $priority = 10)
-	{
-		if (isset(self::$hooks[$hook][$priority]))
-		{
-			return true;
-		}
-		else
-		{
-			return false;
+			if (isset(self::$hooks[$name]))
+			{
+				return true;
+			}
+			else
+			{
+				return false;
+			}
 		}
 	}
-
-
-	/**
-	 * Hook Exists
-	 */
-	public static function exists($name)
-	{
-		if (isset(self::$hooks[$name]))
-		{
-			return true;
-		}
-		else
-		{
-			return false;
-		}
-	}
-}
+?>
\ No newline at end of file
diff --git a/class/class.logs.php b/class/class.logs.php
index 227fe4d..1dd4a12 100644
--- a/class/class.logs.php
+++ b/class/class.logs.php
@@ -1,350 +1,349 @@
 _logdir;
-
-		if(file_exists($logfile))
-			@eval('?>'.file_get_contents($logfile).'');
-
-		arsort($logdata);
-
-		// Передаем данные в шаблон для вывода и отображаем страницу
-		$AVE_Template->assign('logs', $logdata);
-		$AVE_Template->assign('content', $AVE_Template->fetch('logs/logs.tpl'));
-	}
 
 	/**
-	 * Метод, предназначенный для отображения всех записей Журнала событий 404
-	 *
+	 *	Свойства класса
 	 */
-	function List404()
-	{
-		global $AVE_Template;
 
-		$log404 = array();
-
-		$logfile = BASE_DIR . $this->_404dir;
-
-		if(file_exists($logfile))
-			include($logfile);
-
-		arsort($log404);
-
-		// Передаем данные в шаблон для вывода и отображаем страницу
-		$AVE_Template->assign('logs', $log404);
-		$AVE_Template->assign('content', $AVE_Template->fetch('logs/404.tpl'));
-	}
+		/**
+		 * Файлы для хранения записей
+		 *
+		 * @public
+		 */
+		public $_404dir = '/tmp/logs/404.php';
+		public $_logdir = '/tmp/logs/log.php';
+		public $_sqldir = '/tmp/logs/sql.php';
 
 	/**
-	 * Метод, предназначенный для отображения всех записей Журнала событий 404
-	 *
+	 *	Внутренние методы класса
 	 */
-	function ListSql()
-	{
-		global $AVE_Template;
 
-		$logsql = array();
-
-		$logfile = BASE_DIR . $this->_sqldir;
-
-		if(file_exists($logfile))
-			include($logfile);
-
-		arsort($logsql);
-
-		// Передаем данные в шаблон для вывода и отображаем страницу
-		$AVE_Template->assign('logs', $logsql);
-		$AVE_Template->assign('content', $AVE_Template->fetch('logs/sql.tpl'));
-	}
 
 	/**
-	 * Метод, предназначенный для удаление записей Журнала событий
-	 *
+	 *	Внешние методы класса
 	 */
-	function logDelete()
-	{
-		global $AVE_Template;
 
-		$logfile = BASE_DIR . $this->_logdir;
-
-		if(file_exists($logfile))
-			unlink($logfile);
-
-		// Сохраняем системное сообщение в журнал
-		reportLog($AVE_Template->get_config_vars('LOGS_CLEAN'));
-
-		header('Location:index.php?do=logs&cp=' . SESSION);
-		exit;
-	}
-
-	/**
-	 * Метод, предназначенный для удаление записей Журнала событий 404
-	 *
-	 */
-	function DeleteSql()
-	{
-		global $AVE_Template;
-
-		$logfile = BASE_DIR . $this->_sqldir;
-
-		if(file_exists($logfile))
-			unlink($logfile);
-
-		// Сохраняем системное сообщение в журнал
-		reportLog($AVE_Template->get_config_vars('LOGS_SQL_CLEAN'));
-
-		header('Location:index.php?do=logs&action=logsql&cp=' . SESSION);
-		exit;
-	}
-
-	/**
-	 * Метод, предназначенный для удаление записей Журнала событий 404
-	 *
-	 */
-	function Delete404()
-	{
-		global $AVE_Template;
-
-		$logfile = BASE_DIR . $this->_404dir;
-
-		if(file_exists($logfile))
-			unlink($logfile);
-
-		// Сохраняем системное сообщение в журнал
-		reportLog($AVE_Template->get_config_vars('LOGS_404_CLEAN'));
-
-		header('Location:index.php?do=logs&action=log404&cp=' . SESSION);
-		exit;
-	}
-
-	/**
-	 * Метод, предназначенный для экспорта системных сообщений
-	 *
-	 */
-	function logExport()
-	{
-		global $AVE_Template;
-
-		// Определяем тип файла (CSV), формат имени файла, разделители и т.д.
-		$datstring = '';
-		$dattype = 'text/csv';
-		$datname = 'system_log_' . date('dmyhis', time()) . '.csv';
-
-		$separator = ';';
-		$enclosed = '"';
-
-		// Выполняем запрос к БД на получение списка всех системных сообщений
-		$logdata=array();
-		$logfile = BASE_DIR.$this->_logdir;
-		if(file_exists($logfile))
-			@eval('?>'.file_get_contents($logfile).'');
-		arsort($logdata);
-		$fieldcount = count($logdata[0]);
-
-		foreach($logdata[0] as $k=>$v)
-			$datstring .= $enclosed . $k . $enclosed . $separator;
-		$datstring .= PHP_EOL;
-
-		// Циклически обрабатываем данные и формируем CSV файл с учетом указаны выше параметров
-		foreach($logdata as $k=>$v)
+		/**
+		 * Метод, предназначенный для отображения всех записей Журнала событий
+		 *
+		 */
+		function logList()
 		{
-			foreach ($v as $key => $val)
-			{
-				$val = ($key=='log_time') ? date('d-m-Y, H:i:s', $val) : $val;
-				$datstring .= ($val == '') ? $separator : $enclosed . stripslashes($val) . $enclosed . $separator;
-			}
-			$datstring .= PHP_EOL;
+			global $AVE_Template;
+
+			$logdata = array();
+
+			$logfile = BASE_DIR.$this->_logdir;
+
+			if(file_exists($logfile))
+				@eval(' ?>'.file_get_contents($logfile).'assign('logs', $logdata);
+			$AVE_Template->assign('content', $AVE_Template->fetch('logs/logs.tpl'));
 		}
 
-		// Определяем заголовки документа
-		header('Content-Encoding: windows-1251');
-		header('Content-type: text/csv; charset=windows-1251');
-		header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
-		header('Content-Disposition: attachment; filename="' . $datname . '"');
-		header('Content-Length: ' . strlen($datstring));
-		header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
-		header('Pragma: public');
-
-		// Выводим данные
-		echo mb_convert_encoding($datstring, 'windows-1251', 'UTF-8');
-
-		// Сохраняем системное сообщение в журнал
-		reportLog($AVE_Template->get_config_vars('LOGS_EXPORT'));
-
-		exit;
-	}
-
-	/**
-	 * Метод, предназначенный для экспорта сообщений 404
-	 *
-	 */
-	function Export404()
-	{
-		global $AVE_Template;
-
-		// Определяем тип файла (CSV), формат имени файла, разделители и т.д.
-		$datstring = '';
-		$dattype = 'text/csv';
-		$datname = 'system_log_' . date('dmyhis', time()) . '.csv';
-
-		$separator = ';';
-		$enclosed = '"';
-
-		// Выполняем запрос к БД на получение списка всех системных сообщений
-		$log404 = array();
-
-		$logfile = BASE_DIR.$this->_404dir;
-
-		if(file_exists($logfile))
-			include($logfile);
-
-		arsort($log404);
-
-		$fieldcount = count($log404[0]);
-
-		foreach($log404[0] as $k=>$v)
-			$datstring .= $enclosed . $k . $enclosed . $separator;
-
-		$datstring .= PHP_EOL;
-
-		// Циклически обрабатываем данные и формируем CSV файл с учетом указаны выше параметров
-		foreach($log404 as $k=>$v)
+		/**
+		 * Метод, предназначенный для отображения всех записей Журнала событий 404
+		 *
+		 */
+		function List404()
 		{
-			foreach ($v as $key => $val)
-			{
-				$val = ($key=='log_time') ? date('d-m-Y, H:i:s', $val) : $val;
-				$datstring .= ($val == '') ? $separator : $enclosed . stripslashes($val) . $enclosed . $separator;
-			}
-			$datstring .= PHP_EOL;
+			global $AVE_Template;
+
+			$log404 = array();
+
+			$logfile = BASE_DIR . $this->_404dir;
+
+			if(file_exists($logfile))
+				include($logfile);
+
+			arsort($log404);
+
+			// Передаем данные в шаблон для вывода и отображаем страницу
+			$AVE_Template->assign('logs', $log404);
+			$AVE_Template->assign('content', $AVE_Template->fetch('logs/404.tpl'));
 		}
 
-		// Определяем заголовки документа
-		header('Content-Encoding: windows-1251');
-		header('Content-type: text/csv; charset=windows-1251');
-		header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
-		header('Content-Disposition: attachment; filename="' . $datname . '"');
-		header('Content-Length: ' . strlen($datstring));
-		header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
-		header('Pragma: public');
-
-		// Выводим данные
-		echo mb_convert_encoding(strip_tags($datstring), 'windows-1251', 'UTF-8');
-
-		// Сохраняем системное сообщение в журнал
-		reportLog($AVE_Template->get_config_vars('LOGS_404_EXPORT'));
-
-		exit;
-	}
-
-	/**
-	 * Метод, предназначенный для экспорта сообщений 404
-	 *
-	 */
-	function ExportSql()
-	{
-		global $AVE_Template;
-
-		// Определяем тип файла (CSV), формат имени файла, разделители и т.д.
-		$datstring = '';
-		$dattype = 'text/csv';
-		$datname = 'system_log_' . date('dmyhis', time()) . '.csv';
-
-		$separator = ';';
-		$enclosed = '"';
-
-		// Выполняем запрос к БД на получение списка всех системных сообщений
-		$logsql = array();
-
-		$logfile = BASE_DIR . $this->_sqldir;
-
-		if(file_exists($logfile))
-			include($logfile);
-
-		arsort($logsql);
-
-		$fieldcount = count($logsql[0]);
-
-		foreach($logsql[0] as $k=>$v)
-			$datstring .= $enclosed . $k . $enclosed . $separator;
-
-		$datstring .= PHP_EOL;
-
-		// Циклически обрабатываем данные и формируем CSV файл с учетом указаны выше параметров
-		foreach($logsql as $k => $v)
+		/**
+		 * Метод, предназначенный для отображения всех записей Журнала событий 404
+		 *
+		 */
+		function ListSql()
 		{
-			foreach ($v as $key => $val)
-			{
-				$val = ($key == 'log_time') ? date('d-m-Y, H:i:s', $val) : $val;
-				$val = ($key == 'log_text') ? serialize($val) : $val;
-				$datstring .= ($val == '') ? $separator : $enclosed . stripslashes($val) . $enclosed . $separator;
-			}
-			$datstring .= PHP_EOL;
+			global $AVE_Template;
+
+			$logsql = array();
+
+			$logfile = BASE_DIR . $this->_sqldir;
+
+			if(file_exists($logfile))
+				include($logfile);
+
+			arsort($logsql);
+
+			// Передаем данные в шаблон для вывода и отображаем страницу
+			$AVE_Template->assign('logs', $logsql);
+			$AVE_Template->assign('content', $AVE_Template->fetch('logs/sql.tpl'));
 		}
 
-		// Определяем заголовки документа
-		header('Content-Encoding: windows-1251');
-		header('Content-type: text/csv; charset=windows-1251');
-		header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
-		header('Content-Disposition: attachment; filename="' . $datname . '"');
-		header('Content-Length: ' . strlen($datstring));
-		header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
-		header('Pragma: public');
+		/**
+		 * Метод, предназначенный для удаление записей Журнала событий
+		 *
+		 */
+		function logDelete()
+		{
+			global $AVE_Template;
 
-		// Выводим данные
-		echo mb_convert_encoding(strip_tags($datstring), 'windows-1251', 'UTF-8');
+			$logfile = BASE_DIR . $this->_logdir;
 
-		// Сохраняем системное сообщение в журнал
-		reportLog($AVE_Template->get_config_vars('LOGS_SQL_EXPORT'));
+			if(file_exists($logfile))
+				unlink($logfile);
+
+			// Сохраняем системное сообщение в журнал
+			reportLog($AVE_Template->get_config_vars('LOGS_CLEAN'));
+
+			header('Location:index.php?do=logs&cp=' . SESSION);
+			exit;
+		}
+
+		/**
+		 * Метод, предназначенный для удаление записей Журнала событий 404
+		 *
+		 */
+		function DeleteSql()
+		{
+			global $AVE_Template;
+
+			$logfile = BASE_DIR . $this->_sqldir;
+
+			if(file_exists($logfile))
+				unlink($logfile);
+
+			// Сохраняем системное сообщение в журнал
+			reportLog($AVE_Template->get_config_vars('LOGS_SQL_CLEAN'));
+
+			header('Location:index.php?do=logs&action=logsql&cp=' . SESSION);
+			exit;
+		}
+
+		/**
+		 * Метод, предназначенный для удаление записей Журнала событий 404
+		 *
+		 */
+		function Delete404()
+		{
+			global $AVE_Template;
+
+			$logfile = BASE_DIR . $this->_404dir;
+
+			if(file_exists($logfile))
+				unlink($logfile);
+
+			// Сохраняем системное сообщение в журнал
+			reportLog($AVE_Template->get_config_vars('LOGS_404_CLEAN'));
+
+			header('Location:index.php?do=logs&action=log404&cp=' . SESSION);
+			exit;
+		}
+
+		/**
+		 * Метод, предназначенный для экспорта системных сообщений
+		 *
+		 */
+		function logExport()
+		{
+			global $AVE_Template;
+
+			// Определяем тип файла (CSV), формат имени файла, разделители и т.д.
+			$datstring = '';
+			$dattype = 'text/csv';
+			$datname = 'system_log_' . date('dmyhis', time()) . '.csv';
+
+			$separator = ';';
+			$enclosed = '"';
+
+			// Выполняем запрос к БД на получение списка всех системных сообщений
+			$logdata=array();
+			$logfile = BASE_DIR.$this->_logdir;
+			if(file_exists($logfile))
+				@eval(' ?>'.file_get_contents($logfile).'$v)
+				$datstring .= $enclosed . $k . $enclosed . $separator;
+			$datstring .= PHP_EOL;
+
+			// Циклически обрабатываем данные и формируем CSV файл с учетом указаны выше параметров
+			foreach($logdata as $k=>$v)
+			{
+				foreach ($v as $key => $val)
+				{
+					$val = ($key=='log_time') ? date('d-m-Y, H:i:s', $val) : $val;
+					$datstring .= ($val == '') ? $separator : $enclosed . stripslashes($val) . $enclosed . $separator;
+				}
+				$datstring .= PHP_EOL;
+			}
+
+			// Определяем заголовки документа
+			header('Content-Encoding: windows-1251');
+			header('Content-type: text/csv; charset=windows-1251');
+			header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
+			header('Content-Disposition: attachment; filename="' . $datname . '"');
+			header('Content-Length: ' . strlen($datstring));
+			header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
+			header('Pragma: public');
+
+			// Выводим данные
+			echo mb_convert_encoding($datstring, 'windows-1251', 'UTF-8');
+
+			// Сохраняем системное сообщение в журнал
+			reportLog($AVE_Template->get_config_vars('LOGS_EXPORT'));
+
+			exit;
+		}
+
+		/**
+		 * Метод, предназначенный для экспорта сообщений 404
+		 *
+		 */
+		function Export404()
+		{
+			global $AVE_Template;
+
+			// Определяем тип файла (CSV), формат имени файла, разделители и т.д.
+			$datstring = '';
+			$dattype = 'text/csv';
+			$datname = 'system_log_' . date('dmyhis', time()) . '.csv';
+
+			$separator = ';';
+			$enclosed = '"';
+
+			// Выполняем запрос к БД на получение списка всех системных сообщений
+			$log404 = array();
+
+			$logfile = BASE_DIR.$this->_404dir;
+
+			if(file_exists($logfile))
+				include($logfile);
+
+			arsort($log404);
+
+			$fieldcount = count($log404[0]);
+
+			foreach($log404[0] as $k=>$v)
+				$datstring .= $enclosed . $k . $enclosed . $separator;
+
+			$datstring .= PHP_EOL;
+
+			// Циклически обрабатываем данные и формируем CSV файл с учетом указаны выше параметров
+			foreach($log404 as $k=>$v)
+			{
+				foreach ($v as $key => $val)
+				{
+					$val = ($key=='log_time') ? date('d-m-Y, H:i:s', $val) : $val;
+					$datstring .= ($val == '') ? $separator : $enclosed . stripslashes($val) . $enclosed . $separator;
+				}
+				$datstring .= PHP_EOL;
+			}
+
+			// Определяем заголовки документа
+			header('Content-Encoding: windows-1251');
+			header('Content-type: text/csv; charset=windows-1251');
+			header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
+			header('Content-Disposition: attachment; filename="' . $datname . '"');
+			header('Content-Length: ' . strlen($datstring));
+			header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
+			header('Pragma: public');
+
+			// Выводим данные
+			echo mb_convert_encoding(strip_tags($datstring), 'windows-1251', 'UTF-8');
+
+			// Сохраняем системное сообщение в журнал
+			reportLog($AVE_Template->get_config_vars('LOGS_404_EXPORT'));
+
+			exit;
+		}
+
+		/**
+		 * Метод, предназначенный для экспорта сообщений 404
+		 *
+		 */
+		function ExportSql()
+		{
+			global $AVE_Template;
+
+			// Определяем тип файла (CSV), формат имени файла, разделители и т.д.
+			$datstring = '';
+			$dattype = 'text/csv';
+			$datname = 'system_log_' . date('dmyhis', time()) . '.csv';
+
+			$separator = ';';
+			$enclosed = '"';
+
+			// Выполняем запрос к БД на получение списка всех системных сообщений
+			$logsql = array();
+
+			$logfile = BASE_DIR . $this->_sqldir;
+
+			if(file_exists($logfile))
+				include($logfile);
+
+			arsort($logsql);
+
+			$fieldcount = count($logsql[0]);
+
+			foreach($logsql[0] as $k=>$v)
+				$datstring .= $enclosed . $k . $enclosed . $separator;
+
+			$datstring .= PHP_EOL;
+
+			// Циклически обрабатываем данные и формируем CSV файл с учетом указаны выше параметров
+			foreach($logsql as $k => $v)
+			{
+				foreach ($v as $key => $val)
+				{
+					$val = ($key == 'log_time') ? date('d-m-Y, H:i:s', $val) : $val;
+					$val = ($key == 'log_text') ? serialize($val) : $val;
+					$datstring .= ($val == '') ? $separator : $enclosed . stripslashes($val) . $enclosed . $separator;
+				}
+				$datstring .= PHP_EOL;
+			}
+
+			// Определяем заголовки документа
+			header('Content-Encoding: windows-1251');
+			header('Content-type: text/csv; charset=windows-1251');
+			header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
+			header('Content-Disposition: attachment; filename="' . $datname . '"');
+			header('Content-Length: ' . strlen($datstring));
+			header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
+			header('Pragma: public');
+
+			// Выводим данные
+			echo mb_convert_encoding(strip_tags($datstring), 'windows-1251', 'UTF-8');
+
+			// Сохраняем системное сообщение в журнал
+			reportLog($AVE_Template->get_config_vars('LOGS_SQL_EXPORT'));
+
+			exit;
+		}
 
-		exit;
 	}
-
-}
-
 ?>
\ No newline at end of file
diff --git a/class/class.modules.php b/class/class.modules.php
index 2750951..026bbf2 100644
--- a/class/class.modules.php
+++ b/class/class.modules.php
@@ -63,9 +63,9 @@
 
 				$module = array();
 
+				// Если не удалось подключить основной файл модуля module.php - Фиксируем ошибку
 				if (! (is_file($module_dir . '/info.php') && @include_once($module_dir . '/info.php')))
 				{
-					// Если не удалось подключить основной файл модуля module.php - Фиксируем ошибку
 					$modules['errors'][] = $entry;
 					continue;
 				}
@@ -89,18 +89,20 @@
 				// установленные модули
 				if ($row)
 				{
-					$module['status']			= $row->ModuleStatus;
 					$module['id']				= $row->Id;
 					$module['need_update']		= ($row->ModuleVersion != $module['ModuleVersion']);
 					$module['template']			= ($row->ModuleTemplate ? $row->ModuleTemplate : 0);
+					$module['ModuleAveTag']		= $row->ModuleAveTag;
+					$module['ModulePHPTag']		= $row->ModulePHPTag;
+					$module['ModuleStatus']		= $row->ModuleStatus;
 					$module['ModuleVersion']	= $row->ModuleVersion;
 				}
 				// неустановленные модули
 				else
 					{
-						$module['status']			= false;
 						$module['id']				= $module['ModuleSysName'];
 						$module['template']			= (! empty($module['ModuleTemplate']) ? $module['ModuleTemplate'] : '');
+						$module['ModuleStatus']		= false;
 					}
 
 				// записываем в массив
@@ -151,7 +153,7 @@
 					? ' '
 					: " $author_title" . $module['ModuleAutor'] . " ") . ' ' . $module['ModuleCopyright'] . '';
 				// установленные модули
-				if ($module['status'] !== false)
+				if ($module['ModuleStatus'] !== false)
 					$installed_modules[$module['ModuleSysName']] = $module;
 				// неустановленные модули
 				else
@@ -203,7 +205,7 @@
 			{
 				foreach ($this->_modules AS $k => $v)
 				{
-					if ($status && $v['status'] != $status)
+					if ($status && $v['ModuleStatus'] != $status)
 						continue;
 
 					$modules[$k] = $v;
@@ -218,7 +220,7 @@
 
 					// Выполняем запрос к БД и получаем список документов,
 					// согласно статусу, либо все модули, если статус не указан
-					$sql = $AVE_DB->Query("
+					$sql = "
 						SELECT
 							*
 						FROM
@@ -226,9 +228,11 @@
 						" . $where_status . "
 						ORDER BY
 							ModuleName ASC
-					");
+					";
 
-					while ($row = $sql->FetchRow())
+					$query = $AVE_DB->Query($sql, SYSTEM_CACHE_LIFETIME, 'modules');
+
+					while ($row = $query->FetchRow())
 						$modules[$row->ModuleSysName] = $row;
 				}
 
@@ -259,6 +263,8 @@
 				");
 			}
 
+			$this->clearModulesCache();
+
 			// Выполянем обновление страницы со списком модулей
 			header('Location:index.php?do=modules&cp=' . SESSION);
 			exit;
@@ -276,7 +282,7 @@
 			// Получаем данные модуля
 			$modules = $this->_modules;
 
-			$modul = $modules[MODULE_PATH];
+			$module = $modules[MODULE_PATH];
 
 			// Удаляем информацию о модуле в таблице module
 			$AVE_DB->Query("
@@ -288,13 +294,13 @@
 			");
 
 			// Определяем, имеет ли модуль возможность настройки в Панели управления
-			$modul['ModuleAdminEdit'] = (!empty($modul['ModuleAdminEdit']))
-				? $modul['ModuleAdminEdit']
+			$module['ModuleAdminEdit'] = (!empty($module['ModuleAdminEdit']))
+				? $module['ModuleAdminEdit']
 				: 0;
 
 			// Определяем, имеет ли модуль возможность смены шаблона
-			$modul['ModuleTemplate'] = ($modul['ModuleTemplate'])
-				? $modul['ModuleTemplate']
+			$module['ModuleTemplate'] = ($module['ModuleTemplate'])
+				? $module['ModuleTemplate']
 				: 0;
 
 			// Добавляем информацию о модуле в таблицу module
@@ -302,16 +308,16 @@
 				INSERT INTO
 					" . PREFIX . "_module
 				SET
-					ModuleName			= '" . $modul['ModuleName'] . "',
+					ModuleName			= '" . $module['ModuleName'] . "',
 					ModuleStatus		= '1',
-					ModuleAveTag		= '" . $modul['ModuleAveTag'] . "',
-					ModulePHPTag		= '" . $modul['ModulePHPTag'] . "',
-					ModuleFunction		= '" . $modul['ModuleFunction'] . "',
-					ModuleIsFunction	= '" . $modul['ModuleIsFunction'] . "',
+					ModuleAveTag		= '" . $module['ModuleAveTag'] . "',
+					ModulePHPTag		= '" . $module['ModulePHPTag'] . "',
+					ModuleFunction		= '" . $module['ModuleFunction'] . "',
+					ModuleIsFunction	= '" . $module['ModuleIsFunction'] . "',
 					ModuleSysName		= '" . MODULE_PATH . "',
-					ModuleVersion		= '" . $modul['ModuleVersion'] . "',
-					ModuleTemplate		= '" . $modul['ModuleTemplate'] . "',
-					ModuleAdminEdit		= '" . $modul['ModuleAdminEdit'] . "'
+					ModuleVersion		= '" . $module['ModuleVersion'] . "',
+					ModuleTemplate		= '" . $module['ModuleTemplate'] . "',
+					ModuleAdminEdit		= '" . $module['ModuleAdminEdit'] . "'
 			");
 
 			// Подключаем файл с запросами к БД для данного модуля
@@ -325,20 +331,22 @@
 				// из массива $module_sql_deinstall файла sql.php
 				foreach ($module_sql_deinstall as $sql)
 				{
-					$AVE_DB->Query(str_replace('CPPREFIX', PREFIX, $sql));
+					$AVE_DB->Query(str_replace('%%PRFX%%', PREFIX, $sql));
 				}
 
 				// Выполняем запросы создания таблиц и данных модуля
 				// из массива $module_sql_install файла sql.php
 				foreach ($module_sql_install as $sql)
 				{
-					$AVE_DB->Query(str_replace('CPPREFIX', PREFIX, $sql));
+					$AVE_DB->Query(str_replace('%%PRFX%%', PREFIX, $sql));
 				}
 			}
 			// Сохраняем системное сообщение в журнал
 			($_REQUEST['action'] == "reinstall")
-				? reportLog($AVE_Template->get_config_vars('MODULES_ACTION_REINSTALL') . ' (' . $modul['ModuleName'] . ')')
-				: reportLog($AVE_Template->get_config_vars('MODULES_ACTION_INSTALL') . ' (' . $modul['ModuleName'] . ')');
+				? reportLog($AVE_Template->get_config_vars('MODULES_ACTION_REINSTALL') . ' (' . $module['ModuleName'] . ')')
+				: reportLog($AVE_Template->get_config_vars('MODULES_ACTION_INSTALL') . ' (' . $module['ModuleName'] . ')');
+
+			$this->clearModulesCache();
 
 			// Выполняем обновление страницы со списком модулей
 			header('Location:index.php?do=modules&cp=' . SESSION);
@@ -359,38 +367,38 @@
 
 			$sql_file = BASE_DIR . '/modules/' . MODULE_PATH . '/sql.php';
 
-			$mod_file = BASE_DIR . '/modules/' . MODULE_PATH . '/module.php';
+			$mod_file = BASE_DIR . '/modules/' . MODULE_PATH . '/info.php';
 
 			if (file_exists($mod_file) && file_exists($sql_file))
 			{
-				include($mod_file);
-				include($sql_file);
+				include ($mod_file);
+				include ($sql_file);
+
 				// Выполняем запросы обновления модуля
 				// из массива $module_sql_update файла sql.php
 				foreach ($module_sql_update as $sql)
 				{
-					$AVE_DB->Query(str_replace('CPPREFIX', PREFIX, $sql));
+					$AVE_DB->Query(str_replace('%%PRFX%%', PREFIX, $sql));
 				}
 			}
 			// Обновляем модуль, если в нем не применяется (отсутствует) файл sql.php
 			elseif (file_exists($mod_file) && file_exists($sql_file) === false)
 			{
-				include($mod_file);
+				include_once ($mod_file);
 
 				$AVE_DB->Query("
 					UPDATE
 						" . PREFIX . "_module
 					SET
-						ModuleName			= '" . $modul['ModuleName'] . "',
-						ModuleStatus		= '1',
-						ModuleAveTag		= '" . $modul['ModuleAveTag'] . "',
-						ModulePHPTag		= '" . $modul['ModulePHPTag'] . "',
-						ModuleFunction		= '" . $modul['ModuleFunction'] . "',
-						ModuleIsFunction	= '" . $modul['ModuleIsFunction'] . "',
+						ModuleAveTag		= '" . $module['ModuleAveTag'] . "',
+						ModulePHPTag		= '" . $module['ModulePHPTag'] . "',
+						ModuleFunction		= '" . $module['ModuleFunction'] . "',
+						ModuleIsFunction	= '" . $module['ModuleIsFunction'] . "',
 						ModuleSysName		= '" . MODULE_PATH . "',
-						ModuleVersion		= '" . $modul['ModuleVersion'] . "',
-						ModuleTemplate		= '" . $modul['ModuleTemplate'] . "',
-						ModuleAdminEdit		= '" . $modul['ModuleAdminEdit'] . "'
+						ModuleVersion		= '" . $module['ModuleVersion'] . "',
+						ModuleTemplate		= '" . $module['ModuleTemplate'] . "',
+						ModuleAdminEdit		= '" . $module['ModuleAdminEdit'] . "',
+						ModuleStatus		= '1'
 					WHERE
 						ModuleSysName = '" . MODULE_PATH . "'
 				");
@@ -398,6 +406,8 @@
 			// Сохраняем системное сообщение в журнал
 			reportLog ($AVE_Template->get_config_vars('MODULES_ACTION_UPDATE') . ' (' . MODULE_PATH . ')');
 
+			$this->clearModulesCache();
+
 			// Выполянем обновление страницы со списком модулей
 			header('Location:index.php?do=modules&cp=' . SESSION);
 			exit;
@@ -423,7 +433,7 @@
 				// из массива $module_sql_deinstall файла sql.php
 				foreach ($module_sql_deinstall as $sql)
 				{
-					$AVE_DB->Query(str_replace('CPPREFIX', PREFIX, $sql));
+					$AVE_DB->Query(str_replace('%%PRFX%%', PREFIX, $sql));
 				}
 			}
 
@@ -436,6 +446,8 @@
 					ModuleSysName = '" . MODULE_PATH . "'
 			");
 
+			$this->clearModulesCache();
+
 			// Сохраняем системное сообщение в журнал
 			reportLog ($AVE_Template->get_config_vars('MODULES_ACTION_DELETE') .' (' . MODULE_PATH . ')');
 
@@ -477,6 +489,8 @@
 					ModuleSysName = '" . MODULE_PATH . "'
 			");
 
+			$this->clearModulesCache();
+
 			// Сохраняем системное сообщение в журнал
 			reportLog ((($ModuleStatus == "0")
 				? $AVE_Template->get_config_vars('MODULES_ACTION_OFFLINE')
@@ -506,6 +520,8 @@
 
 			rrmdir ($directory);
 
+			$this->clearModulesCache();
+
 			// Сохраняем системное сообщение в журнал
 			reportLog ($AVE_Template->get_config_vars('MODULES_ACTION_REMOVE') . ' (' . $dir . ')');
 
@@ -513,5 +529,17 @@
 			header('Location:index.php?do=modules&cp=' . SESSION);
 			exit;
 		}
+
+
+		/**
+		 * Функция очищает кеш системных настроек
+		 *
+		 */
+		function clearModulesCache()
+		{
+			$cache_dir = BASE_DIR . '/tmp/cache/sql/modules/';
+
+			return rrmdir($cache_dir);
+		}
 	}
 ?>
\ No newline at end of file
diff --git a/class/class.navigation.php b/class/class.navigation.php
index f30e777..0772d16 100644
--- a/class/class.navigation.php
+++ b/class/class.navigation.php
@@ -244,6 +244,7 @@
 					//-- Стираем кеш навигации
 					$this->clearCache($navigation_id, $_REQUEST['alias']);
 					$this->clearCacheId($navigation_id, $_REQUEST['alias']);
+					$this->clearCacheNav($navigation_id, $_REQUEST['alias']);
 
 					if ($sql === false)
 					{
@@ -400,6 +401,8 @@
 					" . PREFIX . "_navigation
 			");
 
+			$items = null;
+
 			//-- Циклически обрабатываем полученные данные
 			while ($navigation = $sql->FetchRow())
 			{
@@ -1264,24 +1267,24 @@
 
 		function clearCache($id, $alias = '')
 		{
-			if (file_exists(BASE_DIR . '/cache/sql/nav/template-' . $id . '.cache'))
-				unlink(BASE_DIR . '/cache/sql/nav/template-' . $id . '.cache');
+			if (file_exists(BASE_DIR . '/tmp/cache/sql/nav/template-' . $id . '.cache'))
+				unlink(BASE_DIR . '/tmp/cache/sql/nav/template-' . $id . '.cache');
 
-			if (file_exists(BASE_DIR . '/cache/sql/nav/template-' . $alias . '.cache'))
-				unlink(BASE_DIR . '/cache/sql/nav/template-' . $alias . '.cache');
+			if (file_exists(BASE_DIR . '/tmp/cache/sql/nav/template-' . $alias . '.cache'))
+				unlink(BASE_DIR . '/tmp/cache/sql/nav/template-' . $alias . '.cache');
 
-			if (file_exists(BASE_DIR . '/cache/sql/nav/items-' . $id . '.cache'))
-				unlink(BASE_DIR . '/cache/sql/nav/items-' . $id . '.cache');
+			if (file_exists(BASE_DIR . '/tmp/cache/sql/nav/items-' . $id . '.cache'))
+				unlink(BASE_DIR . '/tmp/cache/sql/nav/items-' . $id . '.cache');
 
-			if (file_exists(BASE_DIR . '/cache/sql/nav/items-' . $alias . '.cache'))
-				unlink(BASE_DIR . '/cache/sql/nav/items-' . $alias . '.cache');
+			if (file_exists(BASE_DIR . '/tmp/cache/sql/nav/items-' . $alias . '.cache'))
+				unlink(BASE_DIR . '/tmp/cache/sql/nav/items-' . $alias . '.cache');
 		}
 
 
 		function clearCacheId($id, $alias = '')
 		{
-			$dir_id = BASE_DIR . '/cache/sql/nav_' . $id;
-			$dir_alias = BASE_DIR . '/cache/sql/nav_' . $alias;
+			$dir_id = BASE_DIR . '/tmp/cache/sql/nav_' . $id;
+			$dir_alias = BASE_DIR . '/tmp/cache/sql/nav_' . $alias;
 
 			if (file_exists($dir_id))
 			{
@@ -1299,5 +1302,28 @@
 				}
 			}
 		}
+
+
+		function clearCacheNav($id, $alias)
+		{
+			$cache_id = str_replace('nav_', '', $id);
+			$cache_id = 'nav/' . substr($cache_id, 0, 3);
+
+			$cache_dir = BASE_DIR . '/tmp/cache/sql/' . (trim($cache_id) > ''
+				? trim($cache_id) . '/'
+				: '');
+
+			rrmdir($cache_dir);
+
+
+			$cache_id = str_replace('nav_', '', $alias);
+			$cache_id = 'nav/' . substr($cache_id, 0, 3);
+
+			$cache_dir = BASE_DIR . '/tmp/cache/sql/' . (trim($cache_id) > ''
+				? trim($cache_id) . '/'
+				: '');
+
+			rrmdir($cache_dir);
+		}
 	}
 ?>
diff --git a/class/class.rubs.php b/class/class.rubs.php
index 44ac4b2..f949b42 100755
--- a/class/class.rubs.php
+++ b/class/class.rubs.php
@@ -869,17 +869,24 @@
 
 					$sql = $AVE_DB->Query("
 						SELECT
-							Id
+							Id,
+							document_alias
 						FROM
 							" . PREFIX . "_documents
 						WHERE
 							rubric_id = " . $rubric_id . "
 					");
 
-					while ($row = $sql->GetCell())
+					while ($row = $sql->FetchRow())
 					{
-						$AVE_DB->clearcache('doc_' . $row);
-						$AVE_DB->clearcompile('doc_' . $row);
+						if ($row->Id == 1)
+							$hash_url = md5('');
+						else
+							$hash_url = md5($row->document_alias);
+
+						$AVE_DB->clearCacheUrl('url_'.$hash_url);
+						$AVE_DB->clearcache('doc_' . $row->Id);
+						$AVE_DB->clearcompile('doc_' . $row->Id);
 					}
 
 					if ($sql->_result === false)
@@ -1003,10 +1010,16 @@
 						WHERE rub_id = '" . $rubric_id . "'
 					");
 
-					$sql = $AVE_DB->Query("SELECT Id FROM " . PREFIX . "_documents WHERE rubric_id = ".$rubric_id);
+					$sql = $AVE_DB->Query("SELECT Id,document_alias FROM " . PREFIX . "_documents WHERE rubric_id = ".$rubric_id);
 
 					while ($row = $sql->FetchRow())
 					{
+						if ($row->Id == 1)
+							$hash_url = md5('');
+						else
+							$hash_url = md5($row->document_alias);
+
+						$AVE_DB->clearCacheUrl('url_'.$hash_url);
 						$AVE_DB->clearcache('doc_'.$row->Id);
 						$AVE_DB->clearcompile('doc_'.$row->Id);
 						$AVE_DB->clearcacherequest('doc_'.$row->Id);
@@ -1044,10 +1057,16 @@
 
 			$AVE_DB->clearcache('rub_'.$rubric_id);
 
-			$sql = $AVE_DB->Query("SELECT Id FROM " . PREFIX . "_documents WHERE rubric_id = ".$rubric_id);
+			$sql = $AVE_DB->Query("SELECT Id,document_alias FROM " . PREFIX . "_documents WHERE rubric_id = ".$rubric_id);
 
 			while ($row = $sql->FetchRow())
 			{
+				if ($row->Id == 1)
+					$hash_url = md5('');
+				else
+					$hash_url = md5($row->document_alias);
+
+				$AVE_DB->clearCacheUrl('url_'.$hash_url);
 				$AVE_DB->clearcache('doc_'.$row->Id);
 				$AVE_DB->clearcompile('doc_'.$row->Id);
 			}
@@ -1272,10 +1291,16 @@
 				reportLog($AVE_Template->get_config_vars('RUBRIK_REPORT_TEMPL_RUB') . ' (' . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title)) . ') (Id:' . $rubric_id . ')');
 			}
 
-			$sql = $AVE_DB->Query("SELECT Id FROM " . PREFIX . "_documents WHERE rubric_id = ".$rubric_id);
+			$sql = $AVE_DB->Query("SELECT Id, document_alias FROM " . PREFIX . "_documents WHERE rubric_id = ".$rubric_id);
 
 			while ($row = $sql->FetchRow())
 			{
+				if ($row->Id == 1)
+					$hash_url = md5('');
+				else
+					$hash_url = md5($row->document_alias);
+
+				$AVE_DB->clearCacheUrl('url_'.$hash_url);
 				$AVE_DB->clearcache('doc_'.$row->Id);
 				$AVE_DB->clearcompile('doc_'.$row->Id);
 			}
@@ -1532,7 +1557,9 @@
 			$AVE_Template->assign('content', $AVE_Template->fetch('rubs/field_template.tpl'));
 		}
 
-		function rubricFieldTemplateSave($id, $rubric_id) {
+
+		function rubricFieldTemplateSave($id, $rubric_id)
+		{
 			global $AVE_DB, $AVE_Template;
 
 			$sql = $AVE_DB->Query("
@@ -1546,7 +1573,8 @@
 					Id = '" . $id . "'
 			");
 
-			if ($sql->_result === false) {
+			if ($sql->_result === false)
+			{
 				$message = $AVE_Template->get_config_vars('RUBRIC_SAVED_FLDTPL_ERR');
 				$header = $AVE_Template->get_config_vars('RUBRIK_ERROR');
 				$theme = 'error';
@@ -1559,14 +1587,21 @@
 					exit;
 				}
 
-			}else{
-
+			}
+			else
+			{
 				$AVE_DB->clearcache('rub_'.$rubric_id);
 
-				$sql = $AVE_DB->Query("SELECT Id FROM " . PREFIX . "_documents");
+				$sql = $AVE_DB->Query("SELECT Id, document_alias FROM " . PREFIX . "_documents WHERE rubric_id = '".$rubric_id."'");
 
 				while ($row = $sql->FetchRow())
 				{
+					if ($row->Id == 1)
+						$hash_url = md5('');
+					else
+						$hash_url = md5($row->document_alias);
+
+					$AVE_DB->clearCacheUrl('url_'.$hash_url);
 					$AVE_DB->clearcache('doc_'.$row->Id);
 					$AVE_DB->clearcompile('doc_'.$row->Id);
 					$AVE_DB->clearcacherequest('doc_'.$row->Id);
@@ -2072,7 +2107,8 @@
 
 			$sql = $AVE_DB->Query("
 				SELECT
-					Id
+					Id,
+					document_alias
 				FROM
 					" . PREFIX . "_documents
 				WHERE
@@ -2083,6 +2119,12 @@
 
 			while ($row = $sql->FetchRow())
 			{
+				if ($row->Id == 1)
+					$hash_url = md5('');
+				else
+					$hash_url = md5($row->document_alias);
+
+				$AVE_DB->clearCacheUrl('url_'.$hash_url);
 				$AVE_DB->clearcache('doc_'.$row->Id);
 				$AVE_DB->clearcompile('doc_'.$row->Id);
 			}
diff --git a/class/class.session.files.php b/class/class.session.files.php
index 5fc5b8e..b68083a 100644
--- a/class/class.session.files.php
+++ b/class/class.session.files.php
@@ -1,140 +1,142 @@
 sess_lifetime = (defined('SESSION_LIFETIME') && is_numeric(SESSION_LIFETIME))
-			? SESSION_LIFETIME
-			: (get_cfg_var("session.gc_maxlifetime") < 1440 ? 1440 : get_cfg_var("session.gc_maxlifetime"));
+		public $sess_lifetime;
 
-		return true;
-	}
-
-	/* Open session */
-	function _open($sess_save_path, $session_name)
-	{
-		global $sess_save_path, $sess_session_name;
-
-		$sess_save_path = BASE_DIR . '/session';
-		$sess_session_name = $session_name;
-
-		return true;
-	}
-
-	/* Close session */
-	function _close()
-	{
-		$this->_gc($this->sess_lifetime);
-		return true;
-	}
-
-	/* Read session */
-	function _read($id)
-	{
-		global $sess_save_path, $sess_session_name, $sess_session_id;
-
-		$sess_session_id = $id;
-		$sess_file = $this->_folder() . '/' . $id . '.sess';
-
-		if (!file_exists($sess_file)) return "";
-
-		if ($fp = @fopen($sess_file, "r"))
+		function __construct()
 		{
-			$sess_data = fread($fp, filesize($sess_file));
-			return($sess_data);
+			ini_set('session.save_handler', 'user');
+
+			$this->sess_lifetime = (defined('SESSION_LIFETIME') && is_numeric(SESSION_LIFETIME))
+				? SESSION_LIFETIME
+				: (get_cfg_var("session.gc_maxlifetime") < 1440 ? 1440 : get_cfg_var("session.gc_maxlifetime"));
+
+			return true;
 		}
-		else
+
+		/* Open session */
+		function _open($sess_save_path, $session_name)
 		{
-			return '';
+			global $sess_save_path, $sess_session_name;
+
+			$sess_save_path = BASE_DIR . '/tmp/session';
+			$sess_session_name = $session_name;
+
+			return true;
 		}
-	}
 
-	/* Write new data */
-	function _write ($id, $sess_data)
-	{
-		global $sess_save_path, $sess_session_name, $sess_session_id;
-
-		$sess_session_id = $id;
-		$sess_file = $this->_folder() . '/' . $id . '.sess';
-
-		if(!file_exists($this->_folder()))
-			mkdir($this->_folder(), 0777, true);
-
-		if ($fp = @fopen($sess_file, "w"))
+		/* Close session */
+		function _close()
 		{
-			return fwrite($fp, $sess_data);
+			$this->_gc($this->sess_lifetime);
+			return true;
 		}
-		else
+
+		/* Read session */
+		function _read($id)
 		{
-			return false;
-		}
-	}
+			global $sess_save_path, $sess_session_name, $sess_session_id;
 
-	/* Destroy session */
-	function _destroy ($id)
-	{
-		global $sess_save_path, $sess_session_name, $sess_session_id;
+			$sess_session_id = $id;
+			$sess_file = $this->_folder() . '/' . $id . '.sess';
 
-		$sess_session_id = $id;
-		$sess_dir = $this->_folder();
-		$sess_file = $sess_dir . '/' . $id . '.sess';
+			if (!file_exists($sess_file)) return "";
 
-		return @unlink($sess_file);
-	}
-
-	/* Garbage collection, deletes old sessions */
-	function _gc ($maxlifetime)
-	{
-		global $sess_save_path, $sess_session_id;
-
-		$this->_clear($sess_save_path, 'sess', $maxlifetime);
-
-		return true;
-	}
-
-	function _clear($dir, $mask, $maxlifetime)
-	{
-		foreach(glob($dir . '/*') as $filename) {
-
-			if(strtolower(substr($filename, strlen($filename) - strlen($mask), strlen($mask))) == strtolower($mask)) {
-				if((filemtime($filename) + $maxlifetime) < time())
-					@unlink($filename);
+			if ($fp = @fopen($sess_file, "r"))
+			{
+				$sess_data = fread($fp, filesize($sess_file));
+				return($sess_data);
 			}
+			else
+			{
+				return '';
+			}
+		}
 
-			if(is_dir($filename))
-				if (!count(glob($filename.'/*'))) @rmdir($filename);
-				self::_clear($filename, $mask, $maxlifetime);
+		/* Write new data */
+		function _write ($id, $sess_data)
+		{
+			global $sess_save_path, $sess_session_name, $sess_session_id;
+
+			$sess_session_id = $id;
+			$sess_file = $this->_folder() . '/' . $id . '.sess';
+
+			if(!file_exists($this->_folder()))
+				mkdir($this->_folder(), 0777, true);
+
+			if ($fp = @fopen($sess_file, "w"))
+			{
+				return fwrite($fp, $sess_data);
+			}
+			else
+			{
+				return false;
+			}
+		}
+
+		/* Destroy session */
+		function _destroy ($id)
+		{
+			global $sess_save_path, $sess_session_name, $sess_session_id;
+
+			$sess_session_id = $id;
+			$sess_dir = $this->_folder();
+			$sess_file = $sess_dir . '/' . $id . '.sess';
+
+			return @unlink($sess_file);
+		}
+
+		/* Garbage collection, deletes old sessions */
+		function _gc ($maxlifetime)
+		{
+			global $sess_save_path, $sess_session_id;
+
+			$this->_clear($sess_save_path, 'sess', $maxlifetime);
+
+			return true;
+		}
+
+		function _clear($dir, $mask, $maxlifetime)
+		{
+			foreach(glob($dir . '/*') as $filename)
+			{
+				if (strtolower(substr($filename, strlen($filename) - strlen($mask), strlen($mask))) == strtolower($mask))
+				{
+					if ((filemtime($filename) + $maxlifetime) < time())
+						@unlink($filename);
+				}
+
+				if (is_dir($filename))
+					if (! count(glob($filename.'/*')))
+						@rmdir($filename);
+
+					self::_clear($filename, $mask, $maxlifetime);
+			}
+		}
+
+		function _folder()
+		{
+			global $sess_session_id, $sess_save_path;
+
+			return $sess_save_path . '/' . mb_substr($sess_session_id, 0, 3);
+		}
+
+		function __destruct ()
+		{
+			register_shutdown_function('session_write_close');
 		}
 	}
-
-	function _folder()
-	{
-		global $sess_session_id, $sess_save_path;
-
-		return $sess_save_path . '/' . mb_substr($sess_session_id, 0, 3);
-	}
-
-	function __destruct ()
-	{
-		register_shutdown_function('session_write_close');
-	}
-
-}
 ?>
\ No newline at end of file
diff --git a/class/class.session.php b/class/class.session.php
index 06a0b08..03cbcf2 100644
--- a/class/class.session.php
+++ b/class/class.session.php
@@ -58,7 +58,7 @@ class AVE_Session_DB
 	function __construct()
 	{
 		// Подключаем конфигурационный файл с параметрами подключения
-		require (BASE_DIR . '/inc/db.config.php');
+		require (BASE_DIR . '/config/db.config.php');
 
 		$this->db_host = $config['dbhost'];
 		$this->db_user = $config['dbuser'];
diff --git a/class/class.settings.php b/class/class.settings.php
index 07eb18b..9ef5819 100644
--- a/class/class.settings.php
+++ b/class/class.settings.php
@@ -103,7 +103,7 @@ class AVE_Settings
 
 			$set .= '?>';
 
-			$result = file_put_contents(BASE_DIR . '/inc/config.inc.php', $set);
+			$result = file_put_contents(BASE_DIR . '/config/config.inc.php', $set);
 
 			if ($result > 0)
 			{
@@ -227,12 +227,15 @@ class AVE_Settings
 				reportLog($AVE_Template->get_config_vars('SETTINGS_SAVE_MAIN'));
 			}
 
-		if (isset($_REQUEST['ajax']) && $_REQUEST['ajax'] = '1') {
+		if (isset($_REQUEST['ajax']) && $_REQUEST['ajax'] = '1')
+		{
 			echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
-		} else {
-			$AVE_Template->assign('message', $message);
-			header('Location:index.php?do=settings&cp=' . SESSION);
 		}
+		else
+			{
+				$AVE_Template->assign('message', $message);
+				header('Location:index.php?do=settings&cp=' . SESSION);
+			}
 
 		exit;
 	}
@@ -253,6 +256,7 @@ class AVE_Settings
 		);
 
 		$countries = array();
+
 		while ($row = $sql->FetchAssocArray())
 		{
 			array_push($countries, $row);
@@ -599,7 +603,7 @@ class AVE_Settings
 	 */
 	function clearSettingsCache()
 	{
-		$cache_dir = BASE_DIR . '/cache/sql/settings/';
+		$cache_dir = BASE_DIR . '/tmp/cache/sql/settings/';
 
 		return rrmdir($cache_dir);
 	}
diff --git a/class/class.sysblocks.php b/class/class.sysblocks.php
index b693423..fabdfbe 100644
--- a/class/class.sysblocks.php
+++ b/class/class.sysblocks.php
@@ -111,11 +111,7 @@
 						$theme = 'accept';
 
 						//-- Стираем кеш сисблока
-						if (file_exists(BASE_DIR . '/cache/sql/sysblock/' . $sysblock_id . '.cache'))
-							unlink(BASE_DIR . '/cache/sql/sysblock/' . $sysblock_id . '.cache');
-
-						if ($sysblock_alias != '' && file_exists(BASE_DIR . '/cache/sql/sysblock/' . $sysblock_alias . '.cache'))
-							unlink(BASE_DIR . '/cache/sql/sysblock/' . $sysblock_alias . '.cache');
+						$this->clearCache($sysblock_id, $_REQUEST['sysblock_alias']);
 
 						//-- Сохраняем системное сообщение в журнал
 						reportLog($AVE_Template->get_config_vars('SYSBLOCK_SQLUPDATE') . " (" . stripslashes($_REQUEST['sysblock_name']) . ") (id: $sysblock_id)");
@@ -275,11 +271,7 @@
 				");
 
 				//-- Стираем кеш сисблока
-				if (file_exists(BASE_DIR . '/cache/sql/sysblock-' . $sysblock_id . '.cache'))
-					unlink(BASE_DIR . '/cache/sql/sysblock/' . $sysblock_id . '.cache');
-
-				if ($row->sysblock_alias != '')
-					unlink(BASE_DIR . '/cache/sql/sysblock/' . $row->sysblock_alias . '.cache');
+				$this->clearCache($sysblock_id, $row->sysblock_alias);
 
 				//-- Сохраняем системное сообщение в журнал
 				reportLog($AVE_Template->get_config_vars('SYSBLOCK_SQLDEL') . " (" . stripslashes($row->sysblock_name) . ") (id: $sysblock_id)");
@@ -287,5 +279,21 @@
 
 			header('Location:index.php?do=sysblocks&cp=' . SESSION);
 		}
+
+
+		function clearCache ($id, $alias = null)
+		{
+			$cache_id = md5('sysblock' . $id);
+			$cache_alias = md5('sysblock' . $alias);
+
+			$cache_id_file = BASE_DIR . '/tmp/cache/sql/sysblock/' . $cache_id . '.cache';
+			$cache_alias_file = BASE_DIR . '/tmp/cache/sql/sysblock/' . $cache_alias . '.cache';
+
+			if (file_exists($cache_id_file))
+				unlink($cache_id_file);
+
+			if (file_exists($cache_alias_file))
+				unlink($cache_alias_file);
+		}
 	}
 ?>
\ No newline at end of file
diff --git a/class/class.template.php b/class/class.template.php
index 6b599f0..16eb1c4 100644
--- a/class/class.template.php
+++ b/class/class.template.php
@@ -42,32 +42,32 @@ class AVE_Template extends Smarty
 		/**
 		 * Имя каталога, в котором хранятся компилированные шаблоны.
 		 */
-		$this->compile_dir = BASE_DIR . '/cache/smarty';
+		$this->compile_dir = BASE_DIR . '/tmp/cache/smarty';
 
 		/**
 		 * Имя каталога, в котором хранится кэш.
 		 */
-		$this->cache_dir_root = BASE_DIR . '/cache';
+		$this->cache_dir_root = BASE_DIR . '/tmp/cache';
 
 		/**
 		 * Имя каталога, в котором хранится кэш шаблонов.
 		 */
-		$this->cache_dir = BASE_DIR . '/cache/tpl';
+		$this->cache_dir = BASE_DIR . '/tmp/cache/tpl';
 
 		/**
 		 * Имя каталога, в котором хранится кэш модулей.
 		 */
-		$this->module_cache_dir = BASE_DIR . '/cache/module';
+		$this->module_cache_dir = BASE_DIR . '/tmp/cache/module';
 
 		/**
 		 * Имя каталога, в котором хранится сессии пользователей.
 		 */
-		$this->session_dir = BASE_DIR . '/session';
+		$this->session_dir = BASE_DIR . '/tmp/session';
 
 		/**
 		 * Имя каталога, в котором хранится сессии пользователей.
 		 */
-		$this->sql_cache_dir = BASE_DIR . '/cache/sql';
+		$this->sql_cache_dir = BASE_DIR . '/tmp/cache/sql';
 
 		/**
 		 * Использование поддиректорий для хранения кэша и скомпилированных шаблонов.
@@ -217,13 +217,14 @@ class AVE_Template extends Smarty
 		{
 			$this->clear_all_cache();
 
-			foreach (glob($this->cache_dir_root."/cache_*") as $filename)
+			foreach (glob($this->cache_dir_root . "/cache_*") as $filename)
 			{
 				@unlink($filename);
 			}
 
 			$filename = $this->cache_dir . '/.htaccess';
-			if (!file_exists($filename))
+
+			if (! file_exists($filename))
 			{
 				$fp = @fopen($filename, 'w');
 				if ($fp)
@@ -233,7 +234,7 @@ class AVE_Template extends Smarty
 				}
 			}
 
-			if($_REQUEST['ajax'] && Memcached_Server && Memcached_Port)
+			if ($_REQUEST['ajax'] && Memcached_Server && Memcached_Port)
 			{
 				$memcache = new Memcache;
 				$memcache->connect(Memcached_Server, Memcached_Port);
diff --git a/class/class.templates.php b/class/class.templates.php
index bf40c74..d4e3d24 100644
--- a/class/class.templates.php
+++ b/class/class.templates.php
@@ -142,6 +142,12 @@
 		{
 			global $AVE_DB, $AVE_Template;
 
+			$template_id = (int)$_REQUEST['Id'];
+
+			$cache = 'template_' . $template_id;
+
+			$cache_file = BASE_DIR . '/tmp/cache/templates/' . $cache . '.inc';
+
 			$row = $AVE_DB->Query("
 				SELECT
 					*
@@ -159,8 +165,15 @@
 				$AVE_Template->assign('read_only', 'readonly');
 			}
 
-			$row->template_text = pretty_chars($row->template_text);
-			$row->template_text = stripslashes($row->template_text);
+			if (file_exists($cache_file) && filesize($cache_file))
+			{
+				$row->template_text = file_get_contents($cache_file);
+			}
+			else
+				{
+					$row->template_text = pretty_chars($row->template_text);
+					$row->template_text = stripslashes($row->template_text);
+				}
 
 			$AVE_Template->assign('row', $row);
 			$AVE_Template->assign('content', $AVE_Template->fetch('templates/form.tpl'));
@@ -173,6 +186,8 @@
 
 			if (isset($_REQUEST['Id']) AND is_numeric($_REQUEST['Id']))
 			{
+				$template_id = $_REQUEST['Id'];
+
 				$ok = true;
 
 				$check_code = strtolower($_REQUEST['template_text']);
@@ -190,6 +205,10 @@
 					$theme = 'error';
 				}
 
+				$cache = 'template_' . $template_id;
+
+				$cache_file = BASE_DIR . '/tmp/cache/templates/' . $cache . '.inc';
+
 				if ($ok === false)
 				{
 					if (isset($_REQUEST['ajax']) && $_REQUEST['ajax'] = '1')
@@ -212,7 +231,7 @@
 								template_title = '" . $_REQUEST['template_title'] . "',
 								template_text  = '" . addslashes(pretty_chars($_REQUEST['template_text'])) . "'
 							WHERE
-								Id = '" . (int)$_REQUEST['Id'] . "'
+								Id = '" . $template_id . "'
 						");
 
 						if ($sql === false)
@@ -223,6 +242,11 @@
 						}
 						else
 							{
+								if (! file_exists(dirname($cache_file)))
+									mkdir(dirname($cache_file), 0766, true);
+
+								file_put_contents($cache_file, stripslashes(pretty_chars($_REQUEST['template_text'])));
+
 								$message = $AVE_Template->get_config_vars('TEMPLATES_SAVED');
 								$header = $AVE_Template->get_config_vars('TEMPLATES_SUCCESS');
 								$theme = 'accept';
@@ -295,6 +319,15 @@
 
 							$iid = $AVE_DB->InsertId();
 
+							$cache = 'template_' . $iid;
+
+							$cache_file = BASE_DIR . '/tmp/cache/templates/' . $cache . '.inc';
+
+							if (! file_exists(dirname($cache_file)))
+								mkdir(dirname($cache_file), 0766, true);
+
+							file_put_contents($cache_file, stripslashes(pretty_chars($_REQUEST['template_text'])));
+
 							reportLog($AVE_Template->get_config_vars('TEMPLATES_REPORT_NEW') . '(' . stripslashes(htmlspecialchars($_REQUEST['template_text'], ENT_QUOTES)) . ') (Id:' . (int)$iid . ')');
 
 							if (!$_REQUEST['next_edit'])
@@ -440,7 +473,7 @@
 			{
 
 				case 'save':
-					$dir = BASE_DIR.'/templates/'.DEFAULT_THEME_FOLDER.'/css/'.$_REQUEST['name_file'];
+					$dir = BASE_DIR . '/templates/' . DEFAULT_THEME_FOLDER . '/css/' . $_REQUEST['name_file'];
 
 					$check_code = stripcslashes($_REQUEST['code_text']);
 
diff --git a/config/.htaccess b/config/.htaccess
new file mode 100644
index 0000000..3418e55
--- /dev/null
+++ b/config/.htaccess
@@ -0,0 +1 @@
+deny from all
\ No newline at end of file
diff --git a/inc/config.inc.php b/config/config.inc.php
similarity index 100%
rename from inc/config.inc.php
rename to config/config.inc.php
diff --git a/inc/db.config.php b/config/db.config.php
similarity index 100%
rename from inc/db.config.php
rename to config/db.config.php
diff --git a/fields/checkbox/field.php b/fields/checkbox/field.php
index 99bc427..280e5fc 100644
--- a/fields/checkbox/field.php
+++ b/fields/checkbox/field.php
@@ -1,4 +1,4 @@
-
+ 1)
+					list ($path, $watermark, $position, $transparency) = $default;
+				else
+					{
+						list ($path) = $default;
+						$watermark = false;
+						$position = null;
+						$transparency = null;
+					}
 
 				if (preg_match("/%id/i", $path))
 				{
@@ -288,15 +296,18 @@
 				break;
 
 			case 'save':
-				foreach ($field_value as $v)
+				if (is_array($field_value))
 				{
-					if (! empty($v['url']))
+					foreach ($field_value as $v)
 					{
+						if (! empty($v['url']))
+						{
 
-						$field_value_new[] = $v['url']
-						. ($v['title'] ? '|' . stripslashes(htmlspecialchars($v['title'], ENT_QUOTES)) : '|')
-						. ($v['description'] ? '|' . stripslashes(htmlspecialchars($v['description'], ENT_QUOTES)) : '|')
-						. ($v['link'] ? '|' . ltrim($v['link'], '/') : '|');
+							$field_value_new[] = $v['url']
+							. ($v['title'] ? '|' . stripslashes(htmlspecialchars($v['title'], ENT_QUOTES)) : '|')
+							. ($v['description'] ? '|' . stripslashes(htmlspecialchars($v['description'], ENT_QUOTES)) : '|')
+							. ($v['link'] ? '|' . ltrim($v['link'], '/') : '|');
+						}
 					}
 				}
 
diff --git a/fields/image_single/field.php b/fields/image_single/field.php
index 0d46452..5a50e13 100644
--- a/fields/image_single/field.php
+++ b/fields/image_single/field.php
@@ -1,4 +1,4 @@
-
+ 0 ? false : true;
 	}
 
@@ -105,7 +108,7 @@
 	 */
 	function clean_php($text)
 	{
-		return str_replace(array('', '?>', '\n		\n		\n		\n	  |