diff --git a/test/mocks/mass-pnf-sim/mass-pnf-sim.py b/test/mocks/mass-pnf-sim/mass-pnf-sim.py
index 7358eb5..aa371e0 100755
--- a/test/mocks/mass-pnf-sim/mass-pnf-sim.py
+++ b/test/mocks/mass-pnf-sim/mass-pnf-sim.py
@@ -36,22 +36,37 @@
     logging.basicConfig(level=logging.INFO, format='[%(levelname)s] %(message)s')
 
 parser = argparse.ArgumentParser()
-parser.add_argument('--bootstrap', help='Bootstrap the system', type=int, metavar='COUNT')
-parser.add_argument('--trigger', help='Trigger one single VES event from each simulator', type=int,
-                    metavar='COUNT')
-parser.add_argument('--triggerstart', help='Trigger only a subset of the simulators (note --triggerend)', type=int,
-                    metavar='COUNT_START')
-parser.add_argument('--triggerend', help='Last instance to trigger', type=int, metavar='COUNT_END')
-parser.add_argument('--urlves', help='URL of the VES collector', type=validate_url, metavar='URL')
-parser.add_argument('--ipfileserver', help='Visible IP of the file server (SFTP/FTPS) to be included in the VES event',
-                    type=validate_ip, metavar='IP')
-parser.add_argument('--typefileserver', help='Type of the file server (SFTP/FTPS) to be included in the VES event',
-                    type=str, choices=['sftp', 'ftps'])
-parser.add_argument('--ipstart', help='IP address range beginning', type=validate_ip, metavar='IP')
-parser.add_argument('--clean', action='store_true', help='Clean work-dirs')
-parser.add_argument('--start', help='Start instances', type=int, metavar='COUNT')
-parser.add_argument('--status', help='Status', type=int, metavar='COUNT')
-parser.add_argument('--stop', help='Stop instances', type=int, metavar='COUNT')
+subparsers = parser.add_subparsers(title='Subcommands', dest='subcommand')
+# Bootstrap command parser
+parser_bootstrap = subparsers.add_parser('bootstrap', help='Bootstrap the system')
+parser_bootstrap.add_argument('--count', help='Instance count to bootstrap', type=int, metavar='INT', default=1)
+parser_bootstrap.add_argument('--urlves', help='URL of the VES collector', type=validate_url, metavar='URL', required=True)
+parser_bootstrap.add_argument('--ipfileserver', help='Visible IP of the file server (SFTP/FTPS) to be included in the VES event',
+                              type=validate_ip, metavar='IP', required=True)
+parser_bootstrap.add_argument('--typefileserver', help='Type of the file server (SFTP/FTPS) to be included in the VES event',
+                              type=str, choices=['sftp', 'ftps'], required=True)
+parser_bootstrap.add_argument('--ipstart', help='IP address range beginning', type=validate_ip, metavar='IP', required=True)
+# Start command parser
+parser_start = subparsers.add_parser('start', help='Start instances')
+parser_start.add_argument('--count', help='Instance count to start', type=int, metavar='INT', default=1)
+# Stop command parser
+parser_stop = subparsers.add_parser('stop', help='Stop instances')
+parser_stop.add_argument('--count', help='Instance count to stop', type=int, metavar='INT', default=1)
+# Trigger command parser
+parser_trigger = subparsers.add_parser('trigger', help='Trigger one single VES event from each simulator')
+parser_trigger.add_argument('--count', help='Instance count to trigger', type=int, metavar='INT', default=1)
+# Trigger-custom command parser
+parser_triggerstart = subparsers.add_parser('trigger-custom', help='Trigger one single VES event from specific simulators')
+parser_triggerstart.add_argument('--triggerstart', help='First simulator id to trigger', type=int,
+                                 metavar='INT', required=True)
+parser_triggerstart.add_argument('--triggerend', help='Last simulator id to trigger', type=int,
+                                 metavar='INT', required=True)
+# Status command parser
+parser_status = subparsers.add_parser('status', help='Status')
+parser_status.add_argument('--count', help='Instance count to show status for', type=int, metavar='INT', default=1)
+# Clean command parser
+parser_clean = subparsers.add_parser('clean', help='Clean work-dirs')
+# General options parser
 parser.add_argument('--verbose', help='Verbosity level', choices=['info', 'debug'],
                     type=str, default='debug')
 
@@ -60,7 +75,11 @@
 logger = logging.getLogger(__name__)
 logger.setLevel(getattr(logging, args.verbose.upper()))
 
-if args.bootstrap and args.ipstart and args.urlves:
+if args.subcommand is None:
+    parser.print_usage()
+    sys.exit(0)
+
+if args.subcommand == 'bootstrap' :
     logger.info("Bootstrapping PNF instances")
 
     start_port = 2000
@@ -69,7 +88,7 @@
 
     ftps_pasv_port_end = ftps_pasv_port_start + ftps_pasv_port_num_of_ports
 
-    for i in range(args.bootstrap):
+    for i in range(args.count):
         logger.info(f"PNF simulator instance: {i}")
 
         # The IP ranges are in distance of 16 compared to each other.
@@ -138,16 +157,13 @@
     completed = subprocess.run('set -x; cd pnf-sim-lightweight; ./simulator.sh build ', shell=True)
     logger.info(f"Build docker image: {completed.stdout}")
 
-    sys.exit()
-
-if args.clean:
+if args.subcommand == 'clean':
     completed = subprocess.run('rm -rf ./pnf-sim-lw-*', shell=True)
     logger.info(f'Deleting: {completed.stdout}')
-    sys.exit()
 
-if args.start:
+if args.subcommand == 'start':
 
-    for i in range(args.start):
+    for i in range(args.count):
         foldername = f"pnf-sim-lw-{i}"
 
         completed = subprocess.run(
@@ -156,12 +172,11 @@
             "; bash -x ./simulator.sh start",
             shell=True)
         logger.info(f'Starting: {completed.stdout}')
-
         time.sleep(5)
 
-if args.status:
+if args.subcommand == 'status':
 
-    for i in range(args.status):
+    for i in range(args.count):
         foldername = f"pnf-sim-lw-{i}"
 
         completed = subprocess.run(
@@ -171,8 +186,8 @@
             shell=True)
         logger.info(f'Status: {completed.stdout}')
 
-if args.stop:
-    for i in range(args.stop):
+if args.subcommand == 'stop':
+    for i in range(args.count):
         foldername = f"pnf-sim-lw-{i}"
 
         completed = subprocess.run(
@@ -183,10 +198,10 @@
         logger.info(f'Stopping: {completed.stdout}')
 
 
-if args.trigger:
+if args.subcommand == 'trigger':
     logger.info("Triggering VES sending:")
 
-    for i in range(args.trigger):
+    for i in range(args.count):
         foldername = f"pnf-sim-lw-{i}"
 
         completed = subprocess.run(
@@ -196,7 +211,7 @@
             shell=True)
         logger.info(f'Status: {completed.stdout}')
 
-if args.triggerstart and args.triggerend:
+if args.subcommand == 'trigger-custom':
     logger.info("Triggering VES sending by a range of simulators:")
 
     for i in range(args.triggerstart, args.triggerend+1):
@@ -209,7 +224,3 @@
             "; ./simulator.sh trigger-simulator",
             shell=True)
         logger.info(f'Status: {completed.stdout}')
-else:
-    logger.warning("No instruction was defined")
-    parser.print_usage()
-    sys.exit()
