diff --git a/backend/src/controllers/study-plan.js b/backend/src/controllers/study-plan.js
index 50d1187e73e634f2b1ea480cbe7ea82efe53453e..9a7d7148d4b348beae6b6b96d636f4b46c1884b4 100644
--- a/backend/src/controllers/study-plan.js
+++ b/backend/src/controllers/study-plan.js
@@ -8,8 +8,6 @@ const {
 
 const {
   createStudyPlan,
-  countTotalCredits,
-  checkClassAvailability,
   getStudyPlan,
   updateStudyPlan,
 } = require('../util/db/study-plan');
@@ -60,15 +58,10 @@ exports.createStudyPlanData = async (req, res) => {
       notes,
     };
 
-    let creditsTotal = 0;
     if (studyPlanCourses) {
-      await checkClassAvailability(semester, startYear, studyPlanCourses);
-      creditsTotal = await countTotalCredits(studyPlanCourses);
       newStudyPlan['studyPlanCourses'] = studyPlanCourses;
     }
 
-    newStudyPlan['creditsTotal'] = creditsTotal;
-
     const studyPlans = await createStudyPlan(newStudyPlan);
     res.json(studyPlans);
   } catch (error) {
diff --git a/backend/src/hooks/study-plan.js b/backend/src/hooks/study-plan.js
index 0baefb5c141372ca1e1b8bc079ed254320346573..ec9f38d467baaaf81bd296789260fe1d66889b47 100644
--- a/backend/src/hooks/study-plan.js
+++ b/backend/src/hooks/study-plan.js
@@ -5,6 +5,7 @@ const { StudyPlanStatusEnum } = require('../enums/index');
 const {
   calculateTotalCredits,
   deleteCurrentMeetingAttendances,
+  checkClassAvailability,
 } = require('../util/hook');
 const { generateCourseClassMeetingAttendances } = require('../util/common');
 
@@ -20,6 +21,10 @@ StudyPlan.beforeUpdate(async (studyPlan) => {
   );
 });
 
+StudyPlan.afterValidate(async (studyPlan) => {
+  await checkClassAvailability(studyPlan.semester, studyPlan.startYear, studyPlan.studyPlanCourses);
+});
+
 StudyPlan.afterCreate(async (studyPlan) => {
   if (studyPlan.status === StudyPlanStatusEnum.FINAL) {
     await generateCourseClassMeetingAttendances(studyPlan);
diff --git a/backend/src/middleware/study-plan.js b/backend/src/middleware/study-plan.js
index 07427e6677b366eb054256a4cc17f061dfa0e333..a2e6962d34187edcaa7dd617b1446b99c833ee51 100644
--- a/backend/src/middleware/study-plan.js
+++ b/backend/src/middleware/study-plan.js
@@ -10,6 +10,9 @@ const {
   RequiredParameterUndefinedError,
   NotExistError,
 } = require('../util/error');
+const {
+  checkClassAvailability
+} = require('../util/hook');
 
 const getStudyPlanMiddleware = async (req, res, next) => {
   const {
@@ -94,6 +97,7 @@ const updateStudyPlanMiddleware = async (req, res, next) => {
     }
 
     if (studyPlanCourses) {
+      await checkClassAvailability(studyPlan.semester, studyPlan.startYear, studyPlanCourses);
       changeset.studyPlanCourses = studyPlanCourses;
     }
 
@@ -104,7 +108,10 @@ const updateStudyPlanMiddleware = async (req, res, next) => {
   } catch (error) {
     if (error instanceof NotExistError) {
       handleRequestWithResourceItemNotFound(res, error);
-    } else if (error instanceof RequiredParameterUndefinedError) {
+    } else if (
+      error instanceof RequiredParameterUndefinedError ||
+      error instanceof ClassUnavailableError
+    ) {
       handleRequestWithInvalidRequestBody(res, error);
     } else {
       handleRequestWithInternalServerError(res, error);
diff --git a/backend/src/test/studyplan.controller.test.js b/backend/src/test/studyplan.controller.test.js
index 06d5cfc8863ebca9573c29e31f5d869726260274..ea5c6980db3bef717733f386a99ca77d0eca957b 100644
--- a/backend/src/test/studyplan.controller.test.js
+++ b/backend/src/test/studyplan.controller.test.js
@@ -50,6 +50,7 @@ const SEMESTER_UNDEFINED_ERROR = 'Undefined semester';
 
 describe('Study Plan Test', () => {
   let availableCourseClass,
+    availableCourseClassEven,
     unavailableCourseClass,
     student,
     studyPlan,
@@ -90,6 +91,14 @@ describe('Study Plan Test', () => {
       lecturerId: lecturer.id,
     });
 
+    availableCourseClassEven = await CourseClass.create({
+      startYear: START_YEAR,
+      status: CourseClassStatusEnum.OPEN,
+      semester: SemesterEnum.EVEN,
+      courseId: course.id,
+      lecturerId: lecturer.id,
+    });
+
     unavailableCourseClass = await CourseClass.create({
       startYear: START_YEAR,
       status: CourseClassStatusEnum.CLOSED,
@@ -107,7 +116,7 @@ describe('Study Plan Test', () => {
 
     studyPlanCourse = await StudyPlanCourse.create({
       studyPlanId: studyPlan.id,
-      courseClassId: availableCourseClass.id,
+      courseClassId: availableCourseClassEven.id,
     });
   });
 
diff --git a/backend/src/util/db/study-plan.js b/backend/src/util/db/study-plan.js
index 3999622a52fa2311a73832acd3a15d01cf44a5f1..ad671bcc79f01af118c118105ae46e1684bb6d47 100644
--- a/backend/src/util/db/study-plan.js
+++ b/backend/src/util/db/study-plan.js
@@ -6,11 +6,8 @@ const {
   CourseClass,
 } = require('../../models/index');
 
-const { CourseClassStatusEnum } = require('../../enums/index');
-
 const {
   NotExistError,
-  ClassUnavailableError,
   StudyPlanExistError,
 } = require('../error');
 
@@ -59,23 +56,6 @@ const countTotalCredits = async (courses) => {
   return total;
 };
 
-const checkClassAvailability = async (semester, startYear, courses) => {
-  for (const studyPlanCourse of courses) {
-    const courseClass = await CourseClass.findOne({
-      where: { id: studyPlanCourse.courseClassId },
-    });
-
-    if (!courseClass) throw new ClassUnavailableError();
-
-    if (
-      semester !== courseClass.semester ||
-      startYear !== courseClass.startYear ||
-      courseClass.status === CourseClassStatusEnum.CLOSED
-    )
-      throw new ClassUnavailableError();
-  }
-};
-
 const updateStudyPlan = async (studyPlan, changeset) => {
   const { studyPlanCourses } = changeset;
 
@@ -136,7 +116,6 @@ module.exports = {
   getStudyPlan,
   createStudyPlan,
   countTotalCredits,
-  checkClassAvailability,
   updateStudyPlan,
   getStudyPlanCourse,
   updateStudyPlanCourse,
diff --git a/backend/src/util/hook.js b/backend/src/util/hook.js
index 9660ce13ef3de5d339ada1b46dae603080a8c809..b46aaeb0cd56b5eeb80fe13b5251986290d1a5d1 100644
--- a/backend/src/util/hook.js
+++ b/backend/src/util/hook.js
@@ -8,6 +8,12 @@ const {
   CourseClassMeetingAttendance,
 } = require('../models/index');
 
+const { CourseClassStatusEnum } = require('../enums/index');
+
+const {
+  ClassUnavailableError,
+} = require('./error');
+
 const calculateTotalCredits = async (studyPlanCourses) => {
   let totalCredits = 0;
 
@@ -59,8 +65,28 @@ const deleteCurrentMeetingAttendances = async (studyPlan) => {
   }
 };
 
+const checkClassAvailability = async (semester, startYear, courses) => {
+  if (courses) {
+    for (const studyPlanCourse of courses) {
+      const courseClass = await CourseClass.findOne({
+        where: { id: studyPlanCourse.courseClassId },
+      });
+
+      if (!courseClass) throw new ClassUnavailableError();
+
+      if (
+        semester !== courseClass.semester ||
+        startYear !== courseClass.startYear ||
+        courseClass.status === CourseClassStatusEnum.CLOSED
+      )
+        throw new ClassUnavailableError();
+    }
+  }
+};
+
 module.exports = {
   calculateTotalCredits,
   deleteCurrentMeetings,
   deleteCurrentMeetingAttendances,
+  checkClassAvailability
 };