diff --git a/tc/obsw_tc_service23_sdcard.py b/tc/obsw_tc_service23_sdcard.py
index e1d468acded6d9446628a7049a46e64a4c8108af..488175637411a944d5a3ab6f39ebc04699f525b1 100644
--- a/tc/obsw_tc_service23_sdcard.py
+++ b/tc/obsw_tc_service23_sdcard.py
@@ -137,8 +137,14 @@ class FileTransferHelper:
         else:
             self.__generate_append_to_file_packets_automatically(
                 rest_of_data, self.max_size_of_app_data, ssc)
-        self.number_of_packets = self.number_of_append_packets + self.number_of_create_packets +\
-                                 self.number_of_delete_packets
+        ssc += 1
+        last_command = generate_finish_append_to_file_srv23_131_packet(
+            filename=self.target_filename, repository_path=self.target_repository,
+            ssc=ssc, lock_file=True)
+        self.tc_queue.appendleft(last_command.pack_command_tuple())
+        self.number_of_packets = \
+            self.number_of_append_packets + self.number_of_create_packets +\
+            self.number_of_delete_packets + 1
 
     def __generate_append_to_file_packets_automatically(
             self, data: bytearray, size_of_data_blocks: int, init_ssc: int):
@@ -187,6 +193,7 @@ class FileTransferHelper:
             # Remove everything except the header
             header = header[:len(header) - size_of_data_blocks - 2]
             packet_sequence_number = packet_sequence_number + 1
+        # Last packet will be subservice 131 to finish  the append operation
         header.append(packet_sequence_number >> 8)
         header.append(0xFF & packet_sequence_number)
         self.number_of_append_packets += number_of_packets
@@ -370,7 +377,7 @@ def generate_rmdir_srv23_10_packet(directory_name: str, repository_path: str, ss
     return PusTelecommand(service=23, subservice=10, ssc=ssc, app_data=data_to_pack)
 
 
-def generate_append_to_file_srv23_128_packet(
+def generate_append_to_file_srv23_130_packet(
         filename: str, repository_path: str, packet_sequence_number: int,
         ssc: int, file_data: bytearray = bytearray([]),
         object_id: bytearray = g.SD_CARD_HANDLER_ID) -> PusTelecommand:
@@ -384,15 +391,27 @@ def generate_append_to_file_srv23_128_packet(
     data_to_pack += file_data
     data_to_pack.append(packet_sequence_number >> 8)
     data_to_pack.append(packet_sequence_number & 0xff)
-    return PusTelecommand(service=23, subservice=128, ssc=ssc, app_data=data_to_pack)
+    return PusTelecommand(service=23, subservice=130, ssc=ssc, app_data=data_to_pack)
 
+def generate_finish_append_to_file_srv23_131_packet(
+        filename:str, repository_path: str, lock_file: bool, ssc:int ,
+        object_id: bytearray = g.SD_CARD_HANDLER_ID):
+    data_to_pack = bytearray(object_id)
+    data_to_pack += bytearray(repository_path, 'utf-8')
+    # Add string terminator of repository path
+    data_to_pack.append(0)
+    data_to_pack += bytearray(filename, 'utf-8')
+    # Add string terminator of filename
+    data_to_pack.append(0)
+    data_to_pack.append(lock_file)
+    return PusTelecommand(service=23, subservice=131, ssc=ssc, app_data=data_to_pack)
 
-def generate_read_file_srv23_129_packet(
+def generate_read_file_srv23_140_packet(
         repository_path: str, filename: str, ssc: int,
         object_id: bytearray = g.SD_CARD_HANDLER_ID) -> PusTelecommand:
     """
     This function generates the application data field for a PUS packet with service
-    23 and subservie 129. Subservice 129 is a custom service to request the data of a file.
+    23 and subservie 140. Subservice 140 is a custom service to request the data of a file.
     @param repository_path: The path of the target file
     @param filename: Name of file from which the content shall be read
     @param ssc: source sequence count
@@ -406,7 +425,7 @@ def generate_read_file_srv23_129_packet(
     data_to_pack += bytearray(filename, 'utf-8')
     # Add string terminator of filename
     data_to_pack.append(0)
-    return PusTelecommand(service=23, subservice=129, ssc=ssc, app_data=data_to_pack)
+    return PusTelecommand(service=23, subservice=140, ssc=ssc, app_data=data_to_pack)
 
 
 def pack_service23_commands_into(tc_queue: Deque, op_code: int) -> Deque:
diff --git a/tm/obsw_pus_tm_factory_hook.py b/tm/obsw_pus_tm_factory_hook.py
index 94899de4acb68c275049ca88e28cd29c6be22a96..29ec55a1af3839f859f7611378c53e58081f76d1 100644
--- a/tm/obsw_pus_tm_factory_hook.py
+++ b/tm/obsw_pus_tm_factory_hook.py
@@ -3,6 +3,7 @@ from tmtc_core.utility.obsw_logger import get_logger
 from tm.obsw_tm_service_1 import Service1TM
 from tm.obsw_tm_service_3 import Service3TM
 from tm.obsw_tm_service_5 import Service5TM
+from tm.obsw_tm_service_23 import Service23TM
 import struct
 
 LOGGER = get_logger()
@@ -24,6 +25,8 @@ def tm_factory_hook(raw_tm_packet: bytearray) -> PusTelemetry:
         return Service17TM(raw_tm_packet)
     if service_type == 20:
         return Service20TM(raw_tm_packet)
+    if service_type == 23:
+        return Service23TM(raw_tm_packet)
     if service_type == 200:
         return Service200TM(raw_tm_packet)
     LOGGER.info("The service " + str(service_type) + " is not implemented in Telemetry Factory")
diff --git a/tm/obsw_tm_service_23.py b/tm/obsw_tm_service_23.py
new file mode 100644
index 0000000000000000000000000000000000000000..8d162aa5494a6ce09190cf3b60595ba8687feced
--- /dev/null
+++ b/tm/obsw_tm_service_23.py
@@ -0,0 +1,33 @@
+from tmtc_core.tm.obsw_pus_tm_base import PusTelemetry
+
+
+class Service23TM(PusTelemetry):
+    MAX_REPOSITORY_LENGTH = 64
+    MAX_FILENAME_LENGTH = 12
+
+    def __init__(self, byte_array):
+        super().__init__(byte_array)
+        self.repo_path = ""
+        self.filename = ""
+        self.data_start_idx = 0
+        if self.get_subservice() == 132:
+            self.unpack_repo_and_filename()
+
+    def unpack_repo_and_filename(self):
+        repo_path_found = False
+        path_idx_start = 0
+        for idx in range(self.MAX_FILENAME_LENGTH + self.MAX_REPOSITORY_LENGTH):
+            if self._tm_data[idx] == "\0":
+                repo_bytes = self._tm_data[0:idx-1]
+                self.repo_path = repo_bytes.decode('utf-8')
+                print(self.repo_path)
+                path_idx_start = idx + 1
+                repo_path_found = True
+            if repo_path_found:
+                if self._tm_data[idx] == "\0":
+                    filename_bytes = self._tm_data[path_idx_start:idx-1]
+                    self.filename = filename_bytes.decode('utf-8')
+                    print(self.filename)
+                    self.data_start_idx = idx + 1
+
+
diff --git a/utility/obsw_binary_uploader.py b/utility/obsw_binary_uploader.py
index 7f162df445e39d990705aef4a4d28c84eca6605f..757f82b415437ad30b98b556bde059cc5e7754b1 100644
--- a/utility/obsw_binary_uploader.py
+++ b/utility/obsw_binary_uploader.py
@@ -19,6 +19,7 @@ import config.obsw_config as g
 from tmtc_core.utility.obsw_tmtc_printer import TmTcPrinter, DisplayMode
 from tmtc_core.utility.obsw_logger import get_logger
 from tmtc_core.sendreceive.obsw_tm_listener import TmListener
+from tmtc_core.tm.obsw_pus_tm_factory import PusTelemetryFactory
 
 LOGGER = get_logger()
 
@@ -167,8 +168,14 @@ def perform_file_upload(com_if: CommunicationInterface, tmtc_printer: TmTcPrinte
     print_string = "BinaryUploader: All binary packets were sent!"
     LOGGER.info(print_string)
     print_string = str(reception_deque.__len__()) + " replies received."
+
     LOGGER.info(print_string)
-    time.sleep(1.5)
+    time.sleep(15)
+    reception_deque.extend(tm_listener.retrieve_tm_packet_queue())
+    for tm_list in reception_deque:
+        for tm_packet in tm_list:
+            tm_packet = PusTelemetryFactory.create(tm_packet)
+            tmtc_printer.print_telemetry(tm_packet)
     tm_listener.clear_tm_packet_queue()
     LOGGER.info("Transitioning back to listener mode..")