diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateCustomE2EServiceInstance.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateCustomE2EServiceInstance.groovy
index 0c412e9..450c5b1 100644
--- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateCustomE2EServiceInstance.groovy
+++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateCustomE2EServiceInstance.groovy
@@ -31,6 +31,7 @@
 import org.openecomp.mso.bpmn.core.json.JsonUtils
 import org.openecomp.mso.rest.APIResponse
 
+import java.util.List;
 import java.util.UUID;
 
 import org.camunda.bpm.engine.delegate.BpmnError
@@ -54,7 +55,7 @@
 		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
 		execution.setVariable("prefix",Prefix)
 		String msg = ""
-		utils.log("DEBUG", " *** preProcessRequest() *** ", isDebugEnabled)
+		utils.log("INFO", " *** preProcessRequest() *** ", isDebugEnabled)
 
 		try {
 
@@ -63,13 +64,13 @@
 
 			String requestId = execution.getVariable("mso-request-id")
 			execution.setVariable("msoRequestId", requestId)
-			utils.log("DEBUG", "Input Request:" + siRequest + " reqId:" + requestId, isDebugEnabled)
+			utils.log("INFO", "Input Request:" + siRequest + " reqId:" + requestId, isDebugEnabled)
 
 			String serviceInstanceId = execution.getVariable("serviceInstanceId")
 			if (isBlank(serviceInstanceId)) {
 				serviceInstanceId = UUID.randomUUID().toString()
 			}
-			utils.log("DEBUG", "Generated new Service Instance:" + serviceInstanceId, isDebugEnabled)
+			utils.log("INFO", "Generated new Service Instance:" + serviceInstanceId, isDebugEnabled)
 			serviceInstanceId = UriUtils.encode(serviceInstanceId,"UTF-8")
 			execution.setVariable("serviceInstanceId", serviceInstanceId)
 
@@ -90,96 +91,73 @@
 			if (isBlank(productFamilyId))
 			{
 				msg = "Input productFamilyId is null"
-				utils.log("DEBUG", msg, isDebugEnabled)
+				utils.log("INFO", msg, isDebugEnabled)
 				//exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
 			} else {
 				execution.setVariable("productFamilyId", productFamilyId)
 			}
-
+	         String userParams = jsonUtil.getJsonValue(siRequest, "requestDetails.requestParameters.userParams")      
+             utils.log("INFO", "userParams:" + userParams, isDebugEnabled)
+	         List<String> paramList = jsonUtil.StringArrayToList(execution, userParams)
+	         String uuiRequest = jsonUtil.getJsonValue(paramList.get(0), "UUIRequest")
 			//modelInfo
-			String serviceModelInfo = jsonUtil.getJsonValue(siRequest, "requestDetails.modelInfo")
-			if (isBlank(serviceModelInfo)) {
-				msg = "Input serviceModelInfo is null"
-				utils.log("DEBUG", msg, isDebugEnabled)
+			if (isBlank(uuiRequest)) {
+				msg = "Input uuiRequest is null"
+				utils.log("INFO", msg, isDebugEnabled)
 				exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
 			} else
 			{
-				execution.setVariable("serviceModelInfo", serviceModelInfo)
+				execution.setVariable("uuiRequest", uuiRequest)
 			}
 
-			utils.log("DEBUG", "modelInfo" + serviceModelInfo,  isDebugEnabled)
+			utils.log("INFO", "uuiRequest:\n" + uuiRequest,  isDebugEnabled)
 
 			//requestParameters
-			String subscriptionServiceType = jsonUtil.getJsonValue(siRequest, "requestDetails.requestParameters.subscriptionServiceType")
-			if (isBlank(subscriptionServiceType)) {
-				msg = "Input subscriptionServiceType is null"
-				utils.log("DEBUG", msg, isDebugEnabled)
+			String serviceType = jsonUtil.getJsonValue(uuiRequest, "service.parameters.serviceType")
+			if (isBlank(serviceType)) {
+				msg = "Input serviceType is null"
+				utils.log("INFO", msg, isDebugEnabled)
 				exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
 			} else {
-				execution.setVariable("subscriptionServiceType", subscriptionServiceType)
+				execution.setVariable("serviceType", serviceType)
 			}
-
-			
-			/*
-			 * Extracting User Parameters from incoming Request and converting into a Map
-			 */
-			def jsonSlurper = new JsonSlurper()
-			def jsonOutput = new JsonOutput()
-
-			Map reqMap = jsonSlurper.parseText(siRequest)
-
-			//InputParams
-			def userParams = reqMap.requestDetails?.requestParameters?.userParams
-
-			Map<String, String> inputMap = [:]
-			if (userParams) {
-				userParams.each {
-					userParam -> inputMap.put(userParam.name, userParam.value)
-				}
-			}
-			
-			utils.log("DEBUG", "User Input Parameters map: " + userParams.toString(), isDebugEnabled)
-			execution.setVariable("serviceInputParams", inputMap)
 			execution.setVariable("URN_mso_adapters_openecomp_db_endpoint","http://mso.mso.testlab.openecomp.org:8080/dbadapters/RequestsDbAdapter")
-			//TODO
-			//execution.setVariable("serviceInputParams", jsonUtil.getJsonValue(siRequest, "requestDetails.requestParameters.userParams"))
-			//execution.setVariable("failExists", true)
 
 		} catch (BpmnError e) {
 			throw e;
 		} catch (Exception ex){
 			msg = "Exception in preProcessRequest " + ex.getMessage()
-			utils.log("DEBUG", msg, isDebugEnabled)
+			utils.log("INFO", msg, isDebugEnabled)
 			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 		}
-		utils.log("DEBUG"," ***** Exit preProcessRequest *****",  isDebugEnabled)
+		utils.log("INFO"," ***** Exit preProcessRequest *****",  isDebugEnabled)
 	}
 
 	public void sendSyncResponse (Execution execution) {
 		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
-		utils.log("DEBUG", " *** sendSyncResponse *** ", isDebugEnabled)
+		utils.log("INFO", " *** sendSyncResponse *** ", isDebugEnabled)
 
 		try {
 			String operationId = execution.getVariable("operationId")
 			String serviceInstanceId = execution.getVariable("serviceInstanceId")
 			// RESTResponse for API Handler (APIH) Reply Task
 			String createServiceRestRequest = """{"service":{"serviceId":"${serviceInstanceId}","operationId":"${operationId}"}}""".trim()
-			utils.log("DEBUG", " sendSyncResponse to APIH:" + "\n" + createServiceRestRequest, isDebugEnabled)
+			utils.log("INFO", " sendSyncResponse to APIH:" + "\n" + createServiceRestRequest, isDebugEnabled)
 			sendWorkflowResponse(execution, 202, createServiceRestRequest)
 			execution.setVariable("sentSyncResponse", true)
 
 		} catch (Exception ex) {
 			String msg = "Exceptuion in sendSyncResponse:" + ex.getMessage()
-			utils.log("DEBUG", msg, isDebugEnabled)
+			utils.log("INFO", msg, isDebugEnabled)
 			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 		}
-		utils.log("DEBUG"," ***** Exit sendSyncResopnse *****",  isDebugEnabled)
+		utils.log("INFO"," ***** Exit sendSyncResopnse *****",  isDebugEnabled)
 	}
 
 
 	public void sendSyncError (Execution execution) {
 		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
-		utils.log("DEBUG", " *** sendSyncError *** ", isDebugEnabled)
+		utils.log("INFO", " *** sendSyncError *** ", isDebugEnabled)
 
 		try {
 			String errorMessage = ""
@@ -200,14 +178,14 @@
 			sendWorkflowResponse(execution, 500, buildworkflowException)
 
 		} catch (Exception ex) {
-			utils.log("DEBUG", " Sending Sync Error Activity Failed. " + "\n" + ex.getMessage(), isDebugEnabled)
+			utils.log("INFO", " Sending Sync Error Activity Failed. " + "\n" + ex.getMessage(), isDebugEnabled)
 		}
 
 	}
 
 	public void prepareCompletionRequest (Execution execution) {
 		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
-		utils.log("DEBUG", " *** prepareCompletion *** ", isDebugEnabled)
+		utils.log("INFO", " *** prepareCompletion *** ", isDebugEnabled)
 
 		try {
 			String requestId = execution.getVariable("msoRequestId")
@@ -231,23 +209,23 @@
 			String xmlMsoCompletionRequest = utils.formatXml(msoCompletionRequest)
 
 			execution.setVariable("completionRequest", xmlMsoCompletionRequest)
-			utils.log("DEBUG", " Overall SUCCESS Response going to CompleteMsoProcess - " + "\n" + xmlMsoCompletionRequest, isDebugEnabled)
+			utils.log("INFO", " Overall SUCCESS Response going to CompleteMsoProcess - " + "\n" + xmlMsoCompletionRequest, isDebugEnabled)
 
 		} catch (Exception ex) {
 			String msg = " Exception in prepareCompletion:" + ex.getMessage()
-			utils.log("DEBUG", msg, isDebugEnabled)
+			utils.log("INFO", msg, isDebugEnabled)
 			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 		}
-		utils.log("DEBUG", "*** Exit prepareCompletionRequest ***", isDebugEnabled)
+		utils.log("INFO", "*** Exit prepareCompletionRequest ***", isDebugEnabled)
 	}
 
 	public void prepareFalloutRequest(Execution execution){
 		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
-		utils.log("DEBUG", " *** prepareFalloutRequest *** ", isDebugEnabled)
+		utils.log("INFO", " *** prepareFalloutRequest *** ", isDebugEnabled)
 
 		try {
 			WorkflowException wfex = execution.getVariable("WorkflowException")
-			utils.log("DEBUG", " Input Workflow Exception: " + wfex.toString(), isDebugEnabled)
+			utils.log("INFO", " Input Workflow Exception: " + wfex.toString(), isDebugEnabled)
 			String requestId = execution.getVariable("msoRequestId")
 			String source = execution.getVariable("source")
 			String requestInfo =
@@ -260,7 +238,7 @@
 			String falloutRequest = exceptionUtil.processMainflowsBPMNException(execution, requestInfo)
 			execution.setVariable("falloutRequest", falloutRequest)
 		} catch (Exception ex) {
-			utils.log("DEBUG", "Exception prepareFalloutRequest:" + ex.getMessage(), isDebugEnabled)
+			utils.log("INFO", "Exception prepareFalloutRequest:" + ex.getMessage(), isDebugEnabled)
 			String errorException = "  Bpmn error encountered in CreateGenericALaCarteServiceInstance flow. FalloutHandlerRequest,  buildErrorResponse() - " + ex.getMessage()
 			String requestId = execution.getVariable("msoRequestId")
 			String falloutRequest =
@@ -280,7 +258,7 @@
 
 			execution.setVariable("falloutRequest", falloutRequest)
 		}
-		utils.log("DEBUG", "*** Exit prepareFalloutRequest ***", isDebugEnabled)
+		utils.log("INFO", "*** Exit prepareFalloutRequest ***", isDebugEnabled)
 	}
 	
 	/**
@@ -288,17 +266,18 @@
 	 */
 	public void prepareInitServiceOperationStatus(Execution execution){
         def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
-        utils.log("DEBUG", " ======== STARTED prepareInitServiceOperationStatus Process ======== ", isDebugEnabled)
+        utils.log("INFO", " ======== STARTED prepareInitServiceOperationStatus Process ======== ", isDebugEnabled)
         try{
             String serviceId = execution.getVariable("serviceInstanceId")
             String operationId = UUID.randomUUID().toString()
+            String serviceName = execution.getVariable("serviceInstanceName")
             String operationType = "CREATE"
             String userId = ""
             String result = "processing"
             String progress = "0"
             String reason = ""
             String operationContent = "Prepare service creation"
-            utils.log("DEBUG", "Generated new operation for Service Instance serviceId:" + serviceId + " operationId:" + operationId, isDebugEnabled)
+            utils.log("INFO", "Generated new operation for Service Instance serviceId:" + serviceId + " operationId:" + operationId, isDebugEnabled)
             serviceId = UriUtils.encode(serviceId,"UTF-8")
             execution.setVariable("serviceInstanceId", serviceId)
             execution.setVariable("operationId", operationId)
@@ -306,7 +285,7 @@
 
             def dbAdapterEndpoint = execution.getVariable("URN_mso_adapters_openecomp_db_endpoint")
             execution.setVariable("CVFMI_dbAdapterEndpoint", dbAdapterEndpoint)
-            utils.log("DEBUG", "DB Adapter Endpoint is: " + dbAdapterEndpoint, isDebugEnabled)
+            utils.log("INFO", "DB Adapter Endpoint is: " + dbAdapterEndpoint, isDebugEnabled)
 
             String payload =
                 """<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
@@ -316,6 +295,7 @@
                             <ns:updateServiceOperationStatus xmlns:ns="http://org.openecomp.mso/requestsdb">
                             <serviceId>${serviceId}</serviceId>
                             <operationId>${operationId}</operationId>
+                            <serviceName>${serviceName}</serviceName>
                             <operationType>${operationType}</operationType>
                             <userId>${userId}</userId>
                             <result>${result}</result>
@@ -328,14 +308,14 @@
 
             payload = utils.formatXml(payload)
             execution.setVariable("CVFMI_updateServiceOperStatusRequest", payload)
-            utils.log("DEBUG", "Outgoing updateServiceOperStatusRequest: \n" + payload, isDebugEnabled)
+            utils.log("INFO", "Outgoing updateServiceOperStatusRequest: \n" + payload, isDebugEnabled)
             utils.logAudit("CreateVfModuleInfra Outgoing updateServiceOperStatusRequest Request: " + payload)
 
         }catch(Exception e){
             utils.log("ERROR", "Exception Occured Processing prepareInitServiceOperationStatus. Exception is:\n" + e, isDebugEnabled)
             execution.setVariable("CVFMI_ErrorResponse", "Error Occurred during prepareInitServiceOperationStatus Method:\n" + e.getMessage())
         }
-        utils.log("DEBUG", "======== COMPLETED prepareInitServiceOperationStatus Process ======== ", isDebugEnabled)    
+        utils.log("INFO", "======== COMPLETED prepareInitServiceOperationStatus Process ======== ", isDebugEnabled)    
 	}
 	
 }
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateE2EServiceInstance.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateE2EServiceInstance.groovy
index a8506fd..ca67d5d 100644
--- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateE2EServiceInstance.groovy
+++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateE2EServiceInstance.groovy
@@ -81,31 +81,29 @@
 	public void preProcessRequest (Execution execution) {
 		def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
 		String msg = ""
-		utils.log("DEBUG"," ***** preProcessRequest *****",  isDebugEnabled)
+		utils.log("INFO"," ***** preProcessRequest *****",  isDebugEnabled)
 
 		try {
-			String requestId = execution.getVariable("msoRequestId")
 			execution.setVariable("prefix", Prefix)
-			
 			//Inputs
 			//requestDetails.subscriberInfo. for AAI GET & PUT & SDNC assignToplology
 			String globalSubscriberId = execution.getVariable("globalSubscriberId") //globalCustomerId
-
+			utils.log("INFO"," ***** globalSubscriberId *****" + globalSubscriberId,  isDebugEnabled)
 			//requestDetails.requestParameters. for AAI PUT & SDNC assignTopology
-			String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
-
+			String serviceType = execution.getVariable("serviceType")
+			utils.log("INFO"," ***** serviceType *****" + serviceType,  isDebugEnabled)
 			//requestDetails.requestParameters. for SDNC assignTopology
 			String productFamilyId = execution.getVariable("productFamilyId") //AAI productFamilyId
 
 			if (isBlank(globalSubscriberId)) {
 				msg = "Input globalSubscriberId is null"
-				utils.log("DEBUG", msg, isDebugEnabled)
+				utils.log("INFO", msg, isDebugEnabled)
 				exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
 			}
 			
-			if (isBlank(subscriptionServiceType)) {
-				msg = "Input subscriptionServiceType is null"
-				utils.log("DEBUG", msg, isDebugEnabled)
+			if (isBlank(serviceType)) {
+				msg = "Input serviceType is null"
+				utils.log("INFO", msg, isDebugEnabled)
 				exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
 			}
 			
@@ -116,93 +114,25 @@
 			String sdncCallbackUrl = execution.getVariable('URN_mso_workflow_sdncadapter_callback')
 			if (isBlank(sdncCallbackUrl)) {
 				msg = "URN_mso_workflow_sdncadapter_callback is null"
-				utils.log("DEBUG", msg, isDebugEnabled)
+				utils.log("INFO", msg, isDebugEnabled)
 				exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
 			}
 			execution.setVariable("sdncCallbackUrl", sdncCallbackUrl)
-			utils.log("DEBUG","SDNC Callback URL: " + sdncCallbackUrl, isDebugEnabled)
+			utils.log("INFO","SDNC Callback URL: " + sdncCallbackUrl, isDebugEnabled)
 
-			//requestDetails.modelInfo.for AAI PUT servieInstanceData & SDNC assignTopology
-			String modelInvariantUuid = ""
-			String modelVersion = ""
-			String modelUuid = ""
-			String modelName = ""
-			String serviceInstanceName = "" 
-			//Generated in parent.for AAI PUT
-			String serviceInstanceId = ""
-			String serviceType = ""
-			String serviceRole = ""
-			
-			//requestDetails.requestInfo. for AAI GET/PUT serviceInstanceData & SDNC assignToplology
-			serviceInstanceName = execution.getVariable("serviceInstanceName")
-			serviceInstanceId = execution.getVariable("serviceInstanceId")
-			
-			String serviceModelInfo = execution.getVariable("serviceModelInfo")
-			if (isBlank(serviceModelInfo)) {
-				msg = "Input serviceModelInfo is null"
-				utils.log("DEBUG", msg, isDebugEnabled)
-				exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
-			}
-			modelInvariantUuid = jsonUtil.getJsonValue(serviceModelInfo, "modelInvariantUuid")
-			modelVersion = jsonUtil.getJsonValue(serviceModelInfo, "modelVersion")
-			modelUuid = jsonUtil.getJsonValue(serviceModelInfo, "modelUuid")
-			modelName = jsonUtil.getJsonValue(serviceModelInfo, "modelName")
-			//modelCustomizationUuid NA for SI
-	
-			execution.setVariable("serviceType", serviceType)
-			execution.setVariable("serviceRole", serviceRole)
-			
-			if (serviceInstanceName == null) {
-				execution.setVariable("serviceInstanceName", "")
-				serviceInstanceName = ""
-			}
-			if (isBlank(serviceInstanceId)){
-				msg = "Input serviceInstanceId is null"
-				utils.log("DEBUG", msg, isDebugEnabled)
-				exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
-			}
-			
-			if (modelInvariantUuid == null) {
-				modelInvariantUuid = ""
-			}
-			if (modelUuid == null) {
-				modelUuid = ""
-			}
-			if (modelVersion == null) {
-				modelVersion = ""
-			}
-			if (modelName == null) {
-				modelName = ""
-			}
+			//requestDetails.modelInfo.for AAI PUT servieInstanceData 			
+			//requestDetails.requestInfo. for AAI GET/PUT serviceInstanceData 
+			String serviceInstanceName = execution.getVariable("serviceInstanceName")
+			String serviceInstanceId = execution.getVariable("serviceInstanceId")
+			String uuiRequest = execution.getVariable("uuiRequest")
+			String modelInvariantUuid = jsonUtil.getJsonValue(uuiRequest, "service.serviceDefId")
+			String modelUuid = jsonUtil.getJsonValue(uuiRequest, "service.templateId")
+			//aai serviceType and Role can be setted as fixed value now.
+			String aaiServiceType = "voLTE type"
+			String aaiServiceRole = "voLTE role"
 			
 			execution.setVariable("modelInvariantUuid", modelInvariantUuid)
-			execution.setVariable("modelVersion", modelVersion)
 			execution.setVariable("modelUuid", modelUuid)
-			execution.setVariable("modelName", modelName)
-			 
-			StringBuilder sbParams = new StringBuilder()
-			Map<String, String> paramsMap = execution.getVariable("serviceInputParams")
-			if (paramsMap != null)
-			{
-				sbParams.append("<service-input-parameters>")
-				for (Map.Entry<String, String> entry : paramsMap.entrySet()) {
-					String paramsXml
-					String paramName = entry.getKey()
-					String paramValue = entry.getValue()
-					paramsXml =
-							"""	<param>
-							<name>${paramName}</name>
-							<value>${paramValue}</value>
-							</param>
-							"""
-					sbParams.append(paramsXml)
-				}
-				sbParams.append("</service-input-parameters>")
-			}
-			String siParamsXml = sbParams.toString()
-			if (siParamsXml == null)
-				siParamsXml = ""
-			execution.setVariable("siParamsXml", siParamsXml)
 
 			//AAI PUT
 			String oStatus = execution.getVariable("initialStatus") ?: ""
@@ -218,111 +148,39 @@
 			String namespace = aaiUriUtil.getNamespaceFromUri(aai_uri)
 			String serviceInstanceData =
 					"""<service-instance xmlns=\"${namespace}\">
-					<service-instance-name>${serviceInstanceName}</service-instance-name>
-					<service-type>${serviceType}</service-type>
-					<service-role>${serviceRole}</service-role>
+			        <service-instance-id>${serviceInstanceId}</service-instance-id>
+			        <service-instance-name>${serviceInstanceName}</service-instance-name>
+					<service-type>${aaiServiceType}</service-type>
+					<service-role>${aaiServiceRole}</service-role>
 					${statusLine}
 				    <model-invariant-id>${modelInvariantUuid}</model-invariant-id>
 				    <model-version-id>${modelUuid}</model-version-id>
-					</service-instance>""".trim()
-
+					</service-instance>""".trim()					
 			execution.setVariable("serviceInstanceData", serviceInstanceData)
 			utils.logAudit(serviceInstanceData)
-			utils.log("DEBUG", " 'payload' to create Service Instance in AAI - " + "\n" + serviceInstanceData, isDebugEnabled)
+			utils.log("INFO", " aai_uri " + aai_uri + " namespace:" + namespace, isDebugEnabled)
+			utils.log("INFO", " 'payload' to create Service Instance in AAI - " + "\n" + serviceInstanceData, isDebugEnabled)
 
 		} catch (BpmnError e) {
 			throw e;
 		} catch (Exception ex){
 			msg = "Exception in preProcessRequest " + ex.getMessage()
-			utils.log("DEBUG", msg, isDebugEnabled)
+			utils.log("INFO", msg, isDebugEnabled)
 			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 		}
-		utils.log("DEBUG"," ***** Exit preProcessRequest *****",  isDebugEnabled)
-	}
-
-	//TODO: Will be able to replace with call to CustomE2EGetService as per the GenericGetService
-	public void getAAICustomerById (Execution execution) {
-		// https://{aaiEP}/aai/v8/business/customers/customer/{globalCustomerId}
-		def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
-		String msg = ""
-		try {
-
-			String globalCustomerId = execution.getVariable("globalSubscriberId") //UUI to AAI name map
-			utils.log("DEBUG"," ***** getAAICustomerById ***** globalCustomerId:" + globalCustomerId, isDebugEnabled)
-
-			String aai_endpoint = execution.getVariable("URN_aai_endpoint")
-			AaiUtil aaiUriUtil = new AaiUtil(this)
-			String aai_uri = aaiUriUtil.getBusinessCustomerUri(execution)
-			if (isBlank(aai_endpoint) || isBlank(aai_uri))
-			{
-				msg = "AAI URL is invalid. Endpoint:" + aai_endpoint + aai_uri
-				utils.log("DEBUG", msg, isDebugEnabled)
-				exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
-			}
-			String getAAICustomerUrl = "${aai_endpoint}${aai_uri}/" + UriUtils.encode(globalCustomerId,"UTF-8")
-
-			utils.logAudit(getAAICustomerUrl)
-			utils.log("DEBUG", "getAAICustomerById Url:" + getAAICustomerUrl, isDebugEnabled)
-			APIResponse response = aaiUriUtil.executeAAIGetCall(execution, getAAICustomerUrl)
-			String returnCode = response.getStatusCode()
-			String aaiResponseAsString = response.getResponseBodyAsString()
-
-			msg = "getAAICustomerById ResponseCode:" + returnCode + " ResponseString:" + aaiResponseAsString
-			utils.log("DEBUG",msg, isDebugEnabled)
-			utils.logAudit(msg)
-
-			if (returnCode=='200') {
-				// Customer found by ID. FLow to proceed.
-				utils.log("DEBUG",msg, isDebugEnabled)
-
-				//TODO Deferred
-				//we might verify that service-subscription with matching name exists
-				//and throw error if not. If not checked, we will get exception in subsequent step on Create call
-				//in 1610 we assume both customer & service subscription were pre-created
-
-			} else {
-				if (returnCode=='404') {
-					msg = "GlobalCustomerId:" + globalCustomerId + " not found (404) in AAI"
-					utils.log("DEBUG", msg, isDebugEnabled)
-					exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg)
-
-				} else {
-					if (aaiResponseAsString.contains("RESTFault")) {
-						utils.log("ERROR", aaiResponseAsString)
-						WorkflowException workflowException = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution)
-						execution.setVariable("WorkflowException", workflowException)
-						throw new BpmnError("MSOWorkflowException")
-
-					} else {
-						// aai all errors
-						msg = "Error in getAAICustomerById ResponseCode:" + returnCode
-						utils.log("DEBUG", msg, isDebugEnabled)
-						exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg)
-					}
-				}
-			}
-
-		} catch (BpmnError e) {
-			throw e;
-		} catch (Exception ex) {
-			msg = "Exception in getAAICustomerById. " + ex.getMessage()
-			utils.log("DEBUG", msg, isDebugEnabled)
-			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
-		}
-		utils.log("DEBUG"," *****Exit getAAICustomerById *****", isDebugEnabled)
-
+		utils.log("INFO"," ***** Exit preProcessRequest *****",  isDebugEnabled)
 	}
 
 	public void postProcessAAIGET(Execution execution) {
 		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
-		utils.log("DEBUG"," ***** postProcessAAIGET ***** ", isDebugEnabled)
+		utils.log("INFO"," ***** postProcessAAIGET ***** ", isDebugEnabled)
 		String msg = ""
 
 		try {
 			String serviceInstanceName = execution.getVariable("serviceInstanceName")
 			boolean succInAAI = execution.getVariable("GENGS_SuccessIndicator")
 			if(succInAAI != true){
-				utils.log("DEBUG","Error getting Service-instance from AAI", + serviceInstanceName, isDebugEnabled)
+				utils.log("INFO","Error getting Service-instance from AAI", + serviceInstanceName, isDebugEnabled)
 				WorkflowException workflowException = execution.getVariable("WorkflowException")
 				utils.logAudit("workflowException: " + workflowException)
 				if(workflowException != null){
@@ -331,7 +189,7 @@
 				else
 				{
 					msg = "Failure in postProcessAAIGET GENGS_SuccessIndicator:" + succInAAI
-					utils.log("DEBUG", msg, isDebugEnabled)
+					utils.log("INFO", msg, isDebugEnabled)
 					exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg)
 				}
 			}
@@ -339,9 +197,9 @@
 			{
 				boolean foundInAAI = execution.getVariable("GENGS_FoundIndicator")
 				if(foundInAAI == true){
-					utils.log("DEBUG","Found Service-instance in AAI", isDebugEnabled)
+					utils.log("INFO","Found Service-instance in AAI", isDebugEnabled)
 					msg = "ServiceInstance already exists in AAI:" + serviceInstanceName
-					utils.log("DEBUG", msg, isDebugEnabled)
+					utils.log("INFO", msg, isDebugEnabled)
 					exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg)
 				}
 			}
@@ -349,21 +207,21 @@
 			throw e;
 		} catch (Exception ex) {
 			msg = "Exception in DoCreateServiceInstance.postProcessAAIGET. " + ex.getMessage()
-			utils.log("DEBUG", msg, isDebugEnabled)
+			utils.log("INFO", msg, isDebugEnabled)
 			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 		}
-		utils.log("DEBUG"," *** Exit postProcessAAIGET *** ", isDebugEnabled)
+		utils.log("INFO"," *** Exit postProcessAAIGET *** ", isDebugEnabled)
 	}
 
 	public void postProcessAAIPUT(Execution execution) {
 		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
-		utils.log("DEBUG"," ***** postProcessAAIPUT ***** ", isDebugEnabled)
+		utils.log("INFO"," ***** postProcessAAIPUT ***** ", isDebugEnabled)
 		String msg = ""
 		try {
 			String serviceInstanceId = execution.getVariable("serviceInstanceId")
 			boolean succInAAI = execution.getVariable("GENPS_SuccessIndicator")
 			if(succInAAI != true){
-				utils.log("DEBUG","Error putting Service-instance in AAI", + serviceInstanceId, isDebugEnabled)
+				utils.log("INFO","Error putting Service-instance in AAI", + serviceInstanceId, isDebugEnabled)
 				WorkflowException workflowException = execution.getVariable("WorkflowException")
 				utils.logAudit("workflowException: " + workflowException)
 				if(workflowException != null){
@@ -387,150 +245,22 @@
 			throw e;
 		} catch (Exception ex) {
 			msg = "Exception in DoCreateServiceInstance.postProcessAAIDEL. " + ex.getMessage()
-			utils.log("DEBUG", msg, isDebugEnabled)
+			utils.log("INFO", msg, isDebugEnabled)
 			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 		}
-		utils.log("DEBUG"," *** Exit postProcessAAIPUT *** ", isDebugEnabled)
-	}
-
-	public void preProcessSDNCAssignRequest(Execution execution) {
-		def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
-		String msg = ""
-		utils.log("DEBUG"," ***** preProcessSDNCAssignRequest *****", isDebugEnabled)
-
-		try {
-			def serviceInstanceId = execution.getVariable("serviceInstanceId")
-			def serviceInstanceName = execution.getVariable("serviceInstanceName")
-			def callbackURL = execution.getVariable("sdncCallbackUrl")
-			def requestId = execution.getVariable("msoRequestId")
-			def serviceId = execution.getVariable("productFamilyId")
-			def subscriptionServiceType = execution.getVariable("subscriptionServiceType")
-			def globalSubscriberId = execution.getVariable("globalSubscriberId") //globalCustomerId
-			def serviceType = execution.getVariable("serviceType")
-
-			def modelInvariantUuid = execution.getVariable("modelInvariantUuid")
-			def modelVersion = execution.getVariable("modelVersion")
-			def modelUuid = execution.getVariable("modelUuid")
-			def modelName = execution.getVariable("modelName")
-			
-			def sdncRequestId = UUID.randomUUID().toString()
-			
-			def siParamsXml = execution.getVariable("siParamsXml")
-			
-			String sdncAssignRequest =
-					"""<sdncadapterworkflow:SDNCAdapterWorkflowRequest xmlns:ns5="http://org.openecomp/mso/request/types/v1"
-													xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1"
-													xmlns:sdncadapter="http://org.openecomp/workflow/sdnc/adapter/schema/v1">
-				   <sdncadapter:RequestHeader>
-							<sdncadapter:RequestId>${sdncRequestId}</sdncadapter:RequestId>
-							<sdncadapter:SvcInstanceId>${serviceInstanceId}</sdncadapter:SvcInstanceId>
-							<sdncadapter:SvcAction>assign</sdncadapter:SvcAction>
-							<sdncadapter:SvcOperation>service-topology-operation</sdncadapter:SvcOperation>
-							<sdncadapter:CallbackUrl>${callbackURL}</sdncadapter:CallbackUrl>
-							<sdncadapter:MsoAction>${serviceType}</sdncadapter:MsoAction>
-					</sdncadapter:RequestHeader>
-				<sdncadapterworkflow:SDNCRequestData>
-					<request-information>
-						<request-id>${requestId}</request-id>
-						<source>MSO</source>
-						<notification-url/>
-						<order-number/>
-						<order-version/>
-						<request-action>CreateServiceInstance</request-action>
-					</request-information>
-					<service-information>
-						<service-id>${serviceId}</service-id>
-						<subscription-service-type>${subscriptionServiceType}</subscription-service-type>
-						<ecomp-model-information>
-					         <model-invariant-uuid>${modelInvariantUuid}</model-invariant-uuid>
-					         <model-uuid>${modelUuid}</model-uuid>
-					         <model-version>${modelVersion}</model-version>
-					         <model-name>${modelName}</model-name>
-					    </ecomp-model-information>
-						<service-instance-id>${serviceInstanceId}</service-instance-id>
-						<subscriber-name/>
-						<global-customer-id>${globalSubscriberId}</global-customer-id>
-					</service-information>
-					<service-request-input>
-						<service-instance-name>${serviceInstanceName}</service-instance-name>
-						${siParamsXml}
-					</service-request-input>
-				</sdncadapterworkflow:SDNCRequestData>
-				</sdncadapterworkflow:SDNCAdapterWorkflowRequest>"""
-
-			utils.log("DEBUG","sdncAssignRequest:\n" + sdncAssignRequest, isDebugEnabled)
-			sdncAssignRequest = utils.formatXml(sdncAssignRequest)
-			execution.setVariable("sdncAssignRequest", sdncAssignRequest)
-			utils.logAudit("sdncAssignRequest:  " + sdncAssignRequest)
-
-			def sdncRequestId2 = UUID.randomUUID().toString()
-			String sdncDelete = sdncAssignRequest.replace(">assign<", ">delete<").replace(">CreateServiceInstance<", ">DeleteServiceInstance<").replace(">${sdncRequestId}<", ">${sdncRequestId2}<")
-			def sdncRequestId3 = UUID.randomUUID().toString()
-			String sdncDeactivate = sdncDelete.replace(">delete<", ">deactivate<").replace(">${sdncRequestId2}<", ">${sdncRequestId3}<")
-			def rollbackData = execution.getVariable("rollbackData")
-			rollbackData.put("SERVICEINSTANCE", "sdncDeactivate", sdncDeactivate)
-			rollbackData.put("SERVICEINSTANCE", "sdncDelete", sdncDelete)
-			execution.setVariable("rollbackData", rollbackData)
-			
-			utils.log("DEBUG","rollbackData:\n" + rollbackData.toString(), isDebugEnabled)
-
-		} catch (BpmnError e) {
-			throw e;
-		} catch(Exception ex) {
-			msg = "Exception in preProcessSDNCAssignRequest. " + ex.getMessage()
-			utils.log("DEBUG", msg, isDebugEnabled)
-			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
-		}
-		utils.log("DEBUG"," *****Exit preProcessSDNCAssignRequest *****", isDebugEnabled)
-	}
-	
-	public void postProcessSDNCAssign (Execution execution) {
-		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
-		utils.log("DEBUG"," ***** postProcessSDNCAssign ***** ", isDebugEnabled)
-		try {
-			WorkflowException workflowException = execution.getVariable("WorkflowException")
-			utils.logAudit("workflowException: " + workflowException)
-
-			boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
-
-			String response = execution.getVariable("sdncAdapterResponse")
-			utils.logAudit("SDNCResponse: " + response)
-
-			SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this)
-			sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
-
-			if(execution.getVariable(Prefix + 'sdncResponseSuccess') == true){
-				utils.log("DEBUG","Good response from SDNC Adapter for service-instance  topology assign: \n" + response, isDebugEnabled)
-
-				def rollbackData = execution.getVariable("rollbackData")
-				rollbackData.put("SERVICEINSTANCE", "rollbackSDNC", "true")
-				execution.setVariable("rollbackData", rollbackData)
-
-			}else{
-				utils.log("DEBUG","Bad Response from SDNC Adapter for service-instance assign", isDebugEnabled)
-				throw new BpmnError("MSOWorkflowException")
-			}
-
-		} catch (BpmnError e) {
-			throw e;
-		} catch(Exception ex) {
-			msg = "Exception in postProcessSDNCAssign. " + ex.getMessage()
-			utils.log("DEBUG", msg, isDebugEnabled)
-			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
-		}
-		utils.log("DEBUG"," *** Exit postProcessSDNCAssign *** ", isDebugEnabled)
+		utils.log("INFO"," *** Exit postProcessAAIPUT *** ", isDebugEnabled)
 	}
 	
 	public void postProcessAAIGET2(Execution execution) {
 		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
-		utils.log("DEBUG"," ***** postProcessAAIGET2 ***** ", isDebugEnabled)
+		utils.log("INFO"," ***** postProcessAAIGET2 ***** ", isDebugEnabled)
 		String msg = ""
 
 		try {
 			String serviceInstanceName = execution.getVariable("serviceInstanceName")
 			boolean succInAAI = execution.getVariable("GENGS_SuccessIndicator")
 			if(succInAAI != true){
-				utils.log("DEBUG","Error getting Service-instance from AAI in postProcessAAIGET2", + serviceInstanceName, isDebugEnabled)
+				utils.log("INFO","Error getting Service-instance from AAI in postProcessAAIGET2", + serviceInstanceName, isDebugEnabled)
 				WorkflowException workflowException = execution.getVariable("WorkflowException")
 				utils.logAudit("workflowException: " + workflowException)
 				if(workflowException != null){
@@ -539,7 +269,7 @@
 				else
 				{
 					msg = "Failure in postProcessAAIGET2 GENGS_SuccessIndicator:" + succInAAI
-					utils.log("DEBUG", msg, isDebugEnabled)
+					utils.log("INFO", msg, isDebugEnabled)
 					exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg)
 				}
 			}
@@ -550,7 +280,7 @@
 					String aaiService = execution.getVariable("GENGS_service")
 					if (!isBlank(aaiService) && (utils.nodeExists(aaiService, "service-instance-name"))) {
 						execution.setVariable("serviceInstanceName",  utils.getNodeText1(aaiService, "service-instance-name"))
-						utils.log("DEBUG","Found Service-instance in AAI.serviceInstanceName:" + execution.getVariable("serviceInstanceName"), isDebugEnabled)
+						utils.log("INFO","Found Service-instance in AAI.serviceInstanceName:" + execution.getVariable("serviceInstanceName"), isDebugEnabled)
 					}
 				}
 			}
@@ -558,58 +288,58 @@
 			throw e;
 		} catch (Exception ex) {
 			msg = "Exception in DoCreateServiceInstance.postProcessAAIGET2 " + ex.getMessage()
-			utils.log("DEBUG", msg, isDebugEnabled)
+			utils.log("INFO", msg, isDebugEnabled)
 			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 		}
-		utils.log("DEBUG"," *** Exit postProcessAAIGET2 *** ", isDebugEnabled)
+		utils.log("INFO"," *** Exit postProcessAAIGET2 *** ", isDebugEnabled)
 	}
 
 	public void preProcessRollback (Execution execution) {
 		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
-		utils.log("DEBUG"," ***** preProcessRollback ***** ", isDebugEnabled)
+		utils.log("INFO"," ***** preProcessRollback ***** ", isDebugEnabled)
 		try {
 			
 			Object workflowException = execution.getVariable("WorkflowException");
 
 			if (workflowException instanceof WorkflowException) {
-				utils.log("DEBUG", "Prev workflowException: " + workflowException.getErrorMessage(), isDebugEnabled)
+				utils.log("INFO", "Prev workflowException: " + workflowException.getErrorMessage(), isDebugEnabled)
 				execution.setVariable("prevWorkflowException", workflowException);
 				//execution.setVariable("WorkflowException", null);
 			}
 		} catch (BpmnError e) {
-			utils.log("DEBUG", "BPMN Error during preProcessRollback", isDebugEnabled)
+			utils.log("INFO", "BPMN Error during preProcessRollback", isDebugEnabled)
 		} catch(Exception ex) {
 			String msg = "Exception in preProcessRollback. " + ex.getMessage()
-			utils.log("DEBUG", msg, isDebugEnabled)
+			utils.log("INFO", msg, isDebugEnabled)
 		}
-		utils.log("DEBUG"," *** Exit preProcessRollback *** ", isDebugEnabled)
+		utils.log("INFO"," *** Exit preProcessRollback *** ", isDebugEnabled)
 	}
 
 	public void postProcessRollback (Execution execution) {
 		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
-		utils.log("DEBUG"," ***** postProcessRollback ***** ", isDebugEnabled)
+		utils.log("INFO"," ***** postProcessRollback ***** ", isDebugEnabled)
 		String msg = ""
 		try {
 			Object workflowException = execution.getVariable("prevWorkflowException");
 			if (workflowException instanceof WorkflowException) {
-				utils.log("DEBUG", "Setting prevException to WorkflowException: ", isDebugEnabled)
+				utils.log("INFO", "Setting prevException to WorkflowException: ", isDebugEnabled)
 				execution.setVariable("WorkflowException", workflowException);
 			}
 			execution.setVariable("rollbackData", null)
 		} catch (BpmnError b) {
-			utils.log("DEBUG", "BPMN Error during postProcessRollback", isDebugEnabled)
+			utils.log("INFO", "BPMN Error during postProcessRollback", isDebugEnabled)
 			throw b;
 		} catch(Exception ex) {
 			msg = "Exception in postProcessRollback. " + ex.getMessage()
-			utils.log("DEBUG", msg, isDebugEnabled)
+			utils.log("INFO", msg, isDebugEnabled)
 		}
-		utils.log("DEBUG"," *** Exit postProcessRollback *** ", isDebugEnabled)
+		utils.log("INFO"," *** Exit postProcessRollback *** ", isDebugEnabled)
 	}
 
 	public void preInitResourcesOperStatus(Execution execution){
         def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
 
-        utils.log("DEBUG", " ======== STARTED preInitResourcesOperStatus Process ======== ", isDebugEnabled)
+        utils.log("INFO", " ======== STARTED preInitResourcesOperStatus Process ======== ", isDebugEnabled)
         try{
             String serviceId = execution.getVariable("serviceInstanceId")
             String operationId = execution.getVariable("operationId")
@@ -619,26 +349,21 @@
             String progress = "0"
             String reason = ""
             String operationContent = "Prepare service creation"
-            utils.log("DEBUG", "Generated new operation for Service Instance serviceId:" + serviceId + " operationId:" + operationId + " operationType:" + oprationType, isDebugEnabled)
+            utils.log("INFO", "Generated new operation for Service Instance serviceId:" + serviceId + " operationId:" + operationId + " operationType:" + operationType, isDebugEnabled)
             serviceId = UriUtils.encode(serviceId,"UTF-8")
             execution.setVariable("serviceInstanceId", serviceId)
             execution.setVariable("operationId", operationId)
             execution.setVariable("operationType", operationType)
-            def jsonSlurper = new JsonSlurper()
-            def jsonOutput = new JsonOutput()
-            String incomingRequest = execution.getVariable("bpmnRequest")
-            Map serviceReq =  jsonSlurper.parseText(incomingRequest)
-            def segmentList = serviceReq.service.parameters.segments
-                    
-            if (segmentList != null) {
-                segmentList.each {
-                    resourceTemplateUUIDs  = resourcesUUIDs + it.resourceUUID + ":"
-                }
-            }            
+            String incomingRequest = execution.getVariable("uuiRequest")
+            String resourcesStr = jsonUtil.getJsonValue(incomingRequest, "service.parameters.resources")  
+            List<String> resourceList = jsonUtil.StringArrayToList(execution, resourcesStr)   
+            for(String resource : resourceList){
+                    resourceTemplateUUIDs  = resourceTemplateUUIDs + jsonUtil.getJsonValue(resource, "resourceDefId") + ":"
+            }           
 
-            def dbAdapterEndpoint = execution.getVariable("URN_mso_adapters_openecomp_db_endpoint")
+            def dbAdapterEndpoint = "http://mso.mso.testlab.openecomp.org:8080/dbadapters/RequestsDbAdapter"
             execution.setVariable("CVFMI_dbAdapterEndpoint", dbAdapterEndpoint)
-            utils.log("DEBUG", "DB Adapter Endpoint is: " + dbAdapterEndpoint, isDebugEnabled)
+            utils.log("INFO", "DB Adapter Endpoint is: " + dbAdapterEndpoint, isDebugEnabled)
 
             String payload =
                 """<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
@@ -656,45 +381,49 @@
 
             payload = utils.formatXml(payload)
             execution.setVariable("CVFMI_initResOperStatusRequest", payload)
-            utils.log("DEBUG", "Outgoing initResourceOperationStatus: \n" + payload, isDebugEnabled)
+            utils.log("INFO", "Outgoing initResourceOperationStatus: \n" + payload, isDebugEnabled)
             utils.logAudit("CreateVfModuleInfra Outgoing initResourceOperationStatus Request: " + payload)
 
         }catch(Exception e){
             utils.log("ERROR", "Exception Occured Processing preInitResourcesOperStatus. Exception is:\n" + e, isDebugEnabled)
             execution.setVariable("CVFMI_ErrorResponse", "Error Occurred during preInitResourcesOperStatus Method:\n" + e.getMessage())
         }
-        utils.log("DEBUG", "======== COMPLETED preInitResourcesOperStatus Process ======== ", isDebugEnabled)  
+        utils.log("INFO", "======== COMPLETED preInitResourcesOperStatus Process ======== ", isDebugEnabled)  
 	}
 	
 	/**
 	 * prepare resource create request
 	 */
-	public void preResourceRequest(execution, resourceType){
+	public void preResourceRequest(execution){
+	    String resourceType = execution.getVariable("resourceType")
 	    def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
 	    String serviceInstanceName = execution.getVariable("serviceInstanceName")
-	    String nsServiceName = nsName + "_" + serviceInstanceName
-	    String nsServiceDescription = execution.getVariable("serviceInstanceDescription")
+	    String nsServiceName = resourceType + "_" + serviceInstanceName
 	    execution.setVariable("nsServiceName", nsServiceName)
-	    utils.log("DEBUG", "Prepare VFC Request nsServiceName:" + nsServiceName, isDebugEnabled)
-	    execution.setVariable("nsServiceDescription", nsServiceDescription)
-	    utils.log("DEBUG", "Prepare VFC Request nsServiceDescription:" + nsServiceDescription, isDebugEnabled)
+	    utils.log("INFO", "Prepare VFC Request nsServiceName:" + nsServiceName, isDebugEnabled)
         String globalSubscriberId = execution.getVariable("globalSubscriberId")
         String serviceType = execution.getVariable("serviceType")
-        String serviceId = execution.getVariable("serviceId")
+        String serviceId = execution.getVariable("serviceInstanceId")
+        execution.setVariable("serviceId", serviceId)
         String operationId = execution.getVariable("operationId")
-        String incomingRequest = execution.getVariable("bpmnRequest")
-        Map serviceReq =  jsonSlurper.parseText(incomingRequest)
-        def segmentList = serviceReq.service.parameters.segments                
-        if (segmentList != null) {
-            segmentList.each {
-                if(StringUtils.containsIgnoreCase(it.resourceName, resourceType)){
-                    String resourceUUID  = it.resourceUUID
-                    String resourceParameters = it.nsParameters
-                    execution.setVariable("resourceType", resourceType)
-                    execution.setVariable("resourceUUID", resourceUUID)
-                    execution.setVariable("resourceParameters", resourceParameters)
-                }                
-            }
-        } 
+        String incomingRequest = execution.getVariable("uuiRequest")
+        String resourcesStr = jsonUtil.getJsonValue(incomingRequest, "service.parameters.resources")  
+        String nsServiceDescription = jsonUtil.getJsonValue(incomingRequest, "service.description")  
+        execution.setVariable("nsServiceDescription", nsServiceDescription)
+        utils.log("INFO", "Prepare VFC Request nsServiceDescription:" + nsServiceDescription, isDebugEnabled)
+        List<String> resourceList = jsonUtil.StringArrayToList(execution, resourcesStr)   
+        for(String resource : resourceList){
+            String resourceName = jsonUtil.getJsonValue(resource, "resourceName")  
+            if(StringUtils.containsIgnoreCase(resourceName, resourceType)){
+                String resourceUUID  = jsonUtil.getJsonValue(resource, "resourceDefId")
+                String resourceParameters = jsonUtil.getJsonValue(resource, "nsParameters")                
+                execution.setVariable("resourceUUID", resourceUUID)
+                execution.setVariable("resourceParameters", resourceParameters)
+                utils.log("INFO", "Prepare VFC Request resourceType:" + resourceType, isDebugEnabled)
+                utils.log("INFO", "Prepare VFC Request resourceUUID:" + resourceUUID, isDebugEnabled)
+                utils.log("INFO", "Prepare VFC Request resourceParameters:" + resourceParameters, isDebugEnabled)
+            } 
+        }
+	    utils.log("INFO", "Prepare VFC Request finished", isDebugEnabled)
 	}
 }
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVFCNetworkServiceInstance.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVFCNetworkServiceInstance.groovy
index 6c0dedf..8354798 100644
--- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVFCNetworkServiceInstance.groovy
+++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVFCNetworkServiceInstance.groovy
@@ -46,11 +46,9 @@
  */
 public class DoCreateVFCNetworkServiceInstance extends AbstractServiceTaskProcessor {
 
-    String createUrl = "/vfc/vfcadapters/v1/ns"
-            
-    String instantiateUrl = "/vfcvfcadatpers/v1/ns/{nsInstanceId}/instantiate"
+    String vfcUrl = "/vfc/rest/v1/vfcadapter"
     
-    String queryJobUrl = "/vfc/vfcadatpers/v1/jobs/{jobId}"
+    String host = "http://mso.mso.testlab.openecomp.org:8080"
     
     ExceptionUtil exceptionUtil = new ExceptionUtil()
 
@@ -65,23 +63,23 @@
     public void preProcessRequest (Execution execution) {
 	   def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
        String msg = ""
-       utils.log("DEBUG", " *** preProcessRequest() *** ", isDebugEnabled)
+       utils.log("INFO", " *** preProcessRequest() *** ", isDebugEnabled)
        try {
            //deal with nsName and Description
            String nsServiceName = execution.getVariable("nsServiceName")
            String nsServiceDescription = execution.getVariable("nsServiceDescription")
-           utils.log("DEBUG", "nsServiceName:" + nsServiceName + " nsServiceDescription:" + nsServiceDescription, isDebugEnabled)
+           utils.log("INFO", "nsServiceName:" + nsServiceName + " nsServiceDescription:" + nsServiceDescription, isDebugEnabled)
            //deal with operation key
            String globalSubscriberId = execution.getVariable("globalSubscriberId")
-           utils.log("DEBUG", "globalSubscriberId:" + globalSubscriberId, isDebugEnabled)
+           utils.log("INFO", "globalSubscriberId:" + globalSubscriberId, isDebugEnabled)
            String serviceType = execution.getVariable("serviceType")
-           utils.log("DEBUG", "serviceType:" + serviceType, isDebugEnabled)
+           utils.log("INFO", "serviceType:" + serviceType, isDebugEnabled)
            String serviceId = execution.getVariable("serviceId")
-           utils.log("DEBUG", "serviceId:" + serviceId, isDebugEnabled)
+           utils.log("INFO", "serviceId:" + serviceId, isDebugEnabled)
            String operationId = execution.getVariable("operationId")
-           utils.log("DEBUG", "serviceType:" + serviceType, isDebugEnabled)
+           utils.log("INFO", "serviceType:" + serviceType, isDebugEnabled)
            String nodeTemplateUUID = execution.getVariable("resourceUUID")
-           utils.log("DEBUG", "nodeTemplateUUID:" + nodeTemplateUUID, isDebugEnabled)
+           utils.log("INFO", "nodeTemplateUUID:" + nodeTemplateUUID, isDebugEnabled)
            /*
             * segmentInformation needed as a object of segment
             * {
@@ -93,11 +91,15 @@
             *     }
             * }
             */
-           String nsParameters = execution.getVariable("resourceParamters")
-           utils.log("DEBUG", "Input Request:" + siRequest, isDebugEnabled)
-           String nsOperationKey = "{\"globalSubscriberId\":\"" + globalSubscriberId + "\",\"serviceType:\""
-                 + serviceType + "\",\"serviceId\":\"" + serviceId + "\",\"operationId\":\"" + operationId
-                 +"\",\"nodeTemplateUUID\":\"" + nodeTemplateUUID + "\"}";
+           String nsParameters = execution.getVariable("resourceParameters")
+           utils.log("INFO", "nsParameters:" + nsParameters, isDebugEnabled)
+           String nsOperationKey = """{
+                   "globalSubscriberId":"${globalSubscriberId}",
+                   "serviceType":"${serviceType}",
+                   "serviceId":"${serviceId}",
+                   "operationId":"${operationId}",
+                   "nodeTemplateUUID":"${nodeTemplateUUID}"
+                    }"""
            execution.setVariable("nsOperationKey", nsOperationKey);
            execution.setVariable("nsParameters", nsParameters)
            
@@ -106,10 +108,10 @@
            throw e;
        } catch (Exception ex){
            msg = "Exception in preProcessRequest " + ex.getMessage()
-           utils.log("DEBUG", msg, isDebugEnabled)
+           utils.log("INFO", msg, isDebugEnabled)
            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
        }
-       utils.log("DEBUG"," ***** Exit preProcessRequest *****",  isDebugEnabled)
+       utils.log("INFO"," ***** Exit preProcessRequest *****",  isDebugEnabled)
 	}
 
     /**
@@ -117,13 +119,17 @@
      */
     public void createNetworkService(Execution execution) {
         
-        String nsOperationKey = excution.getVariable("nsOperationKey");
-        String nsParameters = excution.getVariable("nsParameters");
+        String nsOperationKey = execution.getVariable("nsOperationKey");
+        String nsParameters = execution.getVariable("nsParameters");
         String nsServiceName = execution.getVariable("nsServiceName")
         String nsServiceDescription = execution.getVariable("nsServiceDescription")
-        String reqBody = "{\"nsServiceName\":\"" + nsServiceName + "\",\"nsServiceDescription\":\"" + nsServiceDescription
-              +"\",\"nsOperationKey\":" + nsOperationKey + ",\"nsParameters\":" + nsParameters
-        APIResponse apiResponse = postRequest(createUrl, reqBody)
+        String reqBody ="""{
+                "nsServiceName":"${nsServiceName}",
+                "nsServiceDescription":"${nsServiceDescription}",
+                "nsOperationKey":${nsOperationKey},
+                "nsParameters":${nsParameters}
+               }"""
+        APIResponse apiResponse = postRequest(execution, host + vfcUrl + "/ns", reqBody)
         String returnCode = apiResponse.getStatusCode()
         String aaiResponseAsString = apiResponse.getResponseBodyAsString()
         String nsInstanceId = "";
@@ -138,14 +144,19 @@
      * instantiate NS task
      */
     public void instantiateNetworkService(Execution execution) {
-        String nsOperationKey = excution.getVariable("nsOperationKey");
-        String nsParameters = excution.getVariable("nsParameters");
+        String nsOperationKey = execution.getVariable("nsOperationKey");
+        String nsParameters = execution.getVariable("nsParameters");
         String nsServiceName = execution.getVariable("nsServiceName")
         String nsServiceDescription = execution.getVariable("nsServiceDescription")
-        String reqBody = "{\"nsServiceName\":\"" + nsServiceName + "\",\"nsServiceDescription\":\"" + nsServiceDescription
-              +"\",\"nsOperationKey\":" + nsOperationKey + ",\"nsParameters\":" + nsParameters
-        String url = instantiateUrl.replaceAll("{nsInstanceId}", execution.getVariable("nsInstanceId")) 
-        APIResponse apiResponse = postRequest(url, reqBody)
+        String reqBody ="""{
+        "nsServiceName":"${nsServiceName}",
+        "nsServiceDescription":"${nsServiceDescription}",
+        "nsOperationKey":${nsOperationKey},
+        "nsParameters":${nsParameters}
+       }"""
+        String nsInstanceId = execution.getVariable("nsInstanceId")
+        String url = host + vfcUrl + "/ns/" +nsInstanceId + "/instantiate"
+        APIResponse apiResponse = postRequest(execution, url, reqBody)
         String returnCode = apiResponse.getStatusCode()
         String aaiResponseAsString = apiResponse.getResponseBodyAsString()
         String jobId = "";
@@ -160,16 +171,16 @@
      */
     public void queryNSProgress(Execution execution) {
         String jobId = execution.getVariable("jobId")
-        String nsOperationKey = excution.getVariable("nsOperationKey");
-        String url = queryJobUrl.replaceAll("{jobId}", execution.getVariable("jobId")) 
-        APIResponse apiResponse = postRequest(url, nsOperationKey)
+        String nsOperationKey = execution.getVariable("nsOperationKey");
+        String url = host + vfcUrl + "/jobs/" + jobId
+        APIResponse apiResponse = postRequest(execution, url, nsOperationKey)
         String returnCode = apiResponse.getStatusCode()
         String aaiResponseAsString = apiResponse.getResponseBodyAsString()
         String operationStatus = "error"
         if(returnCode== "200"){
             operationStatus = jsonUtil.getJsonValue(aaiResponseAsString, "responseDescriptor.status")
         }
-        exection.setVariable("operationStatus", operationStatus)
+        execution.setVariable("operationStatus", operationStatus)
     }
 
     /**
@@ -189,25 +200,25 @@
     public void finishNSCreate(Execution execution) {
         //no need to do anything util now
     }
-
+    
     /**
      * post request
      * url: the url of the request
      * requestBody: the body of the request
      */
-    private APIResponse postRequest(String url, String requestBody){
+    private APIResponse postRequest(Execution execution, String url, String requestBody){
         def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
-        taskProcessor.logDebug( " ======== Started Execute VFC adapter Post Process ======== ", isDebugEnabled)
-        taskProcessor.logDebug( "url:"+url +"\nrequestBody:"+ requestBody, isDebugEnabled)
+        utils.log("INFO"," ***** Started Execute VFC adapter Post Process *****",  isDebugEnabled)
+        utils.log("INFO","url:"+url +"\nrequestBody:"+ requestBody,  isDebugEnabled)
         APIResponse apiResponse = null
         try{
             RESTConfig config = new RESTConfig(url);
-            RESTClient client = new RESTClient(config).addHeader("X-FromAppId", "MSO").addHeader("X-TransactionId", uuid).addHeader("Accept","application/json");
+            RESTClient client = new RESTClient(config).addHeader("Content-Type", "application/json").addHeader("Accept","application/json").addHeader("Authorization","Basic QlBFTENsaWVudDpwYXNzd29yZDEk");
             apiResponse = client.httpPost(requestBody)
-            taskProcessor.logDebug( "response code:"+ apiResponse.getStatusCode() +"\nresponse body:"+ apiResponse.getResponseBodyAsString(), isDebugEnabled)
-            taskProcessor.logDebug( "======== Completed Execute VF-C adapter Post Process ======== ", isDebugEnabled)
+            utils.log("INFO","response code:"+ apiResponse.getStatusCode() +"\nresponse body:"+ apiResponse.getResponseBodyAsString(),  isDebugEnabled)    
+            utils.log("INFO","======== Completed Execute VF-C adapter Post Process ======== ",  isDebugEnabled)
         }catch(Exception e){
-            taskProcessor.utils.log("ERROR", "Exception occured while executing AAI Post Call. Exception is: \n" + e, isDebugEnabled)
+            utils.log("ERROR","Exception occured while executing AAI Post Call. Exception is: \n" + e,  isDebugEnabled)
             throw new BpmnError("MSOWorkflowException")
         }        
         return apiResponse
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/resources/process/CreateCustomE2EServiceInstance.bpmn b/bpmn/MSOInfrastructureBPMN/src/main/resources/process/CreateCustomE2EServiceInstance.bpmn
index ce17615..8fc761c 100644
--- a/bpmn/MSOInfrastructureBPMN/src/main/resources/process/CreateCustomE2EServiceInstance.bpmn
+++ b/bpmn/MSOInfrastructureBPMN/src/main/resources/process/CreateCustomE2EServiceInstance.bpmn
@@ -29,17 +29,18 @@
         <camunda:out source="rollbackData" target="rollbackData" />
         <camunda:in source="serviceInstanceId" target="serviceInstanceId" />
         <camunda:in source="serviceInstanceName" target="serviceInstanceName" />
-        <camunda:in source="serviceModelInfo" target="serviceModelInfo" />
         <camunda:in source="productFamilyId" target="productFamilyId" />
         <camunda:in source="disableRollback" target="disableRollback" />
-        <camunda:in source="serviceInputParams" target="serviceInputParams" />
+        <camunda:in source="uuiRequest" target="uuiRequest" />
         <camunda:out source="rolledBack" target="rolledBack" />
         <camunda:out source="serviceInstanceName" target="serviceInstanceName" />
         <camunda:in source="failIfExists" target="failIfExists" />
         <camunda:in source="globalSubscriberId" target="globalSubscriberId" />
-        <camunda:in source="subscriptionServiceType" target="subscriptionServiceType" />
-        <camunda:in sourceExpression="1610" target="sdncVersion" />
+        <camunda:in source="serviceType" target="serviceType" />
         <camunda:in source="initialStatus" target="initialStatus" />
+        <camunda:in source="operationId" target="operationId" />
+        <camunda:in source="operationType" target="operationType" />
+        <camunda:in source="URN_mso_adapters_openecomp_db_endpoint" target="URN_mso_adapters_openecomp_db_endpoint" />
       </bpmn:extensionElements>
       <bpmn:incoming>SequenceFlow_19eilro</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0klbpxx</bpmn:outgoing>
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/resources/subprocess/DoCreateE2EServiceInstance.bpmn b/bpmn/MSOInfrastructureBPMN/src/main/resources/subprocess/DoCreateE2EServiceInstance.bpmn
index bfdbb21..2fbb898 100644
--- a/bpmn/MSOInfrastructureBPMN/src/main/resources/subprocess/DoCreateE2EServiceInstance.bpmn
+++ b/bpmn/MSOInfrastructureBPMN/src/main/resources/subprocess/DoCreateE2EServiceInstance.bpmn
@@ -5,14 +5,6 @@
       <bpmn2:outgoing>SequenceFlow_1</bpmn2:outgoing>
     </bpmn2:startEvent>
     <bpmn2:sequenceFlow id="SequenceFlow_1" name="" sourceRef="createSI_startEvent" targetRef="preProcessRequest_ScriptTask" />
-    <bpmn2:scriptTask id="getAAICustomerById_scriptTask" name="Get AAI Customer By globalCustomerId " scriptFormat="groovy">
-      <bpmn2:incoming>SequenceFlow_2</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_3</bpmn2:outgoing>
-      <bpmn2:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
-def dcsi = new DoCreateE2EServiceInstance()
-dcsi.getAAICustomerById(execution)]]></bpmn2:script>
-    </bpmn2:scriptTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_3" name="" sourceRef="getAAICustomerById_scriptTask" targetRef="ExclusiveGateway_09wkav2" />
     <bpmn2:scriptTask id="preProcessRequest_ScriptTask" name="PreProcess Incoming Request" scriptFormat="groovy">
       <bpmn2:incoming>SequenceFlow_1</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_2</bpmn2:outgoing>
@@ -22,7 +14,7 @@
 ]]></bpmn2:script>
     </bpmn2:scriptTask>
     <bpmn2:sequenceFlow id="SequenceFlow_4" name="" sourceRef="CustomE2EGetService" targetRef="ScriptTask_0i8cqdy" />
-    <bpmn2:sequenceFlow id="SequenceFlow_2" name="" sourceRef="preProcessRequest_ScriptTask" targetRef="getAAICustomerById_scriptTask" />
+    <bpmn2:sequenceFlow id="SequenceFlow_2" name="" sourceRef="preProcessRequest_ScriptTask" targetRef="CustomE2EGetService" />
     <bpmn2:callActivity id="CustomE2EGetService" name="Call Custom E2E Get Service" calledElement="CustomE2EGetService">
       <bpmn2:extensionElements>
         <camunda:in source="serviceInstanceName" target="GENGS_serviceInstanceName" />
@@ -31,35 +23,26 @@
         <camunda:out source="GENGS_FoundIndicator" target="GENGS_FoundIndicator" />
         <camunda:out source="GENGS_SuccessIndicator" target="GENGS_SuccessIndicator" />
         <camunda:out source="WorkflowException" target="WorkflowException" />
+        <camunda:in source="serviceType" target="GENGS_serviceType" />
       </bpmn2:extensionElements>
-      <bpmn2:incoming>SequenceFlow_11fnnkb</bpmn2:incoming>
+      <bpmn2:incoming>SequenceFlow_2</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_4</bpmn2:outgoing>
     </bpmn2:callActivity>
     <bpmn2:callActivity id="CustomE2EPutService" name="Call Custom E2E Put Service" calledElement="CustomE2EPutService">
       <bpmn2:extensionElements>
         <camunda:in source="globalSubscriberId" target="GENPS_globalSubscriberId" />
         <camunda:in source="serviceInstanceId" target="GENPS_serviceInstanceId" />
-        <camunda:in source="subscriptionServiceType" target="GENPS_serviceType" />
+        <camunda:in source="serviceType" target="GENPS_serviceType" />
         <camunda:in sourceExpression="service-instance" target="GENPS_type" />
         <camunda:in source="serviceInstanceData" target="GENPS_payload" />
         <camunda:out source="GENPS_SuccessIndicator" target="GENPS_SuccessIndicator" />
         <camunda:in source="msoRequestId" target="GENPS_requesId" />
         <camunda:out source="WorkflowException" target="WorkflowException" />
       </bpmn2:extensionElements>
-      <bpmn2:incoming>SequenceFlow_1uw2p9a</bpmn2:incoming>
       <bpmn2:incoming>SequenceFlow_1w01tqs</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_129ih1g</bpmn2:outgoing>
     </bpmn2:callActivity>
     <bpmn2:sequenceFlow id="SequenceFlow_129ih1g" sourceRef="CustomE2EPutService" targetRef="ScriptTask_0q37vn9" />
-    <bpmn2:exclusiveGateway id="ExclusiveGateway_09wkav2" name="sdncVersion is 1610 or serviceInstance name is populated?" default="SequenceFlow_1uw2p9a">
-      <bpmn2:incoming>SequenceFlow_3</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_11fnnkb</bpmn2:outgoing>
-      <bpmn2:outgoing>SequenceFlow_1uw2p9a</bpmn2:outgoing>
-    </bpmn2:exclusiveGateway>
-    <bpmn2:sequenceFlow id="SequenceFlow_11fnnkb" name="yes" sourceRef="ExclusiveGateway_09wkav2" targetRef="CustomE2EGetService">
-      <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression"><![CDATA[#{(execution.getVariable("serviceInstanceName" )  != null && execution.getVariable("serviceInstanceName" )  != "" ) || execution.getVariable("sdncVersion" )   == "1610" }]]></bpmn2:conditionExpression>
-    </bpmn2:sequenceFlow>
-    <bpmn2:sequenceFlow id="SequenceFlow_1uw2p9a" name="no" sourceRef="ExclusiveGateway_09wkav2" targetRef="CustomE2EPutService" />
     <bpmn2:subProcess id="SubProcess_06d8lk8" name="Sub-process for Application Errors" triggeredByEvent="true">
       <bpmn2:startEvent id="StartEvent_0yljq9y">
         <bpmn2:outgoing>SequenceFlow_0tgrn11</bpmn2:outgoing>
@@ -100,17 +83,6 @@
       </bpmn2:scriptTask>
       <bpmn2:sequenceFlow id="SequenceFlow_1xzgv5k" sourceRef="ScriptTask_1p0vyip" targetRef="EndEvent_117lkk3" />
     </bpmn2:subProcess>
-    <bpmn2:exclusiveGateway id="ExclusiveGateway_1nk6aol" name="sdncVersion is 1610?">
-      <bpmn2:incoming>SequenceFlow_1dd86x8</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_00v4npo</bpmn2:outgoing>
-      <bpmn2:outgoing>SequenceFlow_1170ztf</bpmn2:outgoing>
-    </bpmn2:exclusiveGateway>
-    <bpmn2:endEvent id="EndEvent_10659gr">
-      <bpmn2:incoming>SequenceFlow_00v4npo</bpmn2:incoming>
-    </bpmn2:endEvent>
-    <bpmn2:sequenceFlow id="SequenceFlow_00v4npo" name="yes" sourceRef="ExclusiveGateway_1nk6aol" targetRef="EndEvent_10659gr">
-      <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression"><![CDATA[#{execution.getVariable("sdncVersion" ) == "1610"}]]></bpmn2:conditionExpression>
-    </bpmn2:sequenceFlow>
     <bpmn2:scriptTask id="ScriptTask_0i8cqdy" name="Post Process AAI GET" scriptFormat="groovy">
       <bpmn2:incoming>SequenceFlow_4</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_1w01tqs</bpmn2:outgoing>
@@ -121,27 +93,26 @@
     <bpmn2:sequenceFlow id="SequenceFlow_1w01tqs" sourceRef="ScriptTask_0i8cqdy" targetRef="CustomE2EPutService" />
     <bpmn2:scriptTask id="ScriptTask_0q37vn9" name="Post Process AAI PUT" scriptFormat="groovy">
       <bpmn2:incoming>SequenceFlow_129ih1g</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_1dd86x8</bpmn2:outgoing>
+      <bpmn2:outgoing>SequenceFlow_03fabby</bpmn2:outgoing>
       <bpmn2:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
 def ddsi = new DoCreateE2EServiceInstance()
 ddsi.postProcessAAIPUT(execution)]]></bpmn2:script>
     </bpmn2:scriptTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_1dd86x8" sourceRef="ScriptTask_0q37vn9" targetRef="ExclusiveGateway_1nk6aol" />
     <bpmn2:scriptTask id="ScriptTask_0081lne" name="Prepare  Resource Requst For overlay" scriptFormat="groovy">
       <bpmn2:incoming>SequenceFlow_1pjr82f</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_0ofqw6v</bpmn2:outgoing>
       <bpmn2:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
-String nsName = "overlay"
+execution.setVariable("resourceType", "overlay")
 def csi = new  DoCreateE2EServiceInstance()
-csi.preResourceRequest(execution, nsName)]]></bpmn2:script>
+csi.preResourceRequest(execution)]]></bpmn2:script>
     </bpmn2:scriptTask>
     <bpmn2:scriptTask id="ScriptTask_0wvq4t8" name="Prepare Resource Request for vEPC" scriptFormat="groovy">
       <bpmn2:incoming>SequenceFlow_05gdjox</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_15zgrcq</bpmn2:outgoing>
       <bpmn2:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
-String resourceName= "vEPC"
+execution.setVariable("resourceType", "vEPC")
 def csi = new  DoCreateE2EServiceInstance()
-csi.preResourceRequest(execution, resourceName)]]></bpmn2:script>
+csi.preResourceRequest(execution)]]></bpmn2:script>
     </bpmn2:scriptTask>
     <bpmn2:callActivity id="CallActivity_0uwm4l1" name="Call DoCreateVFCNetworkServiceInstance For vEPC" calledElement="DoCreateVFCNetworkServiceInstance">
       <bpmn2:extensionElements>
@@ -170,14 +141,13 @@
     <bpmn2:sequenceFlow id="SequenceFlow_15zgrcq" sourceRef="ScriptTask_0wvq4t8" targetRef="CallActivity_0uwm4l1" />
     <bpmn2:sequenceFlow id="SequenceFlow_1vvdkcs" sourceRef="CallActivity_09c3ajg" targetRef="ScriptTask_1xdjlzm" />
     <bpmn2:sequenceFlow id="SequenceFlow_092ghvu" sourceRef="ScriptTask_1xdjlzm" targetRef="EndEvent_0kbbt94" />
-    <bpmn2:sequenceFlow id="SequenceFlow_1170ztf" sourceRef="ExclusiveGateway_1nk6aol" targetRef="Task_0uiekmn" />
     <bpmn2:endEvent id="EndEvent_0kbbt94">
       <bpmn2:incoming>SequenceFlow_092ghvu</bpmn2:incoming>
     </bpmn2:endEvent>
     <bpmn2:sequenceFlow id="SequenceFlow_0k4q7jm" sourceRef="CallActivity_0uwm4l1" targetRef="Task_0aidjmp" />
     <bpmn2:sequenceFlow id="SequenceFlow_1qctzm0" sourceRef="Task_0uiekmn" targetRef="Task_0raqlqc" />
-    <bpmn2:scriptTask id="Task_0uiekmn" name="Prepare Resource Oper Status">
-      <bpmn2:incoming>SequenceFlow_1170ztf</bpmn2:incoming>
+    <bpmn2:scriptTask id="Task_0uiekmn" name="Prepare Resource Oper Status" scriptFormat="groovy">
+      <bpmn2:incoming>SequenceFlow_03fabby</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_1qctzm0</bpmn2:outgoing>
       <bpmn2:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
 def ddsi = new DoCreateE2EServiceInstance()
@@ -211,9 +181,9 @@
       <bpmn2:incoming>SequenceFlow_0k4q7jm</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_0ua1bbk</bpmn2:outgoing>
       <bpmn2:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
-String nsName = "vIMS"
+execution.setVariable("resourceType", "vIMS")
 def csi = new  DoCreateE2EServiceInstance()
-csi.preResourceRequest(execution, nsName)]]></bpmn2:script>
+csi.preResourceRequest(execution)]]></bpmn2:script>
     </bpmn2:scriptTask>
     <bpmn2:sequenceFlow id="SequenceFlow_1hgiln0" sourceRef="Task_03n6y9h" targetRef="Task_0io5qby" />
     <bpmn2:callActivity id="Task_03n6y9h" name="Call DoCreateVFCNetworkServiceInstance For vIMS" calledElement="DoCreateVFCNetworkServiceInstance">
@@ -239,13 +209,13 @@
     </bpmn2:serviceTask>
     <bpmn2:sequenceFlow id="SequenceFlow_17i1ors" sourceRef="Task_0pkhzoj" targetRef="Task_0gs55f1" />
     <bpmn2:sequenceFlow id="SequenceFlow_1pjr82f" sourceRef="Task_0gs55f1" targetRef="ScriptTask_0081lne" />
-    <bpmn2:scriptTask id="Task_0pkhzoj" name="Prepare Resource Request For underlay">
+    <bpmn2:scriptTask id="Task_0pkhzoj" name="Prepare Resource Request For underlay" scriptFormat="groovy">
       <bpmn2:incoming>SequenceFlow_1vo0235</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_17i1ors</bpmn2:outgoing>
       <bpmn2:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
-String nsName = "underlay"
+execution.setVariable("resourceType", "underlay")
 def csi = new  DoCreateE2EServiceInstance()
-csi.preResourceRequest(execution, nsName)]]></bpmn2:script>
+csi.preResourceRequest(execution)]]></bpmn2:script>
     </bpmn2:scriptTask>
     <bpmn2:serviceTask id="Task_0gs55f1" name="Call Underlay Create" camunda:class="org.openecomp.mso.bpmn.infrastructure.workflow.serviceTask.SdncNetworkTopologyOperationTask">
       <bpmn2:incoming>SequenceFlow_17i1ors</bpmn2:incoming>
@@ -255,53 +225,44 @@
       <bpmn2:incoming>SequenceFlow_0ofqw6v</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_1vvdkcs</bpmn2:outgoing>
     </bpmn2:serviceTask>
+    <bpmn2:sequenceFlow id="SequenceFlow_03fabby" sourceRef="ScriptTask_0q37vn9" targetRef="Task_0uiekmn" />
   </bpmn2:process>
   <bpmn2:error id="Error_2" name="MSOWorkflowException" errorCode="MSOWorkflowException" />
   <bpmn2:error id="Error_1" name="java.lang.Exception" errorCode="java.lang.Exception" />
   <bpmndi:BPMNDiagram id="BPMNDiagram_1">
     <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DoCreateE2EServiceInstance">
       <bpmndi:BPMNShape id="_BPMNShape_StartEvent_47" bpmnElement="createSI_startEvent">
-        <dc:Bounds x="152" y="79" width="36" height="36" />
+        <dc:Bounds x="34" y="79" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="147" y="120" width="48" height="14" />
+          <dc:Bounds x="28" y="120" width="50" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="_BPMNShape_ScriptTask_61" bpmnElement="preProcessRequest_ScriptTask">
         <dc:Bounds x="245" y="57" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_1" bpmnElement="SequenceFlow_1" sourceElement="_BPMNShape_StartEvent_47" targetElement="_BPMNShape_ScriptTask_61">
-        <di:waypoint xsi:type="dc:Point" x="188" y="97" />
+        <di:waypoint xsi:type="dc:Point" x="70" y="97" />
         <di:waypoint xsi:type="dc:Point" x="245" y="97" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="217" y="82" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="_BPMNShape_ScriptTask_62" bpmnElement="getAAICustomerById_scriptTask">
-        <dc:Bounds x="393" y="57" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_6" bpmnElement="SequenceFlow_3" sourceElement="_BPMNShape_ScriptTask_62">
-        <di:waypoint xsi:type="dc:Point" x="493" y="97" />
-        <di:waypoint xsi:type="dc:Point" x="565" y="97" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="529" y="82" width="0" height="0" />
+          <dc:Bounds x="112.5" y="82" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_10" bpmnElement="SequenceFlow_4">
-        <di:waypoint xsi:type="dc:Point" x="839" y="94" />
+        <di:waypoint xsi:type="dc:Point" x="626" y="94" />
         <di:waypoint xsi:type="dc:Point" x="971" y="94" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="905" y="79" width="0" height="0" />
+          <dc:Bounds x="753.5" y="79" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_3" bpmnElement="SequenceFlow_2" sourceElement="_BPMNShape_ScriptTask_61" targetElement="_BPMNShape_ScriptTask_62">
+      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_3" bpmnElement="SequenceFlow_2" sourceElement="_BPMNShape_ScriptTask_61" targetElement="CallActivity_1md4kyb_di">
         <di:waypoint xsi:type="dc:Point" x="345" y="97" />
-        <di:waypoint xsi:type="dc:Point" x="393" y="97" />
+        <di:waypoint xsi:type="dc:Point" x="526" y="97" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="369" y="82" width="0" height="0" />
+          <dc:Bounds x="390.5" y="82" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="CallActivity_1md4kyb_di" bpmnElement="CustomE2EGetService">
-        <dc:Bounds x="739" y="57" width="100" height="80" />
+        <dc:Bounds x="526" y="57" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="CallActivity_0khp0qc_di" bpmnElement="CustomE2EPutService">
         <dc:Bounds x="972" y="206" width="100" height="80" />
@@ -313,27 +274,6 @@
           <dc:Bounds x="1023" y="296" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ExclusiveGateway_09wkav2_di" bpmnElement="ExclusiveGateway_09wkav2" isMarkerVisible="true">
-        <dc:Bounds x="565" y="72" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="547" y="7" width="81" height="62" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_11fnnkb_di" bpmnElement="SequenceFlow_11fnnkb">
-        <di:waypoint xsi:type="dc:Point" x="615" y="97" />
-        <di:waypoint xsi:type="dc:Point" x="739" y="97" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="635" y="76" width="18" height="14" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1uw2p9a_di" bpmnElement="SequenceFlow_1uw2p9a">
-        <di:waypoint xsi:type="dc:Point" x="590" y="122" />
-        <di:waypoint xsi:type="dc:Point" x="590" y="246" />
-        <di:waypoint xsi:type="dc:Point" x="972" y="246" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="594" y="132.89706349694825" width="12" height="14" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="SubProcess_06d8lk8_di" bpmnElement="SubProcess_06d8lk8" isExpanded="true">
         <dc:Bounds x="-155" y="387" width="783" height="195" />
       </bpmndi:BPMNShape>
@@ -366,47 +306,19 @@
           <dc:Bounds x="-18" y="467" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ExclusiveGateway_1nk6aol_di" bpmnElement="ExclusiveGateway_1nk6aol" isMarkerVisible="true">
-        <dc:Bounds x="997" y="460" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="905" y="472" width="72" height="24" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="EndEvent_10659gr_di" bpmnElement="EndEvent_10659gr">
-        <dc:Bounds x="1103" y="467" width="36" height="36" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="1121" y="508" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_00v4npo_di" bpmnElement="SequenceFlow_00v4npo">
-        <di:waypoint xsi:type="dc:Point" x="1047" y="485" />
-        <di:waypoint xsi:type="dc:Point" x="1103" y="485" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="1063" y="461" width="18" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_0i8cqdy_di" bpmnElement="ScriptTask_0i8cqdy">
         <dc:Bounds x="971" y="57" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1w01tqs_di" bpmnElement="SequenceFlow_1w01tqs">
         <di:waypoint xsi:type="dc:Point" x="1021" y="137" />
-        <di:waypoint xsi:type="dc:Point" x="1021" y="172" />
-        <di:waypoint xsi:type="dc:Point" x="1021" y="172" />
         <di:waypoint xsi:type="dc:Point" x="1021" y="206" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1036" y="172" width="0" height="0" />
+          <dc:Bounds x="991" y="171.5" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_0q37vn9_di" bpmnElement="ScriptTask_0q37vn9">
         <dc:Bounds x="972" y="336" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1dd86x8_di" bpmnElement="SequenceFlow_1dd86x8">
-        <di:waypoint xsi:type="dc:Point" x="1022" y="416" />
-        <di:waypoint xsi:type="dc:Point" x="1022" y="460" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="1037" y="438" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_0ocetux_di" bpmnElement="ScriptTask_0ocetux">
         <dc:Bounds x="76" y="442" width="100" height="80" />
       </bpmndi:BPMNShape>
@@ -469,13 +381,6 @@
           <dc:Bounds x="-809" y="838" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1170ztf_di" bpmnElement="SequenceFlow_1170ztf">
-        <di:waypoint xsi:type="dc:Point" x="1022" y="510" />
-        <di:waypoint xsi:type="dc:Point" x="1022" y="588" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="992" y="543" width="90" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="EndEvent_01p249c_di" bpmnElement="EndEvent_0kbbt94">
         <dc:Bounds x="-823" y="841" width="36" height="36" />
         <bpmndi:BPMNLabel>
@@ -563,6 +468,13 @@
       <bpmndi:BPMNShape id="ServiceTask_1cnnn5b_di" bpmnElement="CallActivity_09c3ajg">
         <dc:Bounds x="-578" y="819" width="100" height="80" />
       </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_03fabby_di" bpmnElement="SequenceFlow_03fabby">
+        <di:waypoint xsi:type="dc:Point" x="1022" y="416" />
+        <di:waypoint xsi:type="dc:Point" x="1022" y="588" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1037" y="496" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
 </bpmn2:definitions>
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/resources/subprocess/DoCreateVFCNetworkServiceInstance.bpmn b/bpmn/MSOInfrastructureBPMN/src/main/resources/subprocess/DoCreateVFCNetworkServiceInstance.bpmn
index 58eb1f0..ffe9dca 100644
--- a/bpmn/MSOInfrastructureBPMN/src/main/resources/subprocess/DoCreateVFCNetworkServiceInstance.bpmn
+++ b/bpmn/MSOInfrastructureBPMN/src/main/resources/subprocess/DoCreateVFCNetworkServiceInstance.bpmn
@@ -34,10 +34,10 @@
       <bpmn:outgoing>createNSFailed_SequenceFlow</bpmn:outgoing>
     </bpmn:exclusiveGateway>
     <bpmn:sequenceFlow id="createNSSuccess_SequenceFlow" name="yes" sourceRef="ExclusiveGateway_0zfksms" targetRef="instantiate_NSTask">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[#{(execution.getVariable("nsInstanceName" )  != null && execution.getVariable("nsInstanceName" )  != "" )}]]></bpmn:conditionExpression>
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[#{(execution.getVariable("nsInstanceId" )  != null && execution.getVariable("nsInstanceId" )  != "" )}]]></bpmn:conditionExpression>
     </bpmn:sequenceFlow>
     <bpmn:sequenceFlow id="createNSFailed_SequenceFlow" name="no" sourceRef="ExclusiveGateway_0zfksms" targetRef="createNSFailed_EndEvent">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[#{(execution.getVariable("nsInstanceName" )  == null || execution.getVariable("nsInstanceName" )  == "" )}]]></bpmn:conditionExpression>
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[#{(execution.getVariable("nsInstanceId" )  == null || execution.getVariable("nsInstanceId" )  == "" )}]]></bpmn:conditionExpression>
     </bpmn:sequenceFlow>
     <bpmn:exclusiveGateway id="ExclusiveGateway_1is7zys" name="Instantiate NS Success?">
       <bpmn:incoming>SequenceFlow_1ywe21t</bpmn:incoming>
