diff --git a/tc/obsw_tc_service23_sdcard.py b/tc/obsw_tc_service23_sdcard.py
index bcc70f174313bf47f68eef5739b2f6227a7015e3..1bd3a8b792de2b57e6a9885cb7f4f4474ea34c03 100644
--- a/tc/obsw_tc_service23_sdcard.py
+++ b/tc/obsw_tc_service23_sdcard.py
@@ -50,22 +50,26 @@ class FileTransferHelper:
         @param target_filename: Filename on target
         @param object_id:
         """
-        self.transfer_mode = self.TransferMode.NORMAL
+        self.__transfer_mode = self.TransferMode.NORMAL
         self.max_size_of_app_data = max_size_of_app_data
-        self.max_file_data_size = 0
+        self.__max_file_data_size = 0
         self.allowed_file_data_size = calculate_allowed_file_data_size(
             max_size_of_app_data, target_filename, target_repository)
         self.target_filename = target_filename
         self.target_repository = target_repository
-        self.renamed_name = self.target_filename + "old"
+        self.__renamed_name = self.target_filename + "old"
         self.object_id = object_id
         self.tc_queue = tc_queue
-        self.file_data = bytearray()
-        self.number_of_packets = 0
-        self.number_of_append_packets = 0
-        self.number_of_create_packets = 1
-        self.number_of_delete_packets = 0
-        self.local_filename = ""
+
+        self.__number_of_packets = 0
+        self.__number_of_append_packets = 0
+        self.__number_of_create_packets = 1
+        self.__number_of_delete_packets = 0
+        self.__number_of_finish_packets = 1
+
+        self.__lock_file = True
+        self.__local_filename = ""
+        self.__file_data = bytearray()
         # This will generate a telecommand to delete the old file, if it exists
         self.delete_old_file = False
         # This will generater a telecommand to rename the old file, if it exists
@@ -73,17 +77,23 @@ class FileTransferHelper:
 
     def set_data_from_file(self, local_filename: str):
         with open(local_filename, 'rb') as file:
-            self.file_data = file.read()
+            self.__file_data = file.read()
 
     def set_data_raw(self, tc_data: bytearray):
-        self.file_data = tc_data
+        self.__file_data = tc_data
 
     def set_to_delete_old_file(self):
-        self.transfer_mode = self.TransferMode.DELETE_OLD
+        self.__transfer_mode = self.TransferMode.DELETE_OLD
 
     def set_to_rename_old_file(self, renamed_name: str):
-        self.transfer_mode = self.TransferMode.RENAME_OLD
-        self.renamed_name = renamed_name
+        self.__transfer_mode = self.TransferMode.RENAME_OLD
+        self.__renamed_name = renamed_name
+
+    def set_to_lock_file(self, lock_file: bool):
+        self.__lock_file = lock_file
+
+    def get_number_of_packets_generated(self):
+        return self.__number_of_packets
 
     def set_max_file_data_size(self, max_file_data_size: int):
         """
@@ -92,32 +102,32 @@ class FileTransferHelper:
         @param max_file_data_size:
         @return:
         """
-        self.max_file_data_size = max_file_data_size
+        self.__max_file_data_size = max_file_data_size
 
     def file_size(self):
-        return len(self.file_data)
+        return len(self.__file_data)
 
     def generate_packets(self, ssc: int):
-        if self.transfer_mode == self.TransferMode.DELETE_OLD:
+        if self.__transfer_mode == self.TransferMode.DELETE_OLD:
             command = generate_rm_file_srv23_2_packet(self.target_filename, self.target_repository,
                                                       ssc, self.object_id)
-            self.number_of_delete_packets = 1
+            self.__number_of_delete_packets = 1
             ssc += 1
             self.tc_queue.appendleft(command.pack_command_tuple())
-        elif self.transfer_mode == self.TransferMode.RENAME_OLD:
+        elif self.__transfer_mode == self.TransferMode.RENAME_OLD:
             # not implemented yet
             pass
-        if len(self.file_data) > self.allowed_file_data_size:
+        if len(self.__file_data) > self.allowed_file_data_size:
             # Large file, create file with init_data
-            if self.max_file_data_size > 0:
-                init_data = self.file_data[0:self.max_file_data_size]
+            if self.__max_file_data_size > 0:
+                init_data = self.__file_data[0:self.__max_file_data_size]
             else:
-                init_data = self.file_data[0:self.allowed_file_data_size]
+                init_data = self.__file_data[0:self.allowed_file_data_size]
         else:
             # Small file, one packet for file creation sufficient
             command = generate_create_file_srv23_1_packet(
                 self.target_filename, self.target_repository, ssc, self.max_size_of_app_data,
-                self.file_data)
+                self.__file_data)
             ssc += 1
             self.tc_queue.appendleft(command.pack_command_tuple())
             return
@@ -128,12 +138,12 @@ class FileTransferHelper:
             init_data)
         ssc += 1
         self.tc_queue.appendleft(command.pack_command_tuple())
-        rest_of_data = self.file_data[self.allowed_file_data_size:]
+        rest_of_data = self.__file_data[self.allowed_file_data_size:]
         # Generate the rest of the packets to write to large file
-        if self.max_file_data_size > 0:
+        if self.__max_file_data_size > 0:
             self.__generate_append_to_file_packets_automatically(
                 data=rest_of_data, target_repository=self.target_repository,
-                target_filename=self.target_filename, size_of_data_blocks=self.max_file_data_size,
+                target_filename=self.target_filename, size_of_data_blocks=self.__max_file_data_size,
                 init_ssc=ssc)
         else:
             self.__generate_append_to_file_packets_automatically(
@@ -143,11 +153,11 @@ class FileTransferHelper:
         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)
+            ssc=ssc, lock_file=self.__lock_file)
         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
+        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, target_repository: str, target_filename: str,
@@ -200,7 +210,7 @@ class FileTransferHelper:
         # 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
+        self.__number_of_append_packets += number_of_packets
         header += data[number_of_packets * size_of_data_blocks:len(data)]
         commands = PusTelecommand(service=23, subservice=130, ssc=init_ssc + packet_sequence_number,
                                   app_data=header)
@@ -399,7 +409,7 @@ def generate_append_to_file_srv23_130_packet(
 
 
 def generate_finish_append_to_file_srv23_131_packet(
-        filename: str, repository_path: str, lock_file: bool, ssc: int,
+        filename: str, repository_path: str,  ssc: int, lock_file: bool = False,
         object_id: bytearray = g.SD_CARD_HANDLER_ID):
     data_to_pack = bytearray(object_id)
     data_to_pack += repository_path.encode('utf-8')
@@ -409,7 +419,6 @@ def generate_finish_append_to_file_srv23_131_packet(
     # Add string terminator of filename
     data_to_pack.append(0)
     data_to_pack.append(lock_file)
-    print(len(data_to_pack))
     return PusTelecommand(service=23, subservice=131, ssc=ssc, app_data=data_to_pack)
 
 
diff --git a/utility/obsw_binary_uploader.py b/utility/obsw_binary_uploader.py
index 996f29512ee3621f8559c60dac3fd66d6202807c..f70fa1832b5e99964ea55d82e5470fe8ba5e9883 100644
--- a/utility/obsw_binary_uploader.py
+++ b/utility/obsw_binary_uploader.py
@@ -86,6 +86,12 @@ def perform_file_upload(com_if: CommunicationInterface, tmtc_printer: TmTcPrinte
     else:
         bootloader_prompt = False
 
+    prompt_lock = input("Lock file with last packet? [y/n]: ")
+    if prompt_lock in ['n', "no", 0]:
+        prompt_lock = False
+    else:
+        prompt_lock = True
+
     if bootloader_prompt:
         file_name = "bl.bin"
     else:
@@ -117,7 +123,6 @@ def perform_file_upload(com_if: CommunicationInterface, tmtc_printer: TmTcPrinte
     else:
         LOGGER.info("Specified path invalid..")
 
-    print("Generating folder structure..")
     tc_queue = deque()
 
     # Delete existing binary file first, otherwise data might be appended to otherwise
@@ -132,13 +137,21 @@ def perform_file_upload(com_if: CommunicationInterface, tmtc_printer: TmTcPrinte
     file_transfer_helper.set_data_from_file(file_path)
     file_transfer_helper.set_to_delete_old_file()
     file_transfer_helper.generate_packets(init_ssc)
+    if prompt_lock:
+        file_transfer_helper.set_to_lock_file(True)
+    else:
+        file_transfer_helper.set_to_lock_file(False)
+
     tm_listener.set_listener_mode(TmListener.ListenerModes.MANUAL)
     print_string = "BinaryUploader: Detected file size: " + str(file_transfer_helper.file_size())
     LOGGER.info(print_string)
-    total_num_packets = file_transfer_helper.number_of_packets
+    total_num_packets = file_transfer_helper.get_number_of_packets_generated()
     print_string = "BinaryUploader: " + str(total_num_packets) + \
-                   " packets generated with " + \
-                   str(file_transfer_helper.number_of_append_packets) + " append packets."
+                   " packets generated."
+    if prompt_lock:
+        print_string += " File will be locked."
+    else:
+        print_string += " File will not be locked."
     LOGGER.info(print_string)
     interval = 0.6
     last_sent = time.time()