diff --git a/test/Services/TimeBasedSchedulingService.cpp b/test/Services/TimeBasedSchedulingService.cpp
index 7d669fc3076ad3574332879bc2ad5e65591bb29d..bfa878325c513b2a28dd5f1c840cd5d414a7c7ba 100644
--- a/test/Services/TimeBasedSchedulingService.cpp
+++ b/test/Services/TimeBasedSchedulingService.cpp
@@ -120,183 +120,244 @@ TEST_CASE("TC[11,4] Activity Insertion", "[service][st11]") {
 	REQUIRE(scheduledActivities.at(1)->request == testMessage3);
 	REQUIRE(scheduledActivities.at(2)->request == testMessage2);
 	REQUIRE(scheduledActivities.at(3)->request == testMessage4);
-}
 
-TEST_CASE("TC[11,15] Time shift all scheduled activities (Positive shift)", "[service][st11]") {
-	TimeBasedSchedulingService timeService;
-	auto scheduledActivities = activityInsertion(timeService);
-	const int32_t timeShift = 6789;
+	SECTION("Error throw test") {
+		Message receivedMessage(11, 4, Message::TC, 1);
+		receivedMessage.appendUint16(1); // Total number of requests
 
-	Message receivedMessage(11, 15, Message::TC, 1);
-	receivedMessage.appendSint32(timeShift);
+		receivedMessage.appendUint32(currentTime - 15564350);
+		timeService.insertActivities(receivedMessage);
 
-	CHECK(scheduledActivities.size() == 4);
-	timeService.timeShiftAllActivities(receivedMessage);
-
-	REQUIRE(scheduledActivities.at(0)->requestReleaseTime == currentTime + 1556435 + timeShift);
-	REQUIRE(scheduledActivities.at(1)->requestReleaseTime == currentTime + 1726435 + timeShift);
-	REQUIRE(scheduledActivities.at(2)->requestReleaseTime == currentTime + 1957232 + timeShift);
-	REQUIRE(scheduledActivities.at(3)->requestReleaseTime == currentTime + 17248435 + timeShift);
+		REQUIRE(ServiceTests::thrownError(ErrorHandler::InstructionExecutionStartError));
+	}
 }
 
-TEST_CASE("TC[11,15] Time shift all scheduled activities (Negative shift)", "[service][st11]") {
+TEST_CASE("TC[11,15] Time shift all scheduled activities", "[service][st11]") {
 	TimeBasedSchedulingService timeService;
+	Message receivedMessage(11, 15, Message::TC, 1);
+
 	auto scheduledActivities = activityInsertion(timeService);
 	const int32_t timeShift = 6789;
 
-	Message receivedMessage(11, 15, Message::TC, 1);
-	receivedMessage.appendSint32(-timeShift);
-
-	CHECK(scheduledActivities.size() == 4);
-	timeService.timeShiftAllActivities(receivedMessage);
+	SECTION("Positive Shift") {
+		receivedMessage.appendSint32(-timeShift);
 
-	REQUIRE(scheduledActivities.at(0)->requestReleaseTime == currentTime + 1556435 - timeShift);
-	REQUIRE(scheduledActivities.at(1)->requestReleaseTime == currentTime + 1726435 - timeShift);
-	REQUIRE(scheduledActivities.at(2)->requestReleaseTime == currentTime + 1957232 - timeShift);
-	REQUIRE(scheduledActivities.at(3)->requestReleaseTime == currentTime + 17248435 - timeShift);
+		CHECK(scheduledActivities.size() == 4);
+		timeService.timeShiftAllActivities(receivedMessage);
 
-}
+		REQUIRE(scheduledActivities.at(0)->requestReleaseTime == currentTime + 1556435 - timeShift);
+		REQUIRE(scheduledActivities.at(1)->requestReleaseTime == currentTime + 1726435 - timeShift);
+		REQUIRE(scheduledActivities.at(2)->requestReleaseTime == currentTime + 1957232 - timeShift);
+		REQUIRE(
+			scheduledActivities.at(3)->requestReleaseTime == currentTime + 17248435 - timeShift);
+	}
 
-TEST_CASE("TC[11,7] Time shift activities by ID (Positive Shift)", "[service][st11]") {
-	TimeBasedSchedulingService timeService;
-	auto scheduledActivities = activityInsertion(timeService);
-	const int32_t timeShift = 67890000; // Relative time-shift value
+	SECTION("Negative Shift") {
+		receivedMessage.appendSint32(timeShift);
 
-	// Verify that everything is in place
-	CHECK(scheduledActivities.size() == 4);
-	scheduledActivities.at(2)->requestID.applicationID = 4; // Append a dummy application ID
+		CHECK(scheduledActivities.size() == 4);
+		timeService.timeShiftAllActivities(receivedMessage);
 
-	Message receivedMessage(11, 7, Message::TC, 1);
-	receivedMessage.appendSint32(timeShift); // Time-shift value
-	receivedMessage.appendUint16(1); // Just one instruction to time-shift an activity
-	receivedMessage.appendUint8(0); // Source ID is not implemented
-	receivedMessage.appendUint16(testMessage2.applicationId); // todo: Remove the dummy app ID
-	receivedMessage.appendUint16(0); // todo: Remove the dummy sequence count
+		REQUIRE(scheduledActivities.at(0)->requestReleaseTime == currentTime + 1556435 + timeShift);
+		REQUIRE(scheduledActivities.at(1)->requestReleaseTime == currentTime + 1726435 + timeShift);
+		REQUIRE(scheduledActivities.at(2)->requestReleaseTime == currentTime + 1957232 + timeShift);
+		REQUIRE(
+			scheduledActivities.at(3)->requestReleaseTime == currentTime + 17248435 + timeShift);
+	}
 
+	SECTION("Error throwing") {
+		receivedMessage.appendSint32(-6789000); // Provide a huge time shift to cause an error
 
-	timeService.timeShiftActivitiesByID(receivedMessage);
-	scheduledActivities = unit_test::Tester::scheduledActivities(timeService);
+		CHECK(scheduledActivities.size() == 4);
+		timeService.timeShiftAllActivities(receivedMessage);
 
-	// Make sure the new value is inserted sorted
-	REQUIRE(scheduledActivities.at(3)->requestReleaseTime == currentTime + 1957232 + timeShift);
-	REQUIRE(scheduledActivities.at(3)->request == testMessage2);
+		REQUIRE(ServiceTests::thrownError(ErrorHandler::SubServiceExecutionStartError));
+	}
 }
 
-TEST_CASE("TC[11,7] Time shift activities by ID (Negative Shift)", "[service][st11]") {
+TEST_CASE("TC[11,7] Time shift activities by ID", "[service][st11]") {
 	TimeBasedSchedulingService timeService;
-	auto scheduledActivities = activityInsertion(timeService);
-	const int32_t timeShift = 250000; // Relative time-shift value
+	Message receivedMessage(11, 7, Message::TC, 1);
 
-	// Verify that everything is in place
-	CHECK(scheduledActivities.size() == 4);
+	auto scheduledActivities = activityInsertion(timeService);
 	scheduledActivities.at(2)->requestID.applicationID = 4; // Append a dummy application ID
+	CHECK(scheduledActivities.size() == 4);
 
-	Message receivedMessage(11, 7, Message::TC, 1);
-	receivedMessage.appendSint32(-timeShift); // Time-shift value
-	receivedMessage.appendUint16(1); // Just one instruction to time-shift an activity
-	receivedMessage.appendUint8(0); // Source ID is not implemented
-	receivedMessage.appendUint16(testMessage2.applicationId); // todo: Remove the dummy app ID
-	receivedMessage.appendUint16(0); // todo: Remove the dummy sequence count
+	const int32_t timeShift = 67890000; // Relative time-shift value
 
+	SECTION("Positive Shift") {
+		receivedMessage.appendSint32(timeShift); // Time-shift value
+		receivedMessage.appendUint16(1); // Just one instruction to time-shift an activity
+		receivedMessage.appendUint8(0); // Source ID is not implemented
+		receivedMessage.appendUint16(testMessage2.applicationId); // todo: Remove the dummy app ID
+		receivedMessage.appendUint16(0); // todo: Remove the dummy sequence count
 
-	timeService.timeShiftActivitiesByID(receivedMessage);
-	scheduledActivities = unit_test::Tester::scheduledActivities(timeService);
+		timeService.timeShiftActivitiesByID(receivedMessage);
+		scheduledActivities = unit_test::Tester::scheduledActivities(timeService);
 
-	// Output should be sorted
-	REQUIRE(scheduledActivities.at(1)->requestReleaseTime == currentTime + 1957232 - timeShift);
-	REQUIRE(scheduledActivities.at(1)->request == testMessage2);
-}
+		// Make sure the new value is inserted sorted
+		REQUIRE(scheduledActivities.at(3)->requestReleaseTime == currentTime + 1957232 + timeShift);
+		REQUIRE(scheduledActivities.at(3)->request == testMessage2);
+	}
 
+	SECTION("Negative Shift") {
+		receivedMessage.appendSint32(-250000); // Time-shift value
+		receivedMessage.appendUint16(1); // Just one instruction to time-shift an activity
+		receivedMessage.appendUint8(0); // Source ID is not implemented
+		receivedMessage.appendUint16(testMessage2.applicationId); // todo: Remove the dummy app ID
+		receivedMessage.appendUint16(0); // todo: Remove the dummy sequence count
 
-TEST_CASE("TC[11,9] Detail report scheduled activities by ID", "[service][st11]") {
-	TimeBasedSchedulingService timeService;
-	auto scheduledActivities = activityInsertion(timeService);
+		timeService.timeShiftActivitiesByID(receivedMessage);
+		scheduledActivities = unit_test::Tester::scheduledActivities(timeService);
 
-	// Verify that everything is in place
-	CHECK(scheduledActivities.size() == 4);
-	scheduledActivities.at(0)->requestID.applicationID = 8; // Append a dummy application ID
-	scheduledActivities.at(2)->requestID.applicationID = 4; // Append a dummy application ID
+		// Output should be sorted
+		REQUIRE(scheduledActivities.at(1)->requestReleaseTime == currentTime + 1957232 - 250000);
+		REQUIRE(scheduledActivities.at(1)->request == testMessage2);
+	}
 
-	Message receivedMessage(11, 9, Message::TC, 1);
-	receivedMessage.appendUint16(2); // Two instructions in the request
-	receivedMessage.appendUint8(0); // Source ID is not implemented
-	receivedMessage.appendUint16(testMessage2.applicationId); // todo: Remove the dummy app ID
-	receivedMessage.appendUint16(0); // todo: Remove the dummy sequence count
+	SECTION("Error throw on wrong request ID") {
+		receivedMessage.appendSint32(-250000); // Time-shift value
+		receivedMessage.appendUint16(1); // Just one instruction to time-shift an activity
+		receivedMessage.appendUint8(0); // Dummy source ID
+		receivedMessage.appendUint16(80); // Dummy application ID to throw an error
+		receivedMessage.appendUint16(0); // Dummy sequence count
 
-	receivedMessage.appendUint8(0); // Source ID is not implemented
-	receivedMessage.appendUint16(testMessage1.applicationId); // todo: Remove the dummy app ID
-	receivedMessage.appendUint16(0); // todo: Remove the dummy sequence count
+		timeService.timeShiftActivitiesByID(receivedMessage);
+		REQUIRE(ServiceTests::thrownError(ErrorHandler::InstructionExecutionStartError));
+	}
 
-	timeService.detailReportActivitiesByID(receivedMessage);
-	REQUIRE(ServiceTests::hasOneMessage());
+	SECTION("Error throw on wrong time offset") {
+		receivedMessage.appendSint32(-6789000); // Time-shift value
+		receivedMessage.appendUint16(1); // Just one instruction to time-shift an activity
+		receivedMessage.appendUint8(0); // Source ID is not implemented
+		receivedMessage.appendUint16(testMessage2.applicationId); // todo: Remove the dummy app ID
+		receivedMessage.appendUint16(0); // todo: Remove the dummy sequence count
 
-	Message response = ServiceTests::get(0);
-	CHECK(response.serviceType == 11);
-	CHECK(response.messageType == 10);
+		timeService.timeShiftActivitiesByID(receivedMessage);
+		REQUIRE(ServiceTests::thrownError(ErrorHandler::InstructionExecutionStartError));
+	}
+}
 
-	uint16_t iterationCount = response.readUint16();
-	for (uint16_t i = 0; i < iterationCount; i++) {
-		uint32_t receivedReleaseTime = response.readUint32();
+TEST_CASE("TC[11,9] Detail report scheduled activities by ID", "[service][st11]") {
+	TimeBasedSchedulingService timeService;
+	Message receivedMessage(11, 9, Message::TC, 1);
 
-		Message receivedTCPacket;
-		uint8_t receivedDataStr[ECSS_TC_REQUEST_STRING_SIZE];
-		response.readString(receivedDataStr, ECSS_TC_REQUEST_STRING_SIZE);
-		receivedTCPacket = msgParser.parseRequestTC(receivedDataStr);
+	auto scheduledActivities = activityInsertion(timeService);
 
-		if (i == 0) {
-			REQUIRE(receivedReleaseTime == scheduledActivities.at(0)->requestReleaseTime);
-			REQUIRE(receivedTCPacket == scheduledActivities.at(0)->request);
-		} else {
-			REQUIRE(receivedReleaseTime == scheduledActivities.at(2)->requestReleaseTime);
-			REQUIRE(receivedTCPacket == scheduledActivities.at(2)->request);
+	SECTION("Detailed activity report") {
+		// Verify that everything is in place
+		CHECK(scheduledActivities.size() == 4);
+		scheduledActivities.at(0)->requestID.applicationID = 8; // Append a dummy application ID
+		scheduledActivities.at(2)->requestID.applicationID = 4; // Append a dummy application ID
+
+		receivedMessage.appendUint16(2); // Two instructions in the request
+		receivedMessage.appendUint8(0); // Source ID is not implemented
+		receivedMessage.appendUint16(testMessage2.applicationId); // todo: Remove the dummy app ID
+		receivedMessage.appendUint16(0); // todo: Remove the dummy sequence count
+
+		receivedMessage.appendUint8(0); // Source ID is not implemented
+		receivedMessage.appendUint16(testMessage1.applicationId); // todo: Remove the dummy app ID
+		receivedMessage.appendUint16(0); // todo: Remove the dummy sequence count
+
+		timeService.detailReportActivitiesByID(receivedMessage);
+		REQUIRE(ServiceTests::hasOneMessage());
+
+		Message response = ServiceTests::get(0);
+		CHECK(response.serviceType == 11);
+		CHECK(response.messageType == 10);
+
+		uint16_t iterationCount = response.readUint16();
+		CHECK(iterationCount == 2);
+		for (uint16_t i = 0; i < iterationCount; i++) {
+			uint32_t receivedReleaseTime = response.readUint32();
+
+			Message receivedTCPacket;
+			uint8_t receivedDataStr[ECSS_TC_REQUEST_STRING_SIZE];
+			response.readString(receivedDataStr, ECSS_TC_REQUEST_STRING_SIZE);
+			receivedTCPacket = msgParser.parseRequestTC(receivedDataStr);
+
+			if (i == 0) {
+				REQUIRE(receivedReleaseTime == scheduledActivities.at(0)->requestReleaseTime);
+				REQUIRE(receivedTCPacket == scheduledActivities.at(0)->request);
+			} else {
+				REQUIRE(receivedReleaseTime == scheduledActivities.at(2)->requestReleaseTime);
+				REQUIRE(receivedTCPacket == scheduledActivities.at(2)->request);
+			}
 		}
 	}
+
+	SECTION("Error throw on wrong request ID") {
+		receivedMessage.appendUint16(1); // Just one instruction to time-shift an activity
+		receivedMessage.appendUint8(0); // Dummy source ID
+		receivedMessage.appendUint16(80); // Dummy application ID to throw an error
+		receivedMessage.appendUint16(0); // Dummy sequence count
+
+		timeService.detailReportActivitiesByID(receivedMessage);
+		REQUIRE(ServiceTests::thrownError(ErrorHandler::InstructionExecutionStartError));
+	}
 }
 
 TEST_CASE("TC[11,12] Summary report scheduled activities by ID", "[service][st11]") {
 	TimeBasedSchedulingService timeService;
-	auto scheduledActivities = activityInsertion(timeService);
-
-	// Verify that everything is in place
-	CHECK(scheduledActivities.size() == 4);
-	scheduledActivities.at(0)->requestID.applicationID = 8; // Append a dummy application ID
-	scheduledActivities.at(2)->requestID.applicationID = 4; // Append a dummy application ID
-
 	Message receivedMessage(11, 12, Message::TC, 1);
-	receivedMessage.appendUint16(2); // Two instructions in the request
-	receivedMessage.appendUint8(0); // Source ID is not implemented
-	receivedMessage.appendUint16(testMessage2.applicationId); // todo: Remove the dummy app ID
-	receivedMessage.appendUint16(0); // todo: Remove the dummy sequence count
 
-	receivedMessage.appendUint8(0); // Source ID is not implemented
-	receivedMessage.appendUint16(testMessage1.applicationId); // todo: Remove the dummy app ID
-	receivedMessage.appendUint16(0); // todo: Remove the dummy sequence count
+	auto scheduledActivities = activityInsertion(timeService);
 
-	timeService.summaryReportActivitiesByID(receivedMessage);
-	REQUIRE(ServiceTests::hasOneMessage());
+	SECTION("Summary report") {
+		// Verify that everything is in place
+		CHECK(scheduledActivities.size() == 4);
+		scheduledActivities.at(0)->requestID.applicationID = 8; // Append a dummy application ID
+		scheduledActivities.at(2)->requestID.applicationID = 4; // Append a dummy application ID
+
+		receivedMessage.appendUint16(2); // Two instructions in the request
+		receivedMessage.appendUint8(0); // Source ID is not implemented
+		receivedMessage.appendUint16(testMessage2.applicationId); // todo: Remove the dummy app ID
+		receivedMessage.appendUint16(0); // todo: Remove the dummy sequence count
+
+		receivedMessage.appendUint8(0); // Source ID is not implemented
+		receivedMessage.appendUint16(testMessage1.applicationId); // todo: Remove the dummy app ID
+		receivedMessage.appendUint16(0); // todo: Remove the dummy sequence count
+
+		timeService.summaryReportActivitiesByID(receivedMessage);
+		REQUIRE(ServiceTests::hasOneMessage());
+
+		Message response = ServiceTests::get(0);
+		CHECK(response.serviceType == 11);
+		CHECK(response.messageType == 13);
+
+		uint16_t iterationCount = response.readUint16();
+		for (uint16_t i = 0; i < iterationCount; i++) {
+			uint32_t receivedReleaseTime = response.readUint32();
+			uint8_t receivedSourceID = response.readUint8();
+			uint16_t receivedApplicationID = response.readUint16();
+			uint16_t receivedSequenceCount = response.readUint16();
+
+			if (i == 0) {
+				REQUIRE(receivedReleaseTime == scheduledActivities.at(0)->requestReleaseTime);
+				REQUIRE(receivedSourceID == scheduledActivities.at(0)->requestID.sourceID);
+				REQUIRE(
+					receivedApplicationID == scheduledActivities.at(0)->requestID.applicationID);
+				REQUIRE(
+					receivedSequenceCount == scheduledActivities.at(0)->requestID.sequenceCount);
+			} else {
+				REQUIRE(receivedReleaseTime == scheduledActivities.at(2)->requestReleaseTime);
+				REQUIRE(receivedSourceID == scheduledActivities.at(2)->requestID.sourceID);
+				REQUIRE(
+					receivedApplicationID == scheduledActivities.at(2)->requestID.applicationID);
+				REQUIRE(
+					receivedSequenceCount == scheduledActivities.at(2)->requestID.sequenceCount);
+			}
+		}
+	}
 
-	Message response = ServiceTests::get(0);
-	CHECK(response.serviceType == 11);
-	CHECK(response.messageType == 13);
+	SECTION("Error throw on wrong request ID") {
+		receivedMessage.appendUint16(1); // Just one instruction to time-shift an activity
+		receivedMessage.appendUint8(0); // Dummy source ID
+		receivedMessage.appendUint16(80); // Dummy application ID to throw an error
+		receivedMessage.appendUint16(0); // Dummy sequence count
 
-	uint16_t iterationCount = response.readUint16();
-	for (uint16_t i = 0; i < iterationCount; i++) {
-		uint32_t receivedReleaseTime = response.readUint32();
-		uint8_t receivedSourceID = response.readUint8();
-		uint16_t receivedApplicationID = response.readUint16();
-		uint16_t receivedSequenceCount = response.readUint16();
-
-		if (i == 0) {
-			REQUIRE(receivedReleaseTime == scheduledActivities.at(0)->requestReleaseTime);
-			REQUIRE(receivedSourceID == scheduledActivities.at(0)->requestID.sourceID);
-			REQUIRE(receivedApplicationID == scheduledActivities.at(0)->requestID.applicationID);
-			REQUIRE(receivedSequenceCount == scheduledActivities.at(0)->requestID.sequenceCount);
-		} else {
-			REQUIRE(receivedReleaseTime == scheduledActivities.at(2)->requestReleaseTime);
-			REQUIRE(receivedSourceID == scheduledActivities.at(2)->requestID.sourceID);
-			REQUIRE(receivedApplicationID == scheduledActivities.at(2)->requestID.applicationID);
-			REQUIRE(receivedSequenceCount == scheduledActivities.at(2)->requestID.sequenceCount);
-		}
+		timeService.summaryReportActivitiesByID(receivedMessage);
+		REQUIRE(ServiceTests::thrownError(ErrorHandler::InstructionExecutionStartError));
 	}
 }
 
@@ -330,25 +391,38 @@ TEST_CASE("TC[11,16] Detail report all scheduled activities", "[service][st11]")
 
 TEST_CASE("TC[11,5] Activity deletion by ID", "[service][st11]") {
 	TimeBasedSchedulingService timeService;
+	Message receivedMessage(11, 5, Message::TC, 1);
+
 	auto scheduledActivities = activityInsertion(timeService);
 
-	// Verify that everything is in place
-	CHECK(scheduledActivities.size() == 4);
-	scheduledActivities.at(2)->requestID.applicationID = 4; // Append a dummy application ID
+	SECTION("Activity deletion") {
+		// Verify that everything is in place
+		CHECK(scheduledActivities.size() == 4);
+		scheduledActivities.at(2)->requestID.applicationID = 4; // Append a dummy application ID
 
-	Message receivedMessage(11, 5, Message::TC, 1);
-	receivedMessage.appendUint16(1); // Just one instruction to delete an activity
-	receivedMessage.appendUint8(0); // Source ID is not implemented
-	receivedMessage.appendUint16(testMessage2.applicationId); // todo: Remove the dummy app ID
-	receivedMessage.appendUint16(0); // todo: Remove the dummy sequence count
+		receivedMessage.appendUint16(1); // Just one instruction to delete an activity
+		receivedMessage.appendUint8(0); // Source ID is not implemented
+		receivedMessage.appendUint16(testMessage2.applicationId); // todo: Remove the dummy app ID
+		receivedMessage.appendUint16(0); // todo: Remove the dummy sequence count
 
-	CHECK(scheduledActivities.size() == 4);
-	timeService.deleteActivitiesByID(receivedMessage);
-	scheduledActivities = unit_test::Tester::scheduledActivities(timeService); // Get the new list
+		CHECK(scheduledActivities.size() == 4);
+		timeService.deleteActivitiesByID(receivedMessage);
+		scheduledActivities = unit_test::Tester::scheduledActivities(timeService);
+
+		REQUIRE(scheduledActivities.size() == 3);
+		REQUIRE(scheduledActivities.at(2)->requestReleaseTime == currentTime + 17248435);
+		REQUIRE(scheduledActivities.at(2)->request == testMessage4);
+	}
 
-	REQUIRE(scheduledActivities.size() == 3);
-	REQUIRE(scheduledActivities.at(2)->requestReleaseTime == currentTime + 17248435);
-	REQUIRE(scheduledActivities.at(2)->request == testMessage4);
+	SECTION("Error throw on wrong request ID") {
+		receivedMessage.appendUint16(1); // Just one instruction to time-shift an activity
+		receivedMessage.appendUint8(0); // Dummy source ID
+		receivedMessage.appendUint16(80); // Dummy application ID to throw an error
+		receivedMessage.appendUint16(0); // Dummy sequence count
+
+		timeService.deleteActivitiesByID(receivedMessage);
+		REQUIRE(ServiceTests::thrownError(ErrorHandler::InstructionExecutionStartError));
+	}
 }
 
 TEST_CASE("TC[11,3] Reset schedule", "[service][st11]") {