diff --git a/ExpressAPI/src/routes/AssignmentRoutes.ts b/ExpressAPI/src/routes/AssignmentRoutes.ts
index 951afe1c72bf4f59af1ebf37397ae6966233d0d1..583e6aac9fe552695b38bc8ad6972b4ecf28b15d 100644
--- a/ExpressAPI/src/routes/AssignmentRoutes.ts
+++ b/ExpressAPI/src/routes/AssignmentRoutes.ts
@@ -48,6 +48,14 @@ class AssignmentRoutes implements RoutesManager {
             trim    : true,
             notEmpty: true,
             custom  : DojoValidators.exerciseIdOrUrlValidator
+        },
+        commit         : {
+            trim    : true,
+            notEmpty: false
+        },
+        description    : {
+            trim    : true,
+            notEmpty: false
         }
     };
 
@@ -60,6 +68,7 @@ class AssignmentRoutes implements RoutesManager {
 
         backend.post('/assignments/:assignmentNameOrUrl/corrections', SecurityMiddleware.check(true, SecurityCheckType.ASSIGNMENT_STAFF), ParamsValidatorMiddleware.validate(this.assignmentAddCorrigeValidator), this.linkUpdateAssignmentCorrection(false).bind(this) as RequestHandler);
         backend.patch('/assignments/:assignmentNameOrUrl/corrections/:exerciseIdOrUrl', SecurityMiddleware.check(true, SecurityCheckType.ASSIGNMENT_STAFF), this.linkUpdateAssignmentCorrection(true).bind(this) as RequestHandler);
+        backend.delete('/assignments/:assignmentNameOrUrl/corrections/:exerciseIdOrUrl', SecurityMiddleware.check(true, SecurityCheckType.ASSIGNMENT_STAFF), this.unlinkAssignmentCorrection.bind(this) as RequestHandler);
     }
 
     // Get an assignment by its name or gitlab url
@@ -229,9 +238,9 @@ class AssignmentRoutes implements RoutesManager {
                 return req.session.sendResponse(res, StatusCodes.BAD_REQUEST, undefined, 'This exercise is not a correction', DojoStatusCode.EXERCISE_CORRECTION_NOT_EXIST);
             }
 
-            const lastCommit = await GitlabManager.getRepositoryLastCommit(req.boundParams.exercise!.gitlabId);
+            const commit: Gitlab.CommitSchema | undefined = req.body.commit ? await GitlabManager.getRepositoryCommit(req.boundParams.exercise!.gitlabId, req.body.commit as string) : await GitlabManager.getRepositoryLastCommit(req.boundParams.exercise!.gitlabId);
 
-            if ( lastCommit ) {
+            if ( commit ) {
                 if ( !isUpdate && SharedConfig.production ) { //Disable in dev env because gitlab dev group is private and we can't change visibility of sub projects
                     await GitlabManager.changeRepositoryVisibility(req.boundParams.exercise!.gitlabId, 'internal');
                 }
@@ -240,17 +249,45 @@ class AssignmentRoutes implements RoutesManager {
                                              where: {
                                                  id: req.boundParams.exercise!.id
                                              },
-                                             data : {
-                                                 correctionCommit: lastCommit
-                                             }
+                                             data : Object.assign({
+                                                                      correctionCommit: commit
+                                                                  }, isUpdate && req.body.description === undefined ? {} : {
+                                                 correctionDescription: req.body.description
+                                             })
                                          });
 
                 return req.session.sendResponse(res, StatusCodes.OK);
             } else {
-                return req.session.sendResponse(res, StatusCodes.INTERNAL_SERVER_ERROR, undefined, 'No last commit found');
+                return req.session.sendResponse(res, StatusCodes.NOT_FOUND, undefined, 'Commit not found');
             }
         };
     }
+
+    private async unlinkAssignmentCorrection(req: express.Request, res: express.Response) {
+        if ( req.boundParams.exercise?.assignmentName !== req.boundParams.assignment?.name ) {
+            return req.session.sendResponse(res, StatusCodes.BAD_REQUEST, undefined, 'The exercise does not belong to the assignment', DojoStatusCode.ASSIGNMENT_EXERCISE_NOT_RELATED);
+        }
+
+        if ( !req.boundParams.exercise?.isCorrection ) {
+            return req.session.sendResponse(res, StatusCodes.BAD_REQUEST, undefined, 'This exercise is not a correction', DojoStatusCode.EXERCISE_CORRECTION_NOT_EXIST);
+        }
+
+        if ( SharedConfig.production ) { //Disable in dev env because gitlab dev group is private and we can't change visibility of sub projects
+            await GitlabManager.changeRepositoryVisibility(req.boundParams.exercise.gitlabId, 'private');
+        }
+
+        await db.exercise.update({
+                                     where: {
+                                         id: req.boundParams.exercise.id
+                                     },
+                                     data : {
+                                         correctionCommit     : Prisma.DbNull,
+                                         correctionDescription: null
+                                     }
+                                 });
+
+        return req.session.sendResponse(res, StatusCodes.OK);
+    }
 }