diff --git a/inc/Services/Parameter.hpp b/inc/Services/Parameter.hpp
index 6301f3ae69477a9dff93bca4ee8b7c78da2f5a92..66916fbd0c56552e137442855dd9d83b4b455e0d 100644
--- a/inc/Services/Parameter.hpp
+++ b/inc/Services/Parameter.hpp
@@ -55,7 +55,7 @@ class Parameter {
 	uint8_t ptc;
 	uint8_t pfc;
 	UpdatePtr ptr;
-	etl::bitset<NUM_OF_FLAGS> flags = {false};
+	etl::bitset<NUM_OF_FLAGS> flags;
 	ValueType currentValue = 0;
 
 	public:
diff --git a/src/Services/ParameterService.cpp b/src/Services/ParameterService.cpp
index 5a31ea5b60a1a326b4b098767b49bc5f3de074ff..a1933cbca33fe41a1a72711bb0b785b603213568 100644
--- a/src/Services/ParameterService.cpp
+++ b/src/Services/ParameterService.cpp
@@ -9,8 +9,13 @@ ParameterService::ParameterService() {
 
 bool ParameterService::addNewParameter(uint8_t ptc, uint8_t pfc, uint32_t initialValue, UpdatePtr ptr) {
 	Parameter param = Parameter(ptc, pfc, initialValue, ptr);
-	return paramsList.insert(std::make_pair(paramsList.size() + 1, param)).second;
-	// second element of the returned std::pair is whether the given item was inserted or not
+	try {
+		// second element of the returned std::pair is whether the given item was inserted or not
+		return paramsList.insert(std::make_pair(paramsList.size() + 1, param)).second;
+	}
+	catch(etl::map_full) {
+		return false;
+	}
 }
 
 void ParameterService::reportParameterIds(Message& paramIds) {
@@ -30,9 +35,9 @@ void ParameterService::reportParameterIds(Message& paramIds) {
 	                            ErrorHandler::AcceptanceErrorType::UnacceptableMessage);
 
 	uint16_t numOfIds = paramIds.readUint16();  // number of parameter IDs carried in the message
-	uint16_t numOfValidIds = 0; // number of IDs that are actually included in the list
-	reqParam.skipBytes(2); // skip the first 16 bits where the number of valid IDs will be included
-	//reqParam.appendUint16(numOfValidIds(paramIds)); // include the number of valid IDs
+//	uint16_t numOfValidIds = 0; // number of IDs that are actually included in the list
+//	reqParam.skipBytes(2); // skip the first 16 bits where the number of valid IDs will be included
+	reqParam.appendUint16(numOfValidIds(paramIds)); // include the number of valid IDs
 
 	for (uint16_t i = 0; i < numOfIds; i++) {
 		uint16_t currId = paramIds.readUint16(); // current ID to be appended
@@ -40,16 +45,12 @@ void ParameterService::reportParameterIds(Message& paramIds) {
 		if (paramsList.find(currId) != paramsList.end()) {
 			reqParam.appendUint16(currId);
 			reqParam.appendUint32(paramsList[currId].getCurrentValue());
-			numOfValidIds++;
 		} else {
 			ErrorHandler::reportError(paramIds, ErrorHandler::ExecutionStartErrorType::UnknownExecutionStartError);
 			continue; // generate failed start of execution notification & ignore
 		}
 	}
 
-	reqParam.resetRead();  // reset the read/write position
-	reqParam.appendUint16(numOfValidIds);
-
 	storeMessage(reqParam);
 }
 
@@ -81,29 +82,28 @@ void ParameterService::setParameterIds(Message& newParamValues) {
 		}
 	}
 }
-// possibly useless
-//uint16_t ParameterService::numOfValidIds(Message idMsg) {
-//	idMsg.resetRead();
-//	// start reading from the beginning of the idMsg object
-//	// (original obj. will not be influenced if this is called by value)
-//
-//	uint16_t ids = idMsg.readUint16(); // first 16bits of the packet are # of IDs
-//	uint16_t validIds = 0;
-//
-//	for (uint16_t i = 0; i < ids; i++) {
-//		uint16_t currId = idMsg.readUint16();
-//
-//		if (idMsg.messageType == 3) {
-//			idMsg.readUint32(); // skip the 32bit settings blocks, we need only the IDs
-//		}
-//
-//		if (paramsList.find(currId) != paramsList.end()) {
-//			validIds++;
-//		}
-//	}
-//
-//	return validIds;
-//}
+uint16_t ParameterService::numOfValidIds(Message idMsg) {
+	idMsg.resetRead();
+	// start reading from the beginning of the idMsg object
+	// (original obj. will not be influenced if this is called by value)
+
+	uint16_t ids = idMsg.readUint16(); // first 16bits of the packet are # of IDs
+	uint16_t validIds = 0;
+
+	for (uint16_t i = 0; i < ids; i++) {
+		uint16_t currId = idMsg.readUint16();
+
+		if (idMsg.messageType == 3) {
+			idMsg.readUint32(); // skip the 32bit settings blocks, we need only the IDs
+		}
+
+		if (paramsList.find(currId) != paramsList.end()) {
+			validIds++;
+		}
+	}
+
+	return validIds;
+}
 
 void ParameterService::execute(Message& message) {
 	switch (message.messageType) {
diff --git a/test/Services/ParameterService.cpp b/test/Services/ParameterService.cpp
index 16ccb97835cbd210f1e416469cb4ecdfd3b9ea75..7c6f8caa47a83fbf0ecc0adc94aa4b3c6e4963f7 100644
--- a/test/Services/ParameterService.cpp
+++ b/test/Services/ParameterService.cpp
@@ -9,43 +9,49 @@ void foo(ValueType* bar) {  // sample function
 	*bar = 0xDEADBEEF;
 }
 
-TEST_CASE("Parameter Report Subservice") {
-
-	SECTION("Insertion test") {
+/* test ideas:
+* parameter setting while flag is active
+*
+*
+*/
+
+TEST_CASE("Parameter Service - General") {
+	SECTION("Parameter Setup") {
 		pserv.addNewParameter(3, 14);  // this one has ID 0
 		pserv.addNewParameter(1, 7, 12);  // this one has 1
 		pserv.addNewParameter(4, 12, 3, nullptr);  // this one has 2
 		pserv.addNewParameter(12, 3, 6, &foo); // this one has 3
+		pserv.addNewParameter(15, 7, 3, &foo); //and this one 4
 	}
 
-	SECTION("ID checking") {
-		Message request(20, 1, Message::TC, 1);
-		Message report(20, 2, Message::TM, 1);
-
-		request.appendUint16(2);
+	SECTION("Addition to full map") {
+		CHECK(pserv.addNewParameter(15, 5, 4));
 	}
+}
+
+TEST_CASE("Parameter Report Subservice") {
 
 	SECTION("Faulty Instruction Handling Test") {
 		Message request(20, 1, Message::TC, 1);
 		Message report(20, 2, Message::TM, 1);
 
 		request.appendUint16(2); // number of requested IDs
-		request.appendUint16(34672); // faulty ID in this context
+		request.appendUint16(65535); // faulty ID in this context
 		request.appendUint16(1); // valid
 
 		MessageParser::execute(request);
-		report = ServiceTests::get(0);
-		request.resetRead();
 
-		report.readUint16();
-		request.readUint16();
+		CHECK(((ServiceTests::get(0).messageType == 4) && (ServiceTests::get(0).serviceType == 1)));
+		// check for an ST[1,4] message caused by the faulty ID
+		CHECK((ServiceTests::thrownError(ErrorHandler::ExecutionStartErrorType::UnknownExecutionStartError)));
+		// check for the thrown UnknownExecutionStartError
+		CHECK(((ServiceTests::get(1).messageType == 2) && (ServiceTests::get(1).serviceType == 20)));
+		// check for an ST[20,2] message (the one that contains the settings)
 
-		while (report.readPosition <= report.dataSize) {
-			CHECK_FALSE(report.readUint16() == 34672); // fail if faulty ID is present in report
-			report.readUint32(); // ignore the carried settings
-		}
+		ServiceTests::reset();
 	}
 
+
 	// **WARNING**
 	// TODO: Update this test (and all tests in general) to use the error handler's output when
 	//  checking for assertions.