diff --git a/tc/obsw_tc_service20.py b/tc/obsw_tc_service20.py
index 1f607ca42c394fd3730a2afa9511de3255ac155f..f0973ce9a03e5c0212a770edb98a615d604e5de3 100644
--- a/tc/obsw_tc_service20.py
+++ b/tc/obsw_tc_service20.py
@@ -16,8 +16,8 @@ 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
+    parameterID1 = 256
+    parameterID2 = 512
 
     if called_externally is False:
         tc_queue.appendleft(("print", "Testing Service 20"))
@@ -58,97 +58,59 @@ def pack_service20_test_into(tc_queue: Deque, called_externally: bool = False) -
     #test checking Load for uint32_t
     tc_queue.appendleft(("print", "Testing Service 20: Load uint32_t"))
     parameter_id = struct.pack(">I", parameterID0)
+    type_and_matrix_data = pack_type_and_matrix_data(3, 14, 1, 1)
     parameter_data = struct.pack(">I", 42)
-    payload = object_id + parameter_id + parameter_data
-    command = PusTelecommand(service=20, subservice=128, ssc=2001, app_data=payload)
+    payload = object_id + parameter_id+ type_and_matrix_data + parameter_data
+    command = PusTelecommand(service=20, subservice=128, ssc=2010, 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"))
     parameter_id = struct.pack(">I", parameterID0)
     payload = object_id + parameter_id
-    command = PusTelecommand(service=20, subservice=129, ssc=2001, app_data=payload)
+    command = PusTelecommand(service=20, subservice=129, ssc=2020, app_data=payload)
     tc_queue.appendleft(command.pack_command_tuple())
 
-    if called_externally is False:
-        tc_queue.appendleft(("export", "log/tmtc_log_service20.txt"))
-    return tc_queue
-
-
-"""
     #test checking Load for int32_t
+    tc_queue.appendleft(("print", "Testing Service 20: Load int32_t"))
     parameter_id = struct.pack(">I", parameterID1)
-    parameter_data = struct.pack(">I", -42)
-    payload = object_id + parameter_id + parameter_data
-    command = PusTelecommand(service=20, subservice=128, ssc=2001, app_data=payload)
+    type_and_matrix_data = pack_type_and_matrix_data(4, 14, 1, 1)
+    parameter_data = struct.pack(">i", -42)
+    payload = object_id + parameter_id+ type_and_matrix_data + parameter_data
+    command = PusTelecommand(service=20, subservice=128, ssc=2030, app_data=payload)
     tc_queue.appendleft(command.pack_command_tuple())
 
     #test checking Dump for int32_t
     tc_queue.appendleft(("print", "Testing Service 20: Dump int32_t"))
     parameter_id = struct.pack(">I", parameterID1)
     payload = object_id + parameter_id
-    command = PusTelecommand(service=20, subservice=129, ssc=2001, app_data=payload)
+    command = PusTelecommand(service=20, subservice=129, ssc=2040, app_data=payload)
     tc_queue.appendleft(command.pack_command_tuple())
 
     #test checking Load for float
     tc_queue.appendleft(("print", "Testing Service 20: Load float"))
     parameter_id = struct.pack(">I", parameterID2)
-    parameter_data = struct.pack(">I", 4.2)
-    payload = object_id + parameter_id + parameter_data
-    command = PusTelecommand(service=20, subservice=128, ssc=2001, app_data=payload)
+    type_and_matrix_data = pack_type_and_matrix_data(5, 1, 1, 1)
+    parameter_data = struct.pack(">f", 4.2)
+    payload = object_id + parameter_id+ type_and_matrix_data + parameter_data
+    command = PusTelecommand(service=20, subservice=128, ssc=2050, app_data=payload)
     tc_queue.appendleft(command.pack_command_tuple())
 
     #test checking Dump for float
     tc_queue.appendleft(("print", "Testing Service 20: Dump float"))
     parameter_id = struct.pack(">I", parameterID2)
     payload = object_id + parameter_id
-    command = PusTelecommand(service=20, subservice=129, ssc=2001, app_data=payload)
-    tc_queue.appendleft(command.pack_command_tuple())
-"""
-
-
-
-
-"""
-    # set mode on
-    tc_queue.appendleft(("print", "Testing Service 8: Set On Mode"))
-    mode_data = pack_mode_data(object_id, 1, 0)
-    command = PusTelecommand(service=200, subservice=1, ssc=800, app_data=mode_data)
+    command = PusTelecommand(service=20, subservice=129, ssc=2060, app_data=payload)
     tc_queue.appendleft(command.pack_command_tuple())
 
-    # set mode normal
-    tc_queue.appendleft(("print", "Testing Service 8: Set Normal Mode"))
-    mode_data = pack_mode_data(object_id, 2, 0)
-    command = PusTelecommand(service=200, subservice=1, ssc=810, app_data=mode_data)
-    tc_queue.appendleft(command.pack_command_tuple())
-
-    # Direct command which triggers completion reply
-    tc_queue.appendleft(("print", "Testing Service 8: Trigger Completion Reply"))
-    action_id = g.DUMMY_COMMAND_1
-    direct_command = object_id + action_id
-    command = PusTelecommand(service=8, subservice=128, ssc=820, app_data=direct_command)
-    tc_queue.appendleft(command.pack_command_tuple())
-
-    # Direct command which triggers _tm_data reply
-    tc_queue.appendleft(("print", "Testing Service 8: Trigger Data Reply"))
-    action_id = g.DUMMY_COMMAND_2
-    command_param1 = g.DUMMY_COMMAND_2_PARAM_1
-    command_param2 = g.DUMMY_COMMAND_2_PARAM_2
-    direct_command = object_id + action_id + command_param1 + command_param2
-    command = PusTelecommand(service=8, subservice=128, ssc=830, app_data=direct_command)
-    tc_queue.appendleft(command.pack_command_tuple())
-
-    # Direct command which triggers an additional step reply and one completion reply
-    tc_queue.appendleft(("print", "Testing Service 8: Trigger Step and Completion Reply"))
-    action_id = g.DUMMY_COMMAND_3
-    direct_command = object_id + action_id
-    command = PusTelecommand(service=8, subservice=128, ssc=840, app_data=direct_command)
-    tc_queue.appendleft(command.pack_command_tuple())
+    if called_externally is False:
+        tc_queue.appendleft(("export", "log/tmtc_log_service20.txt"))
+    return tc_queue
 
-    # set mode off
-    tc_queue.appendleft(("print", "Testing Service 8: Set Off Mode"))
-    mode_data = pack_mode_data(object_id, 0, 0)
-    command = PusTelecommand(service=200, subservice=1, ssc=800, app_data=mode_data)
-    tc_queue.appendleft(command.pack_command_tuple())
-    tc_queue.appendleft(("wait", 2))
-"""
+def pack_type_and_matrix_data(ptc, pfc, column, row):
+    data = bytearray(4)
+    data[0] = ptc
+    data[1] = pfc
+    data[2] = column
+    data[3] = row
+    return data
diff --git a/tm/obsw_pus_tm_factory.py b/tm/obsw_pus_tm_factory.py
index 7bad970302235aefb0e429eed3ec73219ee905c8..42c635580eaf62046f47ec174f76f2768ee44074 100644
--- a/tm/obsw_pus_tm_factory.py
+++ b/tm/obsw_pus_tm_factory.py
@@ -114,7 +114,12 @@ class Service20TM(PusTelemetry):
             self.type_pfc = self._tm_data[9]
             self.column = self._tm_data[10]
             self.row = self._tm_data[11]
-            self.param = struct.unpack('>I', self._tm_data[12:datasize])[0]
+            if self.type_ptc == 3 and self.type_pfc == 14:
+                self.param = struct.unpack('>I', self._tm_data[12:datasize])[0]
+            if self.type_ptc == 4 and self.type_pfc == 14:
+                self.param = struct.unpack('>i', self._tm_data[12:datasize])[0]
+            if self.type_ptc == 5 and self.type_pfc == 1:
+                self.param = struct.unpack('>f', self._tm_data[12:datasize])[0]
         self.specify_packet_info("Functional Commanding Reply")
 
     def append_telemetry_content(self, array):
@@ -125,7 +130,10 @@ class Service20TM(PusTelemetry):
             array.append("PTC: " + str(self.type_ptc) + " | PFC: " + str(self.type_pfc))
             array.append(str(self.column))
             array.append(str(self.row))
-            array.append(str(hex(self.param)))
+            if self.type_ptc == 5 and self.type_pfc == 1:
+                array.append(str(float(self.param)))
+            else:
+                array.append(str(hex(self.param)))
         return
 
     def append_telemetry_column_headers(self, array):