diff --git a/scripts/upgrade_oniro/upgrade_oniro.py b/scripts/upgrade_oniro/upgrade_oniro.py
index a4378377c98114da08b8208be2a84d01af55b225..ed330c6df81efb75be881f4738e82ac6fccd2026 100644
--- a/scripts/upgrade_oniro/upgrade_oniro.py
+++ b/scripts/upgrade_oniro/upgrade_oniro.py
@@ -55,18 +55,18 @@ command = ""
 
 # Upgrade options
 target_version = ""
-build_directory = pathlib.Path()
+build_directory = None
 machine = ""
 flavour = ""
 image = ""
-conf_directory = pathlib.Path()
+conf_directory = None
 dry_run = False
 store_backup = False
 
 # Backup options
 
 # Restore options
-backup_archive_path = ""
+backup_archive_arg = ""
 
 # Global vars
 backup_archive_name = ""
@@ -104,7 +104,7 @@ def init_script_options():
 
     # Restore subcommand
     restore_parser = subparsers.add_parser("restore", help="Restore a local backup.")
-    restore_parser.add_argument("backup_archive_path", type=str,
+    restore_parser.add_argument("backup_archive_arg", type=str,
                                 help="Specify the path of a local backup archive to restore. Use 'latest' to use the latest backup found.")
     
     parsed_args = vars(parser.parse_args())
@@ -126,8 +126,8 @@ def init_script_options():
         # TODO
         print("WIP")
     elif command == "restore":
-        global backup_archive_path
-        backup_archive_path = parsed_args["backup_archive_path"]
+        global backup_archive_arg
+        backup_archive_arg = parsed_args["backup_archive_arg"]
 
 def upgrade_tool():
     # TODO
@@ -144,12 +144,14 @@ def backup_oniro():
     #   - If build_directory is not empty, backup its content excluding tmp* and tmp-newlib* directories
     # TODO add function description
     # TODO add more verbose log
+    # TODO add an option to backup build directories / DV layers ?
     from upgrade_oniro_utils import get_manifest_projects
     from datetime import datetime
     
     backup_folders = [layer["path"] for layer in get_manifest_projects()] # add all manifest layers
     backup_folders.append(".repo")
-    if build_directory.exists():
+
+    if build_directory and build_directory.exists():
         for child in  build_directory.iterdir():
             if child.is_dir() and "tmp" not in child.name and child.name != "downloads":
                 backup_folders.append(f"{build_directory.name}/{child.name}")
@@ -169,9 +171,8 @@ def backup_oniro():
     # Remove the uncompressed copy of backup_folders
     os.remove("backup_folders")
 
-    # Save the name of the backup for later use in the script
-    global backup_archive_name
-    backup_archive_name = archive_name
+    print(f"Backup created at {archive_name}")
+
     return
 
 def restore_oniro():
@@ -180,6 +181,15 @@ def restore_oniro():
     # TODO add a subcommand to restore oniro from a backup
     # TODO add an exception handling if the metadata file is not found
     import shutil
+    from upgrade_oniro_utils import find_latest_backup
+
+    if backup_archive_arg == "latest":
+        backup_archive_name = find_latest_backup()
+
+    if os.path.exists(backup_archive_arg):
+        # TODO add a check to be sure that the selected path is actually a Oniro backup
+        backup_archive_name = backup_archive_arg
+    
     print(f"Restoring {backup_archive_name}")
     with tarfile.open(backup_archive_name) as backup_archive:
         # Extract the metadata file and delete all the old folders
@@ -203,7 +213,16 @@ def upgrade_oniro():
 if __name__ == "__main__":
     init_script_options()
     upgrade_tool()
-    perform_pre_upgrade_checks()
-    backup_oniro()
-    restore_oniro()
-    upgrade_oniro()
\ No newline at end of file
+
+    if command == "upgrade":
+        perform_pre_upgrade_checks()
+        backup_oniro()
+        restore_oniro()
+        upgrade_oniro()
+    
+    elif command == "backup":
+        backup_oniro()
+    
+    elif command == "restore":
+        restore_oniro()
+    
\ No newline at end of file