diff --git a/ExpressAPI/src/routes/ExerciseRoutes.ts b/ExpressAPI/src/routes/ExerciseRoutes.ts
index b337158b4563d6e6eeb8cda9e3f5f5b61810223b..0642d3a99433e7d75432d573e8fda1f515f0b936 100644
--- a/ExpressAPI/src/routes/ExerciseRoutes.ts
+++ b/ExpressAPI/src/routes/ExerciseRoutes.ts
@@ -30,6 +30,7 @@ import ExerciseResultsFile       from '../shared/types/Dojo/ExerciseResultsFile'
 import DojoStatusCode            from '../shared/types/Dojo/DojoStatusCode';
 import GlobalHelper              from '../helpers/GlobalHelper';
 import { IFileDirStat }          from '../shared/helpers/recursiveFilesStats/RecursiveFilesStats';
+import ExerciseManager           from '../managers/ExerciseManager';
 
 
 class ExerciseRoutes implements RoutesManager {
@@ -90,6 +91,21 @@ class ExerciseRoutes implements RoutesManager {
         const assignment: Assignment = req.boundParams.assignment!;
 
 
+        const exercises: Array<Exercise> | undefined = await ExerciseManager.getFromAssignment(assignment.name, { members: true });
+        const reachedLimitUsers: Array<GitlabUser> = [];
+        if ( exercises ) {
+            for ( const member of params.members ) {
+                const exerciseCount: number = exercises.filter(exercise => exercise.members.findIndex(exerciseMember => exerciseMember.id === member.id) !== -1).length;
+                if ( exerciseCount >= Config.exercise.maxPerAssignment ) {
+                    reachedLimitUsers.push(member);
+                }
+            }
+        }
+        if ( reachedLimitUsers.length > 0 ) {
+            return req.session.sendResponse(res, StatusCodes.INSUFFICIENT_SPACE_ON_RESOURCE, reachedLimitUsers, 'Max exercise per assignment reached', DojoStatusCode.MAX_EXERCISE_PER_ASSIGNMENT_REACHED);
+        }
+
+
         const exerciseId: string = uuidv4();
         const secret: string = uuidv4();
         let repository!: GitlabRepository;