diff --git a/ric_benchmarking/README b/ric_benchmarking/README
index ec33208..ce81bb6 100644
--- a/ric_benchmarking/README
+++ b/ric_benchmarking/README
@@ -38,7 +38,9 @@
 To test the bouncer xapp, E2simulator is required to be build and run.
 1. Take the E2simulator code under RIC-Benchmarking/E2-interface.
 2. Run/Restart the Near RT RIC Platform pods.
-3. Run E2sim Pod using helm chart( build e2sim using docker file available in e2-interface/e2sim/e2sm_examples/kpm_e2sm/Dockerfile)
+3. Run E2sim Pod using helm chart( build e2sim using docker file available in e2-interface/e2sim/e2sm_examples/kpm_e2sm/Dockerfile). For Multiple E2sim instances update the Dockerfile(e2-interface/e2sim/e2sm_examples/kpm_e2sm/Dockerfile) with the number of instances.
+  For example: ./kpm_sim 192.168.122.66 32222 10 
+  where 10 = no of instances of E2sim     
 4. Deploy bouncer xapp by following the xapp onboarding steps
 
 Login to the bouncer xapp and E2sim Pods using kubectl exec to see the benchmarking timestamp.
diff --git a/ric_benchmarking/e2-interface/e2sim/docker/container-tag.yaml b/ric_benchmarking/e2-interface/e2sim/docker/container-tag.yaml
index 4983202..1e7438c 100644
--- a/ric_benchmarking/e2-interface/e2sim/docker/container-tag.yaml
+++ b/ric_benchmarking/e2-interface/e2sim/docker/container-tag.yaml
@@ -1,2 +1,2 @@
 ---
-tag: '1.0.0'
+tag: '2.0.0'
diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/Dockerfile b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/Dockerfile
index b8c119c..59ed72b 100644
--- a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/Dockerfile
+++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/Dockerfile
@@ -31,7 +31,7 @@
 
 # the builder has: git, wget, cmake, gcc/g++, make, python2/3. v7 dropped nng support
 #
-FROM nexus3.o-ran-sc.org:10004/o-ran-sc/bldr-ubuntu18-c-go:9-u18.04 as buildenv
+FROM nexus3.o-ran-sc.org:10002/o-ran-sc/bldr-ubuntu18-c-go:1.9.0 as buildenv
 
 # spaces to save things in the build image to copy to final image
 RUN mkdir -p /playpen/assets /playpen/src /playpen/bin
@@ -69,6 +69,8 @@
 	vim \
 	tcpdump \
 	net-tools \
+        libncurses5-dev \
+        libncursesw5-dev \
 	nmap \
   && apt-get clean
 
@@ -101,4 +103,4 @@
 	make install
 
 
-CMD kpm_sim 192.168.122.66 32222
+CMD kpm_sim 192.168.122.66 32222 
diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/e2sim-dev_1.0.0_amd64.deb b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/e2sim-dev_1.0.0_amd64.deb
index 9d7464b..bba627e 100644
--- a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/e2sim-dev_1.0.0_amd64.deb
+++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/e2sim-dev_1.0.0_amd64.deb
Binary files differ
diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/e2sim_1.0.0_amd64.deb b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/e2sim_1.0.0_amd64.deb
index 151b708..3c2a21e 100644
--- a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/e2sim_1.0.0_amd64.deb
+++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/e2sim_1.0.0_amd64.deb
Binary files differ
diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/helm/values.yaml b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/helm/values.yaml
index 751cda5..428d7e0 100644
--- a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/helm/values.yaml
+++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/helm/values.yaml
@@ -25,9 +25,9 @@
     app: e2simulator
     imagepullpolicy: IfNotPresent
     image:
-      name: oran-ric/e2simul
-      tag: 1.2.2     
-      registry: "oran.nexus:8082"
+      name: oran-ric/e2simulator
+      tag: 2.0.0   
+      registry: "nexus3.o-ran-sc.org:10002"
     port: 36422
 
     privilegedmode: false
diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/encode_kpm.cpp b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/encode_kpm.cpp
index 6981454..9604fa2 100644
--- a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/encode_kpm.cpp
+++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/encode_kpm.cpp
@@ -28,7 +28,7 @@
 
 void encode_kpm_function_description(E2SM_KPM_RANfunction_Description_t* ranfunc_desc) {
 
-  printf("kpm0\n");
+ // printf("kpm0\n");
 
   uint8_t *buf = (uint8_t*)"ORAN-E2SM-KPM";
   uint8_t *buf2 = (uint8_t*)"KPM monitor";
@@ -51,14 +51,14 @@
   ranfunc_desc->ranFunction_Name.ranFunction_Description.size = strlen((char*)buf2);
   ranfunc_desc->ranFunction_Name.ranFunction_Instance = &inst;
 
-  printf("kpm0.9\n");
+  //printf("kpm0.9\n");
 
   //  ranfunc_desc->ranFunction_Name.ranFunction_E2SM_OID = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t));
   ranfunc_desc->ranFunction_Name.ranFunction_E2SM_OID.buf = (uint8_t*)calloc(1,strlen((char*)buf3));
   memcpy(ranfunc_desc->ranFunction_Name.ranFunction_E2SM_OID.buf, buf3, strlen((char*)buf3));
   ranfunc_desc->ranFunction_Name.ranFunction_E2SM_OID.size = strlen((char*)buf3);
 
-  printf("kpm2\n");
+ // printf("kpm2\n");
   
 
   RIC_EventTriggerStyle_List_t *trigger_style =
@@ -71,20 +71,20 @@
   trigger_style->ric_EventTriggerStyle_Name.size = strlen((char*)buf4);
   trigger_style->ric_EventTriggerFormat_Type = 5;
 
-  printf("kpm3\n");
+  //printf("kpm3\n");
 
   ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_EventTriggerStyle_List =
     (E2SM_KPM_RANfunction_Description::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_EventTriggerStyle_List*)calloc(1,sizeof(E2SM_KPM_RANfunction_Description::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_EventTriggerStyle_List));
 
   int ret = ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_EventTriggerStyle_List->list , trigger_style);
-  printf("ret is %d\n", ret);
+  //printf("ret is %d\n", ret);
 
   RIC_ReportStyle_List_t *report_style1 = (RIC_ReportStyle_List_t*)calloc(1, sizeof(RIC_ReportStyle_List_t));
   report_style1->ric_ReportStyle_Type = 1;
 
   uint8_t *buf5 = (uint8_t*)"O-DU Measurement Container for the 5GC connected deployment";
 
-  printf("kpm4\n");  
+ // printf("kpm4\n");  
   
   //  report_style1->ric_ReportStyle_Name = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t));
   report_style1->ric_ReportStyle_Name.buf = (uint8_t*)calloc(1,strlen((char*)buf5));
@@ -93,7 +93,7 @@
   report_style1->ric_IndicationHeaderFormat_Type = 1;
   report_style1->ric_IndicationMessageFormat_Type = 1;
   
-  printf("kpm5\n");  
+ // printf("kpm5\n");  
 
   RIC_ReportStyle_List_t *report_style2 = (RIC_ReportStyle_List_t*)calloc(1, sizeof(RIC_ReportStyle_List_t));
   report_style2->ric_ReportStyle_Type = 2;
@@ -109,7 +109,7 @@
   report_style2->ric_IndicationHeaderFormat_Type = 1;
   report_style2->ric_IndicationMessageFormat_Type = 1;
 
-  printf("kpm6\n");  
+ // printf("kpm6\n");  
 
   RIC_ReportStyle_List_t *report_style3 = (RIC_ReportStyle_List_t*)calloc(1, sizeof(RIC_ReportStyle_List_t));
   report_style3->ric_ReportStyle_Type = 3;
@@ -171,7 +171,7 @@
   ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_ReportStyle_List->list, report_style5);
   ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_ReportStyle_List->list, report_style6);
 
-  xer_fprint(stderr, &asn_DEF_E2SM_KPM_RANfunction_Description, ranfunc_desc);
+  //xer_fprint(stderr, &asn_DEF_E2SM_KPM_RANfunction_Description, ranfunc_desc);
 }
 
 void encode_kpm_ocuup_user_level(RAN_Container_t *ranco) {
diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/kpm_callbacks.cpp b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/kpm_callbacks.cpp
index c0d94b1..ed59ffa 100644
--- a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/kpm_callbacks.cpp
+++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/kpm_callbacks.cpp
@@ -22,7 +22,7 @@
 #include <fstream>
 #include <vector>
 #include <unistd.h>
-
+#include <curses.h> 
 
 extern "C" {
   #include "OCUCP-PF-Container.h"
@@ -50,7 +50,7 @@
 
 #include <nlohmann/json.hpp>
 #include <thread>
-
+#include <pthread.h>
 
 using json = nlohmann::json;
 
@@ -60,9 +60,28 @@
 
 E2Sim e2sim;
 
-int main(int argc, char* argv[]) {
+struct args {
 
-  fprintf(stderr, "Starting KPM processor sim");
+    int args1;
+    //char **args2;
+    char** args2;
+    int plmnId;
+
+};
+
+
+//int main(int argc, char* argv[]) {
+
+void *initparam(void *input){	
+  fprintf(stderr, "Starting KPM processor sim\n");
+
+  //struct args *value1 = (struct args *)malloc(sizeof(struct args));
+  //fprintf(stderr,"ip address at initparam :%s port:%s\n",(char *)input->args2[1],(char *)input->args2[2]);
+  //struct args *value1 = (struct args *)input;
+ // value1 = (struct args *)input;
+  struct args *value1 = ( args *) input;
+  //fprintf(stderr,"ip address at initparam :%s port:%s\n",value1->args2[1],value1->args2[2]);
+
 
   asn_codec_ctx_t *opt_cod;
 
@@ -94,7 +113,7 @@
   memcpy(ranfunc_ostr->buf,e2smbuffer,er.encoded);
 
   printf("!!!lenth of ranfuncdesc is %d\n", strlen((char*)ranfuncdesc));
-  printf("value of this index is %d\n", ranfuncdesc[0]);
+/*  printf("value of this index is %d\n", ranfuncdesc[0]);
   printf("value of this index is %d\n", ranfuncdesc[1]);
   printf("value of this index is %d\n", ranfuncdesc[2]);
   printf("value of this index is %d\n", ranfuncdesc[3]);
@@ -105,12 +124,78 @@
   printf("value of this index is %d\n", ranfuncdesc[15]);
   printf("value of this index is %d\n", ranfuncdesc[100]);
   printf("value of this index is %d\n", ranfuncdesc[101]);
-  
+  */
   e2sim.register_e2sm(0,ranfunc_ostr);
   e2sim.register_subscription_callback(0,&callback_kpm_subscription_request);
+  
+  fprintf(stderr,"ip address at run loop call:%s port:%s\n",value1->args2[1],value1->args2[2]);
+  e2sim.run_loop(value1->args1,value1->args2,value1->plmnId);//(argc, argv);
 
-  e2sim.run_loop(argc, argv);
+}
 
+
+int main(int argc, char  **argv) {
+	
+        struct args *value = (struct args *)malloc(sizeof(struct args));
+        value->args1  = argc;
+	value->args2  = argv;
+//	printf("Enter number of e2sim\n");
+//	int num_of_e2sim = getch();
+        value->plmnId = 1;
+	//int plmnid = 1;
+
+	int num_of_e2sim;
+	if (value->args2[3] != NULL)
+	{
+		num_of_e2sim = atoi(value->args2[3]);//500;
+		fprintf(stderr,"number of e2sim : %d\n", num_of_e2sim);
+	} 
+
+	else
+	{
+		num_of_e2sim = 1;
+	}
+	//int num_of_e2sim = atoi(value->args2[3]);//500;
+
+	//options_t read_input_options(int argc, char* argv[]);
+
+	fprintf(stderr,"value of thread id is %d\n", num_of_e2sim);
+
+	fprintf(stderr,"argc : %d ,ip address:%s, port:%s\n", value->args1,value->args2[1], value->args2[2]); 
+
+	pthread_t threads[10000];
+	int retvalue;
+  	int i;
+        for( i = 0; i < num_of_e2sim; i++ ) {
+             
+	     //struct args *value = (struct args *)malloc(sizeof(struct args));	
+	     
+	      
+             //struct args *value = (struct args *)malloc(sizeof(struct args));
+             //value->args1  = argc;
+             //value->args2  = argv;
+	     //value->plmnId = plmnid;
+
+		
+	     fprintf(stderr,"\n****************************************************************************************************\n");	
+	     //fprintf(stderr,"argc: %d, argv ip address is:%s,argv  port:%s\n",argc, argv[1],argv[2]);
+
+	     fprintf(stderr,"value of thread id is %d\n", i);
+	     fprintf(stderr,"value of plmn   id is %d\n", value->plmnId);
+	     fprintf(stderr,"ip address is:%s, port:%s\n", value->args2[1],value->args2[2]);
+             retvalue = pthread_create(&threads[i], NULL, initparam, (void *)value);
+	     sleep(2);
+	     value->plmnId++;
+	  //   plmnid++;
+      
+             if (retvalue) {
+                 
+		 fprintf(stderr,"Error:unable to create  thread, %d\n", retvalue);
+                 exit(-1);
+             }
+	     
+     	}
+   pthread_exit(NULL);
 }
 
 /*
@@ -128,7 +213,7 @@
 
   long seqNum = 1;
 
-  int  maxInd = 1000; //1000 no of indication to  send
+  int  maxInd = 1;//500; //1000 no of indication to  send
   
   simfile.open("simulation.txt", ios::in);
 
diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/kpm_callbacks.hpp b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/kpm_callbacks.hpp
index 13b12d3..cecdf92 100644
--- a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/kpm_callbacks.hpp
+++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/kpm_callbacks.hpp
@@ -16,9 +16,9 @@
 #                                                                            *
 ******************************************************************************/
 
-
 #include "e2sim.hpp"
 
 void callback_kpm_subscription_request(E2AP_PDU_t *pdu);
 
 void run_report_loop(long requestorId, long instanceId, long ranFunctionId, long actionId);
+
diff --git a/ric_benchmarking/e2-interface/e2sim/src/DEF/e2sim_defs.cpp b/ric_benchmarking/e2-interface/e2sim/src/DEF/e2sim_defs.cpp
index f1730d3..42bc471 100644
--- a/ric_benchmarking/e2-interface/e2sim/src/DEF/e2sim_defs.cpp
+++ b/ric_benchmarking/e2-interface/e2sim/src/DEF/e2sim_defs.cpp
@@ -95,11 +95,26 @@
 
   options.server_ip         = (char*)DEFAULT_SCTP_IP;
   options.server_port       = X2AP_SCTP_PORT;
+  options.num_of_e2sim      = 1;
 
-  if(argc == 3) //user provided IP and PORT
+  if(argc == 4) //user provided IP, PORT and number of e2sim
+  {
+    options.server_ip    = argv[1];
+    options.server_port  = atoi(argv[2]);
+    options.num_of_e2sim = atoi(argv[3]);
+    printf("options.server_ip:%s\n", options.server_ip);
+    if(options.server_port < 1 || options.server_port > 65535) {
+      LOG_E("Invalid port number (%d). Valid values are between 1 and 65535.\n",
+                                  options.server_port);
+      exit(1);
+    }
+  }
+  else if(argc == 3) //user provided IP and PORT
   {
     options.server_ip = argv[1];
     options.server_port = atoi(argv[2]);
+    printf("options.server_ip:%s\n", options.server_ip);
+    
     if(options.server_port < 1 || options.server_port > 65535) {
       LOG_E("Invalid port number (%d). Valid values are between 1 and 65535.\n",
                                   options.server_port);
diff --git a/ric_benchmarking/e2-interface/e2sim/src/DEF/e2sim_defs.h b/ric_benchmarking/e2-interface/e2sim/src/DEF/e2sim_defs.h
index cf4a0d6..1c6cea5 100644
--- a/ric_benchmarking/e2-interface/e2sim/src/DEF/e2sim_defs.h
+++ b/ric_benchmarking/e2-interface/e2sim/src/DEF/e2sim_defs.h
@@ -55,6 +55,7 @@
 typedef struct {
   char* server_ip;
   int   server_port;
+  int   num_of_e2sim; //sriram
   //... extend as needed
 } options_t;
 
diff --git a/ric_benchmarking/e2-interface/e2sim/src/SCTP/e2sim_sctp.cpp b/ric_benchmarking/e2-interface/e2sim/src/SCTP/e2sim_sctp.cpp
index 51bb8a7..6cf32ad 100644
--- a/ric_benchmarking/e2-interface/e2sim/src/SCTP/e2sim_sctp.cpp
+++ b/ric_benchmarking/e2-interface/e2sim/src/SCTP/e2sim_sctp.cpp
@@ -112,7 +112,7 @@
   return server_fd;
 }
 
-int sctp_start_client(const char *server_ip_str, const int server_port)
+/*int sctp_start_client(const char *server_ip_str, const int server_port)
 {
   int client_fd, af;
 
@@ -195,6 +195,68 @@
 
   return client_fd;
 }
+*/
+int sctp_start_client(const char *server_ip_str, const int server_port)
+{
+  int client_fd, af;
+
+  struct sockaddr* server_addr;
+  size_t addr_len;
+
+  struct sockaddr_in  server4_addr;
+  memset(&server4_addr, 0, sizeof(struct sockaddr_in));
+
+  struct sockaddr_in6 server6_addr;
+  memset(&server6_addr, 0, sizeof(struct sockaddr_in6));
+
+  inet_pton(AF_INET, server_ip_str, &server4_addr.sin_addr); 
+    server4_addr.sin_family = AF_INET;
+    server4_addr.sin_port   = htons(server_port);
+    server_addr = (struct sockaddr*)&server4_addr;
+    addr_len    = sizeof(server4_addr);
+
+  if((client_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP)) == -1)
+  {
+     perror("socket");
+     exit(1);
+  }
+
+  // int sendbuff = 10000;
+  // socklen_t optlen = sizeof(sendbuff);
+  // if(getsockopt(client_fd, SOL_SOCKET, SO_SNDBUF, &sendbuff, &optlen) == -1) {
+  //   perror("getsockopt send");
+  //   exit(1);
+  // }
+  // else
+  //   LOG_D("[SCTP] send buffer size = %d\n", sendbuff);
+
+  //--------------------------------
+  //Bind before connect
+  auto optval = 1;
+  if( setsockopt(client_fd, SOL_SOCKET, SO_REUSEPORT, &optval, sizeof optval) != 0 ){
+    perror("setsockopt port");
+    exit(1);
+  }
+
+  if( setsockopt(client_fd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof optval) != 0 ){
+    perror("setsockopt addr");
+    exit(1);
+  }
+
+  // end binding ---------------------
+
+  LOG_I("[SCTP] Connecting to server at %s:%d ...", server_ip_str, server_port);
+  if(connect(client_fd, server_addr, addr_len) == -1) {
+    perror("connect");
+    exit(1);
+  }
+  assert(client_fd != 0);
+
+  LOG_I("[SCTP] Connection established");
+
+  return client_fd;
+}
+
 
 int sctp_accept_connection(const char *server_ip_str, const int server_fd)
 {
diff --git a/ric_benchmarking/e2-interface/e2sim/src/base/e2sim.cpp b/ric_benchmarking/e2-interface/e2sim/src/base/e2sim.cpp
index 5aa0aeb..3186f02 100644
--- a/ric_benchmarking/e2-interface/e2sim/src/base/e2sim.cpp
+++ b/ric_benchmarking/e2-interface/e2sim/src/base/e2sim.cpp
@@ -153,9 +153,9 @@
 
 }
 
-int E2Sim::run_loop(int argc, char* argv[]){
+int E2Sim::run_loop(int argc, char* argv[], int plmnId){
 
-  printf("Start E2 Agent (E2 Simulator\n");
+  printf("Start E2 Agent (E2 Simulator)\n");
 
   ifstream simfile;
   string line;
@@ -174,6 +174,8 @@
 
   bool xmlenc = false;
 
+  printf("ip address is:%s\n",argv[1]);
+
   options_t ops = read_input_options(argc, argv);
 
   printf("After reading input options\n");
@@ -202,10 +204,15 @@
   }
     
   printf("about to call setup request encode\n");
-  
-  generate_e2apv1_setup_request_parameterized(pdu_setup, all_funcs);
 
-  printf("After generating e2setup req\n");
+  //int plmnid = plmnId; 
+  fprintf(stderr, "plmn id is : %d\n",plmnId);
+
+  generate_e2apv1_setup_request_parameterized(pdu_setup, all_funcs,plmnId);
+ 
+  //generate_e2apv1_setup_request_parameterized(pdu_setup, all_funcs);
+
+  fprintf(stderr,"After generating e2setup req\n");
 
   xer_fprint(stderr, &asn_DEF_E2AP_PDU, pdu_setup);
 
diff --git a/ric_benchmarking/e2-interface/e2sim/src/base/e2sim.hpp b/ric_benchmarking/e2-interface/e2sim/src/base/e2sim.hpp
index eace5a8..0bb1acd 100644
--- a/ric_benchmarking/e2-interface/e2sim/src/base/e2sim.hpp
+++ b/ric_benchmarking/e2-interface/e2sim/src/base/e2sim.hpp
@@ -55,7 +55,9 @@
   
   void encode_and_send_sctp_data(E2AP_PDU_t* pdu);
 
-  int run_loop(int argc, char* argv[]);
+  //int run_loop(int argc, char* argv[]);
+  int run_loop(int argc, char* argv[], int plmnId);
+
 
 };
 
diff --git a/ric_benchmarking/e2-interface/e2sim/src/encoding/encode_e2apv1.cpp b/ric_benchmarking/e2-interface/e2sim/src/encoding/encode_e2apv1.cpp
index 5529e72..a2e3cc3 100644
--- a/ric_benchmarking/e2-interface/e2sim/src/encoding/encode_e2apv1.cpp
+++ b/ric_benchmarking/e2-interface/e2sim/src/encoding/encode_e2apv1.cpp
@@ -156,7 +156,7 @@
   e2ap_pdu->choice.initiatingMessage = initiatingMessage;
 }
 
-void encoding::generate_e2apv1_setup_request_parameterized(E2AP_PDU_t *e2ap_pdu, std::vector<ran_func_info> all_funcs) {
+void encoding::generate_e2apv1_setup_request_parameterized(E2AP_PDU_t *e2ap_pdu, std::vector<ran_func_info> all_funcs, int plmnId) {
   //						 long ranFunctionId, uint8_t *ranFuncDescEncoded, int ranFuncLength) {
 
   //  uint8_t *buf = (uint8_t *)"gnb1"
@@ -171,7 +171,15 @@
 
   gnb_bstring->bits_unused = 3;
 
-  uint8_t *buf2 = (uint8_t *)"747";
+  //uint8_t *buf2 = (uint8_t *)"747";
+  
+  char buff[16];
+  sprintf(buff,"%d",plmnId);
+  const char* plmnvalue=buff;
+
+  uint8_t *buf2 = (uint8_t *)plmnvalue;//"747";
+
+
   OCTET_STRING_t *plmn = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t));
   plmn->buf = (uint8_t*)calloc(1,3);
   memcpy(plmn->buf, buf2, 3);
diff --git a/ric_benchmarking/e2-interface/e2sim/src/encoding/encode_e2apv1.hpp b/ric_benchmarking/e2-interface/e2sim/src/encoding/encode_e2apv1.hpp
index 6bbbe56..a054adf 100644
--- a/ric_benchmarking/e2-interface/e2sim/src/encoding/encode_e2apv1.hpp
+++ b/ric_benchmarking/e2-interface/e2sim/src/encoding/encode_e2apv1.hpp
@@ -43,7 +43,7 @@
   
   void buildSubsReq(E2AP_PDU_t *pdu);
   
-  void generate_e2apv1_setup_request_parameterized(E2AP_PDU_t *setup_req_pdu, std::vector<ran_func_info> all_funcs);
+  void generate_e2apv1_setup_request_parameterized(E2AP_PDU_t *setup_req_pdu, std::vector<ran_func_info> all_funcs, int plmnId);
   
   void generate_e2apv1_setup_response(E2AP_PDU_t *setup_resp_pdu);
   
