diff --git a/db/StoredFunctions.sql b/db/StoredFunctions.sql
index f3c1503736dc82de37a87c64b9f348b9bdda1d84..2e17a8d2c57169531fc1188af5a2b66cdc475319 100644
--- a/db/StoredFunctions.sql
+++ b/db/StoredFunctions.sql
@@ -805,6 +805,22 @@ END //
 
 
 
+DROP FUNCTION IF EXISTS GetDisciplineSemesterID//
+CREATE FUNCTION `GetDisciplineSemesterID` (
+    `pDisciplineID` INT
+) RETURNS int(11)
+    NO SQL
+BEGIN
+    DECLARE vSemesterID INT DEFAULT -1;
+
+    SELECT disciplines.SemesterID INTO vSemesterID
+        FROM `disciplines`
+        WHERE disciplines.ID = pDisciplineID
+        LIMIT 1;
+
+    RETURN vSemesterID;
+END //
+
 DROP FUNCTION IF EXISTS AddDiscipline//
 DROP FUNCTION IF EXISTS Discipline_Create//
 CREATE FUNCTION `Discipline_Create` (
diff --git a/db/StoredProcedures.sql b/db/StoredProcedures.sql
index 9cf8beaad31f1b0cdd94d55f7ca7d7d6377c9e33..d7aedae59de5e69aa035c95aed79bda98fef1a94 100644
--- a/db/StoredProcedures.sql
+++ b/db/StoredProcedures.sql
@@ -459,7 +459,8 @@ CREATE PROCEDURE `SearchStudents` (
         IN `pGroupID` INT,
         IN `pFacultyID` INT,
         IN `pFullName` VARCHAR(100) CHARSET utf8,
-        IN `pDisciplineID` INT
+        IN `pDisciplineID` INT,
+        IN `pSemesterID` INT
     )
     NO SQL
 BEGIN
@@ -477,7 +478,7 @@ BEGIN
                                             disciplines_students.DisciplineID = pDisciplineID
         LEFT JOIN `disciplines_groups` ON   disciplines_groups.GroupID = view_students.GroupID AND
                                             disciplines_groups.DisciplineID = pDisciplineID
-        WHERE   view_students.SemesterID = @CurrentSemesterID AND
+        WHERE   view_students.SemesterID = pSemesterID AND
                 view_students.FacultyID = pFacultyID AND
                 view_students.GradeID = pGradeID AND
                 (view_students.GroupID = pGroupID OR pGroupID = 0) AND
@@ -727,17 +728,23 @@ END //
 # -------------------------------------------------------------------------------------------
 
 DROP PROCEDURE IF EXISTS GetRatesForGroup//
-CREATE PROCEDURE `GetRatesForGroup`
-    (   IN `pDisciplineID` INT, IN `pGroupID` INT)
+CREATE PROCEDURE `GetRatesForGroup` (
+    IN `pDisciplineID` INT,
+    IN `pGroupID` INT
+)
     NO SQL
 BEGIN
     DECLARE vChecker BOOLEAN DEFAULT FALSE;
+    DECLARE vSemesterID INT DEFAULT -1;
+
     SELECT disciplines_groups.ID IS NOT NULL INTO vChecker
         FROM `disciplines_groups`
         WHERE disciplines_groups.DisciplineID = pDisciplineID AND
               disciplines_groups.GroupID = pGroupID
         LIMIT 1;
 
+    SET vSemesterID = GetDisciplineSemesterID(pDisciplineID);
+
     IF !vChecker THEN
         SELECT  students.ID,
             students.LastName,
@@ -750,7 +757,7 @@ BEGIN
             LEFT JOIN `view_rating_result` ON view_rating_result.DisciplineID = pDisciplineID AND
                                               view_rating_result.StudentID = students.ID
             INNER JOIN `students_groups` ON students_groups.StudentID = students.ID AND
-                                            students_groups.SemesterID = @CurrentSemesterID
+                                            students_groups.SemesterID = vSemesterID
         WHERE students_groups.GroupID = pGroupID AND
               EXISTS(SELECT * FROM `disciplines_students`
               WHERE  disciplines_students.DisciplineID = pDisciplineID AND
@@ -769,7 +776,7 @@ BEGIN
             LEFT JOIN `view_rating_result` ON view_rating_result.DisciplineID = pDisciplineID AND
                                                view_rating_result.StudentID = students.ID
             INNER JOIN `students_groups` ON students_groups.StudentID = students.ID AND
-                                            students_groups.SemesterID = @CurrentSemesterID
+                                            students_groups.SemesterID = vSemesterID
             WHERE students_groups.GroupID = pGroupID AND
                   NOT EXISTS(SELECT * FROM `disciplines_students`
                                 WHERE  disciplines_students.DisciplineID = pDisciplineID AND
@@ -1048,8 +1055,10 @@ END //
 
 
 DROP PROCEDURE IF EXISTS GetFinalFormInfo//
-CREATE PROCEDURE `GetFinalFormInfo`
-(IN `pDisciplineID` INT, IN `pGroupID` INT)
+CREATE PROCEDURE `GetFinalFormInfo` (
+    IN `pDisciplineID` INT,
+    IN `pGroupID` INT
+)
     NO SQL
 BEGIN
     SELECT  study_groups.GroupNum AS 'GroupNum',
@@ -1086,7 +1095,7 @@ BEGIN
         INNER JOIN `teachers` ON teachers.ID = disciplines.AuthorID
         INNER JOIN `departments` ON departments.ID = teachers.DepartmentID
         INNER JOIN `job_positions` ON job_positions.ID = teachers.JobPositionID
-        INNER JOIN `semesters` ON semesters.ID = @CurrentSemesterID
+        INNER JOIN `semesters` ON disciplines.SemesterID
         WHERE study_groups.ID = pGroupID
         LIMIT 1;
 END //
diff --git a/~dev_rating/application/classes/Model/Students.php b/~dev_rating/application/classes/Model/Students.php
index a9278ca04a48e5fbadd1bbd1150d6ba2918935a7..eac86847e0f99dcc0949ff466cabe44818979094 100644
--- a/~dev_rating/application/classes/Model/Students.php
+++ b/~dev_rating/application/classes/Model/Students.php
@@ -37,7 +37,8 @@ class Model_Students extends Model
 
     public static function searchStudents($GradeID, $GroupID, $FacultyID, $Name, $DisciplineID) {
         $Name = Database::instance()->escape($Name);
-        $sql = "CALL `SearchStudents`('$GradeID', '$GroupID', '$FacultyID', $Name, '$DisciplineID'); ";
+        $semesterID = User::instance()->offsetGet('SemesterID');
+        $sql = "CALL `SearchStudents`('$GradeID', '$GroupID', '$FacultyID', $Name, '$DisciplineID', $semesterID); ";
         return DB::query(Database::SELECT, $sql)->execute();
     }