diff --git a/db/DatabaseReleaseData.sql b/db/DatabaseReleaseData.sql
deleted file mode 100644
index fd3d16cdc683e8e18795b4f5c9a3bb82417bd762..0000000000000000000000000000000000000000
--- a/db/DatabaseReleaseData.sql
+++ /dev/null
@@ -1,294 +0,0 @@
-п»ї-- phpMyAdmin SQL Dump
--- version 4.0.10
--- http://www.phpmyadmin.net
---
--- РҐРѕСЃС‚: 127.0.0.1:3306
--- Время создания: Авг 06 2014 г., 13:38
--- Версия сервера: 5.5.37-log
--- Версия PHP: 5.3.28
-
-SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
-SET time_zone = "+00:00";
-
-
-/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
-/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
-/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
-/*!40101 SET NAMES utf8 */;
-
---
--- База данных: `Sample`
---
-
---
--- Дамп данных таблицы `classrooms`
---
-
-INSERT INTO `classrooms` (`ID`, `Name`, `Capacity`, `FacultyID`, `Export`) VALUES
-(1, '101 (РњРњ4)', 0, 1, 'false'),
-(2, '102 (РњРњ3)', 0, 1, 'false'),
-(3, '107', 0, 1, 'false'),
-(4, '108', 0, 1, 'false'),
-(5, '109', 0, 1, 'false'),
-(6, '114', 0, 1, 'false'),
-(7, '117', 0, 1, 'false'),
-(8, '118 (РњРњ1)', 0, 1, 'false'),
-(9, '118 (РњРњ2)', 0, 1, 'false'),
-(10, '120', 0, 1, 'false'),
-(11, '201', 0, 1, 'false'),
-(12, '202', 0, 1, 'false'),
-(13, '205', 0, 1, 'false'),
-(14, '206', 0, 1, 'false'),
-(15, '207', 0, 1, 'false'),
-(16, '208', 0, 1, 'false'),
-(17, '211', 0, 1, 'false'),
-(18, '212', 0, 1, 'false'),
-(19, '215', 0, 1, 'false'),
-(20, '216', 0, 1, 'false'),
-(21, '217', 0, 1, 'false'),
-(22, '218', 0, 1, 'false'),
-(23, '241', 0, 2, 'true'),
-(24, '243', 0, 2, 'true'),
-(25, '244', 0, 2, 'true'),
-(26, '245', 0, 2, 'true'),
-(27, '301', 0, 1, 'false'),
-(28, '302', 0, 1, 'false'),
-(29, '304', 0, 1, 'false'),
-(30, '305', 0, 1, 'false'),
-(31, '306', 0, 1, 'false'),
-(32, '307', 0, 1, 'false'),
-(33, '308', 0, 1, 'false'),
-(34, '309', 0, 1, 'false'),
-(35, '310', 0, 1, 'false'),
-(36, '311', 0, 1, 'false'),
-(37, '312', 0, 1, 'false'),
-(38, '313', 0, 1, 'false'),
-(39, '314', 0, 1, 'false'),
-(40, '315', 0, 1, 'false'),
-(41, '316', 0, 1, 'false'),
-(42, '317', 0, 1, 'false'),
-(43, '318', 0, 1, 'false'),
-(44, '319', 0, 1, 'false'),
-(45, '322', 0, 1, 'false'),
-(46, '325', 0, 1, 'false'),
-(47, 'ЛОС 1', 0, 1, 'false'),
-(48, 'ЛОС 2', 0, 1, 'false'),
-(49, 'ЛОС 3', 0, 1, 'false'),
-(50, 'ЛОС 4', 0, 1, 'false'),
-(51, 'НИИМПМ', 0, 1, 'false'),
-(52, 'Спортзал', 0, 1, 'false'),
-(53, 'С„/С„', 0, 1, 'false'),
-(54, 'Югинфо', 0, 1, 'false');
-
---
--- Дамп данных таблицы `faculties`
---
-
-INSERT INTO `faculties` (`ID`, `Name`, `Abbr`) VALUES
-(1, 'Институт математики механики и компьютерных наук', 'мехмат');
-(2, 'Физический', 'физфак');
-
---
--- Дамп данных таблицы `general_settings`
---
-
-INSERT INTO `general_settings` (`ID`, `ParamKey`, `Value`) VALUES
-(1, 1, 'Current Semester');
-
---
--- Дамп данных таблицы `semesters`
---
-
-INSERT INTO `semesters` (`ID`, `Year`, `Num`) VALUES
-(1, 2014, 1);
-
---
--- Дамп данных таблицы `specializations`
---
-
-INSERT INTO `specializations` (`ID`, `Name`, `Abbr`) VALUES
-(1, 'Прикладная математика и информатика', 'ПМиИ'),
-(2, 'Математика', 'Мат'),
-(3, 'Механика', 'Мех'),
-(4, 'Фундаментальная математика и информатика', 'ФИИТ');
-
---
--- Дамп данных таблицы `study_groups`
---
-
-INSERT INTO `study_groups` (`ID`, `Grade`, `GroupNum`, `SpecializationID`, `FacultyID`, `Name`) VALUES
-(1, 1, 1, 1, 1, NULL),
-(2, 1, 2, 1, 1, NULL),
-(3, 1, 3, 1, 1, NULL),
-(4, 1, 4, 1, 1, NULL),
-(5, 1, 5, 2, 1, NULL),
-(6, 1, 7, 3, 1, NULL),
-(7, 1, 8, 4, 1, NULL),
-(8, 1, 9, 4, 1, NULL),
-(9, 2, 1, 1, 1, NULL),
-(10, 2, 2, 1, 1, NULL),
-(11, 2, 3, 1, 1, NULL),
-(12, 2, 4, 1, 1, NULL),
-(13, 2, 5, 2, 1, NULL),
-(14, 2, 7, 3, 1, NULL),
-(15, 2, 8, 4, 1, NULL),
-(16, 2, 9, 4, 1, NULL),
-(17, 3, 1, 1, 1, NULL),
-(18, 3, 2, 1, 1, NULL),
-(19, 3, 3, 1, 1, NULL),
-(20, 3, 4, 1, 1, NULL),
-(21, 3, 5, 2, 1, NULL),
-(22, 3, 7, 3, 1, NULL),
-(23, 3, 8, 4, 1, NULL),
-(24, 3, 9, 4, 1, NULL),
-(25, 4, 1, 1, 1, NULL),
-(26, 4, 2, 1, 1, NULL),
-(27, 4, 3, 1, 1, NULL),
-(28, 4, 4, 1, 1, NULL),
-(29, 4, 6, 2, 1, NULL),
-(30, 4, 7, 3, 1, NULL),
-(31, 4, 8, 4, 1, NULL),
-(32, 4, 9, 4, 1, NULL),
-(33, 5, 2, 1, 1, 'ЗИ'),
-(34, 5, 4, 1, 1, 'РџРџ'),
-(35, 5, 5, 1, 1, 'РњР¤'),
-(36, 5, 6, 1, 1, 'ФМ'),
-(37, 5, 7, 1, 1, 'БМ'),
-(38, 5, 8, 2, 1, NULL),
-(39, 5, 9, 4, 1, 'РљРќ'),
-(40, 5, 11, 3, 1, 'РўРЈ'),
-(41, 5, 12, 3, 1, 'ГАМ'),
-(42, 6, 1, 1, 1, 'РџРџ'),
-(43, 6, 2, 1, 1, 'ЗИ'),
-(44, 6, 3, 1, 1, 'Р’Рњ'),
-(45, 6, 4, 1, 1, 'РњРњ'),
-(46, 6, 5, 1, 1, 'РњР¤'),
-(47, 6, 6, 1, 1, 'ФМ'),
-(48, 6, 7, 1, 1, 'БМ'),
-(49, 6, 8, 2, 1, NULL),
-(50, 6, 9, 4, 1, 'РљРќ'),
-(51, 6, 10, 4, 1, 'РўРљ'),
-(52, 6, 11, 3, 1, 'РўРЈ'),
-(53, 6, 12, 3, 1, 'ГАМ');
-
---
--- Дамп данных таблицы `subjects`
---
-
-INSERT INTO `subjects` (`ID`, `Name`, `Abbr`) VALUES
-(1, 'Алгебра', 'Алгебра'),
-(2, 'Алгебра и геометрия', 'Алг. и геом.'),
-(3, 'Алгоритмы быстрых вычислений', 'Алг. быстр. вычислен'),
-(4, 'Алгоритмы и структуры данных', 'Алг. и структуры дан'),
-(5, 'Алгоритмы на графах', 'Алг. на графах'),
-(6, 'Анализ и обработка изображения', 'Анализ и обр. изобр.'),
-(7, 'Аналитическая геометрия', 'Аналит. геом.'),
-(8, 'Архитектура вычислительных систем', 'Арх. выч. систем'),
-(9, 'Базы данных', 'БД'),
-(10, 'Безопасность жизнедеятельности', 'БЖД'),
-(11, 'Вариационные исчисления и методы оптимизации', 'Вар. исч. и м.о.'),
-(12, 'Введение в ООП', 'Введение в ООП'),
-(13, 'Векторный анализ и теория поля', 'Вект. анализ и теори'),
-(14, 'Вычислительные системы и микропрограммы', 'Выч. сист. и микропр'),
-(15, 'Геом. теория мн-нов', 'Геом. теория мн-нов'),
-(16, 'Дискретная математика', 'Дискрет. мат.'),
-(17, 'Дискретное математическое моделирование', 'Дискр. мат.мод.'),
-(18, 'Дифференциальная геометрия', 'Диф. геометрия'),
-(19, 'Дифференциальные уравнения', 'Диф. ур-я'),
-(20, 'Дополнительные главы алгебры', 'Доп. главы алгебры'),
-(21, 'Дополнительные главы ан.', 'Доп. главы ан.'),
-(22, 'Избранные главы математического анализа', 'Избр. главы мат. ана'),
-(23, 'Инновационный менеджмент', 'Инновац. менедж.'),
-(24, 'Иностранный язык', 'Ин. яз.'),
-(25, 'Интеллектуальные системы', 'Интеллект. системы'),
-(26, 'Информатика', 'Информатика'),
-(27, 'Информационные технологии', 'ИТ'),
-(28, 'История', 'История'),
-(29, 'История в лицах', 'История в лицах'),
-(30, 'История и методология механики', 'История и метод-ия м'),
-(31, 'История математики', 'История математики'),
-(32, 'Комплексный анализ', 'Компл. анализ'),
-(33, 'Компьютерная практика по механике', 'Комп. практ. по меха'),
-(34, 'Компьютерные науки', 'Комп. науки'),
-(35, 'Компьютерные сети', 'Комп. сети'),
-(36, 'Консультации по алгебре', 'Конс. по алгебре'),
-(37, 'Консультации по математическому анализу', 'Конс. по мат. анализ'),
-(38, 'Консультации по теоретической механике', 'Конс. по теор. мех'),
-(39, 'Концепции современного естествознания', 'КСЕ'),
-(40, 'Культура здоровья', 'Культура здоровья'),
-(41, 'Культурология', 'Культур.'),
-(42, 'Р›/РЎ', 'Р›/РЎ'),
-(43, 'Лабораторная практика', 'Лаб. практ.'),
-(44, 'Линейная и общая алгебра', 'Линейная и общ. алге'),
-(45, 'Математическая логика', 'Мат. логика'),
-(46, 'Математическая логика и теория множеств', 'Мат. логика и ТМ'),
-(47, 'Математические основы защиты информации', 'Мат. осн. ЗИ'),
-(48, 'Математический анализ', 'Мат. анализ'),
-(49, 'Методика преподавания математики', 'МПМ'),
-(50, 'Методы вычислений', 'Мет. выч.'),
-(51, 'Методы оптимизации', 'Мет. опт.'),
-(52, 'Мех. мат.', 'Мех. мат.'),
-(53, 'Механика сплошных сред', 'МСС'),
-(54, 'Модели информационных процессов', 'Модели инф. проц-сов'),
-(55, 'Научные основы школьного курса математики', 'Научн. осн. шк. курс'),
-(56, 'Немецкий язык', 'Нем. язык'),
-(57, 'Непрерывные математические модели', 'Непрерыв. мат. мод.'),
-(58, 'Общая физика', 'Общая физика'),
-(59, 'Операционные системы', 'ОС'),
-(60, 'Основы программирования', 'Основы програм.'),
-(61, 'Отечественная история', 'История'),
-(62, 'Пакеты прикладных программ', 'ППП'),
-(63, 'Параллельное программирование', 'Паралл. прогр-ие'),
-(64, 'Правоведение', 'Правоведение'),
-(65, 'Практ. по эл. математике', 'Практ. по эл. матема'),
-(66, 'Практикум на ЭВМ', 'Практ. ЭВМ'),
-(67, 'Преобразование программ', 'Преоб-е программ'),
-(68, 'Прикладные задачи теории вероятностей', 'Прикл. задачи ТВ'),
-(69, 'Программная инженерия', 'Программ. инж.'),
-(70, 'Психология общения', 'Психология общения'),
-(71, 'Разработка корпоративных приложений', 'Разраб.корп.прил-й'),
-(72, 'Разработка пользовательского интерфейса', 'Разраб. польз. инт.'),
-(73, 'Религиоведение', 'Религиоведение'),
-(74, 'Современные базы данных', 'Соврем. БД'),
-(75, 'Современные компьютерные технологии', 'Совр. комп. технол.'),
-(76, 'Современные проблемы прикладной математики и инфор', 'Совр. проблемы прикл'),
-(77, 'Социально-политические вопросы', 'Соц-пол. вопр.'),
-(78, 'Социально-этические вопросы ИТ', 'Соц.-эт. вопр. ИТ'),
-(79, 'Стандартная библиотека C++', 'Станд. библ. C++'),
-(80, 'Суперкомпьютеры', 'Суперкомпьютеры'),
-(81, 'Теоретическая и практическая механика', 'Теор. и практ. механ'),
-(82, 'Теоретическая и прикладная механика', 'Теор. и прикл. мех.'),
-(83, 'Теоретическая механика', 'Теор. мех.'),
-(84, 'Теоретическая физика', 'Теор. физика'),
-(85, 'Теория автоматов и формальных языков', 'Теор. авт. и ф-х язы'),
-(86, 'Теория алгоритмов', 'Теория алгоритмов'),
-(87, 'Теория вероятностей', 'ТВ'),
-(88, 'Теория вероятностей и математическая статистика', 'ТВиМС'),
-(89, 'Теория вероятности', 'ТВ'),
-(90, 'Теория игр и исследование операций', 'ТИиИО'),
-(91, 'Теория информации и криптографии', 'Теория инф. и крипт.'),
-(92, 'Теория кодирования', 'Теор. код.'),
-(93, 'Теория чисел', 'Теория чисел'),
-(94, 'Технологии баз данных', 'Технологии БД'),
-(95, 'Технологии программирования', 'Технологии програм. '),
-(96, 'Технологии программирования графики', 'Техн. прогр-я график'),
-(97, 'Топологии', 'Топологии'),
-(98, 'РўРЎРџ', 'РўРЎРџ'),
-(99, 'Уравнения математической физики', 'УМФ'),
-(100, 'Устойчивость и управление движением', 'Уст-ть и упр. движ.'),
-(101, 'Факультатив', 'Факультатив'),
-(102, 'Физвоспитание', 'Физ. воспит.'),
-(103, 'Физика', 'Физика'),
-(104, 'Философия', 'Философия'),
-(105, 'Функциональное программирование', 'Функц. прогр-е'),
-(106, 'Функциональный анализ', 'Функ. анализ'),
-(107, 'Численные методы', 'Числ. методы'),
-(108, 'Экономическая теория', 'Эконом. теория'),
-(109, 'Экспериментальные методы', 'Эксп. мет.'),
-(110, 'Экспериментальные методы в механике ДТТ', 'Экспер. мет.в мех. Д'),
-(111, 'Экспериментальные методы в механике ЖГ', 'Экспер. мет.в мех. Ж'),
-(112, 'Языки и методы программирования', 'ЯиМП');
-
-/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
-/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
-/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
diff --git a/db/StoredProcedures.sql b/db/StoredProcedures.sql
index 20b6cdef0cd09247fbad052f342198fc4ed86ceb..c9b3cb3fdfaeaaf5ff45a768a2f80c67118cc53f 100644
--- a/db/StoredProcedures.sql
+++ b/db/StoredProcedures.sql
@@ -16,14 +16,12 @@ CREATE FUNCTION `InternalIsMapLocked`	( 	`DisciplineID` INT
 										) 	RETURNS boolean
     NO SQL
 BEGIN  
-	DECLARE checker INT;
+	DECLARE checker boolean;
 	SET checker = -1;
-	SELECT modules.ID
+	SELECT disciplines.isLocked
 	INTO checker
-	FROM `rating_table`
-	INNER JOIN `submodules` ON 	submodules.ID = rating_table.SubModuleID
-	INNER JOIN `modules` ON 	submodules.ModuleID = modules.ID AND
-								modules.DisciplineID = DisciplineID
+	FROM `disciplines`
+	WHERE DisciplineID = disciplines.ID
 	LIMIT 1;
 	RETURN  ( checker > 0 );
 END //
@@ -1460,7 +1458,7 @@ BEGIN
 			departments.ID 					AS 'DepID',
 			departments.Name 				AS 'DepName',
 			faculties.ID					AS 'FacultyID',
-			InternalIsMapLocked(DiscID) 	AS 'isLocked'
+			disciplines.isLocked 			AS 'isLocked'
 	FROM `disciplines`
 	INNER JOIN `subjects` ON subjects.ID = disciplines.SubjectID
 	INNER JOIN `faculties` ON faculties.ID = disciplines.FacultyID
@@ -1491,11 +1489,11 @@ BEGIN
 				faculties.Abbr 			AS 'FacultyAbbr',
 				(teachers.ID = disciplines.AuthorID)	AS 'isAuthor'
 		FROM `disciplines_teachers`
-		INNER JOIN `disciplines` ON disciplines.ID = disciplines_teachers.DisciplineID
-		INNER JOIN `teachers` ON teachers.ID = disciplines_teachers.TeacherID
-		INNER JOIN `departments` ON departments.ID = teachers.DepartmentID
-		INNER JOIN `faculties` ON departments.FacultyID = faculties.ID
-		INNER JOIN `job_positions` ON job_positions.ID = teachers.JobPositionID
+		INNER JOIN `disciplines` 	ON 	disciplines.ID = disciplines_teachers.DisciplineID
+		INNER JOIN `teachers` 		ON 	teachers.ID = disciplines_teachers.TeacherID
+		INNER JOIN `departments` 	ON 	departments.ID = teachers.DepartmentID
+		INNER JOIN `faculties` 		ON 	departments.FacultyID = faculties.ID
+		INNER JOIN `job_positions` 	ON 	job_positions.ID = teachers.JobPositionID
 		WHERE disciplines_teachers.DisciplineID = DiscID
 		ORDER BY isAuthor DESC;
 END //
@@ -1642,19 +1640,8 @@ CREATE FUNCTION `SetStudentRate`(	`TeacherID` 	INT,
 									RETURNS int(11)
     NO SQL
 BEGIN
-	-- TODO: log  
-    DECLARE checker, DisciplineID, groupID, rateID INT; 					 
-
-    SET DisciplineID = -1;
-    SELECT modules.DisciplineID 
-    INTO DisciplineID
-	FROM `submodules`
-	INNER JOIN `modules` ON submodules.ModuleID = modules.ID 
-	WHERE submodules.ID = SubmoduleID
-	LIMIT 1;
-	IF DisciplineID <= 0 OR (NOT InternalIsTeacherBinded(TeacherID, DisciplineID)) THEN
-		RETURN -1;
-	END IF;
+    DECLARE checker, DisciplineID, groupID, rateID INT;
+    DECLARE isLocked tinyint; 
 
 	SET groupID = -1;
 	SELECT students.StudyGroupID 
@@ -1662,18 +1649,37 @@ BEGIN
 	FROM `students` 
 	WHERE students.ID = StudentID 
 	LIMIT 1; 
-	IF groupID <= 0 OR (NOT InternalIsStudentAttached(StudentID, DisciplineID)) THEN 
+	IF groupID <= 0 THEN 
 		RETURN -1;
-	END IF;
+	END IF;					 
 
-	SELECT rating_table.SubmoduleID
-	INTO rateID
-	FROM `rating_table`
-	WHERE 	SubmoduleID = rating_table.SubmoduleID AND 
-			StudentID = rating_table.StudentID
+    SET isLocked = 0;
+    SET DisciplineID = -1;
+    SELECT modules.DisciplineID, disciplines.isLocked, rating_table.StudentID
+    INTO DisciplineID, isLocked, rateID
+	FROM `submodules`
+	INNER JOIN `modules` 				ON 	submodules.ModuleID = modules.ID
+	INNER JOIN `disciplines` 			ON 	modules.DisciplineID = disciplines.ID
+	INNER JOIN `disciplines_teachers` 	ON 	disciplines.ID = disciplines_teachers.DisciplineID AND
+											TeacherID = disciplines_teachers.TeacherID 
+	LEFT JOIN 	`disciplines_groups`	ON 	disciplines.ID = disciplines_groups.DisciplineID AND
+											groupID = disciplines_groups.StudyGroupID
+	LEFT JOIN 	`disciplines_students`	ON 	disciplines.ID = disciplines_groups.DisciplineID AND
+											StudentID = disciplines_students.StudentID 	AND
+											1 = disciplines_students.Type
+	LEFT JOIN 	`rating_table`			ON 	SubModuleID = rating_table.SubModuleID AND
+											StudentID = rating_table.StudentID
+	WHERE 	submodules.ID = SubModuleID AND
+			(	disciplines_students.ID IS NOT NULL OR
+				disciplines_groups.ID IS NOT NULL
+			)
 	LIMIT 1;
-	IF rateID > 0 THEN
+	IF DisciplineID <= 0 THEN
+		RETURN -1;
+	END IF;
+
 
+	IF rateID IS NOT NULL AND rateID > 0 THEN
 		INSERT INTO `logs_rating`
 				(logs_rating.StudentID, logs_rating.SubmoduleID, logs_rating.TeacherID, logs_rating.Rate, logs_rating.Action )
 		VALUES 	(StudentID, SubModuleID, TeacherID, Rate, 'change');
@@ -1683,10 +1689,16 @@ BEGIN
 				rating_table.Rate 		= Rate,
 				rating_table.Date 		= CURDATE()
 		WHERE 	SubmoduleID = rating_table.SubmoduleID AND 
-				StudentID = rating_table.StudentID	
+				StudentID = rating_table.StudentID
 		LIMIT 1;
 
 	ELSE
+		IF NOT isLocked THEN
+			UPDATE `disciplines`
+			SET 	disciplines.isLocked = 1
+			WHERE	disciplines.ID = DisciplineID
+			LIMIT 1;
+		END IF;
 
 		INSERT INTO `logs_rating`
 				(logs_rating.StudentID, logs_rating.SubmoduleID, logs_rating.TeacherID, logs_rating.Rate, logs_rating.Action )
diff --git a/db/Structure.sql b/db/Structure.sql
index 34a979d796fce735442094604bd0415548f08f96..edd2bc8255096edc3be68251f76850a4ed317255 100644
--- a/db/Structure.sql
+++ b/db/Structure.sql
@@ -86,6 +86,7 @@ CREATE TABLE IF NOT EXISTS `disciplines` (
   `PracticeCount` int(11) NOT NULL DEFAULT '0',
   `LectionCount` int(11) NOT NULL DEFAULT '0',
   `FacultyID` int(11) NOT NULL,
+  `isLocked`  tinyint(1) NOT NULL DEFAULT '0',
   PRIMARY KEY (`ID`),
   KEY `GradeID`   (`GradeID`),
   KEY `SubjectID` (`SubjectID`),