diff --git a/test/mocks/mass-pnf-sim/README.md b/test/mocks/mass-pnf-sim/README.md
index 1ed90b5..ffa82c1 100644
--- a/test/mocks/mass-pnf-sim/README.md
+++ b/test/mocks/mass-pnf-sim/README.md
@@ -15,19 +15,21 @@
 For debug purposes, you can use your own IP address as VES collector, use "ip" command to determine it.
 
 Example:
-python3 ./mass-pnf-sim.py  --bootstrap 2 --ipves http://10.148.95.??:10000 --ipstart 10.11.0.16
+./mass-pnf-sim.py  --bootstrap 2 --ipves http://10.148.95.??:10000 --ipfileserver 10.148.95.??? --ipstart 10.11.0.16
 
 ###Replacing VES for test purposes
-`nc -l 10000`
+`sudo nc -vv -l -k -p 10000`
 
 ###Start
 Define the amount of simulators to be launched
-python3 ./mass-pnf-sim.py  --start 2
+./mass-pnf-sim.py  --start 2
 
+###Trigger 
+./mass-pnf-sim.py  --trigger 2
 
 ###Stop and clean
-python3 ./mass-pnf-sim.py  --stop 2
-python3 ./mass-pnf-sim.py  --clean
+./mass-pnf-sim.py  --stop 2
+./mass-pnf-sim.py  --clean
 
 ###Cleaning and recovery after incorrect configuration
 docker stop $(docker ps -aq); docker rm $(docker ps -aq)
diff --git a/test/mocks/mass-pnf-sim/mass-pnf-sim.py b/test/mocks/mass-pnf-sim/mass-pnf-sim.py
index ba05986..898cd65 100755
--- a/test/mocks/mass-pnf-sim/mass-pnf-sim.py
+++ b/test/mocks/mass-pnf-sim/mass-pnf-sim.py
@@ -14,11 +14,21 @@
 )
 
 parser.add_argument(
+    '--trigger',
+    help='Trigger one single VES event from each simulator',
+)
+
+parser.add_argument(
     '--ipves',
     help='IP of the VES collector',
 )
 
 parser.add_argument(
+    '--ipfileserver',
+    help='Visible IP of the file server (SFTP/FTPS) to be included in the VES event',
+)
+
+parser.add_argument(
     '--ipstart',
     help='IP address range beginning',
 )
@@ -49,6 +59,8 @@
 if args.bootstrap and args.ipstart and args.ipves:
     print("Bootstrap:")
 
+    start_port=2000
+
     for i in range(int(args.bootstrap)):
         print("PNF simulator instance: " + str(i) + ".")
 
@@ -63,9 +75,15 @@
         IpPnfSim = ipaddress.ip_address(args.ipstart) + int(2 + (i * 16))
         print("\tIp Pnf SIM:" + str(IpPnfSim))
 
+        IpFileServer = args.ipfileserver
+
+        
+        PortSftp=start_port +1
+        PortFtps=start_port +2 
+        start_port +=2
         IpFtps = ipaddress.ip_address(args.ipstart) + int(3 + (i * 16))
         print("\tIp Ftps: " + str(IpFtps))
-
+ 
         IpSftp = ipaddress.ip_address(args.ipstart) + int(4 + (i * 16))
         print("\tIp Sftp:" + str(IpSftp))
 
@@ -84,6 +102,9 @@
             str(i) + " " +\
             str(args.ipves) + " " +\
             str(IpPnfSim) + " " +\
+            str(IpFileServer) + " " +\
+            str(PortSftp) + " " +\
+            str(PortFtps) + " " +\
             str(IpFtps) + " " +\
             str(IpSftp)
 
@@ -139,6 +160,20 @@
             shell=True)
         print('Stopping:', completed.stdout)
 
+
+if args.trigger:
+    print("Triggering VES sending:")
+
+    for i in range(int(args.trigger)):
+        foldername = "pnf-sim-lw-" + str(i)
+
+        completed = subprocess.run(
+            'cd ' +
+            foldername +
+            "; ./simulator.sh trigger-simulator",
+            shell=True)
+        print('Status:', completed.stdout)
+
 else:
     print("No instruction was defined")
     sys.exit()
diff --git a/test/mocks/mass-pnf-sim/pnf-sim-lightweight/README.md b/test/mocks/mass-pnf-sim/pnf-sim-lightweight/README.md
index 2b20d26..2940b65 100644
--- a/test/mocks/mass-pnf-sim/pnf-sim-lightweight/README.md
+++ b/test/mocks/mass-pnf-sim/pnf-sim-lightweight/README.md
@@ -1,6 +1,6 @@
 ##Local development shortcuts:
 ####To start listening on port 10000 for test purposes
-`nc -l 10000`
+`nc -l -k -p 10000`
 ####Test the command above: 
 `echo "Hello World" | nc localhost  10000`
 
@@ -27,10 +27,12 @@
 ```
 
 ```javascript
-{"commonEventHeader":{"startEpochMicrosec":"1551865758690","sourceId":"val13","eventId":"registration_51865758",
+{"event":{"commonEventHeader":{"startEpochMicrosec":"1551865758690","sourceId":"val13","eventId":"registration_51865758",
 "nfcNamingCode":"oam","internalHeaderFields":{},"priority":"Normal","version":"4.0.1","reportingEntityName":"NOK6061ZW3",
-"sequence":"0","domain":"notification","lastEpochMicrosec":"1551865758690","eventName":"pnfRegistration_Nokia_5gDu","vesEventListenerVersion":"7.0.1",
-"sourceName":"NOK6061ZW3","nfNamingCode":"gNB"},"notificationFields":{"notificationFieldsVersion":"2.0","changeType":"FileReady",
-"changeIdentifier":"PM_MEAS_FILES","arrayOfNamedHashMap":{"name":"10MB.tar.gz",
-"hashMap":{"location":"10.11.0.68/10MB.tar.gz","fileFormatType":"org.3GPP.32.435#measCollec","fileFormatVersion":"V10","compression":"gzip"}}}}
+"sequence":"0","domain":"notification","lastEpochMicrosec":"1551865758690","eventName":"pnfRegistration_Nokia_5gDu",
+"vesEventListenerVersion":"7.0.1","sourceName":"NOK6061ZW3","nfNamingCode":"gNB"},
+"notificationFields":{"notificationFieldsVersion":"2.0","changeType":"FileReady","changeIdentifier":"PM_MEAS_FILES",
+"arrayOfNamedHashMap":[{"name":"10MB.tar.gz","hashMap":{
+"location":"ftpes://10.11.0.68/10MB.tar.gz","fileFormatType":"org.3GPP.32.435#measCollec",
+"fileFormatVersion":"V10","compression":"gzip"}}]}}}
 ```
\ No newline at end of file
diff --git a/test/mocks/mass-pnf-sim/pnf-sim-lightweight/docker-compose-template.yml b/test/mocks/mass-pnf-sim/pnf-sim-lightweight/docker-compose-template.yml
index f532268..aa0261c 100644
--- a/test/mocks/mass-pnf-sim/pnf-sim-lightweight/docker-compose-template.yml
+++ b/test/mocks/mass-pnf-sim/pnf-sim-lightweight/docker-compose-template.yml
@@ -29,6 +29,8 @@
     networks:
       front-${I}:
         ipv4_address: "${IPSFTP}"
+    ports:
+      - "${PORTSFTP}:22"
     volumes:
       - ./files/onap/:/home/onap/
     restart: on-failure
@@ -40,6 +42,8 @@
     networks:
       front-${I}:
         ipv4_address: "${IPFTPS}"
+    ports:
+         - "${PORTFTPS}:21"
     environment:
       FTP_USER: onap
       FTP_PASSWORD: pano
diff --git a/test/mocks/mass-pnf-sim/pnf-sim-lightweight/simulator.sh b/test/mocks/mass-pnf-sim/pnf-sim-lightweight/simulator.sh
index bed64b0..86f15a8 100755
--- a/test/mocks/mass-pnf-sim/pnf-sim-lightweight/simulator.sh
+++ b/test/mocks/mass-pnf-sim/pnf-sim-lightweight/simulator.sh
@@ -20,8 +20,8 @@
 
     case $COMMAND in
     	"compose")
-            compose $2 $3 $4 $5 $6 $7 $8;;
-             #IPGW, #IPSUBNET, #I, #IPVES, #IPPNFSIM, #IPFTP, #IPSFTP,
+            compose $2 $3 $4 $5 $6 $7 $8 $9 "${10}" "${11}" ;;
+             #IPGW, #IPSUBNET, #I, #IPVES, #IPPNFSIM, #IPFILESERVER, #PORTSFTP, #PORTFTPS, #IPFTPS, #IPSFTP
         "build")
             build_image;;
         "start")
@@ -64,8 +64,11 @@
 	export I=$3
 	export IPVES=$4
 	export IPPNFSIM=$5
-	export IPFTPS=$6
-	export IPSFTP=$7
+	export IPFILESERVER=$6
+	export PORTSFTP=$7
+	export PORTFTPS=$8
+	export IPFTPS=$9
+	export IPSFTP=${10}
 
 	#will insert $I to distinguish containers, networks properly
 	#docker compose cannot substitute these, as they are keys, not values.
@@ -78,7 +81,7 @@
 
 	set_vsftpd_file_owner
 
-	write_config $IPVES $IPFTPS $IPSFTP $IPPNFSIM
+	write_config $IPVES $IPFILESERVER $PORTSFTP $PORTFTPS $IPPNFSIM
 
 }
 
@@ -99,9 +102,9 @@
 function write_config(){
 	#building a YML file for usage in Java
 	echo "vesip: $1" > config/config.yml
-	echo "ipftps: $2" >> config/config.yml
-	echo "ipsftp: $3" >> config/config.yml
-	echo "ippnfsim: $4" >> config/config.yml
+	echo "ipsftp: $2:$3" >> config/config.yml
+	echo "ipftps: $2:$4" >> config/config.yml
+	echo "ippnfsim: $5" >> config/config.yml
 }
 
 function start(){
diff --git a/test/mocks/mass-pnf-sim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/message/MessageProvider.java b/test/mocks/mass-pnf-sim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/message/MessageProvider.java
index d59e829..839d402 100644
--- a/test/mocks/mass-pnf-sim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/message/MessageProvider.java
+++ b/test/mocks/mass-pnf-sim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/message/MessageProvider.java
@@ -114,24 +114,6 @@
         JSONArray jsonArrayOfNamedHashMap = new JSONArray();
         jsonArrayOfNamedHashMap.put(jsonHashMap);
 
-
-
-        // // notification.put("name", "NAME_DUMMY");
-        // JSONObject notification = new JSONObject();
-        //
-        // notificationParams.ifPresent(jsonObject -> {
-        // copyParametersToFields(notification, notificationFields);
-        // commonEventHeader.put(DOMAIN, DOMAIN_NOTIFICATION);
-        // event.put(NOTIFICATION_FIELDS, notificationFields);
-        // });
-
-
-        // notificationParams.ifPresent(jsonObject -> {
-        // copyParametersToFields(jsonObject.toMap(), notificationFields);
-        // commonEventHeader.put(DOMAIN, DOMAIN_NOTIFICATION);
-        // event.put(NOTIFICATION_FIELDS, notificationFields);
-        // });
-
         event.put(COMMON_EVENT_HEADER, commonEventHeader);
         JSONObject root = new JSONObject();
         root.put(EVENT, event);
@@ -141,7 +123,6 @@
 
     public JSONObject createOneVesEvent(String xnfUrl, String fileName) {
 
-        String notificationFields;
         JSONObject nof = new JSONObject();
 
         nof.put("notificationFieldsVersion", "2.0");
@@ -150,20 +131,20 @@
         nof.put("changeIdentifier", "PM_MEAS_FILES");
 
         JSONObject hm = new JSONObject();
-        hm.put("location", xnfUrl.concat(fileName));
+        hm.put("location", "ftpes://".concat(xnfUrl).concat(fileName));
         hm.put("fileFormatType", "org.3GPP.32.435#measCollec");
         hm.put("fileFormatVersion", "V10");
         hm.put("compression", "gzip");
 
-        JSONObject aonh = new JSONObject();
-        aonh.put("name", fileName);
+        JSONObject aonhElement = new JSONObject();
+        aonhElement.put("name", fileName);
+        aonhElement.put("hashMap", hm);
 
-        aonh.put("hashMap", hm);
+        JSONArray aonh = new JSONArray();
+        aonh.put(aonhElement);
 
         nof.put("arrayOfNamedHashMap", aonh);
 
-        String nofString = nof.toString();
-
         JSONObject ceh = new JSONObject(); // commonEventHandler
         ceh.put("startEpochMicrosec", "1551865758690");
         ceh.put("sourceId", "val13");
@@ -183,18 +164,23 @@
         JSONObject ihf = new JSONObject(); // internalHeaderFields
         ceh.put("internalHeaderFields", ihf);
 
-        JSONObject event = new JSONObject();
-        event.put("commonEventHeader", ceh);
-        event.put("notificationFields", nof);
+        JSONObject eventContent = new JSONObject();
+        eventContent.put("commonEventHeader", ceh);
+        eventContent.put("notificationFields", nof);
 
-        System.out.println("event: ");
+
+        JSONObject event = new JSONObject();
+        event.put("event", eventContent);
+
+        System.out.println("VES messages to be sent: ");
         System.out.println(event.toString());
 
         return event;
 
      // @formatter:off
         /*
-        {
+    {
+        "event": {
             "commonEventHeader": {                          <== "ceh"
                 "startEpochMicrosec": "1551865758690",
                 "sourceId": "val13",
@@ -217,21 +203,21 @@
                 "notificationFieldsVersion": "2.0",
                 "changeType": "FileReady",
                 "changeIdentifier": "PM_MEAS_FILES",
-                "arrayOfNamedHashMap": {                    <== "aonh"
-                    "name": "A20161224.1030-1045.bin.gz",
-                    "hashMap": {                            <== "hm"
-                        "location": "ftpes://192.169.0.1:22/ftp/rop/A20161224.1030-1045.bin.gz",
-                        "fileFormatType": "org.3GPP.32.435#measCollec",
-                        "fileFormatVersion": "V10",
-                        "compression": "gzip"
+                "arrayOfNamedHashMap": [                    <== "aonh"
+                    {                                       <== "aonhElement"
+                        "name": "A20161224.1030-1045.bin.gz",
+                        "hashMap": {                            <== "hm"
+                            "location": "ftpes://192.169.0.1:22/ftp/rop/A20161224.1030-1045.bin.gz",
+                            "fileFormatType": "org.3GPP.32.435#measCollec",
+                            "fileFormatVersion": "V10",
+                            "compression": "gzip"
+                         }
                     }
-                }
+                ]
             }
         }
-
-        */
-     // @formatter:on
-
     }
-
+    */
+     // @formatter:on
+    }
 }
diff --git a/test/mocks/pnf-onboarding/unsecureAcmePnf.csar b/test/mocks/pnf-onboarding/unsecureAcmePnf.csar
index 92ff8fc..37e4733 100644
--- a/test/mocks/pnf-onboarding/unsecureAcmePnf.csar
+++ b/test/mocks/pnf-onboarding/unsecureAcmePnf.csar
Binary files differ
