diff --git a/tc/obsw_tc_service20.py b/tc/obsw_tc_service20.py
index 40ffc25ab051eb487038a9941b2e1ed2452452c8..924acd7a255d26a1f2c0e75eb90519f9ca238e2a 100644
--- a/tc/obsw_tc_service20.py
+++ b/tc/obsw_tc_service20.py
@@ -13,70 +13,83 @@ from tc.obsw_tc_service200 import pack_mode_data
 
 
 def pack_service20_test_into(tc_queue: Deque, called_externally: bool = False) -> Deque:
+    #parameter IDs
+    parameterID0 = 0
+    parameterID1 = 1
+    parameterID2 = 2
+
     if called_externally is False:
         tc_queue.appendleft(("print", "Testing Service 20"))
     object_id = g.DUMMY_DEVICE_ID
 
+    # set mode normal
+    tc_queue.appendleft(("print", "Testing Service 20: Set Normal Mode"))
+    mode_data = pack_mode_data(object_id, 2, 0)
+    command = PusTelecommand(service=200, subservice=1, ssc=2000, app_data=mode_data)
+    tc_queue.appendleft(command.pack_command_tuple())
+
     #test invalid subservice
     #use subservice 130 for invalid subservice check, as this is in use for dump reply
     #(and therefore will never be a valid subservice)
-    tc_queue.appendleft(("print", "Testing Service 20: Invalid subservice"))
-    mode_data = pack_mode_data(object_id, 2, 0)
-    command = PusTelecommand(service=20, subservice=130, ssc=810, app_data=mode_data)
-    tc_queue.appendleft(command.pack_command_tuple())
+    #tc_queue.appendleft(("print", "Testing Service 20: Invalid subservice"))
+    #mode_data = pack_mode_data(object_id, 2, 0)
+    #command = PusTelecommand(service=20, subservice=130, ssc=810, app_data=mode_data)
+    #tc_queue.appendleft(command.pack_command_tuple())
 
     #test invalid objectid //TODO: do we have an objectid known to be empty (even in future)?
-    tc_queue.appendleft(("print", "Testing Service 20: Invalid object ID"))
-    mode_data = pack_mode_data(object_id, 2, 0)
-    command = PusTelecommand(service=20, subservice=128, ssc=810, app_data=mode_data)
-    tc_queue.appendleft(command.pack_command_tuple())
+    #tc_queue.appendleft(("print", "Testing Service 20: Invalid object ID"))
+    #mode_data = pack_mode_data(object_id, 2, 0)
+    #command = PusTelecommand(service=20, subservice=128, ssc=810, app_data=mode_data)
+    #tc_queue.appendleft(command.pack_command_tuple())
 
     #test invalid parameterID for load
-    tc_queue.appendleft(("print", "Testing Service 20: Invalid parameter ID for load"))
-    mode_data = pack_mode_data(object_id, 2, 0)
-    command = PusTelecommand(service=20, subservice=128, ssc=810, app_data=mode_data)
-    tc_queue.appendleft(command.pack_command_tuple())
+    #tc_queue.appendleft(("print", "Testing Service 20: Invalid parameter ID for load"))
+    #mode_data = pack_mode_data(object_id, 2, 0)
+    #command = PusTelecommand(service=20, subservice=128, ssc=810, app_data=mode_data)
+    #tc_queue.appendleft(command.pack_command_tuple())
 
     #test invalid parameterID for dump
-    tc_queue.appendleft(("print", "Testing Service 20: Invalid parameter ID for dump"))
-    mode_data = pack_mode_data(object_id, 2, 0)
-    command = PusTelecommand(service=20, subservice=129, ssc=810, app_data=mode_data)
-    tc_queue.appendleft(command.pack_command_tuple())
+    #tc_queue.appendleft(("print", "Testing Service 20: Invalid parameter ID for dump"))
+    #mode_data = pack_mode_data(object_id, 2, 0)
+    #command = PusTelecommand(service=20, subservice=129, ssc=810, app_data=mode_data)
+    #tc_queue.appendleft(command.pack_command_tuple())
 
     #test checking Load for uint32_t
     tc_queue.appendleft(("print", "Testing Service 20: Load uint32_t"))
-    mode_data = pack_mode_data(object_id, 2, 0)
-    command = PusTelecommand(service=20, subservice=128, ssc=810, app_data=mode_data)
+    parameter = struct.pack(">I", parameterID0)
+    parameter_data = struct.pack(">I", 42)
+    payload = parameter+parameter_data
+    command = PusTelecommand(service=20, subservice=128, ssc=2001, app_data=payload)
     tc_queue.appendleft(command.pack_command_tuple())
 
     #test checking Dump for uint32_t
     tc_queue.appendleft(("print", "Testing Service 20: Dump uint32_t"))
-    mode_data = pack_mode_data(object_id, 2, 0)
-    command = PusTelecommand(service=20, subservice=129, ssc=810, app_data=mode_data)
+    parameter = struct.pack(">I", parameterID0)
+    command = PusTelecommand(service=20, subservice=129, ssc=2001, app_data=parameter)
     tc_queue.appendleft(command.pack_command_tuple())
 
     #test checking Load for int32_t
     tc_queue.appendleft(("print", "Testing Service 20: Load int32_t"))
     mode_data = pack_mode_data(object_id, 2, 0)
-    command = PusTelecommand(service=20, subservice=128, ssc=810, app_data=mode_data)
+    command = PusTelecommand(service=20, subservice=128, ssc=2003, app_data=mode_data)
     tc_queue.appendleft(command.pack_command_tuple())
 
     #test checking Dump for int32_t
     tc_queue.appendleft(("print", "Testing Service 20: Dump int32_t"))
     mode_data = pack_mode_data(object_id, 2, 0)
-    command = PusTelecommand(service=20, subservice=129, ssc=810, app_data=mode_data)
+    command = PusTelecommand(service=20, subservice=129, ssc=2004, app_data=mode_data)
     tc_queue.appendleft(command.pack_command_tuple())
 
     #test checking Load for float
     tc_queue.appendleft(("print", "Testing Service 20: Load float"))
     mode_data = pack_mode_data(object_id, 2, 0)
-    command = PusTelecommand(service=20, subservice=128, ssc=810, app_data=mode_data)
+    command = PusTelecommand(service=20, subservice=128, ssc=2005, app_data=mode_data)
     tc_queue.appendleft(command.pack_command_tuple())
 
     #test checking Dump for float
     tc_queue.appendleft(("print", "Testing Service 20: Dump float"))
     mode_data = pack_mode_data(object_id, 2, 0)
-    command = PusTelecommand(service=20, subservice=129, ssc=810, app_data=mode_data)
+    command = PusTelecommand(service=20, subservice=129, ssc=2006, app_data=mode_data)
     tc_queue.appendleft(command.pack_command_tuple())
 
     if called_externally is False:
diff --git a/tm/obsw_pus_tm_factory.py b/tm/obsw_pus_tm_factory.py
index f6b9be1758556e93072c073790a71bca8ad6027a..fe6857acd498416d6538690fcc59076be1be1f63 100644
--- a/tm/obsw_pus_tm_factory.py
+++ b/tm/obsw_pus_tm_factory.py
@@ -38,6 +38,8 @@ class PusTelemetryFactory(object):
             return Service8TM(raw_tm_packet)
         if service_type == 17:
             return Service17TM(raw_tm_packet)
+        if service_type == 20:
+            return Service20TM(raw_tm_packet)
         if service_type == 200:
             return Service200TM(raw_tm_packet)
         print("The service " + str(service_type) + " is not implemented in Telemetry Factory")
@@ -100,6 +102,21 @@ class Service17TM(PusTelemetry):
         super().append_telemetry_column_headers(array)
         return
 
+class Service20TM(PusTelemetry):
+    def __init__(self, byte_array):
+        super().__init__(byte_array)
+        self.parameter_id = struct.unpack('>I', self._tm_data[0:4])[0]
+        self.specify_packet_info("Functional Commanding Reply")
+
+    def append_telemetry_content(self, array):
+        super().append_telemetry_content(array)
+        array.append(self.parameter_id)
+        return
+
+    def append_telemetry_column_headers(self, array):
+        super().append_telemetry_column_headers(array)
+        array.append("param0_dump_repl")
+        return
 
 class Service200TM(PusTelemetry):
     def __init__(self, byte_array):