diff --git a/.gitmodules b/.gitmodules
index ebb319f25194b99f4bf61ba4c2415525d7a86ec0..c30fec28aea7f8a5584f89122ff9fc8a58a6863a 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,12 +1,12 @@
 [submodule "lib/Catch2"]
-    path = lib/Catch2
-    url = https://github.com/catchorg/Catch2.git
+	path = lib/Catch2
+	url = https://github.com/catchorg/Catch2.git
 [submodule "lib/etl"]
-    path = lib/etl
-    url = https://github.com/ETLCPP/etl.git
+	path = lib/etl
+	url = https://github.com/ETLCPP/etl.git
 [submodule "ci/page_style/doxygen_dark_theme"]
-    path = ci/page_style/doxygen_dark_theme
-    url = https://github.com/MaJerle/doxygen_dark_theme.git
+	path = ci/page_style/doxygen_dark_theme
+	url = https://github.com/MaJerle/doxygen_dark_theme.git
 [submodule "lib/logger"]
-    path = lib/logger
-    url = https://gitlab.com/acubesat/obc/logger.git
+	path = lib/logger
+	url = https://gitlab.com/acubesat/obc/logger.git
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 24ae6a8fd012616ff86b4a546faef0c52dd084a2..3e5c2dee5446dfbb812365dd96086ae1574fbfd2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -45,9 +45,7 @@ add_library(common OBJECT
         src/Services/ParameterStatisticsService.cpp
         src/Services/OnBoardMonitoringService.cpp
         src/Helpers/Statistic.cpp
-        src/Services/RealTimeForwardingControlService.cpp
         src/Helpers/PMONBase.cpp
-        src/Helpers/AllMessageTypes.cpp
         )
 
 # Specify the .cpp files for the executables
diff --git a/inc/ECSS_Definitions.hpp b/inc/ECSS_Definitions.hpp
index 24c490d77bb42b615960788e50d9c0ad8f4d22c8..01fc74b1db03fab7a40ea7d22c3a58d5c46a4429 100644
--- a/inc/ECSS_Definitions.hpp
+++ b/inc/ECSS_Definitions.hpp
@@ -183,42 +183,6 @@ inline const uint16_t ECSSPacketStoreIdSize = 15;
  */
 inline const uint8_t ECSSMaxHousekeepingStructures = 10;
 
-/**
- * The max number of controlled application processes
- * @see RealTimeForwardingControlService
- */
-inline const uint8_t ECSSMaxControlledApplicationProcesses = 5;
-
-/**
- * The max number of report type blocking definitions per service type definition in the application process
- * configuration
- * @see RealTimeForwardingControlService
- * todo: must change when a service with more report types is implemented.
- */
-inline const uint8_t ECSSMaxReportTypeDefinitions = 20;
-
-/**
- * The max number of service type definitions per application process type definition in the application process
- * configuration
- * @see RealTimeForwardingControlService
- * todo: must change when all 15 services are implemented.
- */
-inline const uint8_t ECSSMaxServiceTypeDefinitions = 10;
-
-/**
- * The number of possible combinations between application processes and service types, i.e. the number of all
- * possible (applicationID, serviceType) pairs.
- */
-inline const uint8_t ECSSMaxApplicationsServicesCombinations = ECSSMaxControlledApplicationProcesses *
-                                                               ECSSMaxServiceTypeDefinitions;
-
-/**
- * The max number of event definition IDs per event report blocking type definition in the event report blocking
- * configuration
- * @see RealTimeForwardingControlService
- */
-inline const uint8_t ECSSMaxEventDefinitionIDs = 15;
-
 /**
  * Limits noting the minimum and maximum valid Virtual Channels used by the Storage and Retrieval subservice
  */
@@ -232,5 +196,6 @@ inline struct {
  */
 inline const uint8_t ECSSMaxMonitoringDefinitions = 4;
 
+
 /** @} */
 #endif // ECSS_SERVICES_ECSS_DEFINITIONS_H
diff --git a/inc/ErrorHandler.hpp b/inc/ErrorHandler.hpp
index 351a75caba2833cef379c3d5af9549de4022572c..bffa26ddb99f9bfc607acf557c2f111329a00a5f 100644
--- a/inc/ErrorHandler.hpp
+++ b/inc/ErrorHandler.hpp
@@ -1,8 +1,8 @@
 #ifndef PROJECT_ERRORHANDLER_HPP
 #define PROJECT_ERRORHANDLER_HPP
 
-#include <stdint.h> // for the uint_8t stepID
 #include <type_traits>
+#include <stdint.h> // for the uint_8t stepID
 
 // Forward declaration of the class, since its header file depends on the ErrorHandler
 class Message;
@@ -323,27 +323,7 @@ public:
 		/**
 		 * Request to report a non existent parameter monitoring definition.
 		 */
-		ReportParameterNotInTheParameterMonitoringList = 46,
-		/**
-		 * Attempt to add a new service type, when the addition of all service types is already enabled in the
-		 * Application Process configuration (ST[14])
-		 */
-		AllServiceTypesAlreadyAllowed = 47,
-		/**
-		 * Attempt to add a new report type, when the max number of reports types allowed per service type
-		 * definition in the Application Process configuration is already reached (ST[14])
-		 */
-		MaxReportTypesReached = 48,
-		/**
-		 * Attempt to add a new service type, when the max number of service types allowed per application process
-		 * definition in the Application Process configuration is already reached (ST[14])
-		 */
-		MaxServiceTypesReached = 49,
-		/**
-		 * Attempt to add a report/event definition/housekeeping report type, when the specified application process
-		 * ID is not controlled by the Service (ST[14])
-		 */
-		NotControlledApplication = 50,
+		ReportParameterNotInTheParameterMonitoringList = 46
 	};
 
 	/**
diff --git a/inc/Helpers/AllMessageTypes.hpp b/inc/Helpers/AllMessageTypes.hpp
deleted file mode 100644
index fb5c2c488647f0b54fa783dd09c72eff28801092..0000000000000000000000000000000000000000
--- a/inc/Helpers/AllMessageTypes.hpp
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef ECSS_SERVICES_ALLMESSAGETYPES_HPP
-#define ECSS_SERVICES_ALLMESSAGETYPES_HPP
-
-#include "ECSS_Definitions.hpp"
-#include <etl/map.h>
-#include <etl/vector.h>
-
-/**
- * Namespace containing all the message types for every service type.
- */
-namespace AllMessageTypes {
-	/**
-	 * Map containing all the message types, per service. The key is the ServiceType and the value,
-	 * an etl vector containing the message types.
-	 */
-	extern etl::map<uint8_t, etl::vector<uint8_t, ECSSMaxReportTypeDefinitions>, ECSSMaxServiceTypeDefinitions> messagesOfService;
-
-} // namespace AllMessageTypes
-
-#endif
diff --git a/inc/Helpers/ForwardControlConfiguration.hpp b/inc/Helpers/ForwardControlConfiguration.hpp
deleted file mode 100644
index da573dd1ff4979caaa4ed8953fb88874ee3a1e35..0000000000000000000000000000000000000000
--- a/inc/Helpers/ForwardControlConfiguration.hpp
+++ /dev/null
@@ -1,47 +0,0 @@
-#ifndef ECSS_SERVICES_FORWARDCONTROLCONFIGURATION_HPP
-#define ECSS_SERVICES_FORWARDCONTROLCONFIGURATION_HPP
-
-#include "ECSS_Definitions.hpp"
-#include "ErrorHandler.hpp"
-#include "Helpers/Parameter.hpp"
-#include "etl/map.h"
-#include "etl/vector.h"
-
-/**
- * The Application Process configuration. It's basically a map, storing a vector of report type definitions for each
- * pair of (applicationID, serviceType). It contains definitions, which indicate whether a telemetry message, produced
- * by a service, inside an application process (subsystem), should be forwarded to the ground station.
- */
-class ApplicationProcessConfiguration {
-public:
-	/**
-	 * Vector containing the Report Type definitions. Each definition has its unique name of type uint8. For
-	 * example, a Report Type definition could be 'ReportHousekeepingStructures'.
-	 */
-	typedef etl::vector<uint8_t, ECSSMaxReportTypeDefinitions> ReportTypeDefinitions;
-
-	/**
-	 * This is the key for the application process configuration map. It contains a pair with the applicationID and
-	 * the serviceType.
-	 */
-	typedef std::pair<uint8_t, uint8_t> AppServiceKey;
-
-	/**
-	 * Map containing the report type definitions. Each application process has its own ID. The combination of the
-	 * application ID and the service type is used as a key to provide access to the list of report type definitions.
-	 *
-	 * @note
-	 * The report type definitions are basically the message types of each service. For example a message type for the
-	 * 'ParameterStatisticsService' (ST04) is 'ParameterStatisticsService::MessageType::ParameterStatisticsReport'. The
-	 * Real Time Forwarding Control Service (ST14) uses this map as a lookup table, to identify whether a requested
-	 * triplet (app->service->message type) is allowed to be forwarded to the ground station via the corresponding virtual
-	 * channel. The requested message type is only forwarded, if the requested application process ID and service type
-	 * already exist in the map, and the requested report type is located in the vector of report types, which corresponds
-	 * to the appID and service type.
-	 */
-	etl::map<AppServiceKey, ReportTypeDefinitions, ECSSMaxApplicationsServicesCombinations> definitions;
-
-	ApplicationProcessConfiguration() = default;
-};
-
-#endif
diff --git a/inc/Platform/x86/ECSS_Configuration.hpp b/inc/Platform/x86/ECSS_Configuration.hpp
index 6dbedb3a135a1eba0f72b7d4f6c2e30c0569506f..3b27fecf53cd2ad67e162144c2f9f1c5d6bd3774 100644
--- a/inc/Platform/x86/ECSS_Configuration.hpp
+++ b/inc/Platform/x86/ECSS_Configuration.hpp
@@ -18,22 +18,24 @@
  * @{
  */
 
-#define SERVICE_ALL                       ///< Enables compilation of all the ECSS services
-#define SERVICE_EVENTACTION               ///<  Compile ST[19] event-action
-#define SERVICE_EVENTREPORT               ///<  Compile ST[05] event reporting
-#define SERVICE_FUNCTION                  ///<  Compile ST[08] function management
-#define SERVICE_HOUSEKEEPING              ///<  Compile ST[03] housekeeping
-#define SERVICE_LARGEPACKET               ///<  Compile ST[13] large packet transfer
-#define SERVICE_MEMORY                    ///<  Compile ST[06] memory management
-#define SERVICE_ONBOARDMONITORING         ///<  Compile ST[12] on-board monitoring
-#define SERVICE_PARAMETER                 ///<  Compile ST[20] parameter management
-#define SERVICE_PARAMETERSTATISTICS       ///<  Compile ST[04] parameter statistics
-#define SERVICE_REALTIMEFORWARDINGCONTROL ///<  Compile ST[14] real time forwarding control
-#define SERVICE_REQUESTVERIFICATION       ///<  Compile ST[01] request verification
-#define SERVICE_STORAGEANDRETRIEVAL       ///<  Compile ST[15] storage-and-retrieval of tm packets
-#define SERVICE_TEST                      ///<  Compile ST[17] test
-#define SERVICE_TIME                      ///<  Compile ST[09] time management
-#define SERVICE_TIMESCHEDULING            ///<  Compile ST[11] time-based scheduling
+#define SERVICE_ALL ///< Enables compilation of all the ECSS services
+
+#ifdef SERVICE_ALL
+#define SERVICE_EVENTACTION ///<  Compile ST[19] event-action
+#define SERVICE_EVENTREPORT ///<  Compile ST[05] event reporting
+#define SERVICE_FUNCTION ///<  Compile ST[08] function management
+#define SERVICE_HOUSEKEEPING ///<  Compile ST[03] housekeeping
+#define SERVICE_LARGEPACKET ///<  Compile ST[13] large packet transfer
+#define SERVICE_MEMORY ///<  Compile ST[06] memory management
+#define SERVICE_ONBOARDMONITORING ///<  Compile ST[12] on-board monitoring
+#define SERVICE_PARAMETER ///<  Compile ST[20] parameter management
+#define SERVICE_PARAMETERSTATISTICS ///<  Compile ST[04] parameter statistics
+#define SERVICE_REQUESTVERIFICATION ///<  Compile ST[01] request verification
+#define SERVICE_STORAGEANDRETRIEVAL ///<  Compile ST[15] storage-and-retrieval of tm packets
+#define SERVICE_TEST                ///<  Compile ST[17] test
+#define SERVICE_TIME                ///<  Compile ST[09] time management
+#define SERVICE_TIMESCHEDULING      ///<  Compile ST[11] time-based scheduling
+#endif
 /** @} */
 
 #endif // ECSS_SERVICES_ECSS_CONFIGURATION_HPP
diff --git a/inc/Platform/x86/Parameters/PlatformParameters.hpp b/inc/Platform/x86/Parameters/PlatformParameters.hpp
index 3977b370ca020248a7216533768c747c8d9a4488..a1332949b970ef685be69101461a8f181afc7be6 100644
--- a/inc/Platform/x86/Parameters/PlatformParameters.hpp
+++ b/inc/Platform/x86/Parameters/PlatformParameters.hpp
@@ -21,4 +21,4 @@ namespace PlatformParameters {
 	inline Parameter<uint32_t> parameter3(10);
 }
 
-#endif
+#endif
\ No newline at end of file
diff --git a/inc/ServicePool.hpp b/inc/ServicePool.hpp
index 47ff8595a6c909500d7aa9491f304054845a6d63..9dbb533a2640a1d96abed2543d33129edf5b5314 100644
--- a/inc/ServicePool.hpp
+++ b/inc/ServicePool.hpp
@@ -14,7 +14,6 @@
 #include "Services/StorageAndRetrievalService.hpp"
 #include "Services/HousekeepingService.hpp"
 #include "Services/ParameterStatisticsService.hpp"
-#include "Services/RealTimeForwardingControlService.hpp"
 #include "Services/OnBoardMonitoringService.hpp"
 
 /**
@@ -71,10 +70,6 @@ public:
 	ParameterService parameterManagement;
 #endif
 
-#ifdef SERVICE_REALTIMEFORWARDINGCONTROL
-	RealTimeForwardingControlService realTimeForwarding;
-#endif
-
 #ifdef SERVICE_PARAMETERSTATISTICS
 	ParameterStatisticsService parameterStatistics;
 #endif
diff --git a/inc/Services/RealTimeForwardingControlService.hpp b/inc/Services/RealTimeForwardingControlService.hpp
deleted file mode 100644
index 5e42edbeadf9da26029f9b8d5fb5bd357d135a65..0000000000000000000000000000000000000000
--- a/inc/Services/RealTimeForwardingControlService.hpp
+++ /dev/null
@@ -1,129 +0,0 @@
-#ifndef ECSS_SERVICES_REALTIMEFORWARDINGCONTROLSERVICE_HPP
-#define ECSS_SERVICES_REALTIMEFORWARDINGCONTROLSERVICE_HPP
-
-#include "ECSS_Definitions.hpp"
-#include "ErrorHandler.hpp"
-#include "Helpers/AllMessageTypes.hpp"
-#include "Helpers/ForwardControlConfiguration.hpp"
-#include "Service.hpp"
-#include "etl/vector.h"
-
-/**
- * Implementation of the ST[14] 'Real Time Forwarding Control Service' as defined in ECSS-E-ST-70-41C.
- *
- * The purpose of this Service is to control the forwarding of the telemetry to the ground station. It includes
- * conditions for all the application processes that are controlled by the Service, which determine whether a message
- * should be forwarded to the ground station, through the corresponding virtual channel.
- *
- * @author Konstantinos Petridis <petridkon@gmail.com>
- */
-class RealTimeForwardingControlService {
-public:
-	inline static const uint8_t ServiceType = 14;
-
-	enum MessageType : uint8_t {
-		AddReportTypesToAppProcessConfiguration = 1,
-	};
-
-	RealTimeForwardingControlService() = default;
-
-	/**
-	 * Contains the Application IDs, controlled by the Service.
-	 */
-	etl::vector<uint8_t, ECSSMaxControlledApplicationProcesses> controlledApplications;
-
-	/**
-	 * The Application Process configuration, containing all the application process, service type and message type
-	 * definitions.
-	 */
-	ApplicationProcessConfiguration applicationProcessConfiguration;
-
-private:
-	/**
-	 * Adds all report types of the specified application process definition, to the application process configuration.
-	 */
-	void addAllReportsOfApplication(uint8_t applicationID);
-
-	/**
-	 * Adds all report types of the specified service type, to the application process configuration.
-	 */
-	void addAllReportsOfService(uint8_t applicationID, uint8_t serviceType);
-
-	/**
-	 * Counts the number of service types, stored for the specified application process.
-	 */
-	uint8_t countServicesOfApplication(uint8_t applicationID);
-
-	/**
-	 * Counts the number of report types, stored for the specified service type.
-	 */
-	uint8_t countReportsOfService(uint8_t applicationID, uint8_t serviceType);
-
-	/**
-	 * Checks whether the specified message type already exists in the specified application process and service
-	 * type definition.
-	 */
-	bool reportExistsInAppProcessConfiguration(uint8_t applicationID, uint8_t serviceType, uint8_t messageType);
-
-	/**
-	 * Performs the necessary error checking/logging for a specific application process ID. Also, skips the necessary
-	 * bytes from the request message, in case of an invalid request.
-	 *
-	 * @return True: if the application is valid and passes all the necessary error checking.
-	 */
-	bool checkApplicationOfAppProcessConfig(Message& request, uint8_t applicationID, uint8_t numOfServices);
-
-	/**
-	 * Checks if the specified application process is controlled by the Service and returns true if it does.
-	 */
-	bool checkAppControlled(Message& request, uint8_t applicationId);
-
-	/**
-	 * Checks if all service types are allowed already, i.e. if the application process contains no service type
-	 * definitions.
-	 */
-	bool allServiceTypesAllowed(Message& request, uint8_t applicationID);
-
-	/**
-	 * Checks if the maximum number of service type definitions per application process is reached.
-	 */
-	bool maxServiceTypesReached(Message& request, uint8_t applicationID);
-
-	/**
-	 * Performs the necessary error checking/logging for a specific service type. Also, skips the necessary bytes
-	 * from the request message, in case of an invalid request.
-	 *
-	 * @return True: if the service type is valid and passes all the necessary error checking.
-	 */
-	bool checkService(Message& request, uint8_t applicationID, uint8_t numOfMessages);
-
-	/**
-	 * Checks if the maximum number of report type definitions per service type definition is reached.
-	 */
-	bool maxReportTypesReached(Message& request, uint8_t applicationID, uint8_t serviceType);
-
-	/**
-	 * Checks if the maximum number of message types that can be contained inside a service type definition, is
-	 * already reached.
-	 *
-	 * @return True: if the message type is valid and passes all the necessary error checking.
-	 */
-	bool checkMessage(Message& request, uint8_t applicationID, uint8_t serviceType, uint8_t messageType);
-
-public:
-	/**
-	 * TC[14,1] 'Add report types to the application process forward control configuration'.
-	 */
-	void addReportTypesToAppProcessConfiguration(Message& request);
-
-	/**
-	 * It is responsible to call the suitable function that executes a TC packet. The source of that packet
-	 * is the ground station.
-	 *
-	 * @note This function is called from the main execute() that is defined in the file MessageParser.hpp
-	 * @param message Contains the necessary parameters to call the suitable subservice.
-	 */
-	void execute(Message& message);
-};
-
-#endif
diff --git a/src/Helpers/AllMessageTypes.cpp b/src/Helpers/AllMessageTypes.cpp
deleted file mode 100644
index c67e09b31d3ebf98fd7a477d051b23beb7949a62..0000000000000000000000000000000000000000
--- a/src/Helpers/AllMessageTypes.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-#include "Helpers/AllMessageTypes.hpp"
-#include "Services/EventActionService.hpp"
-#include "Services/EventReportService.hpp"
-#include "Services/HousekeepingService.hpp"
-#include "Services/LargePacketTransferService.hpp"
-#include "Services/MemoryManagementService.hpp"
-#include "Services/ParameterService.hpp"
-#include "Services/ParameterStatisticsService.hpp"
-#include "Services/RealTimeForwardingControlService.hpp"
-#include "Services/RequestVerificationService.hpp"
-#include "Services/TestService.hpp"
-#include "Services/TimeBasedSchedulingService.hpp"
-
-namespace AllMessageTypes {
-	etl::vector<uint8_t, ECSSMaxReportTypeDefinitions> st01Messages = {RequestVerificationService::MessageType::FailedAcceptanceReport,
-	                                                                   RequestVerificationService::MessageType::FailedCompletionOfExecution,
-	                                                                   RequestVerificationService::MessageType::FailedProgressOfExecution,
-	                                                                   RequestVerificationService::MessageType::FailedRoutingReport,
-	                                                                   RequestVerificationService::MessageType::FailedStartOfExecution,
-	                                                                   RequestVerificationService::MessageType::SuccessfulAcceptanceReport,
-	                                                                   RequestVerificationService::MessageType::SuccessfulCompletionOfExecution,
-	                                                                   RequestVerificationService::MessageType::SuccessfulProgressOfExecution,
-	                                                                   RequestVerificationService::MessageType::SuccessfulStartOfExecution};
-
-	etl::vector<uint8_t, ECSSMaxReportTypeDefinitions> st03Messages = {
-	    HousekeepingService::MessageType::DisablePeriodicHousekeepingParametersReport,
-	    HousekeepingService::MessageType::EnablePeriodicHousekeepingParametersReport,
-	    HousekeepingService::MessageType::GenerateOneShotHousekeepingReport,
-	    HousekeepingService::MessageType::HousekeepingParametersReport,
-	    HousekeepingService::MessageType::HousekeepingPeriodicPropertiesReport,
-	    HousekeepingService::MessageType::HousekeepingStructuresReport};
-
-	etl::vector<uint8_t, ECSSMaxReportTypeDefinitions> st04Messages = {
-	    ParameterStatisticsService::MessageType::ParameterStatisticsDefinitionsReport,
-	    ParameterStatisticsService::MessageType::ParameterStatisticsReport,
-	};
-
-	etl::vector<uint8_t, ECSSMaxReportTypeDefinitions> st05Messages = {EventReportService::MessageType::HighSeverityAnomalyReport,
-	                                                                   EventReportService::MessageType::DisabledListEventReport,
-	                                                                   EventReportService::MessageType::InformativeEventReport,
-	                                                                   EventReportService::MessageType::LowSeverityAnomalyReport,
-	                                                                   EventReportService::MessageType::MediumSeverityAnomalyReport};
-
-	etl::vector<uint8_t, ECSSMaxReportTypeDefinitions> st06Messages = {MemoryManagementService::MessageType::CheckRawMemoryDataReport,
-	                                                                   MemoryManagementService::MessageType::DumpRawMemoryDataReport};
-
-	etl::vector<uint8_t, ECSSMaxReportTypeDefinitions> st11Messages = {TimeBasedSchedulingService::MessageType::TimeBasedScheduledSummaryReport};
-
-	etl::vector<uint8_t, ECSSMaxReportTypeDefinitions> st13Messages = {LargePacketTransferService::MessageType::FirstDownlinkPartReport,
-	                                                                   LargePacketTransferService::MessageType::InternalDownlinkPartReport,
-	                                                                   LargePacketTransferService::MessageType::LastDownlinkPartReport};
-
-	etl::vector<uint8_t, ECSSMaxReportTypeDefinitions> st17Messages = {TestService::MessageType::AreYouAliveTestReport,
-	                                                                   TestService::MessageType::OnBoardConnectionTestReport};
-
-	etl::vector<uint8_t, ECSSMaxReportTypeDefinitions> st19Messages = {EventActionService::MessageType::EventActionStatusReport};
-
-	etl::vector<uint8_t, ECSSMaxReportTypeDefinitions> st20Messages = {ParameterService::MessageType::ParameterValuesReport};
-
-	etl::map<uint8_t, etl::vector<uint8_t, ECSSMaxReportTypeDefinitions>, ECSSMaxServiceTypeDefinitions> messagesOfService = {
-	    {RequestVerificationService::ServiceType, st01Messages},
-	    {HousekeepingService::ServiceType, st03Messages},
-	    {ParameterStatisticsService::ServiceType, st04Messages},
-	    {EventReportService::ServiceType, st05Messages},
-	    {MemoryManagementService::ServiceType, st06Messages},
-	    {TimeBasedSchedulingService::ServiceType, st11Messages},
-	    {LargePacketTransferService::ServiceType, st13Messages},
-	    {TestService::ServiceType, st17Messages},
-	    {EventActionService::ServiceType, st19Messages},
-	    {ParameterService::ServiceType, st20Messages}};
-
-} // namespace AllMessageTypes
diff --git a/src/MessageParser.cpp b/src/MessageParser.cpp
index 7ce06c23b64058b079a73eb0bf449462cd471b82..d756549295a1750a7a45cc0c3d628a50af055a97 100644
--- a/src/MessageParser.cpp
+++ b/src/MessageParser.cpp
@@ -74,12 +74,6 @@ void MessageParser::execute(Message& message) {
 			break;
 #endif
 
-#ifdef SERVICE_REALTIMEFORWARDINGCONTROL
-		case RealTimeForwardingControlService::ServiceType:
-			Services.realTimeForwarding.execute(message);
-			break;
-#endif
-
 		default:
 			ErrorHandler::reportInternalError(ErrorHandler::OtherMessageType);
 	}
diff --git a/src/Services/RealTimeForwardingControlService.cpp b/src/Services/RealTimeForwardingControlService.cpp
deleted file mode 100644
index 315bfbe3e4dd11b979f95a240e90e8c75a813841..0000000000000000000000000000000000000000
--- a/src/Services/RealTimeForwardingControlService.cpp
+++ /dev/null
@@ -1,157 +0,0 @@
-#include "Services/RealTimeForwardingControlService.hpp"
-#include <iostream>
-
-void RealTimeForwardingControlService::addAllReportsOfApplication(uint8_t applicationID) {
-	for (auto& service: AllMessageTypes::messagesOfService) {
-		uint8_t serviceType = service.first;
-		addAllReportsOfService(applicationID, serviceType);
-	}
-}
-
-void RealTimeForwardingControlService::addAllReportsOfService(uint8_t applicationID, uint8_t serviceType) {
-	for (auto& messageType: AllMessageTypes::messagesOfService[serviceType]) {
-		auto appServicePair = std::make_pair(applicationID, serviceType);
-		applicationProcessConfiguration.definitions[appServicePair].push_back(messageType);
-	}
-}
-
-uint8_t RealTimeForwardingControlService::countServicesOfApplication(uint8_t applicationID) {
-	uint8_t serviceCounter = 0;
-	for (auto& definition: applicationProcessConfiguration.definitions) {
-		auto& pair = definition.first;
-		if (pair.first == applicationID) {
-			serviceCounter++;
-		}
-	}
-	return serviceCounter;
-}
-
-uint8_t RealTimeForwardingControlService::countReportsOfService(uint8_t applicationID, uint8_t serviceType) {
-	auto appServicePair = std::make_pair(applicationID, serviceType);
-	return applicationProcessConfiguration.definitions[appServicePair].size();
-}
-
-bool RealTimeForwardingControlService::checkAppControlled(Message& request, uint8_t applicationId) {
-	if (std::find(controlledApplications.begin(), controlledApplications.end(), applicationId) ==
-	    controlledApplications.end()) {
-		ErrorHandler::reportError(request, ErrorHandler::ExecutionStartErrorType::NotControlledApplication);
-		return false;
-	}
-	return true;
-}
-
-bool RealTimeForwardingControlService::checkApplicationOfAppProcessConfig(Message& request, uint8_t applicationID,
-                                                                          uint8_t numOfServices) {
-	if (not checkAppControlled(request, applicationID) or allServiceTypesAllowed(request, applicationID)) {
-		for (uint8_t i = 0; i < numOfServices; i++) {
-			request.skipBytes(1);
-			uint8_t numOfMessages = request.readUint8();
-			request.skipBytes(numOfMessages);
-		}
-		return false;
-	}
-	return true;
-}
-
-bool RealTimeForwardingControlService::allServiceTypesAllowed(Message& request, uint8_t applicationID) {
-	if (countServicesOfApplication(applicationID) >= ECSSMaxServiceTypeDefinitions) {
-		ErrorHandler::reportError(request, ErrorHandler::ExecutionStartErrorType::AllServiceTypesAlreadyAllowed);
-		return true;
-	}
-	return false;
-}
-
-bool RealTimeForwardingControlService::maxServiceTypesReached(Message& request, uint8_t applicationID) {
-	if (countServicesOfApplication(applicationID) >= ECSSMaxServiceTypeDefinitions) {
-		ErrorHandler::reportError(request, ErrorHandler::ExecutionStartErrorType::MaxServiceTypesReached);
-		return true;
-	}
-	return false;
-}
-
-bool RealTimeForwardingControlService::checkService(Message& request, uint8_t applicationID, uint8_t numOfMessages) {
-	if (maxServiceTypesReached(request, applicationID)) {
-		request.skipBytes(numOfMessages);
-		return false;
-	}
-	return true;
-}
-
-bool RealTimeForwardingControlService::maxReportTypesReached(Message& request, uint8_t applicationID,
-                                                             uint8_t serviceType) {
-	if (countReportsOfService(applicationID, serviceType) >= AllMessageTypes::messagesOfService[serviceType].size()) {
-		ErrorHandler::reportError(request, ErrorHandler::ExecutionStartErrorType::MaxReportTypesReached);
-		return true;
-	}
-	return false;
-}
-
-bool RealTimeForwardingControlService::checkMessage(Message& request, uint8_t applicationID, uint8_t serviceType,
-                                                    uint8_t messageType) {
-	if (maxReportTypesReached(request, applicationID, serviceType) or
-	    reportExistsInAppProcessConfiguration(applicationID, serviceType, messageType)) {
-		return false;
-	}
-	return true;
-}
-
-bool RealTimeForwardingControlService::reportExistsInAppProcessConfiguration(uint8_t applicationID, uint8_t serviceType,
-                                                                             uint8_t messageType) {
-	auto key = std::make_pair(applicationID, serviceType);
-	auto& messages = applicationProcessConfiguration.definitions[key];
-	return std::find(messages.begin(), messages.end(), messageType) != messages.end();
-}
-
-void RealTimeForwardingControlService::addReportTypesToAppProcessConfiguration(Message& request) {
-	request.assertTC(ServiceType, MessageType::AddReportTypesToAppProcessConfiguration);
-	uint8_t numOfApplications = request.readUint8();
-
-	for (uint8_t i = 0; i < numOfApplications; i++) {
-		uint8_t applicationID = request.readUint8();
-		uint8_t numOfServices = request.readUint8();
-
-		if (not checkApplicationOfAppProcessConfig(request, applicationID, numOfServices)) {
-			continue;
-		}
-
-		if (numOfServices == 0) {
-			addAllReportsOfApplication(applicationID);
-			continue;
-		}
-
-		for (uint8_t j = 0; j < numOfServices; j++) {
-			uint8_t serviceType = request.readUint8();
-			uint8_t numOfMessages = request.readUint8();
-
-			if (not checkService(request, applicationID, numOfMessages)) {
-				continue;
-			}
-
-			if (numOfMessages == 0) {
-				addAllReportsOfService(applicationID, serviceType);
-				continue;
-			}
-
-			for (uint8_t k = 0; k < numOfMessages; k++) {
-				uint8_t messageType = request.readUint8();
-
-				if (not checkMessage(request, applicationID, serviceType, messageType)) {
-					continue;
-				}
-				auto key = std::make_pair(applicationID, serviceType);
-				applicationProcessConfiguration.definitions[key].push_back(
-				    messageType);
-			}
-		}
-	}
-}
-
-void RealTimeForwardingControlService::execute(Message& message) {
-	switch (message.messageType) {
-		case AddReportTypesToAppProcessConfiguration:
-			addReportTypesToAppProcessConfiguration(message);
-			break;
-		default:
-			ErrorHandler::reportInternalError(ErrorHandler::OtherMessageType);
-	}
-}
diff --git a/test/Services/HousekeepingService.cpp b/test/Services/HousekeepingService.cpp
index c4fec918d3564e717b230f50fe7679b97280f655..459ec7528c0c502c1e7124a242ac2b0e9cedaa2b 100644
--- a/test/Services/HousekeepingService.cpp
+++ b/test/Services/HousekeepingService.cpp
@@ -1,8 +1,8 @@
-#include "Services/HousekeepingService.hpp"
 #include <iostream>
+#include "catch2/catch.hpp"
 #include "Message.hpp"
 #include "ServiceTests.hpp"
-#include "catch2/catch.hpp"
+#include "Services/HousekeepingService.hpp"
 #include "etl/algorithm.h"
 
 HousekeepingService& housekeepingService = Services.housekeeping;
@@ -18,7 +18,7 @@ void buildRequest(Message& request, uint8_t idToCreate) {
 	request.appendUint8(idToCreate);
 	request.appendUint32(interval);
 	request.appendUint16(numOfSimplyCommutatedParams);
-	for (auto& id: simplyCommutatedIds) {
+	for (auto& id : simplyCommutatedIds) {
 		request.appendUint16(id);
 	}
 }
@@ -39,11 +39,11 @@ void initializeHousekeepingStructures() {
 
 	HousekeepingStructure structures[3];
 	int i = 0;
-	for (auto& newStructure: structures) {
+	for (auto& newStructure : structures) {
 		newStructure.structureId = ids[i];
 		newStructure.collectionInterval = interval;
 		newStructure.periodicGenerationActionStatus = false;
-		for (uint16_t parameterId: simplyCommutatedIds) {
+		for (uint16_t parameterId : simplyCommutatedIds) {
 			newStructure.simplyCommutatedParameterIds.push_back(parameterId);
 		}
 		housekeepingService.housekeepingStructures.insert({ids[i], newStructure});
@@ -60,6 +60,9 @@ void initializeHousekeepingStructures() {
  * Helper function that stores samples into simply commutated parameters of different data type each.
  */
 void storeSamplesToParameters(uint16_t id1, uint16_t id2, uint16_t id3) {
+	Message samples(HousekeepingService::ServiceType,
+	                HousekeepingService::MessageType::ReportHousekeepingPeriodicProperties, Message::TM, 1);
+
 	static_cast<Parameter<uint16_t>&>(Services.parameterManagement.getParameter(id1)->get()).setValue(33);
 	static_cast<Parameter<uint8_t>&>(Services.parameterManagement.getParameter(id2)->get()).setValue(77);
 	static_cast<Parameter<uint32_t>&>(Services.parameterManagement.getParameter(id3)->get()).setValue(99);
@@ -74,7 +77,7 @@ void appendNewParameters(Message& request, uint8_t idToAppend) {
 
 	request.appendUint8(idToAppend);
 	request.appendUint16(numOfSimplyCommutatedParams);
-	for (auto& id: simplyCommutatedIds) {
+	for (auto& id : simplyCommutatedIds) {
 		request.appendUint16(id);
 	}
 }
@@ -91,7 +94,7 @@ TEST_CASE("Create housekeeping structure") {
 		request.appendUint8(idToCreate);
 		request.appendUint32(interval);
 		request.appendUint16(numOfSimplyCommutatedParams);
-		for (auto& id: simplyCommutatedIds) {
+		for (auto& id : simplyCommutatedIds) {
 			request.appendUint16(id);
 		}
 
@@ -143,11 +146,11 @@ TEST_CASE("Create housekeeping structure") {
 
 		REQUIRE(housekeepingService.housekeepingStructures.size() == 0);
 
-		for (auto& structId: idsToCreate) {
+		for (auto& structId : idsToCreate) {
 			request.appendUint8(structId);
 			request.appendUint32(interval);
 			request.appendUint16(numOfSimplyCommutatedParams);
-			for (auto& parameterId: simplyCommutatedIds) {
+			for (auto& parameterId : simplyCommutatedIds) {
 				request.appendUint16(parameterId);
 			}
 			MessageParser::execute(request);
@@ -173,7 +176,7 @@ TEST_CASE("Create housekeeping structure") {
 		request.appendUint8(idToCreate);
 		request.appendUint32(interval);
 		request.appendUint16(numOfSimplyCommutatedParams);
-		for (auto& id: simplyCommutatedIds) {
+		for (auto& id : simplyCommutatedIds) {
 			request.appendUint16(id);
 		}
 
@@ -185,7 +188,7 @@ TEST_CASE("Create housekeeping structure") {
 
 		REQUIRE(newStruct.simplyCommutatedParameterIds.size() == 4);
 		uint16_t existingParameterIds[4] = {8, 4, 5, 11};
-		for (auto parameterId: newStruct.simplyCommutatedParameterIds) {
+		for (auto parameterId : newStruct.simplyCommutatedParameterIds) {
 			CHECK(std::find(std::begin(existingParameterIds), std::end(existingParameterIds), parameterId) !=
 			      std::end(existingParameterIds));
 		}
@@ -211,7 +214,7 @@ TEST_CASE("Delete housekeeping structure") {
 		uint8_t numOfStructs = 5;
 		uint8_t ids[5] = {2, 3, 4, 7, 8};
 		request.appendUint8(numOfStructs);
-		for (auto& id: ids) {
+		for (auto& id : ids) {
 			request.appendUint8(id);
 		}
 
@@ -257,7 +260,7 @@ TEST_CASE("Enable the periodic generation of housekeeping structures") {
 		uint8_t numOfStructs = 5;
 		uint8_t idsToEnable[5] = {1, 3, 4, 6, 7};
 		request2.appendUint8(numOfStructs);
-		for (auto& id: idsToEnable) {
+		for (auto& id : idsToEnable) {
 			request2.appendUint8(id);
 		}
 		REQUIRE(not housekeepingService.housekeepingStructures[0].periodicGenerationActionStatus);
@@ -285,7 +288,7 @@ TEST_CASE("Disable the periodic generation of housekeeping structures") {
 		uint8_t numOfStructs = 4;
 		uint8_t idsToDisable[4] = {0, 1, 4, 6};
 		request2.appendUint8(numOfStructs);
-		for (auto& id: idsToDisable) {
+		for (auto& id : idsToDisable) {
 			request2.appendUint8(id);
 		}
 		housekeepingService.housekeepingStructures[0].periodicGenerationActionStatus = true;
@@ -314,7 +317,7 @@ TEST_CASE("Reporting of housekeeping structures") {
 		uint8_t numOfStructs = 3;
 		uint8_t idsToReport[3] = {9, 4, 2};
 		request2.appendUint8(numOfStructs);
-		for (auto& id: idsToReport) {
+		for (auto& id : idsToReport) {
 			request2.appendUint8(id);
 		}
 		MessageParser::execute(request2);
@@ -428,7 +431,7 @@ TEST_CASE("One-shot housekeeping parameter report generation") {
 		uint8_t numOfStructs = 5;
 		uint8_t structIds[5] = {0, 4, 7, 8, 11};
 		request2.appendUint8(numOfStructs);
-		for (auto& id: structIds) {
+		for (auto& id : structIds) {
 			request2.appendUint8(id);
 		}
 		MessageParser::execute(request2);
@@ -517,7 +520,7 @@ TEST_CASE("Append parameters in housekeeping report structure") {
 		uint16_t currentlyExistingParameters[] = {8, 4, 5, 9, 10, 11};
 		HousekeepingStructure structToCheck = housekeepingService.housekeepingStructures[structId];
 		REQUIRE(structToCheck.simplyCommutatedParameterIds.size() == 6);
-		for (auto& existingParameter: currentlyExistingParameters) {
+		for (auto& existingParameter : currentlyExistingParameters) {
 			CHECK(std::find(std::begin(structToCheck.simplyCommutatedParameterIds),
 			                std::end(structToCheck.simplyCommutatedParameterIds),
 			                existingParameter) != std::end(structToCheck.simplyCommutatedParameterIds));
@@ -537,7 +540,7 @@ TEST_CASE("Append parameters in housekeeping report structure") {
 
 		request.appendUint8(structId);
 		request.appendUint16(numOfSimplyCommutatedParams);
-		for (auto& id: simplyCommutatedIds) {
+		for (auto& id : simplyCommutatedIds) {
 			request.appendUint16(id);
 		}
 		REQUIRE(housekeepingService.housekeepingStructures.find(structId) !=
@@ -567,7 +570,7 @@ TEST_CASE("Modification of housekeeping structures' interval") {
 		uint32_t intervals[4] = {12, 21, 32, 17};
 		request.appendUint8(numOfStructs);
 		int i = 0;
-		for (auto& id: structIds) {
+		for (auto& id : structIds) {
 			request.appendUint8(id);
 			request.appendUint32(intervals[i++]);
 		}
@@ -592,7 +595,7 @@ TEST_CASE("Reporting of housekeeping structure periodic properties") {
 		uint8_t numOfStructs = 6;
 		uint8_t structIds[6] = {0, 4, 1, 6, 9, 10};
 		request.appendUint8(numOfStructs);
-		for (auto& id: structIds) {
+		for (auto& id : structIds) {
 			request.appendUint8(id);
 		}
 		housekeepingService.housekeepingStructures[0].periodicGenerationActionStatus = true;
@@ -606,16 +609,16 @@ TEST_CASE("Reporting of housekeeping structure periodic properties") {
 		      3);
 
 		Message report = ServiceTests::get(3);
-		CHECK(report.readUint8() == 3);       // Number of valid ids
-		CHECK(report.readUint8() == 0);       // Id
-		CHECK(report.readBoolean() == true);  // Periodic status
-		CHECK(report.readUint32() == 7);      // Interval
-		CHECK(report.readUint8() == 4);       // Id
+		CHECK(report.readUint8() == 3); // Number of valid ids
+		CHECK(report.readUint8() == 0); // Id
+		CHECK(report.readBoolean() == true); // Periodic status
+		CHECK(report.readUint32() == 7); // Interval
+		CHECK(report.readUint8() == 4); // Id
 		CHECK(report.readBoolean() == false); // Periodic status
-		CHECK(report.readUint32() == 24);     // Interval
-		CHECK(report.readUint8() == 6);       // Id
+		CHECK(report.readUint32() == 24); // Interval
+		CHECK(report.readUint8() == 6); // Id
 		CHECK(report.readBoolean() == false); // Periodic status
-		CHECK(report.readUint32() == 13);     // Interval
+		CHECK(report.readUint32() == 13); // Interval
 
 		ServiceTests::reset();
 		Services.reset();
diff --git a/test/Services/RealTimeForwardingControl.cpp b/test/Services/RealTimeForwardingControl.cpp
deleted file mode 100644
index 3553697dff0d3748aa67c78e75631653435972b0..0000000000000000000000000000000000000000
--- a/test/Services/RealTimeForwardingControl.cpp
+++ /dev/null
@@ -1,553 +0,0 @@
-#include <iostream>
-#include "ECSS_Definitions.hpp"
-#include "Message.hpp"
-#include "ServiceTests.hpp"
-#include "Services/RealTimeForwardingControlService.hpp"
-#include "catch2/catch.hpp"
-
-RealTimeForwardingControlService& realTimeForwarding = Services.realTimeForwarding;
-
-uint8_t applications[] = {1};
-uint8_t services[] = {3, 5};
-uint8_t allServices[] = {1, 3, 4, 5, 6, 11, 13, 17, 19, 20};
-uint8_t redundantServices[] = {1, 3, 4, 5, 6, 11, 13, 17, 19, 20, 1, 3};
-uint8_t messages1[] = {HousekeepingService::MessageType::HousekeepingPeriodicPropertiesReport,
-                       HousekeepingService::MessageType::DisablePeriodicHousekeepingParametersReport};
-
-uint8_t messages2[] = {EventReportService::MessageType::InformativeEventReport,
-                       EventReportService::MessageType::DisabledListEventReport};
-
-void validReportTypes(Message& request) {
-	uint8_t numOfApplications = 1;
-	uint8_t numOfServicesPerApp = 2;
-	uint8_t numOfMessagesPerService = 2;
-
-	request.appendUint8(numOfApplications);
-
-	for (auto appID: applications) {
-		request.appendUint8(appID);
-		request.appendUint8(numOfServicesPerApp);
-
-		for (uint8_t j = 0; j < numOfServicesPerApp; j++) {
-			uint8_t serviceType = services[j];
-			request.appendUint8(serviceType);
-			request.appendUint8(numOfMessagesPerService);
-			uint8_t* messages = (j == 0) ? messages1 : messages2;
-
-			for (uint8_t k = 0; k < numOfMessagesPerService; k++) {
-				request.appendUint8(messages[k]);
-			}
-		}
-	}
-}
-
-void duplicateReportTypes(Message& request) {
-	uint8_t numOfApplications = 1;
-	uint8_t numOfServicesPerApp = 2;
-	uint8_t numOfMessagesPerService = 2;
-
-	request.appendUint8(numOfApplications);
-
-	for (auto appID: applications) {
-		request.appendUint8(appID);
-		request.appendUint8(numOfServicesPerApp);
-
-		for (uint8_t j = 0; j < numOfServicesPerApp; j++) {
-			uint8_t serviceType = services[j];
-			request.appendUint8(serviceType);
-			request.appendUint8(numOfMessagesPerService);
-
-			for (uint8_t k = 0; k < numOfMessagesPerService; k++) {
-				request.appendUint8(messages1[0]);
-			}
-		}
-	}
-}
-
-void validInvalidReportTypes(Message& request) {
-	uint8_t numOfApplications = 3;
-	uint8_t numOfMessagesPerService = 2;
-
-	uint8_t applications2[] = {1, 2, 3};
-	request.appendUint8(numOfApplications);
-
-	for (uint8_t i = 0; i < numOfApplications; i++) {
-		request.appendUint8(applications2[i]);
-		uint8_t numOfServicesPerApp = (i == 0) ? 12 : 2;
-		uint8_t* servicesToPick = (i == 0) ? redundantServices : services;
-		request.appendUint8(numOfServicesPerApp);
-
-		for (uint8_t j = 0; j < numOfServicesPerApp; j++) {
-			uint8_t serviceType = servicesToPick[j];
-			request.appendUint8(serviceType);
-			request.appendUint8(numOfMessagesPerService);
-			uint8_t* messages = (j == 0) ? messages1 : messages2;
-
-			for (uint8_t k = 0; k < numOfMessagesPerService; k++) {
-				request.appendUint8(messages[k]);
-			}
-		}
-	}
-}
-
-void validAllReportsOfService(Message& request) {
-	uint8_t numOfApplications = 1;
-	uint8_t numOfServicesPerApp = 2;
-	uint8_t numOfMessagesPerService = 0;
-
-	request.appendUint8(numOfApplications);
-
-	for (auto appID: applications) {
-		request.appendUint8(appID);
-		request.appendUint8(numOfServicesPerApp);
-
-		for (uint8_t j = 0; j < numOfServicesPerApp; j++) {
-			uint8_t serviceType = services[j];
-			request.appendUint8(serviceType);
-			request.appendUint8(numOfMessagesPerService);
-		}
-	}
-}
-
-void validInvalidAllReportsOfService(Message& request) {
-	uint8_t numOfApplications = 3;
-	uint8_t numOfMessagesPerService = 2;
-
-	uint8_t applications2[] = {1, 2, 3};
-	request.appendUint8(numOfApplications);
-
-	for (uint8_t i = 0; i < numOfApplications; i++) {
-		request.appendUint8(applications2[i]);
-		uint8_t numOfServicesPerApp = (i == 0) ? 12 : 2;
-		uint8_t* servicesToPick = (i == 0) ? redundantServices : services;
-		request.appendUint8(numOfServicesPerApp);
-
-		for (uint8_t j = 0; j < numOfServicesPerApp; j++) {
-			uint8_t serviceType = servicesToPick[j];
-			request.appendUint8(serviceType);
-			uint8_t numOfMessages = (i < 2) ? 0 : numOfMessagesPerService;
-			request.appendUint8(numOfMessages);
-			if (i >= 2) {
-				uint8_t* messages = (j == 0) ? messages1 : messages2;
-
-				for (uint8_t k = 0; k < numOfMessagesPerService; k++) {
-					request.appendUint8(messages[k]);
-				}
-			}
-		}
-	}
-}
-
-void validAllReportsOfApp(Message& request) {
-	uint8_t numOfApplications = 1;
-	uint8_t numOfServicesPerApp = 0;
-
-	request.appendUint8(numOfApplications);
-
-	for (auto appID: applications) {
-		request.appendUint8(appID);
-		request.appendUint8(numOfServicesPerApp);
-	}
-}
-
-void validInvalidAllReportsOfApp(Message& request) {
-	uint8_t numOfApplications = 3;
-	uint8_t numOfMessagesPerService = 2;
-
-	uint8_t applications2[] = {1, 2, 3};
-	request.appendUint8(numOfApplications);
-
-	for (uint8_t i = 0; i < numOfApplications; i++) {
-		request.appendUint8(applications2[i]);
-		uint8_t numOfServicesPerApp = (i == 0 or i == 1) ? 0 : 2;
-		uint8_t* servicesToPick = (i == 0) ? redundantServices : services;
-		request.appendUint8(numOfServicesPerApp);
-
-		if (i >= 2) {
-			for (uint8_t j = 0; j < numOfServicesPerApp; j++) {
-				uint8_t serviceType = servicesToPick[j];
-				request.appendUint8(serviceType);
-				uint8_t numOfMessages = (i == 0 or i == 1) ? 0 : numOfMessagesPerService;
-				request.appendUint8(numOfMessages);
-
-				uint8_t* messages = (j == 0) ? messages1 : messages2;
-
-				for (uint8_t k = 0; k < numOfMessagesPerService; k++) {
-					request.appendUint8(messages[k]);
-				}
-			}
-		}
-	}
-}
-
-void resetAppProcessConfiguration() {
-	realTimeForwarding.applicationProcessConfiguration.definitions.clear();
-	REQUIRE(realTimeForwarding.applicationProcessConfiguration.definitions.empty());
-}
-
-TEST_CASE("Add report types to the Application Process Configuration") {
-	SECTION("Successful addition of report types to the Application Process Configuration") {
-		Message request(RealTimeForwardingControlService::ServiceType,
-		                RealTimeForwardingControlService::MessageType::AddReportTypesToAppProcessConfiguration,
-		                Message::TC, 1);
-
-		uint8_t applicationID = 1;
-		realTimeForwarding.controlledApplications.push_back(applicationID);
-		validReportTypes(request);
-
-		MessageParser::execute(request);
-
-		CHECK(ServiceTests::count() == 0);
-		auto& applicationProcesses = realTimeForwarding.applicationProcessConfiguration.definitions;
-		REQUIRE(applicationProcesses.size() == 2);
-
-		for (auto appID: applications) {
-			for (uint8_t j = 0; j < 2; j++) {
-				uint8_t serviceType = services[j];
-				auto appServicePair = std::make_pair(appID, serviceType);
-				REQUIRE(applicationProcesses.find(appServicePair) != applicationProcesses.end());
-				REQUIRE(applicationProcesses[appServicePair].size() == 2);
-				uint8_t* messages = (j == 0) ? messages1 : messages2;
-
-				for (uint8_t k = 0; k < 2; k++) {
-					REQUIRE(std::find(applicationProcesses[appServicePair].begin(),
-					                  applicationProcesses[appServicePair].end(),
-					                  messages[k]) != applicationProcesses[appServicePair].end());
-				}
-			}
-		}
-
-		resetAppProcessConfiguration();
-		ServiceTests::reset();
-		Services.reset();
-	}
-
-	SECTION("Requested Application Process is not controlled by the service") {
-		Message request(RealTimeForwardingControlService::ServiceType,
-		                RealTimeForwardingControlService::MessageType::AddReportTypesToAppProcessConfiguration,
-		                Message::TC, 1);
-
-		uint8_t applicationID = 1;
-		validReportTypes(request);
-
-		MessageParser::execute(request);
-
-		CHECK(ServiceTests::count() == 1);
-		CHECK(ServiceTests::countThrownErrors(ErrorHandler::ExecutionStartErrorType::NotControlledApplication) == 1);
-		REQUIRE(realTimeForwarding.applicationProcessConfiguration.definitions.empty());
-
-		resetAppProcessConfiguration();
-		ServiceTests::reset();
-		Services.reset();
-	}
-
-	SECTION("All service types already allowed") {
-		Message request(RealTimeForwardingControlService::ServiceType,
-		                RealTimeForwardingControlService::MessageType::AddReportTypesToAppProcessConfiguration,
-		                Message::TC, 1);
-
-		uint8_t applicationID = 1;
-		realTimeForwarding.controlledApplications.push_back(applicationID);
-		validReportTypes(request);
-
-		for (uint8_t i = 1; i < ECSSMaxServiceTypeDefinitions + 1; i++) {
-			realTimeForwarding.applicationProcessConfiguration.definitions[std::make_pair(applicationID, i)];
-		}
-		CHECK(realTimeForwarding.applicationProcessConfiguration.definitions.size() == ECSSMaxServiceTypeDefinitions);
-
-		MessageParser::execute(request);
-
-		CHECK(ServiceTests::count() == 1);
-		CHECK(ServiceTests::countThrownErrors(ErrorHandler::ExecutionStartErrorType::AllServiceTypesAlreadyAllowed) ==
-		      1);
-		REQUIRE(realTimeForwarding.applicationProcessConfiguration.definitions.size() == ECSSMaxServiceTypeDefinitions);
-
-		resetAppProcessConfiguration();
-		ServiceTests::reset();
-		Services.reset();
-	}
-
-	SECTION("Max service types already reached") {
-		Message request(RealTimeForwardingControlService::ServiceType,
-		                RealTimeForwardingControlService::MessageType::AddReportTypesToAppProcessConfiguration,
-		                Message::TC, 1);
-
-		uint8_t applicationID = 1;
-		uint8_t serviceType1 = services[0]; // st03
-		uint8_t serviceType2 = services[1]; // st05
-
-		realTimeForwarding.controlledApplications.push_back(applicationID);
-		validReportTypes(request);
-
-		auto& applicationProcessConfig = realTimeForwarding.applicationProcessConfiguration.definitions;
-
-		for (uint8_t i = 100; i < ECSSMaxServiceTypeDefinitions + 99; i++) {
-			applicationProcessConfig[std::make_pair(applicationID, i)];
-		}
-		CHECK(applicationProcessConfig.size() == ECSSMaxServiceTypeDefinitions - 1);
-
-		MessageParser::execute(request);
-
-		CHECK(ServiceTests::count() == 1);
-		CHECK(ServiceTests::countThrownErrors(ErrorHandler::ExecutionStartErrorType::MaxServiceTypesReached) == 1);
-		REQUIRE(applicationProcessConfig.size() == ECSSMaxServiceTypeDefinitions);
-
-		resetAppProcessConfiguration();
-		ServiceTests::reset();
-		Services.reset();
-	}
-
-	SECTION("All report types already allowed") {
-		Message request(RealTimeForwardingControlService::ServiceType,
-		                RealTimeForwardingControlService::MessageType::AddReportTypesToAppProcessConfiguration,
-		                Message::TC, 1);
-
-		uint8_t applicationID = 1;
-		uint8_t serviceType = services[0]; // st03
-		realTimeForwarding.controlledApplications.push_back(applicationID);
-		validReportTypes(request);
-
-		for (auto message: AllMessageTypes::messagesOfService[serviceType]) {
-			realTimeForwarding.applicationProcessConfiguration.definitions[std::make_pair(applicationID, serviceType)]
-			    .push_back(message);
-		}
-
-		MessageParser::execute(request);
-
-		CHECK(ServiceTests::count() == 2);
-		CHECK(ServiceTests::countThrownErrors(ErrorHandler::ExecutionStartErrorType::MaxReportTypesReached) ==
-		      2);
-		REQUIRE(
-		    realTimeForwarding.applicationProcessConfiguration.definitions[std::make_pair(applicationID, serviceType)]
-		        .size() == AllMessageTypes::messagesOfService[serviceType].size());
-
-		resetAppProcessConfiguration();
-		ServiceTests::reset();
-		Services.reset();
-	}
-
-	SECTION("Max report types already reached") {
-		Message request(RealTimeForwardingControlService::ServiceType,
-		                RealTimeForwardingControlService::MessageType::AddReportTypesToAppProcessConfiguration,
-		                Message::TC, 1);
-
-		uint8_t applicationID = 1;
-		uint8_t serviceType1 = services[0]; // st03
-		uint8_t serviceType2 = services[1]; // st05
-
-		realTimeForwarding.controlledApplications.push_back(applicationID);
-		validReportTypes(request);
-
-		auto& applicationProcessConfig = realTimeForwarding.applicationProcessConfiguration;
-
-		auto appServicePair1 = std::make_pair(applicationID, serviceType1);
-		auto appServicePair2 = std::make_pair(applicationID, serviceType2);
-		REQUIRE(applicationProcessConfig.definitions[appServicePair1].empty());
-		REQUIRE(applicationProcessConfig.definitions[appServicePair2].empty());
-
-		auto numOfMessages1 = AllMessageTypes::messagesOfService[serviceType1].size();
-		auto numOfMessages2 = AllMessageTypes::messagesOfService[serviceType2].size();
-
-		for (uint8_t i = 0; i < numOfMessages1 - 1; i++) {
-			applicationProcessConfig.definitions[appServicePair1].push_back(i);
-		}
-		for (uint8_t i = 16; i < numOfMessages2 + 15; i++) {
-			applicationProcessConfig.definitions[appServicePair2].push_back(i);
-		}
-		REQUIRE(applicationProcessConfig.definitions[appServicePair1].size() == numOfMessages1 - 1);
-		REQUIRE(applicationProcessConfig.definitions[appServicePair2].size() == numOfMessages2 - 1);
-
-		MessageParser::execute(request);
-
-		CHECK(ServiceTests::count() == 2);
-		CHECK(ServiceTests::countThrownErrors(ErrorHandler::ExecutionStartErrorType::MaxReportTypesReached) == 2);
-		REQUIRE(applicationProcessConfig.definitions.size() == 2);
-		REQUIRE(applicationProcessConfig.definitions[appServicePair1].size() == numOfMessages1);
-		REQUIRE(applicationProcessConfig.definitions[appServicePair2].size() == numOfMessages2);
-
-		resetAppProcessConfiguration();
-		ServiceTests::reset();
-		Services.reset();
-	}
-
-	SECTION("Requested addition of duplicate report type definitions") {
-		Message request(RealTimeForwardingControlService::ServiceType,
-		                RealTimeForwardingControlService::MessageType::AddReportTypesToAppProcessConfiguration,
-		                Message::TC, 1);
-
-		uint8_t applicationID = 1;
-		realTimeForwarding.controlledApplications.push_back(applicationID);
-		duplicateReportTypes(request);
-
-		MessageParser::execute(request);
-
-		CHECK(ServiceTests::count() == 0);
-		auto& applicationProcesses = realTimeForwarding.applicationProcessConfiguration.definitions;
-		REQUIRE(applicationProcesses.size() == 2);
-
-		for (auto appID: applications) {
-			for (auto& serviceType: services) {
-				auto appServicePair = std::make_pair(appID, serviceType);
-				REQUIRE(applicationProcesses.find(appServicePair) != applicationProcesses.end());
-				REQUIRE(applicationProcesses[appServicePair].size() == 1);
-				REQUIRE(std::find(applicationProcesses[appServicePair].begin(),
-				                  applicationProcesses[appServicePair].end(),
-				                  messages1[0]) != applicationProcesses[appServicePair].end());
-			}
-		}
-
-		resetAppProcessConfiguration();
-		ServiceTests::reset();
-		Services.reset();
-	}
-
-	SECTION("Valid and invalid application-related requests combined") {
-		Message request(RealTimeForwardingControlService::ServiceType,
-		                RealTimeForwardingControlService::MessageType::AddReportTypesToAppProcessConfiguration,
-		                Message::TC, 1);
-		uint8_t applicationID1 = 1;
-		uint8_t applicationID2 = 2;
-		uint8_t applicationID3 = 3;
-		realTimeForwarding.controlledApplications.push_back(applicationID1);
-		realTimeForwarding.controlledApplications.push_back(applicationID3);
-		validInvalidReportTypes(request);
-
-		for (uint8_t i = 100; i < ECSSMaxServiceTypeDefinitions + 99; i++) {
-			realTimeForwarding.applicationProcessConfiguration.definitions[std::make_pair(applicationID3, i)];
-		}
-		CHECK(realTimeForwarding.applicationProcessConfiguration.definitions.size() ==
-		      ECSSMaxServiceTypeDefinitions - 1);
-
-		MessageParser::execute(request);
-
-		CHECK(ServiceTests::count() == 7);
-		CHECK(ServiceTests::countThrownErrors(ErrorHandler::ExecutionStartErrorType::NotControlledApplication) == 1);
-		CHECK(ServiceTests::countThrownErrors(ErrorHandler::ExecutionStartErrorType::MaxServiceTypesReached) == 3);
-		CHECK(ServiceTests::countThrownErrors(ErrorHandler::ExecutionStartErrorType::MaxReportTypesReached) == 3);
-
-		auto& definitions = realTimeForwarding.applicationProcessConfiguration.definitions;
-		REQUIRE(definitions.size() == 20);
-		for (auto serviceType: allServices) {
-			REQUIRE(definitions.find(std::make_pair(applicationID1, serviceType)) != definitions.end());
-		}
-
-		resetAppProcessConfiguration();
-		ServiceTests::reset();
-		Services.reset();
-	}
-
-	SECTION("Valid addition of all report types of a specified service type") {
-		Message request(RealTimeForwardingControlService::ServiceType,
-		                RealTimeForwardingControlService::MessageType::AddReportTypesToAppProcessConfiguration,
-		                Message::TC, 1);
-		uint8_t applicationID1 = 1;
-		realTimeForwarding.controlledApplications.push_back(applicationID1);
-		validAllReportsOfService(request);
-
-		MessageParser::execute(request);
-
-		CHECK(ServiceTests::count() == 0);
-		auto& applicationProcesses = realTimeForwarding.applicationProcessConfiguration.definitions;
-		for (auto serviceType: services) {
-			REQUIRE(applicationProcesses[std::make_pair(applicationID1, serviceType)].size() ==
-			        AllMessageTypes::messagesOfService[serviceType].size());
-		}
-
-		resetAppProcessConfiguration();
-		ServiceTests::reset();
-		Services.reset();
-	}
-
-	SECTION("Addition of all report types of a service type, combined with invalid requests") {
-		Message request(RealTimeForwardingControlService::ServiceType,
-		                RealTimeForwardingControlService::MessageType::AddReportTypesToAppProcessConfiguration,
-		                Message::TC, 1);
-		uint8_t applicationID1 = 1;
-		uint8_t applicationID2 = 2;
-		realTimeForwarding.controlledApplications.push_back(applicationID1);
-		realTimeForwarding.controlledApplications.push_back(applicationID2);
-		validInvalidAllReportsOfService(request);
-
-		MessageParser::execute(request);
-
-		CHECK(ServiceTests::count() == 3);
-		CHECK(ServiceTests::countThrownErrors(ErrorHandler::ExecutionStartErrorType::NotControlledApplication) == 1);
-		CHECK(ServiceTests::countThrownErrors(ErrorHandler::ExecutionStartErrorType::MaxServiceTypesReached) == 2);
-
-		auto& definitions = realTimeForwarding.applicationProcessConfiguration.definitions;
-		REQUIRE(definitions.size() == 12);
-
-		int cnt1 = 0;
-		int cnt2 = 0;
-		for (auto& pair: definitions) {
-			if (pair.first.first == applicationID1) {
-				cnt1++;
-			} else if (pair.first.first == applicationID2) {
-				cnt2++;
-			}
-		}
-		REQUIRE(cnt1 == 10);
-		REQUIRE(cnt2 == 2);
-
-		for (auto& serviceType: allServices) {
-			REQUIRE(definitions[std::make_pair(applicationID1, serviceType)].size() ==
-			        AllMessageTypes::messagesOfService[serviceType].size());
-		}
-		for (auto& serviceType: services) {
-			REQUIRE(definitions[std::make_pair(applicationID2, serviceType)].size() ==
-			        AllMessageTypes::messagesOfService[serviceType].size());
-		}
-
-		resetAppProcessConfiguration();
-		ServiceTests::reset();
-		Services.reset();
-	}
-
-	SECTION("Valid addition of all report types of an application process") {
-		Message request(RealTimeForwardingControlService::ServiceType,
-		                RealTimeForwardingControlService::MessageType::AddReportTypesToAppProcessConfiguration,
-		                Message::TC, 1);
-		uint8_t applicationID1 = 1;
-		realTimeForwarding.controlledApplications.push_back(applicationID1);
-		validAllReportsOfApp(request);
-
-		MessageParser::execute(request);
-
-		CHECK(ServiceTests::count() == 0);
-		auto& definitions = realTimeForwarding.applicationProcessConfiguration.definitions;
-		REQUIRE(definitions.size() == ECSSMaxServiceTypeDefinitions);
-
-		for (auto serviceType: allServices) {
-			REQUIRE(std::equal(definitions[std::make_pair(applicationID1, serviceType)].begin(),
-			                   definitions[std::make_pair(applicationID1, serviceType)].end(),
-			                   AllMessageTypes::messagesOfService[serviceType].begin()));
-		}
-
-		resetAppProcessConfiguration();
-		ServiceTests::reset();
-		Services.reset();
-	}
-
-	SECTION("Addition of all report types of an application process, combined with invalid request") {
-		Message request(RealTimeForwardingControlService::ServiceType,
-		                RealTimeForwardingControlService::MessageType::AddReportTypesToAppProcessConfiguration,
-		                Message::TC, 1);
-		uint8_t applicationID1 = 1;
-		uint8_t applicationID2 = 2;
-		realTimeForwarding.controlledApplications.push_back(applicationID1);
-		realTimeForwarding.controlledApplications.push_back(applicationID2);
-		validInvalidAllReportsOfApp(request);
-
-		MessageParser::execute(request);
-
-		CHECK(ServiceTests::count() == 1);
-		CHECK(ServiceTests::countThrownErrors(ErrorHandler::ExecutionStartErrorType::NotControlledApplication) == 1);
-		auto& definitions = realTimeForwarding.applicationProcessConfiguration.definitions;
-
-		REQUIRE(definitions.size() == 2 * ECSSMaxServiceTypeDefinitions);
-
-		resetAppProcessConfiguration();
-		ServiceTests::reset();
-		Services.reset();
-	}
-}