diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/controller/planning/PlanningController.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/controller/planning/PlanningController.java
index 79cad33..6823d70 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/controller/planning/PlanningController.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/controller/planning/PlanningController.java
@@ -343,7 +343,7 @@
 		validTo = DateHelper.getEndOfDay(validTo);
 		stbyBody.setValidTo(validTo);
 
-		stbyBody = this.calculateHoliday(group, date, stbyBody);
+		stbyBody = this.calculateHoliday(group, date, stbyBody, false);
 
 		lsStandbyScheduleBodies.add(stbyBody);
 		if (loopPos + 1 == loopLength) {
@@ -356,7 +356,7 @@
 			stbyBody2.setValidFrom(validFrom);
 			validTo = DateHelper.getDateWithTime(nextDay, duration.getValidTo());
 			stbyBody2.setValidTo(validTo);
-			this.calculateHoliday(group, nextDay, stbyBody2);
+			this.calculateHoliday(group, nextDay, stbyBody2, false);
 			lsStandbyScheduleBodies.add(stbyBody2);
 		}
 
@@ -372,14 +372,21 @@
 	 * @param stbyBody
 	 * @return
 	 */
-	public StandbyScheduleBody calculateHoliday(StandbyGroup group, Date date, StandbyScheduleBody stbyBody) {
+	public StandbyScheduleBody calculateHoliday(StandbyGroup group, Date date, StandbyScheduleBody stbyBody,
+			boolean isSingleDay) {
 		if (isHoliday(date, group)) {
 			if (group.getExtendStandbyTime()) {
 				// if extend of standby time is needed
 				stbyBody = this.calculateHolidayExtend(group, date, stbyBody);
+				if (isSingleDay) { // additional calculation if no day overlapping time slot
+					stbyBody = this.calculateHolidayPreDraw(group, date, stbyBody);
+				}
 			} else {
 				// is pre-draw of standby time needed
 				stbyBody = this.calculateHolidayPreDraw(group, date, stbyBody);
+				if (isSingleDay) { // additional calculation if no day overlapping time slot
+					stbyBody = this.calculateHolidayExtend(group, date, stbyBody);
+				}
 			}
 		}
 		return stbyBody;
@@ -463,7 +470,7 @@
 			// no last duration for the day has been found. Therefore the start of day has
 			// been used for current entry
 			if (DateHelper.isDateAfter(DateHelper.getEndOfDay(date), stbyBody.getValidTo())) {
-				stbyBody.setValidTo(DateHelper.getDateWithTime(date, DateHelper.getEndOfDay(date)));
+				stbyBody.setValidTo(DateHelper.getEndOfDay(date));
 				stbyBody.setModifiedCause(TXT_AUTOMATIC_PLANNING_HOLIDAY);
 				this.createMsgExtendHoliday(stbyBody, date, true);
 			}
@@ -471,7 +478,7 @@
 			// no last duration for the day has been found. Therefore the start of day has
 			// been used for current entry
 			if (DateHelper.isDateAfter(DateHelper.getEndOfDay(date), stbyBody.getValidTo())) {
-				stbyBody.setValidTo(DateHelper.getDateWithTime(date, DateHelper.getEndOfDay(date)));
+				stbyBody.setValidTo(DateHelper.getEndOfDay(date));
 				stbyBody.setModifiedCause(TXT_AUTOMATIC_PLANNING_HOLIDAY);
 				this.createMsgExtendHoliday(stbyBody, date, true);
 			}
@@ -509,8 +516,8 @@
 							lsUserInGroup.get(currentPosition).getUser(), fittingDuration, TXT_AUTOMATIC_PLANNING);
 					standbyScheduleBodyRepository.save(stbyBody);
 					// calculate if holiday
-					stbyBody = this.calculateHoliday(group, currentDate, stbyBody);
-					// because o
+					stbyBody = this.calculateHoliday(group, currentDate, stbyBody, true);
+
 					createMsgSavingBody(stbyBody);
 				} else {
 					resultObj = this.calculateMultiScheduleBodyEntries(lsUserInGroup, currentDate, lastDate,
diff --git a/oKBereitschaftsplanungBackend/src/test/java/org/eclipse/openk/sp/controller/planning/PlanningControllerTest.java b/oKBereitschaftsplanungBackend/src/test/java/org/eclipse/openk/sp/controller/planning/PlanningControllerTest.java
index 8067739..de5226f 100644
--- a/oKBereitschaftsplanungBackend/src/test/java/org/eclipse/openk/sp/controller/planning/PlanningControllerTest.java
+++ b/oKBereitschaftsplanungBackend/src/test/java/org/eclipse/openk/sp/controller/planning/PlanningControllerTest.java
@@ -1054,20 +1054,20 @@
 
 			// test success 01 - holiday extend
 			group.setExtendStandbyTime(true);
-			StandbyScheduleBody result = planningController.calculateHoliday(group, date, stbyBody);
+			StandbyScheduleBody result = planningController.calculateHoliday(group, date, stbyBody, false);
 			assertNotNull(result);
 			assertTrue(result.getId() == 1);
 
 			// test success 02 - holiday pre draw
 			group.setExtendStandbyTime(false);
-			result = planningController.calculateHoliday(group, date, stbyBody);
+			result = planningController.calculateHoliday(group, date, stbyBody, false);
 			assertTrue(result.getId() == 2);
 			assertNotNull(result);
 
 			// test success 03 - no holiday
 			Mockito.doReturn(false).when(planningController).isHoliday(Mockito.any(Date.class),
 					Mockito.any(StandbyGroup.class));
-			result = planningController.calculateHoliday(group, date, stbyBody);
+			result = planningController.calculateHoliday(group, date, stbyBody, false);
 			assertNotNull(result);
 
 		} catch (Exception e) {
