diff --git a/db/StoredProcedures.sql b/db/StoredProcedures.sql
index 81eb87b52e8f35d3607fcd1205502fd8d7c79da2..ca648782a4011b70123dc5eaa0f970669cb9c32d 100644
--- a/db/StoredProcedures.sql
+++ b/db/StoredProcedures.sql
@@ -1,6 +1,11 @@
 DELIMITER //
 
 DROP PROCEDURE IF EXISTS GetCurSemesterInfo//
+DROP FUNCTION IF EXISTS GetGradeID//
+DROP FUNCTION IF EXISTS SetCurSemesterID//
+DROP FUNCTION IF EXISTS SetHashKey//
+DROP PROCEDURE IF EXISTS GetCurSemesterID//
+DROP PROCEDURE IF EXISTS GetHashKey//
 
 # -------------------------------------------------------------------------------------------
 # Label: abbreviations
@@ -18,17 +23,17 @@ DROP PROCEDURE IF EXISTS GetCurSemesterInfo//
 # "SetRate" stored procedure can change isLocked flag
 DROP FUNCTION IF EXISTS InternalIsMapLocked//
 CREATE FUNCTION `InternalIsMapLocked`
-    (`pDisciplineID` INT) RETURNS boolean
+    (`pDisciplineID` INT) RETURNS BOOLEAN
     NO SQL
 BEGIN
-    RETURN (EXISTS(SELECT * FROM `disciplines` WHERE disciplines.ID = pDisciplineID));
+    RETURN EXISTS(SELECT * FROM `disciplines` WHERE disciplines.ID = pDisciplineID);
 END //
 
 
 # check, that student really take this course
 DROP FUNCTION IF EXISTS InternalIsStudentAttached//
 CREATE FUNCTION `InternalIsStudentAttached`
-    (`pStudentID` INT, `pDisciplineID` INT) RETURNS boolean
+    (`pStudentID` INT, `pDisciplineID` INT) RETURNS BOOLEAN
     NO SQL
 BEGIN 
     DECLARE vChecker boolean;
@@ -58,33 +63,22 @@ END //
 # check, that teacher teach this course
 drop function if exists InternalIsTeacherBinded//
 CREATE FUNCTION `InternalIsTeacherBinded`
-    (   `pTeacherID` INT, `pDisciplineID` INT) RETURNS boolean
+    (   `pTeacherID` INT, `pDisciplineID` INT) RETURNS BOOLEAN
     NO SQL
 BEGIN  
-    DECLARE vChecker boolean DEFAULT FALSE;
-    
-    SELECT (disciplines_teachers.ID IS NOT NULL AND disciplines_teachers.ID > 0) 
-        INTO vChecker
-        FROM `disciplines_teachers`
-        WHERE   disciplines_teachers.TeacherID = pTeacherID AND
-                disciplines_teachers.DisciplineID = pDisciplineID
-        LIMIT 1;
-    RETURN vChecker;
+    RETURN EXISTS (SELECT * FROM `disciplines_teachers`
+                   WHERE disciplines_teachers.TeacherID = pTeacherID AND
+                         disciplines_teachers.DisciplineID = pDisciplineID);
 END //
 
 
 DROP FUNCTION IF EXISTS InternalIsTeacherAuthor//
 CREATE FUNCTION `InternalIsTeacherAuthor`
-    (   `pTeacherID` INT, `pDisciplineID` INT) RETURNS boolean
+    (   `pTeacherID` INT, `pDisciplineID` INT) RETURNS BOOLEAN
     NO SQL
-BEGIN  
-    DECLARE vChecker boolean DEFAULT FALSE;
-    SELECT  (disciplines.AuthorID = pTeacherID)
-        INTO vChecker
-        FROM `disciplines`
-        WHERE disciplines.ID = pDisciplineID
-        LIMIT 1;
-    RETURN vChecker;
+BEGIN
+    RETURN EXISTS (SELECT * FROM `disciplines`
+                    WHERE disciplines.ID = pDisciplineID AND disciplines.AuthorID = pTeacherID);
 END //
 
 
@@ -99,8 +93,8 @@ BEGIN
     SELECT SUM(submodules.MaxRate)
         INTO vMaxRate
         FROM `submodules`
-        INNER JOIN `modules` ON submodules.ModuleID = modules.ID AND
-                                (modules.Type = 'regular' OR modules.Type = 'exam')
+        INNER JOIN `modules`
+            ON  submodules.ModuleID = modules.ID AND (modules.Type = 'regular' OR modules.Type = 'exam')
         WHERE modules.DisciplineID = pDisciplineID;
             
     RETURN vMaxRate;
@@ -256,7 +250,7 @@ END //
 # check, if any module is created
 DROP FUNCTION IF EXISTS InternalIsMapCreated//
 CREATE FUNCTION `InternalIsMapCreated`
-    (   `pDisciplineID` INT)   RETURNS int(11)
+    (   `pDisciplineID` INT) RETURNS int(11)
     NO SQL
 BEGIN
     DECLARE vRes INT DEFAULT -1;
@@ -282,9 +276,9 @@ CREATE FUNCTION `InternalNotify`        (   `AccountID` INT
     NO SQL
 BEGIN  
     UPDATE `accounts`
-    SET accounts.Notification = 1
-    WHERE accounts.ID = AccountID
-    LIMIT 1;
+        SET accounts.Notification = 1
+        WHERE accounts.ID = AccountID
+        LIMIT 1;
     RETURN 0;
 END //
 
@@ -297,31 +291,34 @@ END //
 # -------------------------------------------------------------------------------------------
 
 
-DROP FUNCTION IF EXISTS SetHashKey//
-CREATE FUNCTION `SetHashKey` 
-    (`pValue` VARCHAR(300) charset utf8) RETURNS int(11)
+DROP FUNCTION IF EXISTS SetSettings//
+CREATE FUNCTION `SetSettings`
+    (`pKey` VARCHAR(50) CHARSET utf8, `pVal` INT, `pValS` VARCHAR(300) CHARSET utf8
+    ) RETURNS int(11)
     NO SQL
 BEGIN
-    UPDATE `general_settings`
-        SET general_settings.ValS = pValue
-        WHERE general_settings.ID = 2
-        LIMIT 1;
-    RETURN 0;
-END //
-
+    INSERT INTO `general_settings`
+        (Val, ValS, Name) VALUES(pVal, pValS, pKey)
+        ON DUPLICATE KEY UPDATE
+            general_settings.Val = pVal,
+            general_settings.ValS = pValS;
+        RETURN 0;
+END//
 
-DROP FUNCTION IF EXISTS GetHashKey//
-CREATE FUNCTION `GetHashKey` ( ) RETURNS varchar(300) CHARSET utf8
+DROP PROCEDURE IF EXISTS GetSettings//
+CREATE PROCEDURE `GetSettings`(IN `pKey` VARCHAR(50) CHARSET utf8)
     NO SQL
 BEGIN
-    RETURN( SELECT general_settings.ValS
-                FROM `general_settings`
-                WHERE general_settings.ID = 2
-                LIMIT 1);
+    SELECT general_settings.*
+        FROM `general_settings`
+        WHERE general_settings.Name = pKey
+        LIMIT 1;
 END //
 
 
 
+
+
 DROP FUNCTION IF EXISTS SetBitmaskByPagename//
 CREATE FUNCTION `SetBitmaskByPagename` 
     (`pPagename` TEXT CHARSET utf8, `pMask` INT) RETURNS int(11)
@@ -355,17 +352,6 @@ END //
 # -------------------------------------------------------------------------------------------
 
 
-DROP FUNCTION IF EXISTS GetCurSemesterID//
-CREATE FUNCTION `GetCurSemesterID` ( ) RETURNS int(11)
-    NO SQL
-BEGIN
-    RETURN( SELECT general_settings.Val 
-                FROM `general_settings` 
-                WHERE general_settings.ID = 1
-                LIMIT 1 
-        );
-END //
-
 
 DROP FUNCTION IF EXISTS SetSemesterID//
 CREATE FUNCTION `SetSemesterID` (`SemesterID` INT) RETURNS int(11)
@@ -379,25 +365,6 @@ END //
 
 
 
-DROP FUNCTION IF EXISTS SetCurSemesterID//
-CREATE FUNCTION `SetCurSemesterID` (`pSemesterID` INT) RETURNS int(11)
-    NO SQL
-BEGIN
-    DECLARE vChecker BOOLEAN;
-    SET vChecker = EXISTS(SELECT * FROM `semesters` WHERE semesters.ID = pSemesterID);
-    IF !vChecker THEN
-        RETURN -1;
-    END IF;
-
-    INSERT INTO `general_settings`
-        (ID, Val) VALUES(1, pSemesterID)
-        ON DUPLICATE KEY UPDATE
-            general_settings.Val = pSemesterID;
-    RETURN 0;
-END //
-
-
-
 DROP FUNCTION IF EXISTS GetSemesterID//
 CREATE FUNCTION `GetSemesterID` (`pYear` INT, `pNum` INT) RETURNS int(11)
     NO SQL
@@ -512,25 +479,6 @@ END //
 # -------------------------------------------------------------------------------------------
 
 
-DROP FUNCTION IF EXISTS GetGradeID//
-CREATE FUNCTION `GetGradeID`
-    (`pGradeNum` INT, `pDegree` VARCHAR(30) charset utf8) RETURNS int(11)
-    # enum('bachelor','master','specialist')                
-    NO SQL
-BEGIN  
-    DECLARE vResult INT DEFAULT -1;
-
-    SELECT grades.ID
-        INTO vResult
-        FROM `grades`
-        WHERE   grades.Num = pGradeNum AND
-                grades.Degree = pDegree
-        LIMIT 1;
-    
-    RETURN vResult;
-END //
-
-
 DROP PROCEDURE IF EXISTS GetGrades//
 CREATE PROCEDURE `GetGrades` ( )
     NO SQL
@@ -635,8 +583,8 @@ END //
 DROP FUNCTION IF EXISTS CreateSubject//
 CREATE FUNCTION `CreateSubject` 
     (   `pFacultyID` INT, 
-        `pSubjectName` VARCHAR(200) charset utf8,
-        `pSubjectAbbr` VARCHAR(20) charset utf8
+        `pSubjectName` VARCHAR(200) CHARSET utf8,
+        `pSubjectAbbr` VARCHAR(20) CHARSET utf8
     )   RETURNS int(11)
     NO SQL
 BEGIN  
@@ -1528,7 +1476,7 @@ END //
 
 DROP FUNCTION IF EXISTS OrderModuleTypesForSession//
 CREATE FUNCTION `OrderModuleTypesForSession`
-    (	IN `pModuleType` INT ) RETURNS INT(3)
+    (`pModuleType` INT ) RETURNS INT(3)
 	NO SQL
 BEGIN
 	DECLARE vRes INT DEFAULT 0;
@@ -1547,24 +1495,24 @@ END //
 DROP PROCEDURE IF EXISTS GetMapForStudentExam//
 CREATE PROCEDURE `GetMapForStudentExam`
     (	IN `pStudentID` INT, IN `pDisciplineID` INT)
-NO SQL
-    BEGIN
-        SELECT  view_roadmap.ModuleID,
-                view_roadmap.ModuleName,
-                view_roadmap.SubmoduleID,
-                view_roadmap.SubmoduleName,
-                view_roadmap.SubmoduleRate AS 'MaxRate',
-                view_roadmap.SubmoduleType,
-                rating_table.Rate,
-                rating_table.Date,
-                view_roadmap.ModuleType
-        FROM `view_roadmap`
-        LEFT JOIN `rating_table` 	ON 	rating_table.SubmoduleID = view_roadmap.SubmoduleID AND
-                                        rating_table.StudentID = pStudentID
-        WHERE view_roadmap.DisciplineID = pDisciplineID
-        ORDER BY view_roadmap.ModuleOrderNum ASC,
-                view_roadmap.SubmoduleOrderNum ASC;
-    END //
+    NO SQL
+BEGIN
+    SELECT  view_roadmap.ModuleID,
+            view_roadmap.ModuleName,
+            view_roadmap.SubmoduleID,
+            view_roadmap.SubmoduleName,
+            view_roadmap.SubmoduleRate AS 'MaxRate',
+            view_roadmap.SubmoduleType,
+            rating_table.Rate,
+            rating_table.Date,
+            view_roadmap.ModuleType
+    FROM `view_roadmap`
+    LEFT JOIN `rating_table` 	ON 	rating_table.SubmoduleID = view_roadmap.SubmoduleID AND
+                                    rating_table.StudentID = pStudentID
+    WHERE view_roadmap.DisciplineID = pDisciplineID
+    ORDER BY view_roadmap.ModuleOrderNum ASC,
+            view_roadmap.SubmoduleOrderNum ASC;
+END //
 
 
 
@@ -1656,7 +1604,7 @@ END //
 DROP FUNCTION IF EXISTS AddDiscipline//
 CREATE FUNCTION `AddDiscipline` 
     (   `pTeacherID` INT, `pGradeID` INT, `pSubjectID` INT,
-        `pExamType` VARCHAR(30) charset utf8,
+        `pExamType` VARCHAR(30) CHARSET utf8,
         `pLectureCount` INT, `pPracticeCount` INT, `pLabCount` INT,
         `pFacultyID` INT
     )   RETURNS int(11)
@@ -1746,7 +1694,7 @@ END //
 DROP FUNCTION IF EXISTS ChangeDisciplineControl//
 CREATE FUNCTION `ChangeDisciplineControl`
     (   `pTeacherID` INT, `pDisciplineID` INT,
-        `pExamType` VARCHAR(30) charset utf8
+        `pExamType` VARCHAR(30) CHARSET utf8
     )   RETURNS int(11)
     NO SQL
 BEGIN 
@@ -2203,7 +2151,7 @@ END //
 DROP FUNCTION IF EXISTS ChangeModuleName//
 CREATE FUNCTION `ChangeModuleName`
     (   `pTeacherID` INT, `pModuleID` INT,
-        `pName` VARCHAR(200) charset utf8
+        `pName` VARCHAR(200) CHARSET utf8
     )   RETURNS int(11)
     NO SQL
 BEGIN  
@@ -2235,7 +2183,7 @@ END //
 DROP FUNCTION IF EXISTS AddModule//
 CREATE FUNCTION `AddModule`
     (   `pTeacherID` INT, `pDisciplineID` INT,
-        `pName` VARCHAR(200) charset utf8
+        `pName` VARCHAR(200) CHARSET utf8
     ) RETURNS int(11)
     NO SQL
 BEGIN  
@@ -2564,7 +2512,7 @@ DROP FUNCTION IF EXISTS ChangeSubmoduleMaxAndControl//
 CREATE FUNCTION `ChangeSubmoduleMaxAndControl`  (   `TeacherID`     INT, 
                                                     `SubmoduleID`   INT, 
                                                     `MaxRate`       INT,
-                                                    `ControlType`   VARCHAR(30) charset utf8
+                                                    `ControlType`   VARCHAR(30) CHARSET utf8
                                             )   RETURNS int(11)
     NO SQL
 BEGIN  
@@ -2601,7 +2549,7 @@ END //
 DROP FUNCTION IF EXISTS ChangeSubmoduleName//
 CREATE FUNCTION `ChangeSubmoduleName`   (   `TeacherID`     INT, 
                                             `SubmoduleID`   INT, 
-                                            `Name`          VARCHAR(200) charset utf8
+                                            `Name`          VARCHAR(200) CHARSET utf8
                                         )   RETURNS int(11)
     NO SQL
 BEGIN  
@@ -2636,7 +2584,7 @@ END //
 DROP FUNCTION IF EXISTS ChangeSubmoduleDescription//
 CREATE FUNCTION `ChangeSubmoduleDescription`    (   `TeacherID`     INT, 
                                                     `SubmoduleID`   INT, 
-                                                    `Description`   VARCHAR(200) charset utf8
+                                                    `Description`   VARCHAR(200) CHARSET utf8
                                                 )   RETURNS int(11)
     NO SQL
 BEGIN  
@@ -2720,9 +2668,9 @@ END //
 DROP FUNCTION IF EXISTS AddSubmodule//
 CREATE FUNCTION `AddSubmodule`
     (   `pTeacherID` INT, `pModuleID` INT, `pMaxRate` INT,
-        `pName` VARCHAR(200) charset utf8,
-        `pDescription` VARCHAR(200) charset utf8,
-        `pControlType` VARCHAR(30) charset utf8
+        `pName` VARCHAR(200) CHARSET utf8,
+        `pDescription` VARCHAR(200) CHARSET utf8,
+        `pControlType` VARCHAR(30) CHARSET utf8
     )   RETURNS int(11)
     NO SQL
 BEGIN  
@@ -2854,7 +2802,7 @@ CREATE FUNCTION `CalculateMaxRateForExtra`
 ( `pSubmoduleID` INT, `pStudentID` INT) RETURNS int(11)
     NO SQL
 BEGIN
-    DECLARE vExamType INT; # enum('exam', 'credit');# utf8_general_ci;
+    DECLARE vExamType INT; # enum('exam', 'credit');# utf8;
     DECLARE vLim INT;
     DECLARE vResult INT DEFAULT -1;
      
@@ -2987,7 +2935,7 @@ END //
 DROP PROCEDURE IF EXISTS GetRequests//
 CREATE PROCEDURE `GetRequests`
 (   IN `pOffsetN` INT, IN `pCountN` INT,
-    IN `pAccountID` INT, IN `pStatus` VARCHAR(20) charset utf8)
+    IN `pAccountID` INT, IN `pStatus` VARCHAR(20) CHARSET utf8)
     NO SQL
 BEGIN 
     SELECT  requests.ID,
@@ -3005,7 +2953,7 @@ END //
 
 DROP FUNCTION IF EXISTS SetRequestStatus//
 CREATE FUNCTION `SetRequestStatus`  
-(`pRequestID` INT, `pStatus` VARCHAR(20) charset utf8) RETURNS int(11)
+(`pRequestID` INT, `pStatus` VARCHAR(20) CHARSET utf8) RETURNS int(11)
     NO SQL
 BEGIN
     UPDATE `requests`
@@ -3018,8 +2966,8 @@ END//
 
 DROP FUNCTION IF EXISTS CreateRequest//
 CREATE FUNCTION `CreateRequest`     
-(   `pAccountID` INT, `pTitle` VARCHAR(50) charset utf8,
-    `pDescription` TEXT charset utf8) RETURNS int(11)
+(   `pAccountID` INT, `pTitle` VARCHAR(50) CHARSET utf8,
+    `pDescription` TEXT CHARSET utf8) RETURNS int(11)
     NO SQL
 BEGIN
     INSERT INTO `requests`
@@ -3034,7 +2982,7 @@ END//
 
 # DROP FUNCTION IF EXISTS SetRequestStatus//
 # CREATE FUNCTION `SetRequestStatus`   (   `RequestID` INT,
-#                                      `vStatus` VARCHAR(20) charset utf8
+#                                      `vStatus` VARCHAR(20) CHARSET utf8
 #                                  )   RETURNS int(11)
 #     NO SQL
 # BEGIN
@@ -3096,8 +3044,8 @@ END//
 
 # DROP FUNCTION IF EXISTS RequestReport//
 # CREATE FUNCTION `RequestReport`      (   `AccountID` INT,
-#                                      `vTitle` VARCHAR(50) charset utf8,
-#                                      `vDescription` TEXT charset utf8
+#                                      `vTitle` VARCHAR(50) CHARSET utf8,
+#                                      `vDescription` TEXT CHARSET utf8
 #                                  )   RETURNS int(11)
 #     NO SQL
 # BEGIN
@@ -3174,8 +3122,8 @@ END//
 
 DROP FUNCTION IF EXISTS CreateRecoveryToken//
 CREATE FUNCTION `CreateRecoveryToken`   
-(   `pAccountOrEMail` VARCHAR(255) charset utf8,
-    `pToken` VARCHAR(100) charset utf8)   RETURNS int(11)
+(   `pAccountOrEMail` VARCHAR(255) CHARSET utf8,
+    `pToken` VARCHAR(100) CHARSET utf8)   RETURNS int(11)
     NO SQL
 BEGIN
     DECLARE vChecker INT DEFAULT 0;
@@ -3209,7 +3157,7 @@ END//
 
 DROP FUNCTION IF EXISTS UseRecoveryToken//
 CREATE FUNCTION `UseRecoveryToken`
-(   `pToken` VARCHAR(100) charset utf8) RETURNS int(11)
+(   `pToken` VARCHAR(100) CHARSET utf8) RETURNS int(11)
     NO SQL
 BEGIN
     DECLARE vChecker INT DEFAULT -1;
@@ -3234,7 +3182,7 @@ END//
 
 DROP PROCEDURE IF EXISTS GetRecoveryInfoByToken//
 CREATE PROCEDURE `GetRecoveryInfoByToken`   
-(IN `pToken` VARCHAR(100) charset utf8)
+(IN `pToken` VARCHAR(100) CHARSET utf8)
     NO SQL
 BEGIN 
     SELECT  recovery_tokens.ID,
@@ -3251,7 +3199,7 @@ END //
 
 DROP PROCEDURE IF EXISTS GetRecoveryInfoByEMail//
 CREATE PROCEDURE `GetRecoveryInfoByEMail`
-(IN `pEMail` VARCHAR(255) charset utf8)
+(IN `pEMail` VARCHAR(255) CHARSET utf8)
     NO SQL
 BEGIN 
     SELECT  recovery_tokens.ID,
diff --git a/db/Structure.sql b/db/Structure.sql
index ca66494a2309620e44c3ff6ae3e15aa8d8f497ae..18cd400ee24fd9d99156b09919cd042e3cc6b984 100644
--- a/db/Structure.sql
+++ b/db/Structure.sql
@@ -30,11 +30,11 @@ SET time_zone = "+00:00";
 
 CREATE TABLE IF NOT EXISTS `accounts` (
   `ID` int(11) NOT NULL AUTO_INCREMENT,
-  `Login` varchar(50) DEFAULT NULL,
-  `Password` varchar(64) DEFAULT NULL,
-  `EMail` varchar(255) DEFAULT NULL,
+  `Login` varchar(50) CHARACTER SET utf8_general_ci DEFAULT NULL,
+  `Password` varchar(64) CHARACTER SET utf8_general_ci DEFAULT NULL,
+  `EMail` varchar(255) CHARACTER SET utf8_general_ci DEFAULT NULL,
   `UserRoleID` int(11) NOT NULL,
-  `ActivationCode` varchar(40) DEFAULT NULL,
+  `ActivationCode` varchar(40) CHARACTER SET utf8_general_ci DEFAULT NULL,
   `IsEnabled` tinyint(1) NOT NULL DEFAULT '1',
   `UserAgent` text,
   `Notification` int(11) NOT NULL DEFAULT '0',
@@ -53,7 +53,7 @@ CREATE TABLE IF NOT EXISTS `accounts` (
 
 CREATE TABLE IF NOT EXISTS `job_positions` (
   `ID` int(11) NOT NULL AUTO_INCREMENT,
-  `Name` varchar(200) NOT NULL,
+  `Name` varchar(200) CHARACTER SET utf8_general_ci NOT NULL,
   PRIMARY KEY (`ID`),
   UNIQUE KEY `Name` (`Name`)
 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
@@ -66,7 +66,7 @@ CREATE TABLE IF NOT EXISTS `job_positions` (
 
 CREATE TABLE IF NOT EXISTS `departments` (
   `ID` int(11) NOT NULL AUTO_INCREMENT,
-  `Name` varchar(200) NULL,
+  `Name` varchar(200) CHARACTER SET utf8_general_ci NULL,
   `FacultyID` int(11) NOT NULL,
   PRIMARY KEY (`ID`),
   UNIQUE KEY `Name` (`Name`,`FacultyID`),
@@ -160,8 +160,8 @@ CREATE TABLE IF NOT EXISTS `disciplines_teachers` (
 
 CREATE TABLE IF NOT EXISTS `faculties` (
   `ID` int(11) NOT NULL AUTO_INCREMENT,
-  `Name` varchar(100) NOT NULL,
-  `Abbr` varchar(20) NOT NULL,
+  `Name` varchar(100) CHARACTER SET utf8_general_ci NOT NULL,
+  `Abbr` varchar(20) CHARACTER SET utf8_general_ci NOT NULL,
   PRIMARY KEY (`ID`),
   UNIQUE KEY `Name` (`Name`)
 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
@@ -175,7 +175,8 @@ CREATE TABLE IF NOT EXISTS `faculties` (
 CREATE TABLE IF NOT EXISTS `general_settings` (
   `ID` int(11) NOT NULL AUTO_INCREMENT,
   `Val` int(11) DEFAULT NULL,
-  `ValS` varchar(300) DEFAULT NULL,
+  `ValS` varchar(300) CHARACTER SET utf8_general_ci DEFAULT NULL,
+  `Name` varchar(50) CHARACTER SET utf8_general_ci NOT NULL,
   PRIMARY KEY (`ID`)
 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
 
@@ -227,7 +228,7 @@ CREATE TABLE IF NOT EXISTS `logs_signin` (
 
 CREATE TABLE IF NOT EXISTS `modules` (
   `ID` int(11) NOT NULL AUTO_INCREMENT,
-  `Name` varchar(200) NOT NULL,
+  `Name` varchar(200) CHARACTER SET utf8_general_ci NOT NULL,
   `OrderNum` int(11) NOT NULL,
   `DisciplineID` int(11) NOT NULL,
   `Type` enum('regular','exam', 'bonus', 'extra') NOT NULL DEFAULT 'regular',
@@ -244,7 +245,7 @@ CREATE TABLE IF NOT EXISTS `modules` (
 
 CREATE TABLE IF NOT EXISTS `page_access` (
   `ID` int(11) NOT NULL AUTO_INCREMENT,
-  `Pagename` text NOT NULL,
+  `Pagename` text CHARACTER SET utf8_general_ci NOT NULL,
   `Bitmask` int(11) NOT NULL,
   PRIMARY KEY (`ID`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
@@ -279,8 +280,8 @@ CREATE TABLE IF NOT EXISTS `rating_table` (
 CREATE TABLE IF NOT EXISTS `requests` (
   `ID` int(11) NOT NULL AUTO_INCREMENT,
   `AccountID` int(11) DEFAULT NULL,
-  `Title` varchar(50) NULL DEFAULT NULL,
-  `Description` text NOT NULL,
+  `Title` varchar(50) CHARACTER SET utf8_general_ci NULL DEFAULT NULL,
+  `Description` text CHARACTER SET utf8_general_ci NOT NULL,
   `Date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
   `Status` enum('opened','processed','closed') NOT NULL DEFAULT 'opened',
   PRIMARY KEY (`ID`),
@@ -346,9 +347,9 @@ CREATE TABLE IF NOT EXISTS `semesters` (
 
 CREATE TABLE IF NOT EXISTS `specializations` (
   `ID` int(11) NOT NULL AUTO_INCREMENT,
-  `Name` varchar(50) NULL,
-  `Abbr` varchar(20) NULL,
-  `Code` varchar(12) NULL, 
+  `Name` varchar(50) CHARACTER SET utf8_general_ci NULL,
+  `Abbr` varchar(20) CHARACTER SET utf8_general_ci NULL,
+  `Code` varchar(12) CHARACTER SET utf8_general_ci NULL,
   `FacultyID` int(11) NOT NULL,
   PRIMARY KEY (`ID`),
   UNIQUE KEY `Name` (`Name`,`FacultyID`),
@@ -365,9 +366,9 @@ CREATE TABLE IF NOT EXISTS `students` (
   `ID` int(11) NOT NULL AUTO_INCREMENT,
   `GroupID` int(11) NOT NULL,
   `AccountID` int(11) NOT NULL,
-  `LastName` varchar(30) NOT NULL,
-  `FirstName` varchar(30) NOT NULL,
-  `SecondName` varchar(30) DEFAULT NULL,
+  `LastName` varchar(30) CHARACTER SET utf8_general_ci NOT NULL,
+  `FirstName` varchar(30) CHARACTER SET utf8_general_ci NOT NULL,
+  `SecondName` varchar(30) CHARACTER SET utf8_general_ci DEFAULT NULL,
   PRIMARY KEY (`ID`),
   KEY `GroupID` (`GroupID`),
   KEY `AccountID` (`AccountID`)
@@ -384,7 +385,7 @@ CREATE TABLE IF NOT EXISTS `study_groups` (
   `GradeID` int(11) NOT NULL,
   `GroupNum` int(11) NOT NULL,
   `SpecializationID` int(11) NOT NULL,
-  `Name` varchar(50) DEFAULT NULL,
+  `Name` varchar(50) CHARACTER SET utf8_general_ci DEFAULT NULL,
   PRIMARY KEY (`ID`),
   UNIQUE KEY `GradeID_2` (`GradeID`,`GroupNum`,`SpecializationID`),
   KEY `GradeID` (`GradeID`),
@@ -399,8 +400,8 @@ CREATE TABLE IF NOT EXISTS `study_groups` (
 
 CREATE TABLE IF NOT EXISTS `subjects` (
   `ID` int(11) NOT NULL AUTO_INCREMENT,
-  `Name` varchar(200) NOT NULL,
-  `Abbr` varchar(20) DEFAULT NULL,
+  `Name` varchar(200) CHARACTER SET utf8_general_ci NOT NULL,
+  `Abbr` varchar(20) CHARACTER SET utf8_general_ci DEFAULT NULL,
   PRIMARY KEY (`ID`),
   UNIQUE KEY `Name` (`Name`)
 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
@@ -434,7 +435,7 @@ CREATE TABLE IF NOT EXISTS `submodules` (
   `MaxRate` int(11) NOT NULL,
   `OrderNum` int(11) NOT NULL,
   `Name` varchar(200) NOT NULL,
-  `Description` varchar(200) DEFAULT NULL,
+  `Description` varchar(200) CHARACTER SET utf8_general_ci DEFAULT NULL,
   `IsUsed` tinyint(1) NOT NULL DEFAULT 0,
   `Type` enum('CurrentControl','LandmarkControl') NOT NULL DEFAULT 'CurrentControl',
   PRIMARY KEY (`ID`),
@@ -468,9 +469,9 @@ CREATE TABLE IF NOT EXISTS `grades` (
 
 CREATE TABLE IF NOT EXISTS `teachers` (
   `ID` int(11) NOT NULL AUTO_INCREMENT,
-  `LastName` varchar(30) NOT NULL,
-  `FirstName` varchar(30) NOT NULL,
-  `SecondName` varchar(30) DEFAULT NULL,
+  `LastName` varchar(30) CHARACTER SET utf8_general_ci NOT NULL,
+  `FirstName` varchar(30) CHARACTER SET utf8_general_ci NOT NULL,
+  `SecondName` varchar(30) CHARACTER SET utf8_general_ci DEFAULT NULL,
   `JobPositionID` int(11) NOT NULL,
   `DepartmentID` int(11) NULL,
   `AccountID` int(11) NOT NULL,
@@ -486,10 +487,11 @@ CREATE TABLE IF NOT EXISTS `teachers` (
 -- Структура таблицы `user_roles`
 --
 
+# TODO: just name
 CREATE TABLE IF NOT EXISTS `user_roles` (
   `ID` int(11) NOT NULL AUTO_INCREMENT,
   `Type` enum('student','teacher') NOT NULL,
-  `RoleName` varchar(30) NOT NULL,
+  `RoleName` varchar(30) CHARACTER SET utf8_general_ci NOT NULL,
   `Mark` int(11) NOT NULL,
   PRIMARY KEY (`ID`)
 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
@@ -505,7 +507,7 @@ CREATE TABLE IF NOT EXISTS `recovery_tokens` (
   `ID` int(11) NOT NULL AUTO_INCREMENT,
   `AccountID` int(11) NOT NULL,
   `Date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-  `Token` varchar(100) NOT NULL,
+  `Token` varchar(100) CHARACTER SET utf8_general_ci NOT NULL,
   `IsUsed`  tinyint(1) NOT NULL DEFAULT '0',
   PRIMARY KEY (`ID`),
   KEY `AccountID` (`AccountID`),
diff --git a/db/fix.sql b/db/fix.sql
index a6602e30367bb4c71760a35791c515959320063c..a65baddf95fa3cf19e9d34955e231d45e08ffd06 100644
--- a/db/fix.sql
+++ b/db/fix.sql
@@ -24,11 +24,16 @@ ADD CONSTRAINT `students_ibfk_1` FOREIGN KEY (`GroupID`) REFERENCES `study_group
 
 
 ALTER TABLE  `page_access`
-CHANGE  `Pagename`  `Pagename` VARCHAR( 150 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ;
+CHANGE  `Pagename`  `Pagename` VARCHAR(150) CHARACTER SET utf8_general_ci NOT NULL ;
 
 ALTER TABLE  `page_access` ADD UNIQUE (`Pagename`);
-
 ALTER TABLE  `accounts` ADD UNIQUE (`ActivationCode`);
 
 
+ALTER TABLE  `general_settings` ADD  `Name` VARCHAR(50) CHARACTER SET utf8_general_ci NOT NULL ;
+UPDATE `general_settings` SET general_settings.Name = 'SemesterID' WHERE general_settings.ID = 1;
+UPDATE `general_settings` SET general_settings.Name = 'HashKey' WHERE general_settings.ID = 2;
+ALTER TABLE  `general_settings` ADD UNIQUE (`Name`);
+
+
 
diff --git a/~dev_rating/application/classes/Model/Admin/Students.php b/~dev_rating/application/classes/Model/Admin/Students.php
index 03222f0317c848646a7b5b54395b2bbaba2d0cc7..bb6e02d9e5883397a686ca61b84d88e9876978f5 100644
--- a/~dev_rating/application/classes/Model/Admin/Students.php
+++ b/~dev_rating/application/classes/Model/Admin/Students.php
@@ -8,11 +8,6 @@ class Model_Admin_Students extends Model
         $sql = "CALL `GetStudyGroups`('$gradeNum', '$facultyID'); ";
         return DB::query(Database::SELECT, $sql)->execute();
     }
-    
-    public function getGradeID($gradeNum, $degree)
-    {
-        $sql = "SELECT `GetGradeID`('$gradeNum', '$degree') AS `ID`; ";
-        return DB::query(Database::SELECT, $sql)->execute()->get('ID');
-    }    
+
     
 }
\ No newline at end of file
diff --git a/~dev_rating/modules/account/classes/Model/Kohana/Account.php b/~dev_rating/modules/account/classes/Model/Kohana/Account.php
index 76326a0dfda885b34d31c626f3c2eebc9ccf7c01..b3a8c16e457d8282a21ea47d22b5386319b4e775 100644
--- a/~dev_rating/modules/account/classes/Model/Kohana/Account.php
+++ b/~dev_rating/modules/account/classes/Model/Kohana/Account.php
@@ -4,16 +4,16 @@ class Model_Kohana_Account extends Model
 {
     public function setHashKey($key)
     {
-        $sql = "SELECT `SetHashKey`('$key') AS `Key`;";
+        $sql = "SELECT `SetSettings`('HashKey', '', '$key') AS `Key`;";
         $res = DB::query(Database::SELECT, $sql)->execute();
         return $res->get('Key');
     }
     
     public function getHashKey()
     {
-        $sql = "SELECT `GetHashKey`() AS `Key`;";
+        $sql = "CALL `GetSettings`('HashKey');";
         $key = DB::query(Database::SELECT, $sql)->execute();
-        return $key->get('Key');
+        return $key->get('ValS');
     }
     
     public function checkAuth($login, $password) {
@@ -163,10 +163,11 @@ class Model_Kohana_Account extends Model
     
     public function GetCurSemesterID()
     {
-        $sql = "SELECT `GetCurSemesterID`() AS `Num`; ";
+        $sql = "CALL `GetSettings`('SemesterID');";
         $res = DB::query(Database::SELECT, $sql)->execute();
+        $id = NULL;
         foreach ($res as $value) {
-            $id = $value['Num'];
+            $id = $value['Val'];
         }
         return $id;
     }
@@ -175,6 +176,7 @@ class Model_Kohana_Account extends Model
     {
         $sql = "SELECT `SetSemesterID`('$semesterID') AS `Num`; ";
         $res = DB::query(Database::SELECT, $sql)->execute();
+        $id = NULL;
         foreach ($res as $value) {
             $id = $value['Num'];
         }