diff --git a/db/StoredProcedures.sql b/db/StoredProcedures.sql
index 13e81d0e6f9d5e7ab769cd48c9b86fe629518752..d93d6aad1a4d3ec4879352fa91851ace807bee21 100644
--- a/db/StoredProcedures.sql
+++ b/db/StoredProcedures.sql
@@ -512,10 +512,9 @@ END //
 DROP PROCEDURE IF EXISTS GetStudentsByStudyGroups//
 DROP PROCEDURE IF EXISTS GetStudents//
 CREATE PROCEDURE `GetStudents`  (
-        IN `pGroupID` INT,
-        IN `pSemesterID` INT
-    )
-    NO SQL
+    IN `pGroupID` INT,
+    IN `pSemesterID` INT
+) NO SQL
 BEGIN
     SELECT  view_students.StudentID AS 'ID',
             view_students.LastName,
@@ -593,7 +592,7 @@ BEGIN
     ORDER BY view_students.LastName ASC, view_students.FirstName ASC;
 END //
 
-# students, that don't included in general groups without attached
+
 # not in general groups, not attached
 DROP PROCEDURE IF EXISTS SearchStudents//
 CREATE PROCEDURE `SearchStudents` (
@@ -664,35 +663,50 @@ END //
 
 
 
-# in general groups, attached and detached
+# in general groups, attached or detached
 DROP PROCEDURE IF EXISTS GetStudentsForDiscipline//
 CREATE PROCEDURE `GetStudentsForDiscipline` (
-        IN `pDisciplineID` INT
-    )
-    NO SQL
+    IN `pDisciplineID` INT
+) NO SQL
 BEGIN
     DECLARE vSemesterID INT DEFAULT -1;
     SET vSemesterID = GetDisciplineProperty(pDisciplineID, 'semester');
 
-    SELECT  view_disciplines_students.StudentID AS 'ID',
-            view_disciplines_students.LastName,
-            view_disciplines_students.FirstName,
-            view_disciplines_students.SecondName,
-            view_disciplines_students.GradeID,
-            view_disciplines_students.GradeNum,
-            view_disciplines_students.Degree,
-            view_disciplines_students.GroupID,
-            view_disciplines_students.GroupNum,
-            view_disciplines_students.AttachType AS 'AttachType'
-    FROM `view_disciplines_students`
-    WHERE view_disciplines_students.DisciplineID = pDisciplineID AND
-          view_disciplines_students.SemesterID = vSemesterID
-    ORDER BY    (view_disciplines_students.AttachType IS NULL OR
-                    view_disciplines_students.AttachType = 'detach') DESC,
-        view_disciplines_students.GradeID ASC,
-        view_disciplines_students.GroupNum ASC,
-        view_disciplines_students.LastName ASC,
-        view_disciplines_students.FirstName ASC;
+    SELECT  view_students.StudentID AS 'ID',
+            view_students.LastName,
+            view_students.FirstName,
+            view_students.SecondName,
+            view_students.GradeID,
+            view_students.GradeNum,
+            view_students.Degree,
+            view_students.GroupID,
+            view_students.GroupNum,
+            tDiscStudents.Type AS 'AttachType'
+        FROM (
+                SELECT  st.StudentID,
+                        COALESCE(st.Type) AS 'Type'
+                FROM (
+                    SELECT  disciplines_students.StudentID,
+                            disciplines_students.Type
+                        FROM `disciplines_students`
+                        WHERE disciplines_students.DisciplineID = pDisciplineID
+                    UNION
+                    SELECT  students_groups.StudentID,
+                            NULL AS 'Type'
+                        FROM `disciplines_groups`
+                        LEFT JOIN `students_groups` ON students_groups.SemesterID = vSemesterID AND
+                                                       students_groups.GroupID = disciplines_groups.GroupID
+                        WHERE disciplines_groups.DisciplineID = pDisciplineID
+                ) as st
+                GROUP BY st.StudentID
+        ) tDiscStudents
+        INNER JOIN `view_students` ON   view_students.StudentID = tDiscStudents.StudentID AND
+                                        view_students.SemesterID = vSemesterID
+        ORDER BY    ( tDiscStudents.Type <=> 'attach' ) ASC,
+                    view_students.GradeID ASC,
+                    view_students.GroupNum ASC,
+                    view_students.LastName ASC,
+                    view_students.FirstName ASC;
 END //
 
 
@@ -706,25 +720,42 @@ BEGIN
     DECLARE vSemesterID INT DEFAULT -1;
     SET vSemesterID = GetDisciplineProperty(pDisciplineID, 'semester');
 
-    SELECT  view_disciplines_students.StudentID AS 'ID',
-            view_disciplines_students.LastName,
-            view_disciplines_students.FirstName,
-            view_disciplines_students.SecondName,
-            view_disciplines_students.GradeID,
-            view_disciplines_students.GradeNum,
-            view_disciplines_students.Degree,
-            view_disciplines_students.GroupID,
-            view_disciplines_students.GroupNum,
-            (view_disciplines_students.AttachType IS NOT NULL) AS 'IsAttached'
-    FROM `view_disciplines_students`
-    WHERE   view_disciplines_students.SemesterID = vSemesterID AND
-            view_disciplines_students.DisciplineID = pDisciplineID AND
-            (view_disciplines_students.AttachType IS NULL OR
-                view_disciplines_students.AttachType = 'attach')
-    ORDER BY    view_disciplines_students.GradeID ASC,
-                view_disciplines_students.GroupNum ASC,
-                view_disciplines_students.LastName ASC,
-                view_disciplines_students.FirstName ASC;
+
+    SELECT  view_students.StudentID AS 'ID',
+            view_students.LastName,
+            view_students.FirstName,
+            view_students.SecondName,
+            view_students.GradeID,
+            view_students.GradeNum,
+            view_students.Degree,
+            view_students.GroupID,
+            view_students.GroupNum,
+            ( tDiscStudents.Type IS NOT NULL ) AS 'IsAttached'
+        FROM (
+                SELECT  st.StudentID,
+                        COALESCE(st.Type) AS 'Type'
+                FROM (
+                    SELECT  disciplines_students.StudentID,
+                            disciplines_students.Type
+                        FROM `disciplines_students`
+                        WHERE disciplines_students.DisciplineID = pDisciplineID
+                    UNION
+                        SELECT  students_groups.StudentID,
+                                NULL AS 'Type'
+                        FROM `disciplines_groups`
+                        LEFT JOIN `students_groups` ON  students_groups.SemesterID = vSemesterID AND
+                                                        students_groups.GroupID = disciplines_groups.GroupID
+                        WHERE disciplines_groups.DisciplineID = pDisciplineID
+                ) as st
+                GROUP BY st.StudentID
+        ) tDiscStudents
+        INNER JOIN `view_students` ON   view_students.StudentID = tDiscStudents.StudentID AND
+                                        view_students.SemesterID = vSemesterID
+        WHERE NOT tDiscStudents.Type <=> 'detach'
+        ORDER BY    view_students.GradeID ASC,
+                    view_students.GroupNum ASC,
+                    view_students.LastName ASC,
+                    view_students.FirstName ASC;
 END //