diff --git a/db/StoredFunctions.sql b/db/StoredFunctions.sql
index 50cba8c3aff4dab888aba0ca0f239c7aa1a63fc3..fa40dbb9c93322f12694c6e7db698235d45b80a3 100644
--- a/db/StoredFunctions.sql
+++ b/db/StoredFunctions.sql
@@ -856,7 +856,7 @@ CREATE FUNCTION `BindGroup`
     NO SQL
 BEGIN
     DECLARE vChecker INT DEFAULT -1;
-    DECLARE EXIT HANDLER FOR SQLEXCEPTION RETURN -1;
+    DECLARE EXIT HANDLER FOR SQLEXCEPTION RETURN -3;
 
     # 1. check if AccessedTeacher is author
     IF  NOT InternalIsTeacherAuthor(pTeacherID, pDisciplineID) OR
@@ -1029,7 +1029,7 @@ CREATE FUNCTION `UnbindTeacher`
     NO SQL
 BEGIN
     IF pAuthorID = pBindingTeacher OR
-       NOT InternalIsTeacherAuthor(pBindingTeacher, pDisciplineID)
+       NOT InternalIsTeacherAuthor(pAuthorID, pDisciplineID)
     THEN
         RETURN -1;
     END IF;
@@ -1037,7 +1037,7 @@ BEGIN
     DELETE FROM `disciplines_teachers`
         WHERE   disciplines_teachers.DisciplineID = pDisciplineID AND
                 disciplines_teachers.TeacherID = pBindingTeacher;
-    RETURN 0;
+    RETURN ROW_COUNT()-1;
 END //
 
 
@@ -1246,7 +1246,7 @@ BEGIN
     IF  NOT InternalIsTeacherAuthor(pTeacherID, pDisciplineID) OR
         InternalIsMapLocked(pDisciplineID)
     THEN
-        RETURN -1;
+        RETURN -2;
     END IF;
 
     # get free orderNum
@@ -1254,6 +1254,9 @@ BEGIN
         FROM `modules`
         WHERE   modules.DisciplineID = pDisciplineID AND modules.Type = 'regular'
         LIMIT 1;
+    IF vOrderNum IS NULL THEN
+        SET vOrderNum = 1;
+    END IF;
 
     INSERT INTO `modules`
         (Name, OrderNum, DisciplineID )
@@ -1580,11 +1583,11 @@ BEGIN
 
 
     UPDATE `submodules`
-        SET     submodules.MaxRate = MaxRate,
+        SET     submodules.MaxRate = pMaxRate,
                 submodules.Type = pControlType
         WHERE submodules.ID = pSubmoduleID
         LIMIT 1;
-    RETURN 0;
+    RETURN ROW_COUNT()-1;
 END //
 
 
@@ -1699,7 +1702,7 @@ CREATE FUNCTION `AddSubmodule`
 BEGIN
     DECLARE vOrderNum, vIsLocked INT DEFAULT -1;
     DECLARE vDescription VARCHAR(200) CHARSET utf8 DEFAULT pDescription;
-    DECLARE EXIT HANDLER FOR SQLEXCEPTION RETURN -1;
+    # DECLARE EXIT HANDLER FOR SQLEXCEPTION RETURN -1;
 
     # check author and discipline lock
     SELECT disciplines.IsLocked INTO vIsLocked
@@ -1709,7 +1712,7 @@ BEGIN
                 modules.ID = pModuleID
         LIMIT 1;
     IF  vIsLocked != 0 THEN
-        RETURN -1;
+        RETURN -2;
     END IF;
 
     # get free order
@@ -1718,6 +1721,9 @@ BEGIN
         FROM `submodules`
         WHERE submodules.ModuleID = pModuleID
         LIMIT 1;
+    IF vOrderNum IS NULL THEN
+        SET vOrderNum = 0;
+    END IF;
     SET vOrderNum = vOrderNum + 1;
 
     # insert submodule
diff --git a/db/StoredProcedures.sql b/db/StoredProcedures.sql
index 23e62b1bb7bf353d415b3fb0ffcb6ee0f1f78e88..68202f2c7e794920fa96b2fd1fee1b2fde92f018 100644
--- a/db/StoredProcedures.sql
+++ b/db/StoredProcedures.sql
@@ -373,7 +373,7 @@ BEGIN
             view_teachers.DepName,
             (view_teachers.TeacherID = vAuthorID) AS 'IsAuthor'
         FROM `view_teachers`
-        WHERE InternalIsTeacherBounded(view_teachers.TeacherID, pDisciplineID) AND
+        WHERE NOT InternalIsTeacherBounded(view_teachers.TeacherID, pDisciplineID) AND
             view_teachers.FacultyID = pFacultyID AND
             CONCAT( view_teachers.LastName, view_teachers.FirstName, view_teachers.SecondName)
                 LIKE CONCAT('%', pFullName, '%')
@@ -695,16 +695,16 @@ BEGIN
                     view_roadmap.SubmoduleID = (@tmp =
                             (SELECT rating_table.SubmoduleID FROM `submodules`
                                 INNER JOIN `rating_table` ON rating_table.SubModuleID = submodules.ID
-                                WHERE   submodules.ModuleID = modules.ID AND rating_table.StudentID = pStudentID
+                                WHERE   submodules.ModuleID = view_roadmap.ModuleID AND rating_table.StudentID = pStudentID
                                 ORDER BY submodules.OrderNum DESC
                                 LIMIT 1)
                             ) OR
                     ( @tmp IS NULL AND view_roadmap.SubmoduleOrderNum = 1)
                 )
-        ORDER BY modules.Type ^ 1 ASC,
+        ORDER BY view_roadmap.ModuleType ^ 1 ASC,
                 -- 1, 3, 2, 4 ASC
-                modules.OrderNum ASC,
-                submodules.OrderNum ASC;
+                view_roadmap.ModuleOrderNum ASC,
+                view_roadmap.SubmoduleOrderNum ASC;
 END //
 
 
@@ -778,7 +778,7 @@ BEGIN
         INNER JOIN `view_disciplines` ON view_disciplines.DisciplineID = pDisciplineID
         WHERE   view_roadmap.DisciplineID = pDisciplineID AND
                 (view_roadmap.ModuleType = 'exam' OR view_roadmap.ModuleType = 'extra')
-        ORDER BY    OrderModuleTypesForSession(view_roadmap.ModuleType) ASC,
+        ORDER BY    InternalOrderModuleTypesForSession(view_roadmap.ModuleType) ASC,
                     view_roadmap.ModuleOrderNum ASC,
                     view_roadmap.SubmoduleOrderNum ASC;
 END //
diff --git a/db/Views.sql b/db/Views.sql
index c39efedeae9de1994a548eb699459a6b25369930..3ed2d2553b0cb65a4068477012519d37f71263c4 100644
--- a/db/Views.sql
+++ b/db/Views.sql
@@ -132,7 +132,7 @@ CREATE OR REPLACE VIEW `view_roadmap` AS
             # enum('CurrentControl','LandmarkControl')
             submodules.IsUsed AS 'SubmoduleIsUsed'
         FROM `modules`
-        INNER JOIN `submodules` ON submodules.ModuleID = modules.ID;
+        LEFT JOIN `submodules` ON submodules.ModuleID = modules.ID;
 
 
 # without students, that haven't any rate
diff --git a/~dev_rating/application/classes/Controller/Teacher/Discipline.php b/~dev_rating/application/classes/Controller/Teacher/Discipline.php
index bea9a2280714933af9591f669d173dd1b017b0bc..4de70ea8bb0b7aa4eacbfd77be98661ef9b742c2 100644
--- a/~dev_rating/application/classes/Controller/Teacher/Discipline.php
+++ b/~dev_rating/application/classes/Controller/Teacher/Discipline.php
@@ -75,6 +75,8 @@ class Controller_Teacher_Discipline extends Controller_UserEnvi {
         $groupID = 0; 
         $i = 0; 
         $k = 0;
+        $n = 0;
+        $j = 0;
         foreach($students as $row) {
             if ($row['AttachType'] == 'attach'){
                 if ($row['GroupID'] != $groupID) {