diff --git a/db/StoredProcedures.sql b/db/StoredProcedures.sql
index da6a35ca096090c8a23cb80e7267b374e1a39e45..1744c592427f9bd93aa1e17296d7054ab84217c8 100644
--- a/db/StoredProcedures.sql
+++ b/db/StoredProcedures.sql
@@ -2338,13 +2338,13 @@ BEGIN
 			
 			-- delete extra module from 
 			DELETE FROM `submodules`
-			WHERE submodules.ID in 
-				(SELECT submodules.ID 
-				FROM `modules` 
-				LEFT JOIN `submodules` ON submodules.ModuleID = modules.ID
-				WHERE modules.Type = 4 and modules.DisciplineID = DisciplineID
-				ORDER BY submodules.OrderNum DESC LIMIT 1);
-						
+			WHERE submodules.ID IN 
+		 		(
+					SELECT submodules.ID 
+					FROM `modules` 
+					LEFT JOIN `submodules` ON submodules.ModuleID = modules.ID
+					WHERE modules.Type = 4 and modules.DisciplineID = DisciplineID and submodules.OrderNum > 1
+	 			);
 			SET extraMax = 6;
 		ELSE
 			SET extraMax = 30;
@@ -2988,7 +2988,7 @@ CREATE FUNCTION `AddModuleExtra`	(	`TeacherID` 	INT,
 									) 	RETURNS int(11)
     NO SQL
 BEGIN  
-    DECLARE checker, vModule, vType INT;  					 	
+    DECLARE checker, vModule, vType, vGap INT;  					 	
     IF 	NOT InternalIsTeacherAuthor(TeacherID,DisciplineID)
     THEN
     	RETURN -1;
@@ -3023,14 +3023,18 @@ BEGIN
 		RETURN -1; 
 	END IF;
 
+	SET vGap = -1;
 	IF vType = 1 THEN
-		SET checker = 6;
-	ELSE
-		SET checker = 30;
-		SET checker = AddSubmodule(TeacherID, vModule, checker, '', NULL, 'LandmarkControl');
+	-- exam
+		SET vGap = 6;
+	END IF;
+	IF vType = 2 THEN
+	-- credit
+		SET vGap = 30;
+		SET checker = AddSubmodule(TeacherID, vModule, vGap, '', NULL, 'LandmarkControl');
 	END IF; 
 
-	SET checker = AddSubmodule(TeacherID, vModule, checker, '', NULL, 'LandmarkControl');
+	SET checker = AddSubmodule(TeacherID, vModule, vGap, '', NULL, 'LandmarkControl');
 	RETURN vModule;
 END //
 
diff --git a/db/fix.sql b/db/fix.sql
index 26077e051d6d4421013b70d3480c4e27e6b5ee9f..a34b5995bb12c555c217f41064dc83e40f7e8aac 100644
--- a/db/fix.sql
+++ b/db/fix.sql
@@ -1,6 +1,7 @@
 DELIMITER //
 
-ALTER TABLE `modules` CHANGE `Type` `Type` enum('regular','exam', 'bonus', 'extra') NOT NULL DEFAULT 'regular'//
+
+
 
 DROP FUNCTION IF EXISTS AddSubmodule//
 CREATE FUNCTION `AddSubmodule`  ( `TeacherID`   INT, 
@@ -13,19 +14,6 @@ CREATE FUNCTION `AddSubmodule`  ( `TeacherID`   INT,
 		NO SQL
 BEGIN  
 	DECLARE checker INT;  
-	
-	SET checker = -1;
-	SELECT disciplines.ID 
-	INTO checker 
-	FROM `modules`
-	INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID
-	WHERE   TeacherID = disciplines.AuthorID AND
-			ModuleID = modules.ID 
-	LIMIT 1;
-	IF  checker <= 0
-	THEN
-			RETURN -1;
-	END IF;
 
 
 	SET checker = 0;
@@ -63,18 +51,20 @@ CREATE FUNCTION `AddModuleExtra`	(	`TeacherID` 	INT,
 									) 	RETURNS int(11)
     NO SQL
 BEGIN  
-    DECLARE checker, vModule INT;  					 	
+    DECLARE checker, vModule, vType, vGap INT;  					 	
     IF 	NOT InternalIsTeacherAuthor(TeacherID,DisciplineID)
     THEN
     	RETURN -1;
 	END IF;
 
+	SET vType = -1;
 	SET checker = -1;
 	SELECT modules.ID 
 	INTO checker
 	FROM `modules`
 	WHERE 	DisciplineID = modules.DisciplineID AND 
-			modules.Type = 4;
+			modules.Type = 4
+	LIMIT 1;
 	IF checker > 0 THEN
 		RETURN -2;
 	END IF;
@@ -85,9 +75,10 @@ BEGIN
 	VALUES 	( 	'Добор баллов' , 2900666 , DisciplineID, 4 );
 
 	SET vModule = -1;
-	SELECT 	modules.ID
-	INTO vModule
+	SELECT 	modules.ID, disciplines.ExamType 
+	INTO vModule, vType
 	FROM `modules`
+	INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID 
 	WHERE 	DisciplineID = modules.DisciplineID AND 
 			modules.Type = 4
 	LIMIT 1;
@@ -95,7 +86,16 @@ BEGIN
 		RETURN -1; 
 	END IF;
 
-	SET checker = AddSubmodule(TeacherID, vModule, 6, '', NULL, 'LandmarkControl');
+	SET vGap = -1;
+	IF vType = 1 THEN
+		SET vGap = 6;
+	END IF;
+	IF vType = 2 THEN
+		SET vGap = 30;
+		SET checker = AddSubmodule(TeacherID, vModule, vGap, '', NULL, 'LandmarkControl');
+	END IF; 
+
+	SET checker = AddSubmodule(TeacherID, vModule, vGap, '', NULL, 'LandmarkControl');
 	RETURN vModule;
 END //
 
@@ -140,6 +140,9 @@ BEGIN
 			);
 END //
 
+ALTER TABLE `modules` CHANGE `Type` `Type` enum('regular','exam', 'bonus', 'extra') NOT NULL DEFAULT 'regular'//
+
+
 DELETE FROM `rating_table`
 WHERE rating_table.SubmoduleID IN
 	(
@@ -151,28 +154,91 @@ WHERE rating_table.SubmoduleID IN
 
 
 
-SELECT  AddSubmodule(disciplines.AuthorID, modules.ID, 40, '', NULL, 'LandmarkControl') AS '1',
-		AddSubmodule(disciplines.AuthorID, modules.ID, 40, '', NULL, 'LandmarkControl') AS '2'
-FROM `modules`
-INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID
-WHERE modules.Type = 2//
+INSERT INTO `page_access` (`ID`, `Pagename`, `Bitmask`) VALUES (NULL, 'teacher:exam', '6')//
 
+ALTER TABLE `specializations` ADD  `Code` varchar(12) NULL//
 
-DELETE FROM `rating_table`
-WHERE rating_table.SubmoduleID IN 
-		(		SELECT submodules.ID
-				FROM `modules`
-				LEFT JOIN `submodules` ON submodules.ModuleID = modules.ID
-				WHERE modules.Type = 2
-		)//
+
+-- SELECT  modules.ID, AddSubmodule(disciplines.AuthorID, modules.ID, 40, '', NULL, 'LandmarkControl') AS '1'
+-- FROM `modules`
+-- INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID
+-- WHERE modules.Type = 2 //
+
+
+
+
+DROP PROCEDURE IF EXISTS  fix_modules//
+CREATE PROCEDURE fix_modules()
+BEGIN
+	DECLARE checker INT;
+   DECLARE vid   INT;
+   DECLARE vname INT;
+   -- this flag will be set to true when cursor reaches end of table
+   DECLARE exit_loop BOOLEAN;         
+   -- Declare the cursor
+   DECLARE employee_cursor CURSOR FOR
+   		SELECT  modules.ID AS 'ID', disciplines.AuthorID
+		FROM `modules`
+		INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID
+		WHERE modules.Type = 2;
+
+   -- set exit_loop flag to true if there are no more rows
+   DECLARE CONTINUE HANDLER FOR NOT FOUND SET exit_loop = TRUE;
+   -- open the cursor
+   OPEN employee_cursor;
+   -- start looping
+   employee_loop: LOOP
+     -- read the name from next row into the variables 
+     FETCH  employee_cursor INTO vid, vname;
+      	SET checker = AddSubmodule(vname, vid, 40, '', NULL, 'LandmarkControl');
+      	SET checker = AddSubmodule(vname, vid, 40, '', NULL, 'LandmarkControl');
+     IF exit_loop THEN
+         CLOSE employee_cursor;
+         LEAVE employee_loop;
+     END IF;
+   END LOOP employee_loop;
+END //
+
+ DROP PROCEDURE IF EXISTS  fix_modules2//
+ CREATE PROCEDURE fix_modules2()
+BEGIN
+	DECLARE checker INT;
+   DECLARE vid  INT;
+   DECLARE vname INT;
+   -- this flag will be set to true when cursor reaches end of table
+   DECLARE exit_loop BOOLEAN;         
+   -- Declare the cursor
+   DECLARE employee_cursor CURSOR FOR
+   		SELECT  disciplines.ID AS 'ID', disciplines.AuthorID
+		FROM `disciplines`;
+
+   -- set exit_loop flag to true if there are no more rows
+   DECLARE CONTINUE HANDLER FOR NOT FOUND SET exit_loop = TRUE;
+   -- open the cursor
+   OPEN employee_cursor;
+   -- start looping
+   employee_loop: LOOP
+     -- read the name from next row into the variables 
+     FETCH  employee_cursor INTO vid, vname;
+     SET checker = AddModuleExtra(vname, vid);
+     IF exit_loop THEN
+         CLOSE employee_cursor;
+         LEAVE employee_loop;
+     END IF;
+   END LOOP employee_loop;
+END //
 
 
-SELECT AddModuleExtra(disciplines.AuthorID, disciplines.ID)
-FROM `disciplines`//
+ CALL fix_modules()//
+  CALL fix_modules2()//
+ DROP PROCEDURE IF EXISTS  fix_modules//
+ DROP PROCEDURE IF EXISTS  fix_modules2//
 
+-- SELECT AddModuleExtra(disciplines.AuthorID, disciplines.ID)
+-- FROM `disciplines`//
 
-INSERT INTO `rating`.`page_access` (`ID`, `Pagename`, `Bitmask`) VALUES (NULL, 'teacher:exam', '6');
 
-ALTER TABLE `specializations` ADD  `Code` varchar(12) NULL;
+DELETE FROM submodules WHERE submodules.ModuleID IN (SELECT modules.ID FROM modules WHERE modules.Type = 4)//
+DELETE FROM modules WHERE modules.Type = 4//
 
 DELIMITER ;
\ No newline at end of file