diff --git a/inc/Services/TimeBasedSchedulingService.hpp b/inc/Services/TimeBasedSchedulingService.hpp
index e11a306dc4fed30abc620fdedf4f793213eee323..f67904e98683eea2891fd18fe43e3120a1350173 100644
--- a/inc/Services/TimeBasedSchedulingService.hpp
+++ b/inc/Services/TimeBasedSchedulingService.hpp
@@ -103,6 +103,14 @@ public:
 	 */
 	void detailReportAllActivities(Message &request);
 
+	/**
+	 * TC[11,9] detail-report activities identified by request identifier
+	 *
+	 * @details Send a detailed report about the status of the requested activities
+	 * @param request Provide the received message as a parameter
+	 */
+	void detailReporActivitiesByID(Message &request);
+
 	/**
 	 * TC[11,5] delete time-based scheduled activities identified by a request identifier
 	 *
diff --git a/src/Services/TimeBasedSchedulingService.cpp b/src/Services/TimeBasedSchedulingService.cpp
index 85b6f816702da22c697b7245d356472db00af749..3dae84159c73c2ed5d3e9566321ee2c4c552bfc9 100644
--- a/src/Services/TimeBasedSchedulingService.cpp
+++ b/src/Services/TimeBasedSchedulingService.cpp
@@ -204,7 +204,7 @@ void TimeBasedSchedulingService::detailReportAllActivities(Message &request) {
 		// Create the report message object of telemetry message subtype 10 for each activity
 		Message report = createTM(10);
 		// todo: append sub-schedule and group ID if they are defined
-		
+
 		report.appendUint32(activity.requestReleaseTime); // todo: Replace with the time parser
 		report.appendString(msgParser.convertTCToStr(activity.request));
 
@@ -214,4 +214,40 @@ void TimeBasedSchedulingService::detailReportAllActivities(Message &request) {
 
 }
 
+void TimeBasedSchedulingService::detailReporActivitiesByID(Message &request) {
+
+	// Check if the correct packet is being processed
+	assert(request.serviceType == 11);
+	assert(request.messageType == 9);
+
+	uint16_t iterationCount = request.readUint16(); // Get the iteration count, (N)
+	for (std::size_t i = 0; i < iterationCount; i++) {
+		// Parse the request ID
+		RequestID receivedRequestID; // Save the received request ID
+		receivedRequestID.sourceID = request.readUint8(); // Get the source ID
+		receivedRequestID.applicationID = request.readUint16(); // Get the application ID
+		receivedRequestID.sequenceCount = request.readUint16(); // Get the sequence count
+
+		// Try to find the activity with the requested request ID
+		const auto requestIDMatch = etl::find_if_not(scheduledActivities.begin(),
+		                                             scheduledActivities.end(), [&receivedRequestID]
+			                                             (ScheduledActivity const &currentElement) {
+				return receivedRequestID != currentElement
+					.requestID;
+			});
+
+		if (requestIDMatch != scheduledActivities.end()) {
+			// Create the report message object of telemetry message subtype 10 for each activity
+			Message report = createTM(10);
+			// todo: append sub-schedule and group ID if they are defined
+
+			report.appendUint32(requestIDMatch->requestReleaseTime); // todo: Time parser here
+			report.appendString(msgParser.convertTCToStr(requestIDMatch->request));
 
+			storeMessage(report); // Save the report
+			request.resetRead(); // todo: define if this statement is required
+		} else {
+			// todo: Generate failed start of execution for the failed instruction
+		}
+	}
+}