diff --git a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/CustomE2EGetService.groovy b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/CustomE2EGetService.groovy
deleted file mode 100644
index 5aef1d6..0000000
--- a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/CustomE2EGetService.groovy
+++ /dev/null
@@ -1,440 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP - SO
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved. 
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.so.bpmn.common.scripts
-
-import static org.apache.commons.lang3.StringUtils.*
-
-import org.apache.commons.lang3.*
-import org.camunda.bpm.engine.delegate.BpmnError
-import org.camunda.bpm.engine.delegate.DelegateExecution
-import org.onap.so.rest.APIResponse
-import org.springframework.web.util.UriUtils
-import org.onap.so.bpmn.core.UrnPropertiesReader
-import org.onap.so.logger.MessageEnum
-import org.onap.so.logger.MsoLogger
-
-
-/**
- * This class supports the GenericGetService Sub Flow.
- * This Generic sub flow can be used by any flow for accomplishing
- * the goal of getting a Service-Instance or Service-Subscription (from AAI).
- * The calling flow must set the GENGS_type variable as "service-instance"
- * or "service-subscription".
- *
- * When using to Get a Service-Instance:
- * If the global-customer-id and service-type are not provided
- * this flow executes a query to get the service- Url using the
- * Service  Id or Name (whichever is provided).
- *
- * When using to Get a Service-Subscription:
- * The global-customer-id and service-type must be
- * provided.
- *
- * Upon successful completion of this sub flow the
- * GENGS_SuccessIndicator will be true and the query response payload
- * will be set to GENGS_service.  An MSOWorkflowException will
- * be thrown upon unsuccessful completion or if an error occurs
- * at any time during this sub flow. Please map variables
- * to the corresponding variable names below.
- *
- * Note - If this sub flow receives a Not Found (404) response
- * from AAI at any time this will be considered an acceptable
- * successful response however the GENGS_FoundIndicator
- * will be set to false. This variable will allow the calling flow
- * to distinguish between the two Success scenarios,
- * "Success where service- is found" and
- * "Success where service- is NOT found".
- *
- *
- * Variable Mapping Below:
- *
- * In Mapping Variables:
- *   For Allotted-Resource:
- *     @param - GENGS_allottedResourceId
- *     @param - GENGS_type
- *     @param (Optional) - GENGS_serviceInstanceId
- *     @param (Optional) - GENGS_serviceType
- *     @param (Optional) - GENGS_globalCustomerId
- *
- *   For Service-Instance:
- *     @param - GENGS_serviceInstanceId or @param - GENGS_serviceInstanceName
- *     @param - GENGS_type
- *     @param (Optional) - GENGS_serviceType
- *     @param (Optional) - GENGS_globalCustomerId
- *
- *   For Service-Subscription:
- *     @param - GENGS_type
- *     @param - GENGS_serviceType
- *     @param - GENGS_globalCustomerId
- *
- *
- * Out Mapping Variables:
- *    @param - GENGS_service
- *    @param - GENGS_FoundIndicator
- *    @param - WorkflowException
- */
-class CustomE2EGetService extends AbstractServiceTaskProcessor{
-	private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, CustomE2EGetService.class);
-
-	String Prefix = "GENGS_"
-	ExceptionUtil exceptionUtil = new ExceptionUtil()
-
-	/**
-	 * This method validates the incoming variables and
-	 * determines the subsequent event based on which
-	 * variables the calling flow provided.
-	 *
-	 * @param - execution
-	 *
-	 */
-	public void preProcessRequest(DelegateExecution execution) {
-		execution.setVariable("prefix",Prefix)
-		msoLogger.trace("STARTED GenericGetService PreProcessRequest Process")
-
-		execution.setVariable("GENGS_obtainObjectsUrl", false)
-		execution.setVariable("GENGS_obtainServiceInstanceUrlByName", false)
-		execution.setVariable("GENGS_SuccessIndicator", false)
-		execution.setVariable("GENGS_FoundIndicator", false)
-		execution.setVariable("GENGS_resourceLink", null)
-		execution.setVariable("GENGS_siResourceLink", null)
-
-		try{
-			// Get Variables
-			String allottedResourceId = execution.getVariable("GENGS_allottedResourceId")
-			String serviceInstanceId = execution.getVariable("GENGS_serviceInstanceId")
-			String serviceInstanceName = execution.getVariable("GENGS_serviceInstanceName")
-			String serviceType = execution.getVariable("GENGS_serviceType")
-			String globalCustomerId = execution.getVariable("GENGS_globalCustomerId")
-			String type = execution.getVariable("GENGS_type")
-
-			if(type != null){
-				msoLogger.debug("Incoming GENGS_type is: " + type)
-				if(type.equalsIgnoreCase("allotted-resource")){
-					if(isBlank(allottedResourceId)){
-						msoLogger.debug("Incoming allottedResourceId is null. Allotted Resource Id is required to Get an allotted-resource.")
-						exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Incoming allottedResourceId is null. Allotted Resource Id is required to Get an allotted-resource.")
-					}else{
-						msoLogger.debug("Incoming Allotted Resource Id is: " + allottedResourceId)
-						if(isBlank(globalCustomerId) || isBlank(serviceType) || isBlank(serviceInstanceId)){
-							execution.setVariable("GENGS_obtainObjectsUrl", true)
-						}else{
-							msoLogger.debug("Incoming Service Instance Id is: " + serviceInstanceId)
-							msoLogger.debug("Incoming Service Type is: " + serviceType)
-							msoLogger.debug("Incoming Global Customer Id is: " + globalCustomerId)
-						}
-					}
-				}else if(type.equalsIgnoreCase("service-instance")){
-					if(isBlank(serviceInstanceId) && isBlank(serviceInstanceName)){
-						msoLogger.debug("Incoming serviceInstanceId and serviceInstanceName are null. ServiceInstanceId or ServiceInstanceName is required to Get a service-instance.")
-						exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Incoming serviceInstanceId and serviceInstanceName are null. ServiceInstanceId or ServiceInstanceName is required to Get a service-instance.")
-					}else{
-						msoLogger.debug("Incoming Service Instance Id is: " + serviceInstanceId)
-						msoLogger.debug("Incoming Service Instance Name is: " + serviceInstanceName)
-						if(isBlank(globalCustomerId) || isBlank(serviceType)){
-							execution.setVariable("GENGS_obtainObjectsUrl", true)
-							if(isBlank(serviceInstanceId)){
-								execution.setVariable("GENGS_obtainServiceInstanceUrlByName", true)
-							}
-						}else{
-							msoLogger.debug("Incoming Global Customer Id is: " + globalCustomerId)
-							msoLogger.debug("Incoming Service Type is: " + serviceType)
-						}
-					}
-				}else if(type.equalsIgnoreCase("service-subscription")){
-					if(isBlank(serviceType) || isBlank(globalCustomerId)){
-						msoLogger.debug("Incoming ServiceType or GlobalCustomerId is null. These variables are required to Get a service-subscription.")
-						exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Incoming ServiceType or GlobalCustomerId is null. These variables are required to Get a service-subscription.")
-					}else{
-						msoLogger.debug("Incoming Service Type is: " + serviceType)
-						msoLogger.debug("Incoming Global Customer Id is: " + globalCustomerId)
-					}
-				}else{
-					exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Incoming Type is Invalid. Please Specify Type as service-instance or service-subscription")
-				}
-			}else{
-				exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Incoming GENGS_type is null. Variable is Required.")
-			}
-
-		}catch(BpmnError b){
-			msoLogger.debug("Rethrowing MSOWorkflowException")
-			throw b
-		}catch(Exception e){
-			msoLogger.debug("Internal Error encountered within GenericGetService PreProcessRequest method!" + e)
-			exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured in GenericGetService PreProcessRequest")
-
-		}
-		msoLogger.trace("COMPLETED GenericGetService PreProcessRequest Process ")
-	}
-
-	/**
-	 * This method obtains the Url to the provided service instance
-	 * using the Service Instance Id.
-	 *
-	 * @param - execution
-	 */
-	public void obtainServiceInstanceUrlById(DelegateExecution execution){
-		execution.setVariable("prefix",Prefix)
-		msoLogger.trace("STARTED GenericGetService ObtainServiceInstanceUrlById Process")
-		try {
-			AaiUtil aaiUriUtil = new AaiUtil(this)
-			String aai_uri = aaiUriUtil.getSearchNodesQueryEndpoint(execution)
-			String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
-
-			String type = execution.getVariable("GENGS_type")
-			String path = ""
-			if(type.equalsIgnoreCase("service-instance")){
-				String serviceInstanceId = execution.getVariable("GENGS_serviceInstanceId")
-				msoLogger.debug(" Querying Node for Service-Instance URL by using Service-Instance Id: " + serviceInstanceId)
-				path = "${aai_uri}?search-node-type=service-instance&filter=service-instance-id:EQUALS:${serviceInstanceId}"
-				msoLogger.debug("Service Instance Node Query Url is: " + path)
-				msoLogger.debug("Service Instance Node Query Url is: " + path)
-			}else if(type.equalsIgnoreCase("allotted-resource")){
-				String allottedResourceId = execution.getVariable("GENGS_allottedResourceId")
-				msoLogger.debug(" Querying Node for Service-Instance URL by using Allotted Resource Id: " + allottedResourceId)
-				path = "${aai_uri}?search-node-type=allotted-resource&filter=id:EQUALS:${allottedResourceId}"
-				msoLogger.debug("Allotted Resource Node Query Url is: " + path)
-				msoLogger.debug("Allotted Resource Node Query Url is: " + path)
-			}
-
-			//String url = "${aai_endpoint}${path}"  host name needs to be removed from property
-			String url = "${path}"
-			execution.setVariable("GENGS_genericQueryPath", url)
-
-			APIResponse response = aaiUriUtil.executeAAIGetCall(execution, url)
-			int responseCode = response.getStatusCode()
-			execution.setVariable("GENGS_genericQueryResponseCode", responseCode)
-			msoLogger.debug("  GET Service Instance response code is: " + responseCode)
-			msoLogger.debug("GenericGetService AAI GET Response Code: " + responseCode)
-
-			String aaiResponse = response.getResponseBodyAsString()
-			execution.setVariable("GENGS_obtainSIUrlResponseBeforeUnescaping", aaiResponse)
-			msoLogger.debug("GenericGetService AAI Response before unescaping: " + aaiResponse)
-			execution.setVariable("GENGS_genericQueryResponse", aaiResponse)
-			msoLogger.debug("GenericGetService AAI Response: " + aaiResponse)
-			msoLogger.debug("GenericGetService AAI Response: " + aaiResponse)
-
-			//Process Response
-			if(responseCode == 200){
-				msoLogger.debug("Generic Query Received a Good Response Code")
-				execution.setVariable("GENGS_SuccessIndicator", true)
-				if(utils.nodeExists(aaiResponse, "result-data")){
-					msoLogger.debug("Generic Query Response Does Contain Data" )
-					execution.setVariable("GENGS_FoundIndicator", true)
-					String resourceLink = utils.getNodeText(aaiResponse, "resource-link")
-					execution.setVariable("GENGS_resourceLink", resourceLink)
-					execution.setVariable("GENGS_siResourceLink", resourceLink)
-				}else{
-					msoLogger.debug("Generic Query Response Does NOT Contains Data" )
-					execution.setVariable("WorkflowResponse", "  ") //for junits
-				}
-			}else if(responseCode == 404){
-				msoLogger.debug("Generic Query Received a Not Found (404) Response")
-				execution.setVariable("GENGS_SuccessIndicator", true)
-				execution.setVariable("WorkflowResponse", "  ") //for junits
-			}else{
-				msoLogger.debug("Generic Query Received a BAD REST Response: \n" + aaiResponse)
-				exceptionUtil.MapAAIExceptionToWorkflowExceptionGeneric(execution, aaiResponse, responseCode)
-				throw new BpmnError("MSOWorkflowException")
-			}
-		}catch(BpmnError b){
-			msoLogger.debug("Rethrowing MSOWorkflowException")
-			throw b
-		}catch(Exception e){
-			msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, " Error encountered within GenericGetService ObtainServiceInstanceUrlById method!" + e, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, "");
-			exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured During ObtainServiceInstanceUrlById")
-		}
-		msoLogger.trace("COMPLETED GenericGetService ObtainServiceInstanceUrlById Process")
-	}
-
-	/**
-	 * This method obtains the Url to the provided service instance
-	 * using the Service Instance Name.
-	 *
-	 * @param - execution
-	 */
-	public void obtainServiceInstanceUrlByName(DelegateExecution execution){
-		execution.setVariable("prefix",Prefix)
-		msoLogger.trace("STARTED GenericGetService ObtainServiceInstanceUrlByName Process")
-		try {
-			String serviceInstanceName = execution.getVariable("GENGS_serviceInstanceName")
-			msoLogger.debug(" Querying Node for Service-Instance URL by using Service-Instance Name " + serviceInstanceName)
-
-			AaiUtil aaiUriUtil = new AaiUtil(this)
-			String aai_uri = aaiUriUtil.getSearchNodesQueryEndpoint(execution)
-			String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
-			String path = "${aai_uri}?search-node-type=service-instance&filter=service-instance-name:EQUALS:${serviceInstanceName}"
-
-			//String url = "${aai_endpoint}${path}"  host name needs to be removed from property
-			String url = "${path}"
-			execution.setVariable("GENGS_obtainSIUrlPath", url)
-
-			msoLogger.debug("GenericGetService AAI Endpoint: " + aai_endpoint)
-			APIResponse response = aaiUriUtil.executeAAIGetCall(execution, url)
-			int responseCode = response.getStatusCode()
-			execution.setVariable("GENGS_obtainSIUrlResponseCode", responseCode)
-			msoLogger.debug("  GET Service Instance response code is: " + responseCode)
-			msoLogger.debug("GenericGetService AAI Response Code: " + responseCode)
-
-			String aaiResponse = response.getResponseBodyAsString()
-			execution.setVariable("GENGS_obtainSIUrlResponse", aaiResponse)
-			msoLogger.debug("GenericGetService AAI Response: " + aaiResponse)
-			//Process Response
-			if(responseCode == 200){
-				msoLogger.debug("  Query for Service Instance Url Received a Good Response Code")
-				execution.setVariable("GENGS_SuccessIndicator", true)
-				if(utils.nodeExists(aaiResponse, "result-data")){
-					msoLogger.debug("Query for Service Instance Url Response Does Contain Data" )
-					execution.setVariable("GENGS_FoundIndicator", true)
-					String resourceLink = utils.getNodeText(aaiResponse, "resource-link")
-					execution.setVariable("GENGS_resourceLink", resourceLink)
-					execution.setVariable("GENGS_siResourceLink", resourceLink)
-				}else{
-					msoLogger.debug("Query for Service Instance Url Response Does NOT Contains Data" )
-					execution.setVariable("WorkflowResponse", "  ") //for junits
-				}
-			}else if(responseCode == 404){
-				msoLogger.debug("  Query for Service Instance Received a Not Found (404) Response")
-				execution.setVariable("GENGS_SuccessIndicator", true)
-				execution.setVariable("WorkflowResponse", "  ") //for junits
-			}else{
-				msoLogger.debug("Query for Service Instance Received a BAD REST Response: \n" + aaiResponse)
-				exceptionUtil.MapAAIExceptionToWorkflowExceptionGeneric(execution, aaiResponse, responseCode)
-				throw new BpmnError("MSOWorkflowException")
-			}
-		}catch(BpmnError b){
-			msoLogger.debug("Rethrowing MSOWorkflowException")
-			throw b
-		}catch(Exception e){
-			msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, " Error encountered within GenericGetService ObtainServiceInstanceUrlByName method!" + e, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, "");
-			exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured During ObtainServiceInstanceUrlByName")
-		}
-		msoLogger.trace("COMPLETED GenericGetService ObtainServiceInstanceUrlByName Process")
-	}
-
-
-	/**
-	 * This method executes a GET call to AAI to obtain the
-	 * service-instance or service-subscription
-	 *
-	 * @param - execution
-	 */
-	public void getServiceObject(DelegateExecution execution){
-		execution.setVariable("prefix",Prefix)
-		msoLogger.trace("STARTED GenericGetService GetServiceObject Process")
-		try {
-			String type = execution.getVariable("GENGS_type")
-			AaiUtil aaiUriUtil = new AaiUtil(this)
-			String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
-			String serviceEndpoint = ""
-
-			msoLogger.debug("GenericGetService getServiceObject AAI Endpoint: " + aai_endpoint)
-			if(type.equalsIgnoreCase("service-instance")){
-				String siResourceLink = execution.getVariable("GENGS_resourceLink")
-				if(isBlank(siResourceLink)){
-					String serviceInstanceId = execution.getVariable("GENGS_serviceInstanceId")
-					msoLogger.debug(" Incoming GENGS_serviceInstanceId is: " + serviceInstanceId)
-					String serviceType = execution.getVariable("GENGS_serviceType")
-					msoLogger.debug(" Incoming GENGS_serviceType is: " + serviceType)
-					String globalCustomerId = execution.getVariable("GENGS_globalCustomerId")
-					msoLogger.debug("Incoming Global Customer Id is: " + globalCustomerId)
-
-					String aai_uri = aaiUriUtil.getBusinessCustomerUri(execution)
-					msoLogger.debug('AAI URI is: ' + aai_uri)
-					serviceEndpoint = "${aai_uri}/" + UriUtils.encode(globalCustomerId,"UTF-8") + "/service-subscriptions/service-subscription/" + UriUtils.encode(serviceType,"UTF-8") + "/service-instances/service-instance/" + UriUtils.encode(serviceInstanceId,"UTF-8")
-				}else{
-					msoLogger.debug("Incoming Service Instance Url is: " + siResourceLink)
-					String[] split = siResourceLink.split("/aai/")
-					serviceEndpoint = "/aai/" + split[1]
-				}
-			}else if(type.equalsIgnoreCase("allotted-resource")){
-				String siResourceLink = execution.getVariable("GENGS_resourceLink")
-				if(isBlank(siResourceLink)){
-					String allottedResourceId = execution.getVariable("GENGS_allottedResourceId")
-					msoLogger.debug(" Incoming GENGS_allottedResourceId is: " + allottedResourceId)
-					String serviceInstanceId = execution.getVariable("GENGS_serviceInstanceId")
-					msoLogger.debug(" Incoming GENGS_serviceInstanceId is: " + serviceInstanceId)
-					String serviceType = execution.getVariable("GENGS_serviceType")
-					msoLogger.debug(" Incoming GENGS_serviceType is: " + serviceType)
-					String globalCustomerId = execution.getVariable("GENGS_globalCustomerId")
-					msoLogger.debug("Incoming Global Customer Id is: " + globalCustomerId)
-
-					String aai_uri = aaiUriUtil.getBusinessCustomerUri(execution)
-					msoLogger.debug('AAI URI is: ' + aai_uri)
-					serviceEndpoint = "${aai_uri}/" + UriUtils.encode(globalCustomerId,"UTF-8") + "/service-subscriptions/service-subscription/" + UriUtils.encode(serviceType,"UTF-8") + "/service-instances/service-instance/" + UriUtils.encode(serviceInstanceId,"UTF-8") +  "/allotted-resources/allotted-resource/" + UriUtils.encode(allottedResourceId,"UTF-8")
-				}else{
-					msoLogger.debug("Incoming Allotted-Resource Url is: " + siResourceLink)
-					String[] split = siResourceLink.split("/aai/")
-					serviceEndpoint = "/aai/" + split[1]
-				}
-			}else if(type.equalsIgnoreCase("service-subscription")){
-				String aai_uri = aaiUriUtil.getBusinessCustomerUri(execution)
-				String globalCustomerId = execution.getVariable("GENGS_globalCustomerId")
-				String serviceType = execution.getVariable("GENGS_serviceType")
-				serviceEndpoint = "${aai_uri}/" + UriUtils.encode(globalCustomerId,"UTF-8") + "/service-subscriptions/service-subscription/" + UriUtils.encode(serviceType,"UTF-8")
-			}
-
-			String serviceUrl = "${aai_endpoint}" + serviceEndpoint
-
-			execution.setVariable("GENGS_getServiceUrl", serviceUrl)
-			msoLogger.debug("GET Service AAI Path is: \n" + serviceUrl)
-
-			APIResponse response = aaiUriUtil.executeAAIGetCall(execution, serviceUrl)
-			int responseCode = response.getStatusCode()
-			execution.setVariable("GENGS_getServiceResponseCode", responseCode)
-			msoLogger.debug("  GET Service response code is: " + responseCode)
-			msoLogger.debug("GenericGetService AAI Response Code: " + responseCode)
-
-			String aaiResponse = response.getResponseBodyAsString()
-			execution.setVariable("GENGS_getServiceResponse", aaiResponse)
-			msoLogger.debug("GenericGetService AAI Response: " + aaiResponse)
-			//Process Response
-			if(responseCode == 200 || responseCode == 202){
-				msoLogger.debug("GET Service Received a Good Response Code")
-				if(utils.nodeExists(aaiResponse, "service-instance") || utils.nodeExists(aaiResponse, "service-subscription")){
-					msoLogger.debug("GET Service Response Contains a service-instance" )
-					execution.setVariable("GENGS_FoundIndicator", true)
-					execution.setVariable("GENGS_service", aaiResponse)
-					execution.setVariable("WorkflowResponse", aaiResponse)
-
-				}else{
-					msoLogger.debug("GET Service Response Does NOT Contain Data" )
-				}
-			}else if(responseCode == 404){
-				msoLogger.debug("GET Service Received a Not Found (404) Response")
-				execution.setVariable("WorkflowResponse", "  ") //for junits
-			}
-			else{
-				msoLogger.debug("  GET Service Received a Bad Response: \n" + aaiResponse)
-				exceptionUtil.MapAAIExceptionToWorkflowExceptionGeneric(execution, aaiResponse, responseCode)
-				throw new BpmnError("MSOWorkflowException")
-			}
-		}catch(BpmnError b){
-			msoLogger.debug("Rethrowing MSOWorkflowException")
-			throw b
-		}catch(Exception e){
-			msoLogger.debug(" Error encountered within GenericGetService GetServiceObject method!" + e)
-			exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured During GenericGetService")
-		}
-		msoLogger.trace("COMPLETED GenericGetService GetServiceObject Process")
-	}
-
-}
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/GenericGetService.groovy b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/GenericGetService.groovy
deleted file mode 100644
index 857df16..0000000
--- a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/GenericGetService.groovy
+++ /dev/null
@@ -1,470 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP - SO
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.so.bpmn.common.scripts
-
-import org.onap.so.bpmn.core.UrnPropertiesReader
-
-import org.apache.commons.lang3.StringEscapeUtils
-import org.camunda.bpm.engine.delegate.BpmnError
-import org.camunda.bpm.engine.delegate.DelegateExecution
-import org.onap.so.rest.APIResponse
-import org.springframework.web.util.UriUtils
-import org.onap.so.logger.MessageEnum
-import org.onap.so.logger.MsoLogger
-
-import static org.apache.commons.lang3.StringUtils.isBlank
-
-
-
-/**
- * This class supports the GenericGetService Sub Flow.
- * This Generic sub flow can be used by any flow for accomplishing
- * the goal of getting a Service-Instance or Service-Subscription (from AAI).
- * The calling flow must set the GENGS_type variable as "service-instance"
- * or "service-subscription".
- *
- * When using to Get a Service-Instance:
- * If the global-customer-id and service-type are not provided
- * this flow executes a query to get the service- Url using the
- * Service  Id or Name (whichever is provided).
- *
- * When using to Get a Service-Subscription:
- * The global-customer-id and service-type must be
- * provided.
- *
- * Upon successful completion of this sub flow the
- * GENGS_SuccessIndicator will be true and the query response payload
- * will be set to GENGS_service.  An MSOWorkflowException will
- * be thrown upon unsuccessful completion or if an error occurs
- * at any time during this sub flow. Please map variables
- * to the corresponding variable names below.
- *
- * Note - If this sub flow receives a Not Found (404) response
- * from AAI at any time this will be considered an acceptable
- * successful response however the GENGS_FoundIndicator
- * will be set to false. This variable will allow the calling flow
- * to distinguish between the two Success scenarios,
- * "Success where service- is found" and
- * "Success where service- is NOT found".
- *
- *
- * Variable Mapping Below:
- *
- * In Mapping Variables:
- *   For Allotted-Resource:
- *     @param - GENGS_allottedResourceId
- *     @param - GENGS_type
- *     @param (Optional) - GENGS_serviceInstanceId
- *     @param (Optional) - GENGS_serviceType
- *     @param (Optional) - GENGS_globalCustomerId
- *
- *   For Service-Instance:
- *     @param - GENGS_serviceInstanceId or @param - GENGS_serviceInstanceName
- *     @param - GENGS_type
- *     @param (Optional) - GENGS_serviceType
- *     @param (Optional) - GENGS_globalCustomerId
- *
- *   For Service-Subscription:
- *     @param - GENGS_type
- *     @param - GENGS_serviceType
- *     @param - GENGS_globalCustomerId
- *
- *
- * Out Mapping Variables:
- *    @param - GENGS_service
- *    @param - GENGS_FoundIndicator
- *    @param - WorkflowException
- */
-class GenericGetService extends AbstractServiceTaskProcessor{
-	private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, GenericGetService.class);
-
-
-	String Prefix = "GENGS_"
-	ExceptionUtil exceptionUtil = new ExceptionUtil()
-
-	/**
-	 * This method validates the incoming variables and
-	 * determines the subsequent event based on which
-	 * variables the calling flow provided.
-	 *
-	 * @param - execution
-	 *
-	 */
-	public void preProcessRequest(DelegateExecution execution) {
-		execution.setVariable("prefix",Prefix)
-		msoLogger.trace("STARTED GenericGetService PreProcessRequest Process")
-
-		execution.setVariable("GENGS_obtainObjectsUrl", false)
-		execution.setVariable("GENGS_obtainServiceInstanceUrlByName", false)
-		execution.setVariable("GENGS_SuccessIndicator", false)
-		execution.setVariable("GENGS_FoundIndicator", false)
-		execution.setVariable("GENGS_resourceLink", null)
-		execution.setVariable("GENGS_siResourceLink", null)
-
-		try{
-			// Get Variables
-			String allottedResourceId = execution.getVariable("GENGS_allottedResourceId")
-			String serviceInstanceId = execution.getVariable("GENGS_serviceInstanceId")
-			String serviceInstanceName = execution.getVariable("GENGS_serviceInstanceName")
-			String serviceType = execution.getVariable("GENGS_serviceType")
-			String globalCustomerId = execution.getVariable("GENGS_globalCustomerId")
-			String type = execution.getVariable("GENGS_type")
-
-			if(type != null){
-				msoLogger.debug("Incoming GENGS_type is: " + type)
-				if(type.equalsIgnoreCase("allotted-resource")){
-					if(isBlank(allottedResourceId)){
-						msoLogger.debug("Incoming allottedResourceId is null. Allotted Resource Id is required to Get an allotted-resource.")
-						exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Incoming allottedResourceId is null. Allotted Resource Id is required to Get an allotted-resource.")
-					}else{
-						msoLogger.debug("Incoming Allotted Resource Id is: " + allottedResourceId)
-						if(isBlank(globalCustomerId) || isBlank(serviceType) || isBlank(serviceInstanceId)){
-							execution.setVariable("GENGS_obtainObjectsUrl", true)
-						}else{
-							msoLogger.debug("Incoming Service Instance Id is: " + serviceInstanceId)
-							msoLogger.debug("Incoming Service Type is: " + serviceType)
-							msoLogger.debug("Incoming Global Customer Id is: " + globalCustomerId)
-						}
-					}
-				}else if(type.equalsIgnoreCase("service-instance")){
-					if(isBlank(serviceInstanceId) && isBlank(serviceInstanceName)){
-						msoLogger.debug("Incoming serviceInstanceId and serviceInstanceName are null. ServiceInstanceId or ServiceInstanceName is required to Get a service-instance.")
-						exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Incoming serviceInstanceId and serviceInstanceName are null. ServiceInstanceId or ServiceInstanceName is required to Get a service-instance.")
-					}else{
-						msoLogger.debug("Incoming Service Instance Id is: " + serviceInstanceId)
-						msoLogger.debug("Incoming Service Instance Name is: " + serviceInstanceName)
-						if(isBlank(globalCustomerId) || isBlank(serviceType)){
-							execution.setVariable("GENGS_obtainObjectsUrl", true)
-							if(isBlank(serviceInstanceId)){
-								execution.setVariable("GENGS_obtainServiceInstanceUrlByName", true)
-							}
-						}else{
-							msoLogger.debug("Incoming Global Customer Id is: " + globalCustomerId)
-							msoLogger.debug("Incoming Service Type is: " + serviceType)
-						}
-					}
-				}else if(type.equalsIgnoreCase("service-subscription")){
-					if(isBlank(serviceType) || isBlank(globalCustomerId)){
-						msoLogger.debug("Incoming ServiceType or GlobalCustomerId is null. These variables are required to Get a service-subscription.")
-						exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Incoming ServiceType or GlobalCustomerId is null. These variables are required to Get a service-subscription.")
-					}else{
-						msoLogger.debug("Incoming Service Type is: " + serviceType)
-						msoLogger.debug("Incoming Global Customer Id is: " + globalCustomerId)
-					}
-				}else{
-					exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Incoming Type is Invalid. Please Specify Type as service-instance or service-subscription")
-				}
-			}else{
-				exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Incoming GENGS_type is null. Variable is Required.")
-			}
-
-		}catch(BpmnError b){
-			msoLogger.debug("Rethrowing MSOWorkflowException")
-			throw b
-		}catch(Exception e){
-			msoLogger.debug("Internal Error encountered within GenericGetService PreProcessRequest method!" + e)
-			exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured in GenericGetService PreProcessRequest")
-
-		}
-		msoLogger.trace("COMPLETED GenericGetService PreProcessRequest Process ")
-	}
-
-	/**
-	 * This method obtains the Url to the provided service instance
-	 * using the Service Instance Id.
-	 *
-	 * @param - execution
-	 */
-	public void obtainServiceInstanceUrlById(DelegateExecution execution){
-		execution.setVariable("prefix",Prefix)
-		msoLogger.trace("STARTED GenericGetService ObtainServiceInstanceUrlById Process")
-		try {
-			AaiUtil aaiUriUtil = new AaiUtil(this)
-			String aai_uri = aaiUriUtil.getSearchNodesQueryEndpoint(execution)
-			String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
-
-			String type = execution.getVariable("GENGS_type")
-			String path = ""
-			if(type.equalsIgnoreCase("service-instance")){
-				String serviceInstanceId = execution.getVariable("GENGS_serviceInstanceId")
-				msoLogger.debug(" Querying Node for Service-Instance URL by using Service-Instance Id: " + serviceInstanceId)
-				path = "${aai_uri}?search-node-type=service-instance&filter=service-instance-id:EQUALS:${serviceInstanceId}"
-				msoLogger.debug("Service Instance Node Query Url is: " + path)
-				msoLogger.debug("Service Instance Node Query Url is: " + path)
-			}else if(type.equalsIgnoreCase("allotted-resource")){
-				String allottedResourceId = execution.getVariable("GENGS_allottedResourceId")
-				msoLogger.debug(" Querying Node for Service-Instance URL by using Allotted Resource Id: " + allottedResourceId)
-				path = "${aai_uri}?search-node-type=allotted-resource&filter=id:EQUALS:${allottedResourceId}"
-				msoLogger.debug("Allotted Resource Node Query Url is: " + path)
-				msoLogger.debug("Allotted Resource Node Query Url is: " + path)
-			}
-
-			//String url = "${aai_endpoint}${path}"  host name needs to be removed from property
-			String url = "${path}"
-			execution.setVariable("GENGS_genericQueryPath", url)
-
-			APIResponse response = aaiUriUtil.executeAAIGetCall(execution, url)
-			int responseCode = response.getStatusCode()
-			execution.setVariable("GENGS_genericQueryResponseCode", responseCode)
-			msoLogger.debug("  GET Service Instance response code is: " + responseCode)
-			msoLogger.debug("GenericGetService AAI GET Response Code: " + responseCode)
-
-			String aaiResponse = response.getResponseBodyAsString()
-			execution.setVariable("GENGS_obtainSIUrlResponseBeforeUnescaping", aaiResponse)
-			msoLogger.debug("GenericGetService AAI Response before unescaping: " + aaiResponse)
-			execution.setVariable("GENGS_genericQueryResponse", aaiResponse)
-			msoLogger.debug("GenericGetService AAI Response: " + aaiResponse)
-			msoLogger.debug("GenericGetService AAI Response: " + aaiResponse)
-
-			//Process Response
-			if(responseCode == 200){
-				msoLogger.debug("Generic Query Received a Good Response Code")
-				execution.setVariable("GENGS_SuccessIndicator", true)
-				if(utils.nodeExists(aaiResponse, "result-data")){
-					msoLogger.debug("Generic Query Response Does Contain Data" )
-					execution.setVariable("GENGS_FoundIndicator", true)
-					String resourceLink = utils.getNodeText(aaiResponse, "resource-link")
-					execution.setVariable("GENGS_resourceLink", resourceLink)
-					execution.setVariable("GENGS_siResourceLink", resourceLink)
-				}else{
-					msoLogger.debug("Generic Query Response Does NOT Contains Data" )
-					execution.setVariable("WorkflowResponse", "  ") //for junits
-				}
-			}else if(responseCode == 404){
-				msoLogger.debug("Generic Query Received a Not Found (404) Response")
-				execution.setVariable("GENGS_SuccessIndicator", true)
-				execution.setVariable("WorkflowResponse", "  ") //for junits
-			}else{
-				msoLogger.debug("Generic Query Received a BAD REST Response: \n" + aaiResponse)
-				exceptionUtil.MapAAIExceptionToWorkflowExceptionGeneric(execution, aaiResponse, responseCode)
-				throw new BpmnError("MSOWorkflowException")
-			}
-		}catch(BpmnError b){
-			msoLogger.debug("Rethrowing MSOWorkflowException")
-			throw b
-		}catch(Exception e){
-			msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, " Error encountered within GenericGetService ObtainServiceInstanceUrlById method!" + e, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, "");
-			exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured During ObtainServiceInstanceUrlById")
-		}
-		msoLogger.trace("COMPLETED GenericGetService ObtainServiceInstanceUrlById Process")
-	}
-
-	/**
-	 * This method obtains the Url to the provided service instance
-	 * using the Service Instance Name.
-	 *
-	 * @param - execution
-	 */
-	public void obtainServiceInstanceUrlByName(DelegateExecution execution){
-		execution.setVariable("prefix",Prefix)
-		msoLogger.trace("STARTED GenericGetService ObtainServiceInstanceUrlByName Process")
-		try {
-			String serviceInstanceName = execution.getVariable("GENGS_serviceInstanceName")
-			msoLogger.debug(" Querying Node for Service-Instance URL by using Service-Instance Name " + serviceInstanceName)
-
-			AaiUtil aaiUriUtil = new AaiUtil(this)
-			String aai_uri = aaiUriUtil.getSearchNodesQueryEndpoint(execution)
-			String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
-			String path = "${aai_uri}?search-node-type=service-instance&filter=service-instance-name:EQUALS:${serviceInstanceName}"
-
-			//String url = "${aai_endpoint}${path}"  host name needs to be removed from property
-			String url = "${path}"
-			execution.setVariable("GENGS_obtainSIUrlPath", url)
-
-			msoLogger.debug("GenericGetService AAI Endpoint: " + aai_endpoint)
-			APIResponse response = aaiUriUtil.executeAAIGetCall(execution, url)
-			int responseCode = response.getStatusCode()
-			execution.setVariable("GENGS_obtainSIUrlResponseCode", responseCode)
-			msoLogger.debug("  GET Service Instance response code is: " + responseCode)
-			msoLogger.debug("GenericGetService AAI Response Code: " + responseCode)
-
-			String aaiResponse = response.getResponseBodyAsString()
-			execution.setVariable("GENGS_obtainSIUrlResponse", aaiResponse)
-			msoLogger.debug("GenericGetService AAI Response: " + aaiResponse)
-			//Process Response
-			if(responseCode == 200){
-				msoLogger.debug("  Query for Service Instance Url Received a Good Response Code")
-				execution.setVariable("GENGS_SuccessIndicator", true)
-				String globalCustomerId = execution.getVariable("GENGS_globalCustomerId")
-				boolean nodeExists = isBlank(globalCustomerId) ? utils.nodeExists(aaiResponse, "result-data") : hasCustomerServiceInstance(aaiResponse, globalCustomerId)
-				if(nodeExists){
-					msoLogger.debug("Query for Service Instance Url Response Does Contain Data" )
-					execution.setVariable("GENGS_FoundIndicator", true)
-					String resourceLink = utils.getNodeText(aaiResponse, "resource-link")
-					execution.setVariable("GENGS_resourceLink", resourceLink)
-					execution.setVariable("GENGS_siResourceLink", resourceLink)
-				}else{
-					msoLogger.debug("Query for Service Instance Url Response Does NOT Contains Data" )
-					execution.setVariable("WorkflowResponse", "  ") //for junits
-				}
-			}else if(responseCode == 404){
-				msoLogger.debug("  Query for Service Instance Received a Not Found (404) Response")
-				execution.setVariable("GENGS_SuccessIndicator", true)
-				execution.setVariable("WorkflowResponse", "  ") //for junits
-			}else{
-				msoLogger.debug("Query for Service Instance Received a BAD REST Response: \n" + aaiResponse)
-				exceptionUtil.MapAAIExceptionToWorkflowExceptionGeneric(execution, aaiResponse, responseCode)
-				throw new BpmnError("MSOWorkflowException")
-			}
-		}catch(BpmnError b){
-			msoLogger.debug("Rethrowing MSOWorkflowException")
-			throw b
-		}catch(Exception e){
-			msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, " Error encountered within GenericGetService ObtainServiceInstanceUrlByName method!" + e, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, "");
-			exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured During ObtainServiceInstanceUrlByName")
-		}
-		msoLogger.trace("COMPLETED GenericGetService ObtainServiceInstanceUrlByName Process")
-	}
-
-
-	/**
-	 * This method executes a GET call to AAI to obtain the
-	 * service-instance or service-subscription
-	 *
-	 * @param - execution
-	 */
-	public void getServiceObject(DelegateExecution execution){
-		execution.setVariable("prefix",Prefix)
-		msoLogger.trace("STARTED GenericGetService GetServiceObject Process")
-		try {
-			String type = execution.getVariable("GENGS_type")
-			AaiUtil aaiUriUtil = new AaiUtil(this)
-			String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
-			String serviceEndpoint = ""
-
-			msoLogger.debug("GenericGetService getServiceObject AAI Endpoint: " + aai_endpoint)
-			if(type.equalsIgnoreCase("service-instance")){
-				String siResourceLink = execution.getVariable("GENGS_resourceLink")
-				if(isBlank(siResourceLink)){
-					String serviceInstanceId = execution.getVariable("GENGS_serviceInstanceId")
-					msoLogger.debug(" Incoming GENGS_serviceInstanceId is: " + serviceInstanceId)
-					String serviceType = execution.getVariable("GENGS_serviceType")
-					msoLogger.debug(" Incoming GENGS_serviceType is: " + serviceType)
-					String globalCustomerId = execution.getVariable("GENGS_globalCustomerId")
-					msoLogger.debug("Incoming Global Customer Id is: " + globalCustomerId)
-
-					String aai_uri = aaiUriUtil.getBusinessCustomerUri(execution)
-					msoLogger.debug('AAI URI is: ' + aai_uri)
-					serviceEndpoint = "${aai_uri}/" + UriUtils.encode(globalCustomerId,"UTF-8") + "/service-subscriptions/service-subscription/" + UriUtils.encode(serviceType,"UTF-8") + "/service-instances/service-instance/" + UriUtils.encode(serviceInstanceId,"UTF-8")
-				}else{
-					msoLogger.debug("Incoming Service Instance Url is: " + siResourceLink)
-					String[] split = siResourceLink.split("/aai/")
-					serviceEndpoint = "/aai/" + split[1]
-				}
-			}else if(type.equalsIgnoreCase("allotted-resource")){
-				String siResourceLink = execution.getVariable("GENGS_resourceLink")
-				if(isBlank(siResourceLink)){
-					String allottedResourceId = execution.getVariable("GENGS_allottedResourceId")
-					msoLogger.debug(" Incoming GENGS_allottedResourceId is: " + allottedResourceId)
-					String serviceInstanceId = execution.getVariable("GENGS_serviceInstanceId")
-					msoLogger.debug(" Incoming GENGS_serviceInstanceId is: " + serviceInstanceId)
-					String serviceType = execution.getVariable("GENGS_serviceType")
-					msoLogger.debug(" Incoming GENGS_serviceType is: " + serviceType)
-					String globalCustomerId = execution.getVariable("GENGS_globalCustomerId")
-					msoLogger.debug("Incoming Global Customer Id is: " + globalCustomerId)
-
-					String aai_uri = aaiUriUtil.getBusinessCustomerUri(execution)
-					msoLogger.debug('AAI URI is: ' + aai_uri)
-					serviceEndpoint = "${aai_uri}/" + UriUtils.encode(globalCustomerId,"UTF-8") + "/service-subscriptions/service-subscription/" + UriUtils.encode(serviceType,"UTF-8") + "/service-instances/service-instance/" + UriUtils.encode(serviceInstanceId,"UTF-8") +  "/allotted-resources/allotted-resource/" + UriUtils.encode(allottedResourceId,"UTF-8")
-				}else{
-					msoLogger.debug("Incoming Allotted-Resource Url is: " + siResourceLink)
-					String[] split = siResourceLink.split("/aai/")
-					serviceEndpoint = "/aai/" + split[1]
-				}
-			}else if(type.equalsIgnoreCase("service-subscription")){
-				String aai_uri = aaiUriUtil.getBusinessCustomerUri(execution)
-				String globalCustomerId = execution.getVariable("GENGS_globalCustomerId")
-				String serviceType = execution.getVariable("GENGS_serviceType")
-				serviceEndpoint = "${aai_uri}/" + UriUtils.encode(globalCustomerId,"UTF-8") + "/service-subscriptions/service-subscription/" + UriUtils.encode(serviceType,"UTF-8")
-			}
-
-			String serviceUrl = "${aai_endpoint}" + serviceEndpoint
-
-			execution.setVariable("GENGS_getServiceUrl", serviceUrl)
-			msoLogger.debug("GET Service AAI Path is: \n" + serviceUrl)
-
-			APIResponse response = aaiUriUtil.executeAAIGetCall(execution, serviceUrl)
-			int responseCode = response.getStatusCode()
-			execution.setVariable("GENGS_getServiceResponseCode", responseCode)
-			msoLogger.debug("  GET Service response code is: " + responseCode)
-			msoLogger.debug("GenericGetService AAI Response Code: " + responseCode)
-
-			String aaiResponse = response.getResponseBodyAsString()
-			execution.setVariable("GENGS_getServiceResponse", aaiResponse)
-			msoLogger.debug("GenericGetService AAI Response: " + aaiResponse)
-			//Process Response
-			if(responseCode == 200 || responseCode == 202){
-				msoLogger.debug("GET Service Received a Good Response Code")
-				if(utils.nodeExists(aaiResponse, "service-instance") || utils.nodeExists(aaiResponse, "service-subscription")){
-					msoLogger.debug("GET Service Response Contains a service-instance" )
-					execution.setVariable("GENGS_FoundIndicator", true)
-					execution.setVariable("GENGS_service", aaiResponse)
-					execution.setVariable("WorkflowResponse", aaiResponse)
-
-				}else{
-					msoLogger.debug("GET Service Response Does NOT Contain Data" )
-				}
-			}else if(responseCode == 404){
-				msoLogger.debug("GET Service Received a Not Found (404) Response")
-				execution.setVariable("WorkflowResponse", "  ") //for junits
-			}
-			else{
-				msoLogger.debug("  GET Service Received a Bad Response: \n" + aaiResponse)
-				exceptionUtil.MapAAIExceptionToWorkflowExceptionGeneric(execution, aaiResponse, responseCode)
-				throw new BpmnError("MSOWorkflowException")
-			}
-		}catch(BpmnError b){
-			msoLogger.debug("Rethrowing MSOWorkflowException")
-			throw b
-		}catch(Exception e){
-			msoLogger.debug(" Error encountered within GenericGetService GetServiceObject method!" + e)
-			exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured During GenericGetService")
-		}
-		msoLogger.trace("COMPLETED GenericGetService GetServiceObject Process")
-	}
-
-	/**
-	 * An utility method which check whether a service(by name) is already present within a globalCustomerId or not.
-	 * @param jsonResponse raw response received from AAI by searching ServiceInstance by Name.
-	 * @param globalCustomerId
-	 * @return {@code true} if globalCustomerId is found at 6th position within "resource-link", {@code false} in any other cases.
-	 */
-	public boolean hasCustomerServiceInstance(String aaiResponse, final String globalCustomerId) {
-		if (isBlank(aaiResponse)) {
-			return false
-		}
-		aaiResponse = utils.removeXmlNamespaces(aaiResponse)
-		ArrayList<String> linksArray = utils.getMultNodeObjects(aaiResponse, "resource-link")
-		if (linksArray == null || linksArray.size() == 0) {
-			return false
-		}
-		for (String resourceLink : linksArray) {
-			int custStart = resourceLink.indexOf("customer/")
-			int custEnd = resourceLink.indexOf("/service-subscriptions/")
-			String receivedCustomerId = resourceLink.substring(custStart + 9, custEnd)
-			if (globalCustomerId.equals(receivedCustomerId)) {
-				return true
-			}
-		}
-		return false
-	}
-
-}
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/GenericPutService.groovy b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/GenericPutService.groovy
index d41134b..8cc756d 100644
--- a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/GenericPutService.groovy
+++ b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/GenericPutService.groovy
@@ -7,9 +7,9 @@
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -67,7 +67,7 @@
  * @param - GENPS_tunnelXconnectId - Conditional Field. Required for tunnel-xconnect.
  *
  * @param - GENPS_serviceResourceVersion - Conditional Field. Needs to be provided only in case of update for both service-instance and service subscription. The calling flows
- *          should check if a service-instance or servic-subscription exists by calling the subflow GenericGetService. if it exists then resourceversion should be
+ *          should check if a service-instance or servic-subscription exists by calling the subflow. if it exists then resourceversion should be
  *          obtained from aai and sent as an input parameter.
  *
  * Outgoing Variables:
@@ -104,7 +104,7 @@
 			String allottedResourceId = execution.getVariable("GENPS_allottedResourceId")
 			String tunnelXconnectId = execution.getVariable("GENPS_tunnelXconnectId")
 			String type = execution.getVariable("GENPS_type")
-			
+
 			if(type != null){
 				msoLogger.debug("Incoming GENPS_type is: " + type)
 				if(type.equalsIgnoreCase("service-instance")){
@@ -201,7 +201,7 @@
 
 			String serviceType = execution.getVariable("GENPS_serviceType")
 			msoLogger.debug(" Incoming GENPS_serviceType is: " + serviceType)
-			
+
 			String globalSubscriberId = execution.getVariable("GENPS_globalSubscriberId")
 			msoLogger.debug("Incoming Global Subscriber Id is: " + globalSubscriberId)
 
diff --git a/bpmn/MSOCommonBPMN/src/main/resources/subprocess/CustomE2EGetService.bpmn b/bpmn/MSOCommonBPMN/src/main/resources/subprocess/CustomE2EGetService.bpmn
deleted file mode 100644
index 90722a9..0000000
--- a/bpmn/MSOCommonBPMN/src/main/resources/subprocess/CustomE2EGetService.bpmn
+++ /dev/null
@@ -1,321 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_D5VzAHElEeaJwpcpVN5gXw" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.10.0" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
-  <bpmn2:process id="CustomE2EGetService" name="CustomE2EGetService" isExecutable="true">
-    <bpmn2:scriptTask id="intialization" name="Initialization" scriptFormat="groovy">
-      <bpmn2:incoming>SequenceFlow_1</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_2</bpmn2:outgoing>
-      <bpmn2:script><![CDATA[import org.onap.so.bpmn.common.scripts.*
-CustomE2EGetService getService = new CustomE2EGetService()
-getService.preProcessRequest(execution)
-]]></bpmn2:script>
-    </bpmn2:scriptTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_2" name="" sourceRef="intialization" targetRef="getUrl" />
-    <bpmn2:exclusiveGateway id="getUrl" name="Need Object&#39;s Url?" default="getUrlNo">
-      <bpmn2:incoming>SequenceFlow_2</bpmn2:incoming>
-      <bpmn2:outgoing>getUrlYes</bpmn2:outgoing>
-      <bpmn2:outgoing>getUrlNo</bpmn2:outgoing>
-    </bpmn2:exclusiveGateway>
-    <bpmn2:sequenceFlow id="getUrlYes" name="Yes" sourceRef="getUrl" targetRef="obtain">
-      <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression"><![CDATA[#{execution.getVariable("GENGS_obtainObjectsUrl" ) == true}]]></bpmn2:conditionExpression>
-    </bpmn2:sequenceFlow>
-    <bpmn2:sequenceFlow id="getUrlNo" name="No" sourceRef="getUrl" targetRef="ExclusiveGateway_2" />
-    <bpmn2:subProcess id="bpmnExceptionHandlingSubProcess" name="Error Handling Sub Process" triggeredByEvent="true">
-      <bpmn2:scriptTask id="processBPMNException" name="Process Error" scriptFormat="groovy">
-        <bpmn2:incoming>SequenceFlow_7</bpmn2:incoming>
-        <bpmn2:outgoing>SequenceFlow_8</bpmn2:outgoing>
-        <bpmn2:script><![CDATA[import org.onap.so.bpmn.common.scripts.*
-
-ExceptionUtil ex = new ExceptionUtil()
-ex.processSubflowsBPMNException(execution)]]></bpmn2:script>
-      </bpmn2:scriptTask>
-      <bpmn2:sequenceFlow id="SequenceFlow_8" name="" sourceRef="processBPMNException" targetRef="EndEvent_2" />
-      <bpmn2:startEvent id="StartEvent_2">
-        <bpmn2:outgoing>SequenceFlow_7</bpmn2:outgoing>
-        <bpmn2:errorEventDefinition id="ErrorEventDefinition_1" />
-      </bpmn2:startEvent>
-      <bpmn2:sequenceFlow id="SequenceFlow_7" name="" sourceRef="StartEvent_2" targetRef="processBPMNException" />
-      <bpmn2:endEvent id="EndEvent_2">
-        <bpmn2:incoming>SequenceFlow_8</bpmn2:incoming>
-      </bpmn2:endEvent>
-    </bpmn2:subProcess>
-    <bpmn2:scriptTask id="toggleSuccess" name="Toggle Success Indicator" scriptFormat="groovy">
-      <bpmn2:incoming>SequenceFlow_3</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_6</bpmn2:outgoing>
-      <bpmn2:script><![CDATA[import org.onap.so.bpmn.common.scripts.*
-CustomE2EGetService getService = new CustomE2EGetService()
-getService.setSuccessIndicator(execution, true)
-]]></bpmn2:script>
-    </bpmn2:scriptTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_6" name="" sourceRef="toggleSuccess" targetRef="EndEvent_1" />
-    <bpmn2:scriptTask id="getServiceInstance" name="GET&#10;Object" scriptFormat="groovy">
-      <bpmn2:incoming>SequenceFlow_5</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_3</bpmn2:outgoing>
-      <bpmn2:script><![CDATA[import org.onap.so.bpmn.common.scripts.*
-CustomE2EGetService getService = new CustomE2EGetService()
-getService.getServiceObject(execution)]]></bpmn2:script>
-    </bpmn2:scriptTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_3" name="" sourceRef="getServiceInstance" targetRef="toggleSuccess" />
-    <bpmn2:exclusiveGateway id="ExclusiveGateway_2">
-      <bpmn2:incoming>getUrlNo</bpmn2:incoming>
-      <bpmn2:incoming>foundYes</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_5</bpmn2:outgoing>
-    </bpmn2:exclusiveGateway>
-    <bpmn2:sequenceFlow id="SequenceFlow_5" name="" sourceRef="ExclusiveGateway_2" targetRef="getServiceInstance" />
-    <bpmn2:scriptTask id="obtainServiceUrlById" name="Node Query Using Id&#10;" scriptFormat="groovy">
-      <bpmn2:incoming>obtainById</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_4</bpmn2:outgoing>
-      <bpmn2:script><![CDATA[import org.onap.so.bpmn.common.scripts.*
-CustomE2EGetService getService = new CustomE2EGetService()
-getService.obtainServiceInstanceUrlById(execution)]]></bpmn2:script>
-    </bpmn2:scriptTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_4" name="" sourceRef="obtainServiceUrlById" targetRef="ExclusiveGateway_3" />
-    <bpmn2:scriptTask id="obtainServiceUrlByName" name="Node Query Using Name" scriptFormat="groovy">
-      <bpmn2:incoming>obtainByName</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_13</bpmn2:outgoing>
-      <bpmn2:script><![CDATA[import org.onap.so.bpmn.common.scripts.*
-CustomE2EGetService getService = new CustomE2EGetService()
-getService.obtainServiceInstanceUrlByName(execution)]]></bpmn2:script>
-    </bpmn2:scriptTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_13" name="" sourceRef="obtainServiceUrlByName" targetRef="ExclusiveGateway_3" />
-    <bpmn2:exclusiveGateway id="obtain" name="Query By?" default="obtainById">
-      <bpmn2:incoming>getUrlYes</bpmn2:incoming>
-      <bpmn2:outgoing>obtainById</bpmn2:outgoing>
-      <bpmn2:outgoing>obtainByName</bpmn2:outgoing>
-    </bpmn2:exclusiveGateway>
-    <bpmn2:sequenceFlow id="obtainById" name="Id" sourceRef="obtain" targetRef="obtainServiceUrlById" />
-    <bpmn2:sequenceFlow id="obtainByName" name="Name" sourceRef="obtain" targetRef="obtainServiceUrlByName">
-      <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression"><![CDATA[#{execution.getVariable("GENGS_obtainServiceInstanceUrlByName" ) == true}]]></bpmn2:conditionExpression>
-    </bpmn2:sequenceFlow>
-    <bpmn2:exclusiveGateway id="serviceFoundCheck" name="Service Exist?" default="notFound">
-      <bpmn2:incoming>SequenceFlow_14</bpmn2:incoming>
-      <bpmn2:outgoing>foundYes</bpmn2:outgoing>
-      <bpmn2:outgoing>notFound</bpmn2:outgoing>
-    </bpmn2:exclusiveGateway>
-    <bpmn2:sequenceFlow id="foundYes" name="Yes" sourceRef="serviceFoundCheck" targetRef="ExclusiveGateway_2">
-      <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression"><![CDATA[#{execution.getVariable("GENGS_FoundIndicator" ) == true}]]></bpmn2:conditionExpression>
-    </bpmn2:sequenceFlow>
-    <bpmn2:sequenceFlow id="notFound" name="No" sourceRef="serviceFoundCheck" targetRef="EndEvent_3" />
-    <bpmn2:endEvent id="EndEvent_3">
-      <bpmn2:incoming>notFound</bpmn2:incoming>
-      <bpmn2:terminateEventDefinition id="_TerminateEventDefinition_29" />
-    </bpmn2:endEvent>
-    <bpmn2:exclusiveGateway id="ExclusiveGateway_3">
-      <bpmn2:incoming>SequenceFlow_4</bpmn2:incoming>
-      <bpmn2:incoming>SequenceFlow_13</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_14</bpmn2:outgoing>
-    </bpmn2:exclusiveGateway>
-    <bpmn2:sequenceFlow id="SequenceFlow_14" name="" sourceRef="ExclusiveGateway_3" targetRef="serviceFoundCheck" />
-    <bpmn2:endEvent id="EndEvent_1">
-      <bpmn2:incoming>SequenceFlow_6</bpmn2:incoming>
-      <bpmn2:terminateEventDefinition id="_TerminateEventDefinition_26" />
-    </bpmn2:endEvent>
-    <bpmn2:startEvent id="StartEvent_1">
-      <bpmn2:outgoing>SequenceFlow_1</bpmn2:outgoing>
-    </bpmn2:startEvent>
-    <bpmn2:sequenceFlow id="SequenceFlow_1" name="" sourceRef="StartEvent_1" targetRef="intialization" />
-  </bpmn2:process>
-  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
-    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="GenericGetService">
-      <bpmndi:BPMNShape id="_BPMNShape_StartEvent_69" bpmnElement="StartEvent_1">
-        <dc:Bounds x="108" y="264" width="36" height="36" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="126" y="305" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="_BPMNShape_ScriptTask_288" bpmnElement="intialization">
-        <dc:Bounds x="228" y="242" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_1" bpmnElement="SequenceFlow_1" sourceElement="_BPMNShape_StartEvent_69" targetElement="_BPMNShape_ScriptTask_288">
-        <di:waypoint xsi:type="dc:Point" x="144" y="282" />
-        <di:waypoint xsi:type="dc:Point" x="228" y="282" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="177" y="282" width="6" height="6" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="_BPMNShape_ExclusiveGateway_227" bpmnElement="getUrl" isMarkerVisible="true">
-        <dc:Bounds x="372" y="256" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="420" y="282" width="72" height="24" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_2" bpmnElement="SequenceFlow_2" sourceElement="_BPMNShape_ScriptTask_288" targetElement="_BPMNShape_ExclusiveGateway_227">
-        <di:waypoint xsi:type="dc:Point" x="328" y="282" />
-        <di:waypoint xsi:type="dc:Point" x="372" y="281" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="350" y="281" width="6" height="6" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="_BPMNShape_ScriptTask_289" bpmnElement="obtainServiceUrlById">
-        <dc:Bounds x="528" y="197" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="_BPMNShape_ExclusiveGateway_228" bpmnElement="ExclusiveGateway_2" isMarkerVisible="true">
-        <dc:Bounds x="738" y="256" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="763" y="311" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="_BPMNShape_ScriptTask_290" bpmnElement="getServiceInstance">
-        <dc:Bounds x="820" y="242" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_3" bpmnElement="getUrlYes" sourceElement="_BPMNShape_ExclusiveGateway_227" targetElement="_BPMNShape_ExclusiveGateway_233">
-        <di:waypoint xsi:type="dc:Point" x="397" y="256" />
-        <di:waypoint xsi:type="dc:Point" x="397" y="170" />
-        <di:waypoint xsi:type="dc:Point" x="446" y="170" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="397" y="213" width="29" height="22" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_4" bpmnElement="SequenceFlow_4" sourceElement="_BPMNShape_ScriptTask_289" targetElement="_BPMNShape_ExclusiveGateway_234">
-        <di:waypoint xsi:type="dc:Point" x="628" y="237" />
-        <di:waypoint xsi:type="dc:Point" x="671" y="237" />
-        <di:waypoint xsi:type="dc:Point" x="671" y="195" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="668" y="221" width="6" height="6" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_5" bpmnElement="SequenceFlow_5" sourceElement="_BPMNShape_ExclusiveGateway_228" targetElement="_BPMNShape_ScriptTask_290">
-        <di:waypoint xsi:type="dc:Point" x="788" y="281" />
-        <di:waypoint xsi:type="dc:Point" x="820" y="282" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="798" y="281" width="6" height="6" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_6" bpmnElement="getUrlNo" sourceElement="_BPMNShape_ExclusiveGateway_227" targetElement="_BPMNShape_ExclusiveGateway_228">
-        <di:waypoint xsi:type="dc:Point" x="397" y="306" />
-        <di:waypoint xsi:type="dc:Point" x="397" y="370" />
-        <di:waypoint xsi:type="dc:Point" x="763" y="370" />
-        <di:waypoint xsi:type="dc:Point" x="763" y="306" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="400" y="324" width="22" height="22" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="_BPMNShape_ScriptTask_291" bpmnElement="toggleSuccess">
-        <dc:Bounds x="960" y="242" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_7" bpmnElement="SequenceFlow_3" sourceElement="_BPMNShape_ScriptTask_290" targetElement="_BPMNShape_ScriptTask_291">
-        <di:waypoint xsi:type="dc:Point" x="920" y="282" />
-        <di:waypoint xsi:type="dc:Point" x="960" y="282" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="937" y="282" width="6" height="6" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="_BPMNShape_EndEvent_223" bpmnElement="EndEvent_1">
-        <dc:Bounds x="1133" y="264" width="36" height="36" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="1151" y="305" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_8" bpmnElement="SequenceFlow_6" sourceElement="_BPMNShape_ScriptTask_291" targetElement="_BPMNShape_EndEvent_223">
-        <di:waypoint xsi:type="dc:Point" x="1060" y="282" />
-        <di:waypoint xsi:type="dc:Point" x="1133" y="282" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="1100" y="282" width="6" height="6" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="_BPMNShape_SubProcess_25" bpmnElement="bpmnExceptionHandlingSubProcess" isExpanded="true">
-        <dc:Bounds x="152" y="468" width="325" height="169" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="_BPMNShape_StartEvent_70" bpmnElement="StartEvent_2">
-        <dc:Bounds x="176" y="535" width="36" height="36" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="194" y="576" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="_BPMNShape_EndEvent_224" bpmnElement="EndEvent_2">
-        <dc:Bounds x="416" y="535" width="36" height="36" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="434" y="576" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="_BPMNShape_ScriptTask_292" bpmnElement="processBPMNException">
-        <dc:Bounds x="265" y="513" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_9" bpmnElement="SequenceFlow_7" sourceElement="_BPMNShape_StartEvent_70" targetElement="_BPMNShape_ScriptTask_292">
-        <di:waypoint xsi:type="dc:Point" x="212" y="553" />
-        <di:waypoint xsi:type="dc:Point" x="265" y="553" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="233" y="553" width="6" height="6" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_10" bpmnElement="SequenceFlow_8" sourceElement="_BPMNShape_ScriptTask_292" targetElement="_BPMNShape_EndEvent_224">
-        <di:waypoint xsi:type="dc:Point" x="365" y="553" />
-        <di:waypoint xsi:type="dc:Point" x="416" y="553" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="385" y="553" width="6" height="6" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="_BPMNShape_ScriptTask_301" bpmnElement="obtainServiceUrlByName">
-        <dc:Bounds x="528" y="59" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="_BPMNShape_ExclusiveGateway_233" bpmnElement="obtain" isMarkerVisible="true">
-        <dc:Bounds x="446" y="145" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="501" y="164" width="53" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="_BPMNShape_ExclusiveGateway_234" bpmnElement="ExclusiveGateway_3" isMarkerVisible="true">
-        <dc:Bounds x="646" y="145" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="671" y="200" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_13" bpmnElement="obtainById" sourceElement="_BPMNShape_ExclusiveGateway_233" targetElement="_BPMNShape_ScriptTask_289">
-        <di:waypoint xsi:type="dc:Point" x="471" y="195" />
-        <di:waypoint xsi:type="dc:Point" x="471" y="236" />
-        <di:waypoint xsi:type="dc:Point" x="528" y="237" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="476" y="207" width="16" height="22" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_14" bpmnElement="obtainByName" sourceElement="_BPMNShape_ExclusiveGateway_233" targetElement="_BPMNShape_ScriptTask_301">
-        <di:waypoint xsi:type="dc:Point" x="471" y="145" />
-        <di:waypoint xsi:type="dc:Point" x="471" y="99" />
-        <di:waypoint xsi:type="dc:Point" x="528" y="99" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="471" y="115" width="40" height="22" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_15" bpmnElement="SequenceFlow_13" sourceElement="_BPMNShape_ScriptTask_301" targetElement="_BPMNShape_ExclusiveGateway_234">
-        <di:waypoint xsi:type="dc:Point" x="628" y="99" />
-        <di:waypoint xsi:type="dc:Point" x="671" y="99" />
-        <di:waypoint xsi:type="dc:Point" x="671" y="145" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="665" y="99" width="6" height="6" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="_BPMNShape_ExclusiveGateway_235" bpmnElement="serviceFoundCheck" isMarkerVisible="true">
-        <dc:Bounds x="738" y="145" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="735" y="125" width="59" height="22" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_16" bpmnElement="SequenceFlow_14" sourceElement="_BPMNShape_ExclusiveGateway_234" targetElement="_BPMNShape_ExclusiveGateway_235">
-        <di:waypoint xsi:type="dc:Point" x="696" y="170" />
-        <di:waypoint xsi:type="dc:Point" x="738" y="170" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="704" y="170" width="6" height="6" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_17" bpmnElement="foundYes" sourceElement="_BPMNShape_ExclusiveGateway_235" targetElement="_BPMNShape_ExclusiveGateway_228">
-        <di:waypoint xsi:type="dc:Point" x="763" y="195" />
-        <di:waypoint xsi:type="dc:Point" x="763" y="256" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="762" y="205" width="29" height="22" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_18" bpmnElement="notFound" sourceElement="_BPMNShape_ExclusiveGateway_235" targetElement="_BPMNShape_EndEvent_229">
-        <di:waypoint xsi:type="dc:Point" x="788" y="170" />
-        <di:waypoint xsi:type="dc:Point" x="877" y="171" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="798" y="170" width="22" height="22" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="_BPMNShape_EndEvent_229" bpmnElement="EndEvent_3">
-        <dc:Bounds x="877" y="153" width="36" height="36" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="895" y="194" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-    </bpmndi:BPMNPlane>
-  </bpmndi:BPMNDiagram>
-</bpmn2:definitions>
diff --git a/bpmn/MSOCommonBPMN/src/main/resources/subprocess/GenericGetService.bpmn b/bpmn/MSOCommonBPMN/src/main/resources/subprocess/GenericGetService.bpmn
deleted file mode 100644
index 2015526..0000000
--- a/bpmn/MSOCommonBPMN/src/main/resources/subprocess/GenericGetService.bpmn
+++ /dev/null
@@ -1,321 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_D5VzAHElEeaJwpcpVN5gXw" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.4.0" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
-  <bpmn2:process id="GenericGetService" name="GenericGetService" isExecutable="true">
-    <bpmn2:scriptTask id="intialization" name="Initialization" scriptFormat="groovy">
-      <bpmn2:incoming>SequenceFlow_1</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_2</bpmn2:outgoing>
-      <bpmn2:script><![CDATA[import org.onap.so.bpmn.common.scripts.*
-GenericGetService getService = new GenericGetService()
-getService.preProcessRequest(execution)
-]]></bpmn2:script>
-    </bpmn2:scriptTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_2" name="" sourceRef="intialization" targetRef="getUrl" />
-    <bpmn2:exclusiveGateway id="getUrl" name="Need Object&#39;s Url?" default="getUrlNo">
-      <bpmn2:incoming>SequenceFlow_2</bpmn2:incoming>
-      <bpmn2:outgoing>getUrlYes</bpmn2:outgoing>
-      <bpmn2:outgoing>getUrlNo</bpmn2:outgoing>
-    </bpmn2:exclusiveGateway>
-    <bpmn2:sequenceFlow id="getUrlYes" name="Yes" sourceRef="getUrl" targetRef="obtain">
-      <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression"><![CDATA[#{execution.getVariable("GENGS_obtainObjectsUrl" ) == true}]]></bpmn2:conditionExpression>
-    </bpmn2:sequenceFlow>
-    <bpmn2:sequenceFlow id="getUrlNo" name="No" sourceRef="getUrl" targetRef="ExclusiveGateway_2" />
-    <bpmn2:subProcess id="bpmnExceptionHandlingSubProcess" name="Error Handling Sub Process" triggeredByEvent="true">
-      <bpmn2:scriptTask id="processBPMNException" name="Process Error" scriptFormat="groovy">
-        <bpmn2:incoming>SequenceFlow_7</bpmn2:incoming>
-        <bpmn2:outgoing>SequenceFlow_8</bpmn2:outgoing>
-        <bpmn2:script><![CDATA[import org.onap.so.bpmn.common.scripts.*
-
-ExceptionUtil ex = new ExceptionUtil()
-ex.processSubflowsBPMNException(execution)]]></bpmn2:script>
-      </bpmn2:scriptTask>
-      <bpmn2:sequenceFlow id="SequenceFlow_8" name="" sourceRef="processBPMNException" targetRef="EndEvent_2" />
-      <bpmn2:startEvent id="StartEvent_2">
-        <bpmn2:outgoing>SequenceFlow_7</bpmn2:outgoing>
-        <bpmn2:errorEventDefinition id="ErrorEventDefinition_1" />
-      </bpmn2:startEvent>
-      <bpmn2:sequenceFlow id="SequenceFlow_7" name="" sourceRef="StartEvent_2" targetRef="processBPMNException" />
-      <bpmn2:endEvent id="EndEvent_2">
-        <bpmn2:incoming>SequenceFlow_8</bpmn2:incoming>
-      </bpmn2:endEvent>
-    </bpmn2:subProcess>
-    <bpmn2:scriptTask id="toggleSuccess" name="Toggle Success Indicator" scriptFormat="groovy">
-      <bpmn2:incoming>SequenceFlow_3</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_6</bpmn2:outgoing>
-      <bpmn2:script><![CDATA[import org.onap.so.bpmn.common.scripts.*
-GenericGetService getService = new GenericGetService()
-getService.setSuccessIndicator(execution, true)
-]]></bpmn2:script>
-    </bpmn2:scriptTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_6" name="" sourceRef="toggleSuccess" targetRef="EndEvent_1" />
-    <bpmn2:scriptTask id="getServiceInstance" name="GET&#10;Object" scriptFormat="groovy">
-      <bpmn2:incoming>SequenceFlow_5</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_3</bpmn2:outgoing>
-      <bpmn2:script><![CDATA[import org.onap.so.bpmn.common.scripts.*
-GenericGetService getService = new GenericGetService()
-getService.getServiceObject(execution)]]></bpmn2:script>
-    </bpmn2:scriptTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_3" name="" sourceRef="getServiceInstance" targetRef="toggleSuccess" />
-    <bpmn2:exclusiveGateway id="ExclusiveGateway_2">
-      <bpmn2:incoming>getUrlNo</bpmn2:incoming>
-      <bpmn2:incoming>foundYes</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_5</bpmn2:outgoing>
-    </bpmn2:exclusiveGateway>
-    <bpmn2:sequenceFlow id="SequenceFlow_5" name="" sourceRef="ExclusiveGateway_2" targetRef="getServiceInstance" />
-    <bpmn2:scriptTask id="obtainServiceUrlById" name="Node Query Using Id&#10;" scriptFormat="groovy">
-      <bpmn2:incoming>obtainById</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_4</bpmn2:outgoing>
-      <bpmn2:script><![CDATA[import org.onap.so.bpmn.common.scripts.*
-GenericGetService getService = new GenericGetService()
-getService.obtainServiceInstanceUrlById(execution)]]></bpmn2:script>
-    </bpmn2:scriptTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_4" name="" sourceRef="obtainServiceUrlById" targetRef="ExclusiveGateway_3" />
-    <bpmn2:scriptTask id="obtainServiceUrlByName" name="Node Query Using Name" scriptFormat="groovy">
-      <bpmn2:incoming>obtainByName</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_13</bpmn2:outgoing>
-      <bpmn2:script><![CDATA[import org.onap.so.bpmn.common.scripts.*
-GenericGetService getService = new GenericGetService()
-getService.obtainServiceInstanceUrlByName(execution)]]></bpmn2:script>
-    </bpmn2:scriptTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_13" name="" sourceRef="obtainServiceUrlByName" targetRef="ExclusiveGateway_3" />
-    <bpmn2:exclusiveGateway id="obtain" name="Query By?" default="obtainById">
-      <bpmn2:incoming>getUrlYes</bpmn2:incoming>
-      <bpmn2:outgoing>obtainById</bpmn2:outgoing>
-      <bpmn2:outgoing>obtainByName</bpmn2:outgoing>
-    </bpmn2:exclusiveGateway>
-    <bpmn2:sequenceFlow id="obtainById" name="Id" sourceRef="obtain" targetRef="obtainServiceUrlById" />
-    <bpmn2:sequenceFlow id="obtainByName" name="Name" sourceRef="obtain" targetRef="obtainServiceUrlByName">
-      <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression"><![CDATA[#{execution.getVariable("GENGS_obtainServiceInstanceUrlByName" ) == true}]]></bpmn2:conditionExpression>
-    </bpmn2:sequenceFlow>
-    <bpmn2:exclusiveGateway id="serviceFoundCheck" name="Service Exist?" default="notFound">
-      <bpmn2:incoming>SequenceFlow_14</bpmn2:incoming>
-      <bpmn2:outgoing>foundYes</bpmn2:outgoing>
-      <bpmn2:outgoing>notFound</bpmn2:outgoing>
-    </bpmn2:exclusiveGateway>
-    <bpmn2:sequenceFlow id="foundYes" name="Yes" sourceRef="serviceFoundCheck" targetRef="ExclusiveGateway_2">
-      <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression"><![CDATA[#{execution.getVariable("GENGS_FoundIndicator" ) == true}]]></bpmn2:conditionExpression>
-    </bpmn2:sequenceFlow>
-    <bpmn2:sequenceFlow id="notFound" name="No" sourceRef="serviceFoundCheck" targetRef="EndEvent_3" />
-    <bpmn2:endEvent id="EndEvent_3">
-      <bpmn2:incoming>notFound</bpmn2:incoming>
-      <bpmn2:terminateEventDefinition id="_TerminateEventDefinition_29" />
-    </bpmn2:endEvent>
-    <bpmn2:exclusiveGateway id="ExclusiveGateway_3">
-      <bpmn2:incoming>SequenceFlow_4</bpmn2:incoming>
-      <bpmn2:incoming>SequenceFlow_13</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_14</bpmn2:outgoing>
-    </bpmn2:exclusiveGateway>
-    <bpmn2:sequenceFlow id="SequenceFlow_14" name="" sourceRef="ExclusiveGateway_3" targetRef="serviceFoundCheck" />
-    <bpmn2:endEvent id="EndEvent_1">
-      <bpmn2:incoming>SequenceFlow_6</bpmn2:incoming>
-      <bpmn2:terminateEventDefinition id="_TerminateEventDefinition_26" />
-    </bpmn2:endEvent>
-    <bpmn2:startEvent id="StartEvent_1">
-      <bpmn2:outgoing>SequenceFlow_1</bpmn2:outgoing>
-    </bpmn2:startEvent>
-    <bpmn2:sequenceFlow id="SequenceFlow_1" name="" sourceRef="StartEvent_1" targetRef="intialization" />
-  </bpmn2:process>
-  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
-    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="GenericGetService">
-      <bpmndi:BPMNShape id="_BPMNShape_StartEvent_69" bpmnElement="StartEvent_1">
-        <dc:Bounds x="108" y="264" width="36" height="36" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="126" y="305" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="_BPMNShape_ScriptTask_288" bpmnElement="intialization">
-        <dc:Bounds x="228" y="242" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_1" bpmnElement="SequenceFlow_1" sourceElement="_BPMNShape_StartEvent_69" targetElement="_BPMNShape_ScriptTask_288">
-        <di:waypoint xsi:type="dc:Point" x="144" y="282" />
-        <di:waypoint xsi:type="dc:Point" x="228" y="282" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="177" y="282" width="6" height="6" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="_BPMNShape_ExclusiveGateway_227" bpmnElement="getUrl" isMarkerVisible="true">
-        <dc:Bounds x="372" y="256" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="420" y="282" width="72" height="24" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_2" bpmnElement="SequenceFlow_2" sourceElement="_BPMNShape_ScriptTask_288" targetElement="_BPMNShape_ExclusiveGateway_227">
-        <di:waypoint xsi:type="dc:Point" x="328" y="282" />
-        <di:waypoint xsi:type="dc:Point" x="372" y="281" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="350" y="281" width="6" height="6" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="_BPMNShape_ScriptTask_289" bpmnElement="obtainServiceUrlById">
-        <dc:Bounds x="528" y="197" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="_BPMNShape_ExclusiveGateway_228" bpmnElement="ExclusiveGateway_2" isMarkerVisible="true">
-        <dc:Bounds x="738" y="256" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="763" y="311" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="_BPMNShape_ScriptTask_290" bpmnElement="getServiceInstance">
-        <dc:Bounds x="820" y="242" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_3" bpmnElement="getUrlYes" sourceElement="_BPMNShape_ExclusiveGateway_227" targetElement="_BPMNShape_ExclusiveGateway_233">
-        <di:waypoint xsi:type="dc:Point" x="397" y="256" />
-        <di:waypoint xsi:type="dc:Point" x="397" y="170" />
-        <di:waypoint xsi:type="dc:Point" x="446" y="170" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="397" y="213" width="29" height="22" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_4" bpmnElement="SequenceFlow_4" sourceElement="_BPMNShape_ScriptTask_289" targetElement="_BPMNShape_ExclusiveGateway_234">
-        <di:waypoint xsi:type="dc:Point" x="628" y="237" />
-        <di:waypoint xsi:type="dc:Point" x="671" y="237" />
-        <di:waypoint xsi:type="dc:Point" x="671" y="195" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="668" y="221" width="6" height="6" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_5" bpmnElement="SequenceFlow_5" sourceElement="_BPMNShape_ExclusiveGateway_228" targetElement="_BPMNShape_ScriptTask_290">
-        <di:waypoint xsi:type="dc:Point" x="788" y="281" />
-        <di:waypoint xsi:type="dc:Point" x="820" y="282" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="798" y="281" width="6" height="6" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_6" bpmnElement="getUrlNo" sourceElement="_BPMNShape_ExclusiveGateway_227" targetElement="_BPMNShape_ExclusiveGateway_228">
-        <di:waypoint xsi:type="dc:Point" x="397" y="306" />
-        <di:waypoint xsi:type="dc:Point" x="397" y="370" />
-        <di:waypoint xsi:type="dc:Point" x="763" y="370" />
-        <di:waypoint xsi:type="dc:Point" x="763" y="306" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="400" y="324" width="22" height="22" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="_BPMNShape_ScriptTask_291" bpmnElement="toggleSuccess">
-        <dc:Bounds x="960" y="242" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_7" bpmnElement="SequenceFlow_3" sourceElement="_BPMNShape_ScriptTask_290" targetElement="_BPMNShape_ScriptTask_291">
-        <di:waypoint xsi:type="dc:Point" x="920" y="282" />
-        <di:waypoint xsi:type="dc:Point" x="960" y="282" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="937" y="282" width="6" height="6" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="_BPMNShape_EndEvent_223" bpmnElement="EndEvent_1">
-        <dc:Bounds x="1133" y="264" width="36" height="36" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="1151" y="305" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_8" bpmnElement="SequenceFlow_6" sourceElement="_BPMNShape_ScriptTask_291" targetElement="_BPMNShape_EndEvent_223">
-        <di:waypoint xsi:type="dc:Point" x="1060" y="282" />
-        <di:waypoint xsi:type="dc:Point" x="1133" y="282" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="1100" y="282" width="6" height="6" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="_BPMNShape_SubProcess_25" bpmnElement="bpmnExceptionHandlingSubProcess" isExpanded="true">
-        <dc:Bounds x="152" y="468" width="325" height="169" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="_BPMNShape_StartEvent_70" bpmnElement="StartEvent_2">
-        <dc:Bounds x="176" y="535" width="36" height="36" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="194" y="576" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="_BPMNShape_EndEvent_224" bpmnElement="EndEvent_2">
-        <dc:Bounds x="416" y="535" width="36" height="36" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="434" y="576" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="_BPMNShape_ScriptTask_292" bpmnElement="processBPMNException">
-        <dc:Bounds x="265" y="513" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_9" bpmnElement="SequenceFlow_7" sourceElement="_BPMNShape_StartEvent_70" targetElement="_BPMNShape_ScriptTask_292">
-        <di:waypoint xsi:type="dc:Point" x="212" y="553" />
-        <di:waypoint xsi:type="dc:Point" x="265" y="553" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="233" y="553" width="6" height="6" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_10" bpmnElement="SequenceFlow_8" sourceElement="_BPMNShape_ScriptTask_292" targetElement="_BPMNShape_EndEvent_224">
-        <di:waypoint xsi:type="dc:Point" x="365" y="553" />
-        <di:waypoint xsi:type="dc:Point" x="416" y="553" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="385" y="553" width="6" height="6" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="_BPMNShape_ScriptTask_301" bpmnElement="obtainServiceUrlByName">
-        <dc:Bounds x="528" y="59" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="_BPMNShape_ExclusiveGateway_233" bpmnElement="obtain" isMarkerVisible="true">
-        <dc:Bounds x="446" y="145" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="501" y="164" width="53" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="_BPMNShape_ExclusiveGateway_234" bpmnElement="ExclusiveGateway_3" isMarkerVisible="true">
-        <dc:Bounds x="646" y="145" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="671" y="200" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_13" bpmnElement="obtainById" sourceElement="_BPMNShape_ExclusiveGateway_233" targetElement="_BPMNShape_ScriptTask_289">
-        <di:waypoint xsi:type="dc:Point" x="471" y="195" />
-        <di:waypoint xsi:type="dc:Point" x="471" y="236" />
-        <di:waypoint xsi:type="dc:Point" x="528" y="237" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="476" y="207" width="16" height="22" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_14" bpmnElement="obtainByName" sourceElement="_BPMNShape_ExclusiveGateway_233" targetElement="_BPMNShape_ScriptTask_301">
-        <di:waypoint xsi:type="dc:Point" x="471" y="145" />
-        <di:waypoint xsi:type="dc:Point" x="471" y="99" />
-        <di:waypoint xsi:type="dc:Point" x="528" y="99" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="471" y="115" width="40" height="22" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_15" bpmnElement="SequenceFlow_13" sourceElement="_BPMNShape_ScriptTask_301" targetElement="_BPMNShape_ExclusiveGateway_234">
-        <di:waypoint xsi:type="dc:Point" x="628" y="99" />
-        <di:waypoint xsi:type="dc:Point" x="671" y="99" />
-        <di:waypoint xsi:type="dc:Point" x="671" y="145" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="665" y="99" width="6" height="6" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="_BPMNShape_ExclusiveGateway_235" bpmnElement="serviceFoundCheck" isMarkerVisible="true">
-        <dc:Bounds x="738" y="145" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="735" y="125" width="59" height="22" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_16" bpmnElement="SequenceFlow_14" sourceElement="_BPMNShape_ExclusiveGateway_234" targetElement="_BPMNShape_ExclusiveGateway_235">
-        <di:waypoint xsi:type="dc:Point" x="696" y="170" />
-        <di:waypoint xsi:type="dc:Point" x="738" y="170" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="704" y="170" width="6" height="6" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_17" bpmnElement="foundYes" sourceElement="_BPMNShape_ExclusiveGateway_235" targetElement="_BPMNShape_ExclusiveGateway_228">
-        <di:waypoint xsi:type="dc:Point" x="763" y="195" />
-        <di:waypoint xsi:type="dc:Point" x="763" y="256" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="762" y="205" width="29" height="22" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_18" bpmnElement="notFound" sourceElement="_BPMNShape_ExclusiveGateway_235" targetElement="_BPMNShape_EndEvent_229">
-        <di:waypoint xsi:type="dc:Point" x="788" y="170" />
-        <di:waypoint xsi:type="dc:Point" x="877" y="171" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="798" y="170" width="22" height="22" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="_BPMNShape_EndEvent_229" bpmnElement="EndEvent_3">
-        <dc:Bounds x="877" y="153" width="36" height="36" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="895" y="194" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-    </bpmndi:BPMNPlane>
-  </bpmndi:BPMNDiagram>
-</bpmn2:definitions>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/CustomE2EGetServiceTest.groovy b/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/CustomE2EGetServiceTest.groovy
deleted file mode 100644
index a8c10b1..0000000
--- a/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/CustomE2EGetServiceTest.groovy
+++ /dev/null
@@ -1,104 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP - SO
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.so.bpmn.common.scripts
-
-import com.github.tomakehurst.wiremock.junit.WireMockRule
-import org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity
-import org.junit.Assert
-import org.junit.Before
-import org.junit.Ignore
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.mockito.ArgumentCaptor
-import org.mockito.Captor
-import org.mockito.Mockito
-import org.mockito.runners.MockitoJUnitRunner
-
-import static org.mockito.Mockito.times
-import static org.mockito.Mockito.when
-import static org.onap.so.bpmn.mock.StubResponseAAI.MockGetServiceInstance
-import static org.onap.so.bpmn.mock.StubResponseAAI.MockNodeQueryServiceInstanceById
-import static org.onap.so.bpmn.mock.StubResponseAAI.MockNodeQueryServiceInstanceByName
-
-/**
- * @author sushilma
- * @since January 10, 2018
- */
-@RunWith(MockitoJUnitRunner.class)
-@Ignore
-class CustomE2EGetServiceTest extends MsoGroovyTest  {
-
-    @Rule
-    public WireMockRule wireMockRule = new WireMockRule(28090)
-
-    @Captor
-    static ArgumentCaptor<ExecutionEntity> captor = ArgumentCaptor.forClass(ExecutionEntity.class)
-
-    @Test
-    public void testObtainServiceInstanceUrlById (){
-        ExecutionEntity mockExecution = setupMockWithPrefix('CustomE2EGetService','GENGS_')
-        when(mockExecution.getVariable("aai.endpoint")).thenReturn("http://localhost:28090")
-        when(mockExecution.getVariable("mso.workflow.global.default.aai.namespace")).thenReturn("http://org.openecomp.aai.inventory/")
-        when(mockExecution.getVariable("mso.workflow.global.default.aai.version")).thenReturn('8')
-        when(mockExecution.getVariable("mso.workflow.default.aai.v8.nodes-query.uri")).thenReturn('/aai/v8/search/nodes-query')
-        when(mockExecution.getVariable("GENGS_type")).thenReturn('service-instance')
-        when(mockExecution.getVariable("GENGS_serviceInstanceId")).thenReturn("MIS%2F1604%2F0026%2FSW_INTERNET")
-        MockNodeQueryServiceInstanceById("MIS%2F1604%2F0026%2FSW_INTERNET", "GenericFlows/getSIUrlById.xml");
-        CustomE2EGetService customE2EGetService = new CustomE2EGetService();
-        customE2EGetService.obtainServiceInstanceUrlById(mockExecution)
-        Mockito.verify(mockExecution, times(9)).setVariable(captor.capture(), captor.capture())
-        Assert.assertEquals(200, captor.getAllValues().get(5))
-    }
-
-    @Test
-    public void testObtainServiceInstanceUrlByName (){
-        ExecutionEntity mockExecution = setupMockWithPrefix('CustomE2EGetService','GENGS_')
-        when(mockExecution.getVariable("aai.endpoint")).thenReturn("http://localhost:28090")
-        when(mockExecution.getVariable("mso.workflow.global.default.aai.namespace")).thenReturn("http://org.openecomp.aai.inventory/")
-        when(mockExecution.getVariable("mso.workflow.global.default.aai.version")).thenReturn('8')
-        when(mockExecution.getVariable("mso.workflow.default.aai.v8.nodes-query.uri")).thenReturn('/aai/v8/search/nodes-query')
-        when(mockExecution.getVariable("GENGS_type")).thenReturn('service-instance')
-        when(mockExecution.getVariable("GENGS_serviceInstanceName")).thenReturn("1604-MVM-26")
-        MockNodeQueryServiceInstanceByName("1604-MVM-26", "GenericFlows/getSIUrlByName.xml");
-        CustomE2EGetService customE2EGetService = new CustomE2EGetService();
-        customE2EGetService.obtainServiceInstanceUrlByName(mockExecution)
-        Mockito.verify(mockExecution, times(8)).setVariable(captor.capture(), captor.capture())
-        Assert.assertEquals(200, captor.getAllValues().get(5))
-    }
-
-    @Test
-    public void testServiceObject (){
-        ExecutionEntity mockExecution = setupMockWithPrefix('CustomE2EGetService','GENGS_')
-        when(mockExecution.getVariable("aai.endpoint")).thenReturn("http://localhost:28090")
-        when(mockExecution.getVariable("mso.workflow.global.default.aai.namespace")).thenReturn("http://org.openecomp.aai.inventory/")
-        when(mockExecution.getVariable("mso.workflow.global.default.aai.version")).thenReturn('8')
-        when(mockExecution.getVariable("mso.workflow.default.aai.v8.nodes-query.uri")).thenReturn('/aai/v8/search/nodes-query')
-        when(mockExecution.getVariable("GENGS_type")).thenReturn('service-instance')
-        when(mockExecution.getVariable("GENGS_serviceInstanceId")).thenReturn("MIS%2F1604%2F0026%2FSW_INTERNET")
-        when(mockExecution.getVariable("GENGS_resourceLink")).thenReturn("/aai/v8/business/customers/customer/MSO_1610_dev/service-subscriptions/service-subscription/MSO-dev-service-type/service-instances/service-instance/1234453")
-        MockGetServiceInstance("MSO_1610_dev", "MSO-dev-service-type", "1234453", "GenericFlows/getServiceInstance.xml");
-        CustomE2EGetService customE2EGetService = new CustomE2EGetService();
-        customE2EGetService.getServiceObject(mockExecution)
-        Mockito.verify(mockExecution, times(7)).setVariable(captor.capture(), captor.capture())
-        Assert.assertEquals(200, captor.getAllValues().get(5))
-    }
-}
diff --git a/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/GenericGetServiceTest.groovy b/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/GenericGetServiceTest.groovy
deleted file mode 100644
index 49edd81..0000000
--- a/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/GenericGetServiceTest.groovy
+++ /dev/null
@@ -1,124 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP - SO
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.so.bpmn.common.scripts
-
-import com.github.tomakehurst.wiremock.junit.WireMockRule
-import org.camunda.bpm.engine.ProcessEngineServices
-import org.camunda.bpm.engine.RepositoryService
-import org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity
-import org.camunda.bpm.engine.repository.ProcessDefinition
-import org.junit.Assert
-import org.junit.Before
-import org.junit.Ignore
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.mockito.ArgumentCaptor
-import org.mockito.Captor
-import org.mockito.Mockito
-import org.mockito.runners.MockitoJUnitRunner
-import org.onap.so.bpmn.core.WorkflowException
-
-import static com.github.tomakehurst.wiremock.client.WireMock.*
-import static org.mockito.Mockito.*
-
-@RunWith(MockitoJUnitRunner.class)
-@Ignore
-class GenericGetServiceTest {
-
-    def prefix = "GENGS_"
-    @Captor
-    ArgumentCaptor<ExecutionEntity> captor = ArgumentCaptor.forClass(ExecutionEntity.class);
-
-    @Rule
-    public WireMockRule wireMockRule = new WireMockRule(8090);
-
-    @Test
-    public void testGetServiceObject() {
-        ExecutionEntity mockExecution = setupMock()
-        when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
-        when(mockExecution.getVariable("aai.endpoint")).thenReturn('http://localhost:8090')
-        when(mockExecution.getVariable(prefix + "type")).thenReturn('service-instance')
-        when(mockExecution.getVariable(prefix + "serviceInstanceId")).thenReturn('12345')
-        when(mockExecution.getVariable(prefix + "resourceLink")).thenReturn("/aai/v8/business/customers/customer/MSO_1610_dev/service-subscriptions/service-subscription/MSO-dev-service-type/service-instances/service-instance/")
-        when(mockExecution.getVariable("mso.workflow.global.default.aai.version")).thenReturn('8')
-        when(mockExecution.getVariable("mso.workflow.global.default.aai.namespace")).thenReturn('http://org.openecomp.aai.inventory/')
-
-        mockData()
-        GenericGetService obj = new GenericGetService()
-        obj.getServiceObject(mockExecution)
-
-        Mockito.verify(mockExecution).setVariable("prefix", prefix)
-        Mockito.verify(mockExecution).setVariable(prefix + "getServiceUrl", "http://localhost:8090/aai/v8/business/customers/customer/MSO_1610_dev/service-subscriptions/service-subscription/MSO-dev-service-type/service-instances/service-instance/")
-        Mockito.verify(mockExecution).setVariable(prefix + "getServiceResponseCode", 200)
-    }
-
-    @Test
-    public void testGetServiceObjectEndpointNull() {
-        ExecutionEntity mockExecution = setupMock()
-        when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true')
-        when(mockExecution.getVariable("aai.endpoint")).thenReturn(null)
-        when(mockExecution.getVariable(prefix + "type")).thenReturn('service-instance')
-        when(mockExecution.getVariable(prefix + "serviceInstanceId")).thenReturn('12345')
-        when(mockExecution.getVariable(prefix + "resourceLink")).thenReturn("/aai/v8/business/customers/customer/MSO_1610_dev/service-subscriptions/service-subscription/MSO-dev-service-type/service-instances/service-instance/")
-        when(mockExecution.getVariable("mso.workflow.global.default.aai.version")).thenReturn('8')
-        when(mockExecution.getVariable("mso.workflow.global.default.aai.namespace")).thenReturn('http://org.openecomp.aai.inventory/')
-
-        mockData()
-        try {
-            GenericGetService obj = new GenericGetService()
-            obj.getServiceObject(mockExecution)
-        } catch (Exception ex) {
-            println " Test End - Handle catch-throw BpmnError()! "
-        }
-
-        Mockito.verify(mockExecution, times(3)).setVariable(captor.capture(), captor.capture())
-        WorkflowException workflowException = captor.getValue()
-        Assert.assertEquals(9999, workflowException.getErrorCode())
-        Assert.assertEquals("org.apache.http.client.ClientProtocolException", workflowException.getErrorMessage())
-    }
-
-    private void mockData() {
-        stubFor(get(urlMatching(".*/aai/v[0-9]+/business/customers/customer/MSO_1610_dev/service-subscriptions/service-subscription/MSO-dev-service-type/service-instances/service-instance/.*"))
-                .willReturn(aResponse()
-                .withStatus(200).withHeader("Content-Type", "text/xml")
-                .withBodyFile("")))
-    }
-
-    private ExecutionEntity setupMock() {
-
-        ProcessDefinition mockProcessDefinition = mock(ProcessDefinition.class)
-        when(mockProcessDefinition.getKey()).thenReturn("GenericGetService")
-        RepositoryService mockRepositoryService = mock(RepositoryService.class)
-        when(mockRepositoryService.getProcessDefinition()).thenReturn(mockProcessDefinition)
-        when(mockRepositoryService.getProcessDefinition().getKey()).thenReturn("GenericGetService")
-        when(mockRepositoryService.getProcessDefinition().getId()).thenReturn("100")
-        ProcessEngineServices mockProcessEngineServices = mock(ProcessEngineServices.class)
-        when(mockProcessEngineServices.getRepositoryService()).thenReturn(mockRepositoryService)
-        ExecutionEntity mockExecution = mock(ExecutionEntity.class)
-        when(mockExecution.getId()).thenReturn("100")
-        when(mockExecution.getProcessDefinitionId()).thenReturn("GenericGetService")
-        when(mockExecution.getProcessInstanceId()).thenReturn("GenericGetService")
-        when(mockExecution.getProcessEngineServices()).thenReturn(mockProcessEngineServices)
-        when(mockExecution.getProcessEngineServices().getRepositoryService().getProcessDefinition(mockExecution.getProcessDefinitionId())).thenReturn(mockProcessDefinition)
-        return mockExecution
-    }
-}
diff --git a/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/GenericGetVnfTest.groovy b/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/GenericGetVnfTest.groovy
deleted file mode 100644
index 1aef78f..0000000
--- a/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/GenericGetVnfTest.groovy
+++ /dev/null
@@ -1,180 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP - SO
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.so.bpmn.common.scripts
-
-import com.github.tomakehurst.wiremock.junit.WireMockRule
-import org.camunda.bpm.engine.ProcessEngineServices
-import org.camunda.bpm.engine.RepositoryService
-import org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity
-import org.camunda.bpm.engine.repository.ProcessDefinition
-import org.junit.Assert
-import org.junit.Before
-import org.junit.Ignore
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.mockito.ArgumentCaptor
-import org.mockito.Captor
-import org.mockito.Mockito
-import org.mockito.MockitoAnnotations
-import org.mockito.runners.MockitoJUnitRunner
-import org.onap.so.bpmn.core.WorkflowException
-
-import static com.github.tomakehurst.wiremock.client.WireMock.*
-import static org.mockito.Mockito.mock
-import static org.mockito.Mockito.times
-import static org.mockito.Mockito.when
-
-@RunWith(MockitoJUnitRunner.class)
-@Ignore
-class GenericGetVnfTest {
-
-    def prefix = "GENGV_"
-
-    @Rule
-    public WireMockRule wireMockRule = new WireMockRule(28090)
-
-    @Captor
-    static ArgumentCaptor<ExecutionEntity> captor = ArgumentCaptor.forClass(ExecutionEntity.class)
-
-
-    @Before
-    public void init()
-    {
-        MockitoAnnotations.initMocks(this)
-    }
-
-    @Test
-    public void testGetVnfByName() {
-
-        ExecutionEntity mockExecution = setupMock()
-        when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
-        when(mockExecution.getVariable("aai.endpoint")).thenReturn("http://localhost:28090")
-        when(mockExecution.getVariable(prefix+"vnfName")).thenReturn("genricVnf_test")
-        when(mockExecution.getVariable(prefix+"type")).thenReturn("generic-vnf")
-        when(mockExecution.getVariable("mso.workflow.DoCreateVfModule.aai.generic-vnf.uri")).thenReturn("/aai/v9/network/generic-vnfs/generic-vnf")
-        when(mockExecution.getVariable("mso.workflow.global.default.aai.namespace")).thenReturn("http://org.openecomp.aai.inventory/")
-
-        mockData()
-        GenericGetVnf obj = new GenericGetVnf()
-        obj.getVnfByName(mockExecution)
-
-        Mockito.verify(mockExecution).setVariable("prefix","GENGV_")
-        Mockito.verify(mockExecution).setVariable(prefix+"getVnfPath","http://localhost:28090/aai/v9/network/generic-vnfs/generic-vnf?vnf-name=genricVnf_test&depth=1")
-    }
-
-    @Test
-    public void testGetVnfByNameEndpointNull() {
-
-        ExecutionEntity mockExecution = setupMock()
-        when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
-        when(mockExecution.getVariable("aai.endpoint")).thenReturn(null)
-        when(mockExecution.getVariable(prefix+"vnfName")).thenReturn("genricVnf_test")
-        when(mockExecution.getVariable(prefix+"type")).thenReturn("generic-vnf")
-        when(mockExecution.getVariable("mso.workflow.DoCreateVfModule.aai.generic-vnf.uri")).thenReturn("/aai/v9/network/generic-vnfs/generic-vnf")
-        when(mockExecution.getVariable("mso.workflow.global.default.aai.namespace")).thenReturn("http://org.openecomp.aai.inventory/")
-
-        mockData()
-        try{
-            GenericGetVnf obj = new GenericGetVnf()
-            obj.getVnfByName(mockExecution)
-        }catch (Exception ex) {
-            println " Test End - Handle catch-throw BpmnError()! "
-        }
-
-        Mockito.verify(mockExecution, times(3)).setVariable(captor.capture(), captor.capture())
-        WorkflowException workflowException = captor.getValue()
-        Assert.assertEquals(9999, workflowException.getErrorCode())
-        Assert.assertEquals("org.apache.http.client.ClientProtocolException", workflowException.getErrorMessage())
-    }
-
-    @Test
-    public void testGetVnfById() {
-
-        ExecutionEntity mockExecution = setupMock()
-        when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
-        when(mockExecution.getVariable("aai.endpoint")).thenReturn("http://localhost:28090")
-        when(mockExecution.getVariable(prefix+"vnfId")).thenReturn("genricVnf_test")
-        when(mockExecution.getVariable(prefix+"type")).thenReturn("generic-vnf")
-        when(mockExecution.getVariable("mso.workflow.DoCreateVfModule.aai.generic-vnf.uri")).thenReturn("/aai/v9/network/generic-vnfs/generic-vnf")
-        when(mockExecution.getVariable("mso.workflow.global.default.aai.namespace")).thenReturn("http://org.openecomp.aai.inventory/")
-
-        mockData()
-        GenericGetVnf obj = new GenericGetVnf()
-        obj.getVnfById(mockExecution)
-
-        Mockito.verify(mockExecution).setVariable("prefix","GENGV_")
-        Mockito.verify(mockExecution).setVariable(prefix+"getVnfPath","http://localhost:28090/aai/v9/network/generic-vnfs/generic-vnf/genricVnf_test?depth=1")
-    }
-
-    @Test
-    public void testGetVnfByIdEndpointNull() {
-
-        ExecutionEntity mockExecution = setupMock()
-        when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
-        when(mockExecution.getVariable("aai.endpoint")).thenReturn(null)
-        when(mockExecution.getVariable(prefix+"vnfId")).thenReturn("genricVnf_test")
-        when(mockExecution.getVariable(prefix+"type")).thenReturn("generic-vnf")
-        when(mockExecution.getVariable("mso.workflow.DoCreateVfModule.aai.generic-vnf.uri")).thenReturn("/aai/v9/network/generic-vnfs/generic-vnf")
-        when(mockExecution.getVariable("mso.workflow.global.default.aai.namespace")).thenReturn("http://org.openecomp.aai.inventory/")
-
-        mockData()
-        try{
-            GenericGetVnf obj = new GenericGetVnf()
-            obj.getVnfById(mockExecution)
-        }catch (Exception ex) {
-            println " Test End - Handle catch-throw BpmnError()! "
-        }
-
-        Mockito.verify(mockExecution, times(3)).setVariable(captor.capture(), captor.capture())
-        WorkflowException workflowException = captor.getValue()
-        Assert.assertEquals(9999, workflowException.getErrorCode())
-        Assert.assertEquals("org.apache.http.client.ClientProtocolException", workflowException.getErrorMessage())
-    }
-
-    private static ExecutionEntity setupMock() {
-        ProcessDefinition mockProcessDefinition = mock(ProcessDefinition.class)
-        when(mockProcessDefinition.getKey()).thenReturn("DoCreateVfModule")
-        RepositoryService mockRepositoryService = mock(RepositoryService.class)
-        when(mockRepositoryService.getProcessDefinition()).thenReturn(mockProcessDefinition)
-        when(mockRepositoryService.getProcessDefinition().getKey()).thenReturn("DoCreateVfModule")
-        when(mockRepositoryService.getProcessDefinition().getId()).thenReturn("100")
-        ProcessEngineServices mockProcessEngineServices = mock(ProcessEngineServices.class)
-        when(mockProcessEngineServices.getRepositoryService()).thenReturn(mockRepositoryService)
-
-        ExecutionEntity mockExecution = mock(ExecutionEntity.class)
-        // Initialize prerequisite variables
-        when(mockExecution.getId()).thenReturn("100")
-        when(mockExecution.getProcessDefinitionId()).thenReturn("DoCreateVfModule")
-        when(mockExecution.getProcessInstanceId()).thenReturn("DoCreateVfModule")
-        when(mockExecution.getProcessEngineServices()).thenReturn(mockProcessEngineServices)
-        when(mockExecution.getProcessEngineServices().getRepositoryService().getProcessDefinition(mockExecution.getProcessDefinitionId())).thenReturn(mockProcessDefinition)
-
-        return mockExecution
-    }
-
-    private static void mockData() {
-        stubFor(get(urlMatching(".*/aai/v[0-9]+/network/generic-vnfs/generic-vnf.*"))
-                .willReturn(aResponse()
-                .withStatus(200).withHeader("Content-Type", "text/xml")
-                .withBodyFile("GenericFlows/getGenericVnfResponse.xml")))
-    }
-}
diff --git a/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/GenericPutServiceTest.groovy b/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/GenericPutServiceTest.groovy
deleted file mode 100644
index d4ea8ce..0000000
--- a/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/GenericPutServiceTest.groovy
+++ /dev/null
@@ -1,235 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP - SO
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.so.bpmn.common.scripts
-
-import static org.mockito.Mockito.*
-import static org.onap.so.bpmn.mock.StubResponseAAI.MockPutServiceInstance;
-
-import org.camunda.bpm.engine.ProcessEngineServices
-import org.camunda.bpm.engine.RepositoryService
-import org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity
-import org.camunda.bpm.engine.repository.ProcessDefinition
-import org.junit.Before
-import org.junit.Ignore
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.mockito.MockitoAnnotations
-import org.mockito.internal.debugging.MockitoDebuggerImpl
-import org.mockito.runners.MockitoJUnitRunner
-
-import com.github.tomakehurst.wiremock.client.WireMock
-import com.github.tomakehurst.wiremock.junit.WireMockRule
-import org.apache.commons.lang3.*
-
-@RunWith(MockitoJUnitRunner.class)
-@Ignore
-class GenericPutServiceTest {
-
-	@Rule
-	public WireMockRule wireMockRule = new WireMockRule(8090);
-
-	@Before
-	public void init()
-	{
-		MockitoAnnotations.initMocks(this)
-
-	}
-
-	@Test
-	public void preProcessRequest() {
-
-
-		println "************ preProcessRequest ************* "
-
-		ExecutionEntity mockExecution = setupMock()
-
-		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
-		when(mockExecution.getVariable("GENPS_globalSubscriberId")).thenReturn("1604-MVM-26")
-		when(mockExecution.getVariable("GENPS_serviceInstanceId")).thenReturn("MIS%2F1604%2F0026%2FSW_INTERNET")
-		when(mockExecution.getVariable("GENPS_serviceType")).thenReturn("SDN-ETHERNET-INTERNET")
-		when(mockExecution.getVariable("GENPS_serviceInstanceData")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")
-		when(mockExecution.getVariable("GENPS_type")).thenReturn("service-instance")
-
-		GenericPutService  putServiceInstance= new GenericPutService()
-		putServiceInstance.preProcessRequest(mockExecution)
-
-		// check the sequence of variable invocation
-		//MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
-		//preDebugger.printInvocations(mockExecution)
-
-		verify(mockExecution, atLeast(1)).getVariable("isDebugLogEnabled")
-		verify(mockExecution).setVariable("prefix", "GENPS_")
-
-	//	execution.getVariable("isDebugLogEnabled")
-
-		verify(mockExecution).setVariable("GENPS_SuccessIndicator", false)
-	//	verify(mockExecution).setVariable("globalSubscriberId", "1604-MVM-26")
-	//	verify(mockExecution).setVariable("serviceInstanceId", "MIS%2F1604%2F0026%2FSW_INTERNET")
-	//	verify(mockExecution).setVariable("serviceType", "SDN-ETHERNET-INTERNET")
-	//	verify(mockExecution).setVariable("ServiceInstanceData", "f70e927b-6087-4974-9ef8-c5e4d5847ca4")
-
-
-	}
-
-
-	@Test
-	@Ignore
-	public void putServiceInstance() {
-		println "************ putServiceInstance ************* "
-
-		WireMock.reset();
-
-		MockPutServiceInstance("1604-MVM-26", "SDN-ETHERNET-INTERNET", "MIS%252F1604%252F0026%252FSW_INTERNET", "GenericPutServiceInstance/GenericPutServiceInstance_PutServiceInstance_AAIResponse_Success.xml");
-		ExecutionEntity mockExecution = setupMock()
-
-		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
-		when(mockExecution.getVariable("GENPS_globalSubscriberId")).thenReturn("1604-MVM-26")
-		when(mockExecution.getVariable("GENPS_serviceInstanceId")).thenReturn("MIS%2F1604%2F0026%2FSW_INTERNET")
-		when(mockExecution.getVariable("GENPS_serviceType")).thenReturn("SDN-ETHERNET-INTERNET")
-		when(mockExecution.getVariable("GENPS_serviceInstanceData")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")
-		when(mockExecution.getVariable("aai.endpoint")).thenReturn("http://localhost:8090")
-		when(mockExecution.getVariable("mso.workflow.PutServiceInstance.aai.business.customer.uri")).thenReturn("/aai/v7/business/customers/customer")
-		when(mockExecution.getVariable("GENPS_serviceInstanceData")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")
-		when(mockExecution.getVariable("GENPS_type")).thenReturn("service-instance")
-		when(mockExecution.getVariable("mso.workflow.global.default.aai.namespace")).thenReturn('http://org.openecomp.aai.inventory/')
-		when(mockExecution.getVariable("mso.workflow.global.default.aai.version")).thenReturn("7")
-		when(mockExecution.getVariable("mso.workflow.default.aai.v7.customer.uri")).thenReturn("/aai/v7/business/customers/customer")
-		when(mockExecution.getVariable("mso.msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
-		when(mockExecution.getVariable("aai.auth")).thenReturn("757A94191D685FD2092AC1490730A4FC")
-
-		GenericPutService  serviceInstance= new GenericPutService()
-		serviceInstance.putServiceInstance(mockExecution)
-
-		// check the sequence of variable invocation
-		MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
-		preDebugger.printInvocations(mockExecution)
-
-		verify(mockExecution, atLeast(1)).getVariable("isDebugLogEnabled")
-		verify(mockExecution).setVariable("prefix", "GENPS_")
-
-	//	execution.getVariable("isDebugLogEnabled")
-	//	verify(mockExecution).setVariable("GENPSI_serviceInstanceData","f70e927b-6087-4974-9ef8-c5e4d5847ca4")
-
-		String servicePayload = """<service-instance xmlns="http://org.openecomp.aai.inventory/v7">f70e927b-6087-4974-9ef8-c5e4d5847ca4</service-instance>""" as String
-		verify(mockExecution).setVariable("GENPS_serviceInstancePayload",servicePayload)
-
-		String serviceAaiPath = "http://localhost:28090/aai/v7/business/customers/customer/1604-MVM-26/service-subscriptions/service-subscription/SDN-ETHERNET-INTERNET/service-instances/service-instance/MIS%252F1604%252F0026%252FSW_INTERNET"
-		verify(mockExecution).setVariable("GENPS_putServiceInstanceAaiPath", serviceAaiPath)
-
-		int responseCode = 200
-		verify(mockExecution).setVariable("GENPS_putServiceInstanceResponseCode", responseCode)
-
-		String aaiResponse = """<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
-                   statusCode="200">
-   <rest:headers>
-      <rest:header name="Date" value="Thu,10 Mar 2016 00:01:18 GMT"/>
-      <rest:header name="Content-Length" value="0"/>
-      <rest:header name="Expires" value="Thu,01 Jan 1970 00:00:00 UTC"/>
-      <rest:header name="X-AAI-TXID" value="mtcnjv9aaas03-20160310-00:01:18:551-132672"/>
-      <rest:header name="Server" value="Apache-Coyote/1.1"/>
-      <rest:header name="Cache-Control" value="private"/>
-   </rest:headers>
-</rest:RESTResponse>"""
-
-		verify(mockExecution).setVariable("GENPS_putServiceInstanceResponse", aaiResponse)
-
-		verify(mockExecution).setVariable("GENPS_SuccessIndicator", true)
-	}
-
-	@Test
-	@Ignore
-	public void putServiceInstance_404() {
-
-
-		println "************ putServiceInstance ************* "
-
-		WireMock.reset();
-
-		ExecutionEntity mockExecution = setupMock()
-
-		when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
-		when(mockExecution.getVariable("GENPS_globalSubscriberId")).thenReturn("1604-MVM-26")
-		when(mockExecution.getVariable("GENPS_serviceInstanceId")).thenReturn("MIS%2F1604%2F0026%2FSW_INTERNET")
-		when(mockExecution.getVariable("GENPS_serviceType")).thenReturn("SDN-ETHERNET-INTERNET")
-		when(mockExecution.getVariable("GENPS_ServiceInstanceData")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")
-		when(mockExecution.getVariable("aai.endpoint")).thenReturn("http://localhost:8090")
-		when(mockExecution.getVariable("mso.workflow.PutServiceInstance.aai.business.customer_uri")).thenReturn("/aai/v7/business/customers/customer")
-		when(mockExecution.getVariable("GENPS_ServiceInstanceData")).thenReturn("f70e927b-6087-4974-9ef8-c5e4d5847ca4")
-
-		GenericPutService  serviceInstance= new GenericPutService()
-		serviceInstance.putServiceInstance(mockExecution)
-
-		// check the sequence of variable invocation
-		MockitoDebuggerImpl preDebugger = new MockitoDebuggerImpl()
-		preDebugger.printInvocations(mockExecution)
-
-		verify(mockExecution, atLeast(1)).getVariable("isDebugLogEnabled")
-		verify(mockExecution).setVariable("prefix", "GENPS_")
-
-	//	execution.getVariable("isDebugLogEnabled")
-
-
-		verify(mockExecution).setVariable("GENPS_serviceInstanceData","f70e927b-6087-4974-9ef8-c5e4d5847ca4")
-
-		String serviceInstancepayload = """<service-instance xmlns="http://org.onap.so.aai.inventory/v7">f70e927b-6087-4974-9ef8-c5e4d5847ca4
-			</service-instance>""" as String
-		verify(mockExecution).setVariable("GENPS_serviceInstancePayload",serviceInstancepayload)
-
-		String serviceInstanceAaiPath = "http://localhost:8090/aai/v7/business/customers/customer/1604-MVM-26/service-subscriptions/service-subscription/SDN-ETHERNET-INTERNET/service-instances/service-instance/MIS%252F1604%252F0026%252FSW_INTERNET"
-		verify(mockExecution).setVariable("GENPS_putServiceInstanceAaiPath", serviceInstanceAaiPath)
-
-		int responseCode = 404
-		verify(mockExecution).setVariable("GENPS_putServiceInstanceResponseCode", responseCode)
-
-		String aaiResponse = ""
-		verify(mockExecution).setVariable("GENPS_putServiceInstanceResponse", aaiResponse)
-
-		verify(mockExecution).setVariable("GENPS_SuccessIndicator", false)
-
-
-	}
-
-
-	private ExecutionEntity setupMock() {
-
-		ProcessDefinition mockProcessDefinition = mock(ProcessDefinition.class)
-		when(mockProcessDefinition.getKey()).thenReturn("PutServiceInstance")
-		RepositoryService mockRepositoryService = mock(RepositoryService.class)
-		when(mockRepositoryService.getProcessDefinition()).thenReturn(mockProcessDefinition)
-		when(mockRepositoryService.getProcessDefinition().getKey()).thenReturn("PutServiceInstance")
-		when(mockRepositoryService.getProcessDefinition().getId()).thenReturn("100")
-		ProcessEngineServices mockProcessEngineServices = mock(ProcessEngineServices.class)
-		when(mockProcessEngineServices.getRepositoryService()).thenReturn(mockRepositoryService)
-
-		ExecutionEntity mockExecution = mock(ExecutionEntity.class)
-		// Initialize prerequisite variables
-
-		when(mockExecution.getId()).thenReturn("100")
-		when(mockExecution.getProcessDefinitionId()).thenReturn("PutServiceInstance")
-		when(mockExecution.getProcessInstanceId()).thenReturn("PutServiceInstance")
-		when(mockExecution.getProcessEngineServices()).thenReturn(mockProcessEngineServices)
-		when(mockExecution.getProcessEngineServices().getRepositoryService().getProcessDefinition(mockExecution.getProcessDefinitionId())).thenReturn(mockProcessDefinition)
-
-		return mockExecution
-	}
-
-}
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getGenericVnfByNameResponse.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getGenericVnfByNameResponse.xml
deleted file mode 100644
index 7c87987..0000000
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getGenericVnfByNameResponse.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<generic-vnfs xmlns="http://com.aai.inventory/v3">
-         <generic-vnf>
-            <vnf-id>2f1cc940-455f-4ee2-9411-a7899cd4f124</vnf-id>
-            <vnf-name>testVnfName123</vnf-name>
-            <vnf-type>mmsc-capacity</vnf-type>
-            <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
-            <equipment-role>vMMSC</equipment-role>
-            <orchestration-status>pending-create</orchestration-status>
-            <resource-version>testReVer123</resource-version>
-            <relationship-list>
-               <relationship>
-                  <related-to>nothing</related-to>
-                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/c597ab81-fece-49f4-a4f5-710cebb13c29/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>c597ab81-fece-49f4-a4f5-710cebb13c29</relationship-value>
-                  </relationship-data>
-               </relationship>
-            </relationship-list>
-            <l-interfaces/>
-            <lag-interfaces/>
-         </generic-vnf>
-      </generic-vnfs>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getGenericVnfResponse.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getGenericVnfResponse.xml
deleted file mode 100644
index 0b5a822..0000000
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getGenericVnfResponse.xml
+++ /dev/null
@@ -1,90 +0,0 @@
-<generic-vnfs xmlns="http://com.aai.inventory/v3">
-         <generic-vnf>
-            <vnf-id>2f1cc940-455f-4ee2-9411-a7899cd4f124</vnf-id>
-            <vnf-name>testVnfName123</vnf-name>
-            <vnf-type>mmsc-capacity</vnf-type>
-            <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
-            <equipment-role>vMMSC</equipment-role>
-            <orchestration-status>pending-create</orchestration-status>
-            <relationship-list>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/c597ab81-fece-49f4-a4f5-710cebb13c29/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>c597ab81-fece-49f4-a4f5-710cebb13c29</relationship-value>
-                  </relationship-data>
-               </relationship>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/53956c91-6e5e-49aa-88dd-535f57e66e70/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>53956c91-6e5e-49aa-88dd-535f57e66e70</relationship-value>
-                  </relationship-data>
-               </relationship>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/44e0d9e0-9334-4ec6-9344-07a96dac629f/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>44e0d9e0-9334-4ec6-9344-07a96dac629f</relationship-value>
-                  </relationship-data>
-               </relationship>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/ac49d99b-5daf-4624-9f8e-188b126ea166/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>ac49d99b-5daf-4624-9f8e-188b126ea166</relationship-value>
-                  </relationship-data>
-               </relationship>
-            </relationship-list>
-            <l-interfaces/>
-            <lag-interfaces/>
-         </generic-vnf>
-         <generic-vnf>
-            <vnf-id>802767b3-18a6-4432-96db-25522786aee0</vnf-id>
-            <vnf-name>ZRDM1MMSC03</vnf-name>
-            <vnf-type>mmsc-capacity</vnf-type>
-            <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
-            <equipment-role>vMMSC</equipment-role>
-            <orchestration-status>pending-create</orchestration-status>
-            <relationship-list>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/c597ab81-fece-49f4-a4f5-710cebb13c29/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>c597ab81-fece-49f4-a4f5-710cebb13c29</relationship-value>
-                  </relationship-data>
-               </relationship>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/53956c91-6e5e-49aa-88dd-535f57e66e70/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>53956c91-6e5e-49aa-88dd-535f57e66e70</relationship-value>
-                  </relationship-data>
-               </relationship>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/44e0d9e0-9334-4ec6-9344-07a96dac629f/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>44e0d9e0-9334-4ec6-9344-07a96dac629f</relationship-value>
-                  </relationship-data>
-               </relationship>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/ac49d99b-5daf-4624-9f8e-188b126ea166/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>ac49d99b-5daf-4624-9f8e-188b126ea166</relationship-value>
-                  </relationship-data>
-               </relationship>
-            </relationship-list>
-            <l-interfaces/>
-            <lag-interfaces/>
-         </generic-vnf>
-      </generic-vnfs>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getGenericVnfResponse_hasRelationships.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getGenericVnfResponse_hasRelationships.xml
deleted file mode 100644
index 0b5a822..0000000
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getGenericVnfResponse_hasRelationships.xml
+++ /dev/null
@@ -1,90 +0,0 @@
-<generic-vnfs xmlns="http://com.aai.inventory/v3">
-         <generic-vnf>
-            <vnf-id>2f1cc940-455f-4ee2-9411-a7899cd4f124</vnf-id>
-            <vnf-name>testVnfName123</vnf-name>
-            <vnf-type>mmsc-capacity</vnf-type>
-            <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
-            <equipment-role>vMMSC</equipment-role>
-            <orchestration-status>pending-create</orchestration-status>
-            <relationship-list>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/c597ab81-fece-49f4-a4f5-710cebb13c29/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>c597ab81-fece-49f4-a4f5-710cebb13c29</relationship-value>
-                  </relationship-data>
-               </relationship>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/53956c91-6e5e-49aa-88dd-535f57e66e70/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>53956c91-6e5e-49aa-88dd-535f57e66e70</relationship-value>
-                  </relationship-data>
-               </relationship>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/44e0d9e0-9334-4ec6-9344-07a96dac629f/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>44e0d9e0-9334-4ec6-9344-07a96dac629f</relationship-value>
-                  </relationship-data>
-               </relationship>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/ac49d99b-5daf-4624-9f8e-188b126ea166/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>ac49d99b-5daf-4624-9f8e-188b126ea166</relationship-value>
-                  </relationship-data>
-               </relationship>
-            </relationship-list>
-            <l-interfaces/>
-            <lag-interfaces/>
-         </generic-vnf>
-         <generic-vnf>
-            <vnf-id>802767b3-18a6-4432-96db-25522786aee0</vnf-id>
-            <vnf-name>ZRDM1MMSC03</vnf-name>
-            <vnf-type>mmsc-capacity</vnf-type>
-            <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
-            <equipment-role>vMMSC</equipment-role>
-            <orchestration-status>pending-create</orchestration-status>
-            <relationship-list>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/c597ab81-fece-49f4-a4f5-710cebb13c29/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>c597ab81-fece-49f4-a4f5-710cebb13c29</relationship-value>
-                  </relationship-data>
-               </relationship>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/53956c91-6e5e-49aa-88dd-535f57e66e70/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>53956c91-6e5e-49aa-88dd-535f57e66e70</relationship-value>
-                  </relationship-data>
-               </relationship>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/44e0d9e0-9334-4ec6-9344-07a96dac629f/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>44e0d9e0-9334-4ec6-9344-07a96dac629f</relationship-value>
-                  </relationship-data>
-               </relationship>
-               <relationship>
-                  <related-to>l3-network</related-to>
-                  <related-link>https://aai-app-e2e.test.com:8443/aai/v3/network/l3-networks/l3-network/ac49d99b-5daf-4624-9f8e-188b126ea166/</related-link>
-                  <relationship-data>
-                     <relationship-key>l3-network.network-id</relationship-key>
-                     <relationship-value>ac49d99b-5daf-4624-9f8e-188b126ea166</relationship-value>
-                  </relationship-data>
-               </relationship>
-            </relationship-list>
-            <l-interfaces/>
-            <lag-interfaces/>
-         </generic-vnf>
-      </generic-vnfs>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getSIUrlById.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getSIUrlById.xml
deleted file mode 100644
index d0fccd8..0000000
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getSIUrlById.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-    <search-results xmlns="http://com.aai.inventory">
-         <result-data>
-            <resource-type>service-instance</resource-type>
-            <resource-link>https://aai-ext1.test.com:8443/aai/v7/business/customers/customer/SDN-ETHERNET-INTERNET/service-subscriptions/service-subscription/123456789/service-instances/service-instance/MIS%252F1604%252F0026%252FSW_INTERNET</resource-link>
-         </result-data>
-      </search-results>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getSIUrlByName.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getSIUrlByName.xml
deleted file mode 100644
index d0fccd8..0000000
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getSIUrlByName.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-    <search-results xmlns="http://com.aai.inventory">
-         <result-data>
-            <resource-type>service-instance</resource-type>
-            <resource-link>https://aai-ext1.test.com:8443/aai/v7/business/customers/customer/SDN-ETHERNET-INTERNET/service-subscriptions/service-subscription/123456789/service-instances/service-instance/MIS%252F1604%252F0026%252FSW_INTERNET</resource-link>
-         </result-data>
-      </search-results>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getSIUrlByNameMultiCustomer.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getSIUrlByNameMultiCustomer.xml
deleted file mode 100644
index fce47fc..0000000
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getSIUrlByNameMultiCustomer.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<search-results xmlns="http://org.openecomp.aai.inventory/v11">
-    <result-data>
-        <resource-type>service-instance</resource-type>
-        <resource-link>/aai/v11/business/customers/customer/AbcBank/service-subscriptions/service-subscription/ABC-ST/service-instances/service-instance/MIS%252F1604%252F0026%252FSW_INTERNET</resource-link>
-    </result-data>
-    <result-data>
-        <resource-type>service-instance</resource-type>
-        <resource-link>/aai/v11/business/customers/customer/XyCorporation/service-subscriptions/service-subscription/XY-ST/service-instances/service-instance/MIS%252F1604%252F0026%252FSW_INTERNET</resource-link>
-    </result-data>
-</search-results>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getServiceInstance.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getServiceInstance.xml
deleted file mode 100644
index e377c704..0000000
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getServiceInstance.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<service-instance>
-               <service-instance-id>MIS/1604/0026/SW_INTERNET</service-instance-id>
-               <resource-version>123456789</resource-version>
-               <relationship-list>
-                  <relationship>
-                     <related-to>cvlan-tag</related-to>
-                     <related-link>https://aai-ext1.test.com:8443/aai/v2/network/vces/vce/832bace2-3fb0-49e0-a6a4-07c47223c535/port-groups/port-group/slcp1447vbc.ipag/cvlan-tags/cvlan-tag/2003/</related-link>
-                     <relationship-data>
-                        <relationship-key>cvlan-tag.cvlan-tag</relationship-key>
-                        <relationship-value>2003</relationship-value>
-                     </relationship-data>
-                     <relationship-data>
-                        <relationship-key>port-group.interface-id</relationship-key>
-                        <relationship-value>slcp1447vbc.ipag</relationship-value>
-                     </relationship-data>
-                     <relationship-data>
-                        <relationship-key>vce.vnf-id</relationship-key>
-                        <relationship-value>832bace2-3fb0-49e0-a6a4-07c47223c535</relationship-value>
-                     </relationship-data>
-                  </relationship>
-                  <relationship>
-                     <related-to>vce</related-to>
-					 <related-link>https://aai-ext1.test.com:8443/aai/v2/network/vces/vce/832bace2-3fb0-49e0-a6a4-07c47223c535/</related-link>
-                     <relationship-data>
-                        <relationship-key>vce.vnf-id</relationship-key>
-                        <relationship-value>832bace2-3fb0-49e0-a6a4-07c47223c535</relationship-value>
-                     </relationship-data>
-                  </relationship>
-               </relationship-list>
-            </service-instance>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getServiceSubscription.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getServiceSubscription.xml
deleted file mode 100644
index 52e75d9..0000000
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getServiceSubscription.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<service-subscription xmlns="http://com.aai.inventory">
-     <service-type>SDN-ETHERNET-INTERNET</service-type>
-     <resource-version>1234</resource-version>
-		<service-instance>
-               <service-instance-id>MIS/1604/0026/SW_INTERNET</service-instance-id>
-               <resource-version>123456789</resource-version>
-               <relationship-list>
-                  <relationship>
-                     <related-to>cvlan-tag</related-to>
-                     <related-link>https://aai-ext1.test.com:8443/aai/v2/network/vces/vce/832bace2-3fb0-49e0-a6a4-07c47223c535/port-groups/port-group/slcp1447vbc.ipag/cvlan-tags/cvlan-tag/2003/</related-link>
-                     <relationship-data>
-                        <relationship-key>cvlan-tag.cvlan-tag</relationship-key>
-                        <relationship-value>2003</relationship-value>
-                     </relationship-data>
-                     <relationship-data>
-                        <relationship-key>port-group.interface-id</relationship-key>
-                        <relationship-value>slcp1447vbc.ipag</relationship-value>
-                     </relationship-data>
-                     <relationship-data>
-                        <relationship-key>vce.vnf-id</relationship-key>
-                        <relationship-value>832bace2-3fb0-49e0-a6a4-07c47223c535</relationship-value>
-                     </relationship-data>
-                  </relationship>
-                  <relationship>
-                     <related-to>vce</related-to>
-					 <related-link>https://aai-ext1.test.com:8443/aai/v2/network/vces/vce/832bace2-3fb0-49e0-a6a4-07c47223c535/</related-link>
-                     <relationship-data>
-                        <relationship-key>vce.vnf-id</relationship-key>
-                        <relationship-value>832bace2-3fb0-49e0-a6a4-07c47223c535</relationship-value>
-                     </relationship-data>
-                  </relationship>
-               </relationship-list>
-            </service-instance>
-      </service-subscription>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getVceByNameResponse.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getVceByNameResponse.xml
deleted file mode 100644
index b55d519..0000000
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getVceByNameResponse.xml
+++ /dev/null
@@ -1,97 +0,0 @@
-<vce xmlns="http://com.aai.inventory">
-         <vnf-id>1936628a-d22f-4943-8587-a57bab2ece7a</vnf-id>
-         <vnf-name>testVnfName123</vnf-name>
-         <vnf-name2>US0112SLCP1VBRT076</vnf-name2>
-         <vnf-type>esx-vce</vnf-type>
-         <prov-status>NVTPROV</prov-status>
-         <orchestration-status>created</orchestration-status>
-         <resource-version>0000020</resource-version>
-         <heat-stack-id>slcp1476vbc/94a3c72b-94d5-444b-9a1f-647a36c2181d</heat-stack-id>
-         <mso-catalog-key/>
-         <vpe-id>VPESAT-mtanjrsv126</vpe-id>
-         <ipv4-oam-address>135.21.249.160</ipv4-oam-address>
-         <port-groups>
-            <port-group>
-               <interface-id>slcp1476vbc.vpe</interface-id>
-               <neutron-network-id>e7568706-a2a9-45f8-aef8-95a0e2910953</neutron-network-id>
-               <neutron-network-name>dvspg-VCE_VPE-slcp1476vbc</neutron-network-name>
-               <interface-role>Internet</interface-role>
-               <port-group-name>dvspg-VCE_VPE-slcp1476vbc</port-group-name>
-               <resource-version>0000020</resource-version>
-               <switch-name>dvs-slcp1-01</switch-name>
-               <orchestration-status>created</orchestration-status>
-               <heat-stack-id>dvspg-VCE_VPE-slcp1476vbc/c1299f74-da35-4228-b1e0-d2fd07176196</heat-stack-id>
-               <mso-catalog-key/>
-               <cvlan-tags>
-                  <cvlan-tag-entry>
-                     <cvlan-tag>3012</cvlan-tag>
-                     <resource-version>0000020</resource-version>
-                  </cvlan-tag-entry>
-               </cvlan-tags>
-            </port-group>
-            <port-group>
-               <interface-id>slcp1476vbc.ipag</interface-id>
-               <neutron-network-id>3477ddb6-b925-4971-ab62-c84b69634c49</neutron-network-id>
-               <neutron-network-name>dvspg-IPAG_VCE-slcp1476vbc</neutron-network-name>
-               <interface-role>Customer</interface-role>
-               <port-group-name>dvspg-IPAG_VCE-slcp1476vbc</port-group-name>
-               <switch-name>dvs-slcp1-01</switch-name>
-               <resource-version>0000020</resource-version>
-               <orchestration-status>created</orchestration-status>
-               <heat-stack-id>dvspg-IPAG_VCE-slcp1476vbc/1e9c033a-2eef-47f5-9d48-98e0b59538e7</heat-stack-id>
-               <mso-catalog-key/>
-               <cvlan-tags>
-                  <cvlan-tag-entry>
-                     <cvlan-tag>2003</cvlan-tag>
-                     <resource-version>0000020</resource-version>
-                  </cvlan-tag-entry>
-               </cvlan-tags>
-            </port-group>
-         </port-groups>
-         <relationship-list>
-            <relationship>
-               <related-to>service-instance</related-to>
-               <related-link>https://aai-ext1.test.com:8443/aai/v2/business/customers/customer/011216-1602-SDNC001/service-subscriptions/service-subscription/SDN-ETHERNET-INTERNET/service-instances/service-instance/SDNC%2FVLXM%2F0112001%2F%2FSW_INTERNET/</related-link>
-               <relationship-data>
-                  <relationship-key>service-instance.service-instance-id</relationship-key>
-                  <relationship-value>SDNC/VLXM/0112001//SW_INTERNET</relationship-value>
-               </relationship-data>
-               <relationship-data>
-                  <relationship-key>service-subscription.service-type</relationship-key>
-                  <relationship-value>SDN-ETHERNET-INTERNET</relationship-value>
-               </relationship-data>
-               <relationship-data>
-                  <relationship-key>customer.global-customer-id</relationship-key>
-                  <relationship-value>011216-1602-SDNC001</relationship-value>
-               </relationship-data>
-            </relationship>
-            <relationship>
-               <related-to>vserver</related-to>
-               <related-link>https://aai-ext1.test.com:8443/aai/servers/v2/3d5f3fe23821416fac2b69af65248c74/vservers/ecab47d5-3450-4507-ada9-2b3c58485c51/</related-link>
-               <relationship-data>
-                  <relationship-key>vserver.vserver-id</relationship-key>
-                  <relationship-value>ecab47d5-3450-4507-ada9-2b3c58485c51</relationship-value>
-               </relationship-data>
-               <relationship-data>
-                  <relationship-key>tenant.tenant-id</relationship-key>
-                  <relationship-value>3d5f3fe23821416fac2b69af65248c74</relationship-value>
-               </relationship-data>
-            </relationship>
-            <relationship>
-               <related-to>complex</related-to>
-               <related-link>https://aai-ext1.test.com:8443/aai/v2/cloud-infrastructure/complexes/complex/MDTWNJ21A4/</related-link>
-               <relationship-data>
-                  <relationship-key>complex.physical-location-id</relationship-key>
-                  <relationship-value>MDTWNJ21A4</relationship-value>
-               </relationship-data>
-            </relationship>
-            <relationship>
-               <related-to>availability-zone</related-to>
-               <related-link>https://aai-ext1.test.com:8443/aai/v2/cloud-infrastructure/availability-zones/availability-zone/slcp1-esx-az01/</related-link>
-               <relationship-data>
-                  <relationship-key>availability-zone.availability-zone-name</relationship-key>
-                  <relationship-value>slcp1-esx-az01</relationship-value>
-               </relationship-data>
-            </relationship>
-         </relationship-list>
-      </vce>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getVceResponse.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getVceResponse.xml
deleted file mode 100644
index e5f98bf..0000000
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericFlows/getVceResponse.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-<vce xmlns="http://com.aai.inventory">
-         <vnf-id>1936628a-d22f-4943-8587-a57bab2ece7a</vnf-id>
-         <vnf-name>testVnfName123</vnf-name>
-         <vnf-name2>US0112SLCP1VBRT076</vnf-name2>
-         <vnf-type>esx-vce</vnf-type>
-         <prov-status>NVTPROV</prov-status>
-         <orchestration-status>created</orchestration-status>
-         <heat-stack-id>slcp1476vbc/94a3c72b-94d5-444b-9a1f-647a36c2181d</heat-stack-id>
-         <mso-catalog-key/>
-         <vpe-id>VPESAT-mtanjrsv126</vpe-id>
-         <ipv4-oam-address>135.21.249.160</ipv4-oam-address>
-         <port-groups>
-            <port-group>
-               <interface-id>slcp1476vbc.vpe</interface-id>
-               <neutron-network-id>e7568706-a2a9-45f8-aef8-95a0e2910953</neutron-network-id>
-               <neutron-network-name>dvspg-VCE_VPE-slcp1476vbc</neutron-network-name>
-               <interface-role>Internet</interface-role>
-               <port-group-name>dvspg-VCE_VPE-slcp1476vbc</port-group-name>
-               <switch-name>dvs-slcp1-01</switch-name>
-               <orchestration-status>created</orchestration-status>
-               <heat-stack-id>dvspg-VCE_VPE-slcp1476vbc/c1299f74-da35-4228-b1e0-d2fd07176196</heat-stack-id>
-               <mso-catalog-key/>
-               <cvlan-tags>
-                  <cvlan-tag-entry>
-                     <cvlan-tag>3012</cvlan-tag>
-                  </cvlan-tag-entry>
-               </cvlan-tags>
-            </port-group>
-            <port-group>
-               <interface-id>slcp1476vbc.ipag</interface-id>
-               <neutron-network-id>3477ddb6-b925-4971-ab62-c84b69634c49</neutron-network-id>
-               <neutron-network-name>dvspg-IPAG_VCE-slcp1476vbc</neutron-network-name>
-               <interface-role>Customer</interface-role>
-               <port-group-name>dvspg-IPAG_VCE-slcp1476vbc</port-group-name>
-               <switch-name>dvs-slcp1-01</switch-name>
-               <orchestration-status>created</orchestration-status>
-               <heat-stack-id>dvspg-IPAG_VCE-slcp1476vbc/1e9c033a-2eef-47f5-9d48-98e0b59538e7</heat-stack-id>
-               <mso-catalog-key/>
-               <cvlan-tags>
-                  <cvlan-tag-entry>
-                     <cvlan-tag>2003</cvlan-tag>
-                  </cvlan-tag-entry>
-               </cvlan-tags>
-            </port-group>
-         </port-groups>
-         <relationship-list>
-            <relationship>
-               <related-to>service-instance</related-to>
-               <related-link>https://aai-ext1.test.com:8443/aai/v2/business/customers/customer/011216-1602-SDNC001/service-subscriptions/service-subscription/SDN-ETHERNET-INTERNET/service-instances/service-instance/SDNC%2FVLXM%2F0112001%2F%2FSW_INTERNET/</related-link>
-               <relationship-data>
-                  <relationship-key>service-instance.service-instance-id</relationship-key>
-                  <relationship-value>SDNC/VLXM/0112001//SW_INTERNET</relationship-value>
-               </relationship-data>
-               <relationship-data>
-                  <relationship-key>service-subscription.service-type</relationship-key>
-                  <relationship-value>SDN-ETHERNET-INTERNET</relationship-value>
-               </relationship-data>
-               <relationship-data>
-                  <relationship-key>customer.global-customer-id</relationship-key>
-                  <relationship-value>011216-1602-SDNC001</relationship-value>
-               </relationship-data>
-            </relationship>
-            <relationship>
-               <related-to>vserver</related-to>
-               <related-link>https://aai-ext1.test.com:8443/aai/servers/v2/3d5f3fe23821416fac2b69af65248c74/vservers/ecab47d5-3450-4507-ada9-2b3c58485c51/</related-link>
-               <relationship-data>
-                  <relationship-key>vserver.vserver-id</relationship-key>
-                  <relationship-value>ecab47d5-3450-4507-ada9-2b3c58485c51</relationship-value>
-               </relationship-data>
-               <relationship-data>
-                  <relationship-key>tenant.tenant-id</relationship-key>
-                  <relationship-value>3d5f3fe23821416fac2b69af65248c74</relationship-value>
-               </relationship-data>
-            </relationship>
-            <relationship>
-               <related-to>complex</related-to>
-               <related-link>https://aai-ext1.test.com:8443/aai/v2/cloud-infrastructure/complexes/complex/MDTWNJ21A4/</related-link>
-               <relationship-data>
-                  <relationship-key>complex.physical-location-id</relationship-key>
-                  <relationship-value>MDTWNJ21A4</relationship-value>
-               </relationship-data>
-            </relationship>
-            <relationship>
-               <related-to>availability-zone</related-to>
-               <related-link>https://aai-ext1.test..com:8443/aai/v2/cloud-infrastructure/availability-zones/availability-zone/slcp1-esx-az01/</related-link>
-               <relationship-data>
-                  <relationship-key>availability-zone.availability-zone-name</relationship-key>
-                  <relationship-value>slcp1-esx-az01</relationship-value>
-               </relationship-data>
-            </relationship>
-         </relationship-list>
-      </vce>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericPutServiceInstance/GenericPutServiceInstance_PutServiceInstance_AAIResponse_Success.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericPutServiceInstance/GenericPutServiceInstance_PutServiceInstance_AAIResponse_Success.xml
deleted file mode 100644
index eedbda9..0000000
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericPutServiceInstance/GenericPutServiceInstance_PutServiceInstance_AAIResponse_Success.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<rest:RESTResponse xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"
-                   statusCode="200">
-   <rest:headers>
-      <rest:header name="Date" value="Thu,10 Mar 2016 00:01:18 GMT"/>
-      <rest:header name="Content-Length" value="0"/>
-      <rest:header name="Expires" value="Thu,01 Jan 1970 00:00:00 UTC"/>
-      <rest:header name="X-AAI-TXID" value="mtcnjv9aaas03-20160310-00:01:18:551-132672"/>
-      <rest:header name="Server" value="Apache-Coyote/1.1"/>
-      <rest:header name="Cache-Control" value="private"/>
-   </rest:headers>
-</rest:RESTResponse>
\ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericPutServiceInstance/aaiFault.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericPutServiceInstance/aaiFault.xml
deleted file mode 100644
index 66ed8f5..0000000
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/GenericPutServiceInstance/aaiFault.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<Fault>
-<requestError>
-<serviceException>
-<messageId>SVC3002</messageId>
-<text>Error writing output performing %1 on %2 (msg=%3) (ec=%4)</text>
-<variables>
-<variable>PUTcustomer</variable>
-<variable>SubName01</variable>
-<variable>Unexpected error reading/updating database:Adding this property for key [service-instance-id] and value [USSTU2CFCNC0101UJZZ01] violates a uniqueness constraint [service-instance-id]</variable>
-<variable>ERR.5.4.5105</variable>
-</variables>
-</serviceException>
-</requestError>
-</Fault>
\ No newline at end of file
diff --git a/bpmn/mso-infrastructure-bpmn/src/test/java/org/onap/so/bpmn/common/GenericGetServiceIT.java b/bpmn/mso-infrastructure-bpmn/src/test/java/org/onap/so/bpmn/common/GenericGetServiceIT.java
deleted file mode 100644
index 38d05fe..0000000
--- a/bpmn/mso-infrastructure-bpmn/src/test/java/org/onap/so/bpmn/common/GenericGetServiceIT.java
+++ /dev/null
@@ -1,560 +0,0 @@
-/*
- * © 2014 AT&T Intellectual Property. All rights reserved. Used under license from AT&T Intellectual Property.
- */
-/*- 
- * ============LICENSE_START======================================================= 
- * ONAP - SO 
- * ================================================================================ 
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
- * ================================================================================ 
- * Licensed under the Apache License, Version 2.0 (the "License"); 
- * you may not use this file except in compliance with the License. 
- * You may obtain a copy of the License at 
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0 
- * 
- * Unless required by applicable law or agreed to in writing, software 
- * distributed under the License is distributed on an "AS IS" BASIS, 
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
- * See the License for the specific language governing permissions and 
- * limitations under the License. 
- * ============LICENSE_END========================================================= 
- */ 
-
-package org.onap.so.bpmn.common;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.onap.so.bpmn.mock.StubResponseAAI.MockGetServiceInstance;
-import static org.onap.so.bpmn.mock.StubResponseAAI.MockGetServiceInstance_404;
-import static org.onap.so.bpmn.mock.StubResponseAAI.MockGetServiceInstance_500;
-import static org.onap.so.bpmn.mock.StubResponseAAI.MockGetServiceSubscription;
-import static org.onap.so.bpmn.mock.StubResponseAAI.MockNodeQueryServiceInstanceById;
-import static org.onap.so.bpmn.mock.StubResponseAAI.MockNodeQueryServiceInstanceById_404;
-import static org.onap.so.bpmn.mock.StubResponseAAI.MockNodeQueryServiceInstanceById_500;
-import static org.onap.so.bpmn.mock.StubResponseAAI.MockNodeQueryServiceInstanceByName;
-import static org.onap.so.bpmn.mock.StubResponseAAI.MockNodeQueryServiceInstanceByName_404;
-import static org.onap.so.bpmn.mock.StubResponseAAI.MockNodeQueryServiceInstanceByName_500;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
-
-import org.junit.Test;
-import org.onap.so.BaseIntegrationTest;
-
-
-/**
- * Unit Test for the GenericGetService Sub Flow
- */
-
-public class GenericGetServiceIT extends BaseIntegrationTest {
-
-
-	@Test
-	public void testGenericGetService_success_serviceInstance() throws Exception{
-		MockGetServiceInstance("SDN-ETHERNET-INTERNET", "123456789", "MIS%252F1604%252F0026%252FSW_INTERNET", "GenericFlows/getServiceInstance.xml");
-		Map<String, Object> variables = new HashMap<>();
-		setVariablesInstance(variables, "MIS%2F1604%2F0026%2FSW_INTERNET", null, "SDN-ETHERNET-INTERNET", "123456789");
-		String processId = invokeSubProcess( "GenericGetService", variables);
-		
-		String successIndicator = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_SuccessIndicator",processId);
-		String found = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_FoundIndicator",processId);
-		String obtainUrl = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainObjectsUrl",processId);
-		String byName = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainServiceInstanceUrlByName",processId);
-		String response = BPMNUtil.getVariable(processEngine, "GenericGetService", "WorkflowResponse",processId);
-		String workflowException = BPMNUtil.getVariable(processEngine, "GenericGetService", "WorkflowException",processId);
-		assertEquals("true", successIndicator);
-		assertEquals("true", found);
-		assertEquals("false", obtainUrl);
-		assertEquals("false", byName);
-		assertNotNull(response);
-		assertEquals(null, workflowException);
-	}
-
-
-	@Test
-	
-	public void testGenericGetService_success_serviceSubscription() throws Exception{
-
-		MockGetServiceSubscription("1604-MVM-26", "SDN-ETHERNET-INTERNET", "GenericFlows/getServiceSubscription.xml");
-
-		Map<String, Object> variables = new HashMap<>();
-		setVariablesSubscription(variables, "", null , "1604-MVM-26", "SDN-ETHERNET-INTERNET");
-
-		String processId = invokeSubProcess( "GenericGetService", variables);
-		
-
-		String successIndicator = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_SuccessIndicator",processId);
-		String found = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_FoundIndicator",processId);
-		String obtainUrl = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainObjectsUrl",processId);
-		String byName = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainServiceInstanceUrlByName",processId);
-		String response = BPMNUtil.getVariable(processEngine, "GenericGetService", "WorkflowResponse",processId);
-		String workflowException = BPMNUtil.getVariable(processEngine, "GenericGetService", "WorkflowException",processId);
-
-		assertEquals("true", successIndicator);
-		assertEquals("true", found);
-		assertEquals("false", obtainUrl);
-		assertEquals("false", byName);
-		assertNotNull(response);
-		assertEquals(null, workflowException);
-	}
-
-	@Test
-	
-	public void testGenericGetService_success_serviceInstance_byName() throws Exception{
-
-		MockNodeQueryServiceInstanceByName("1604-MVM-26", "GenericFlows/getSIUrlByName.xml");
-		MockGetServiceInstance("SDN-ETHERNET-INTERNET", "123456789", "MIS%252F1604%252F0026%252FSW_INTERNET", "GenericFlows/getServiceInstance.xml");
-
-		Map<String, Object> variables = new HashMap<>();
-		setVariablesInstance(variables, null, "1604-MVM-26", null, null);
-
-		String processId = invokeSubProcess( "GenericGetService", variables);
-		
-
-		String successIndicator = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_SuccessIndicator",processId);
-		String found = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_FoundIndicator",processId);
-		String obtainUrl = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainObjectsUrl",processId);
-		String byName = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainServiceInstanceUrlByName",processId);
-		String response = BPMNUtil.getVariable(processEngine, "GenericGetService", "WorkflowResponse",processId);
-		String workflowException = BPMNUtil.getVariable(processEngine, "GenericGetService", "WorkflowException",processId);
-		String siUrlResponseCode = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainSIUrlResponseCode",processId);
-
-		assertEquals("true", successIndicator);
-		assertEquals("true", found);
-		assertEquals("true", obtainUrl);
-		assertEquals("true", byName);
-		assertNotNull(response);
-		assertEquals("200", siUrlResponseCode);
-		assertEquals(null, workflowException);
-	}
-
-	@Test
-	
-	public void testGenericGetService_success_serviceInstance_byId() throws Exception{
-
-		MockNodeQueryServiceInstanceById("MIS%2F1604%2F0026%2FSW_INTERNET", "GenericFlows/getSIUrlById.xml");
-		MockGetServiceInstance("SDN-ETHERNET-INTERNET", "123456789", "MIS%252F1604%252F0026%252FSW_INTERNET", "GenericFlows/getServiceInstance.xml");
-
-		Map<String, Object> variables = new HashMap<>();
-		setVariablesInstance(variables, "MIS%2F1604%2F0026%2FSW_INTERNET", null, null, null);
-
-		String processId = invokeSubProcess( "GenericGetService", variables);
-		
-
-		String successIndicator = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_SuccessIndicator",processId);
-		String found = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_FoundIndicator",processId);
-		String obtainUrl = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainObjectsUrl",processId);
-		String byName = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainServiceInstanceUrlByName",processId);
-		String response = BPMNUtil.getVariable(processEngine, "GenericGetService", "WorkflowResponse",processId);
-		String workflowException = BPMNUtil.getVariable(processEngine, "GenericGetService", "WorkflowException",processId);
-		String siUrlResponseCode = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_genericQueryResponseCode",processId);
-
-		assertEquals("true", successIndicator);
-		assertEquals("true", found);
-		assertEquals("true", obtainUrl);
-		assertEquals("false", byName);
-		assertNotNull(response);
-		assertEquals("200", siUrlResponseCode);
-		assertEquals(null, workflowException);
-	}
-
-	@Test
-	
-	public void testGenericGetService_success_serviceInstance_404Response() throws Exception{
-
-		MockGetServiceInstance_404("SDN-ETHERNET-INTERNET", "123456789", "MIS%252F1604%252F0026%252FSW_INTERNET");
-
-		Map<String, Object> variables = new HashMap<>();
-		setVariablesInstance(variables, "MIS%2F1604%2F0026%2FSW_INTERNET", null, "SDN-ETHERNET-INTERNET", "123456789");
-
-		String processId = invokeSubProcess( "GenericGetService", variables);
-		
-
-		String successIndicator = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_SuccessIndicator",processId);
-		String found = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_FoundIndicator",processId);
-		String obtainUrl = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainObjectsUrl",processId);
-		String byName = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainServiceInstanceUrlByName",processId);
-		String workflowException = BPMNUtil.getVariable(processEngine, "GenericGetService", "WorkflowException",processId);
-
-		assertEquals("true", successIndicator);
-		assertEquals("false", found);
-		assertEquals("false", obtainUrl);
-		assertEquals("false", byName);
-		assertEquals(null, workflowException);
-	}
-
-	@Test
-	
-	public void testGenericGetService_success_serviceSubscription404() throws Exception{
-		MockGetServiceSubscription("SDN-ETHERNET-INTERNET", "1604-MVM-26", 404);
-		
-		Map<String, Object> variables = new HashMap<>();
-		setVariablesSubscription(variables, "", "", "SDN-ETHERNET-INTERNET", "1604-MVM-26");
-
-		String processId = invokeSubProcess( "GenericGetService", variables);
-		
-
-		String successIndicator = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_SuccessIndicator",processId);
-		String found = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_FoundIndicator",processId);
-		String obtainUrl = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainObjectsUrl",processId);
-		String byName = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainServiceInstanceUrlByName",processId);
-		String response = BPMNUtil.getVariable(processEngine, "GenericGetService", "WorkflowResponse",processId);
-		String workflowException = BPMNUtil.getVariable(processEngine, "GenericGetService", "WorkflowException",processId);
-
-		assertEquals("true", successIndicator);
-		assertEquals("false", found);
-		assertEquals("false", obtainUrl);
-		assertEquals("false", byName);
-		assertNotNull(response);
-		assertEquals(null, workflowException);
-	}
-
-	@Test
-	
-	public void testGenericGetService_success_serviceInstanceByName404() throws Exception{
-
-		MockNodeQueryServiceInstanceByName_404("1604-MVM-26");
-
-		Map<String, Object> variables = new HashMap<>();
-		setVariablesInstance(variables, "", "1604-MVM-26", null, null);
-
-		String processId = invokeSubProcess( "GenericGetService", variables);
-		
-
-		String successIndicator = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_SuccessIndicator",processId);
-		String found = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_FoundIndicator",processId);
-		String obtainUrl = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainObjectsUrl",processId);
-		String byName = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainServiceInstanceUrlByName",processId);
-		String workflowException = BPMNUtil.getVariable(processEngine, "GenericGetService", "WorkflowException",processId);
-		String siUrlResponseCode = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainSIUrlResponseCode",processId);
-
-		assertEquals("true", successIndicator);
-		assertEquals("false", found);
-		assertEquals("true", obtainUrl);
-		assertEquals("true", byName);
-		assertEquals("404", siUrlResponseCode);
-		assertEquals(null, workflowException);
-	}
-
-	@Test
-	
-	public void testGenericGetService_success_serviceInstanceById404() throws Exception{
-
-		MockNodeQueryServiceInstanceById_404("MIS%2F1604%2F0026%2FSW_INTERNET");
-
-		Map<String, Object> variables = new HashMap<>();
-		setVariablesInstance(variables, "MIS%2F1604%2F0026%2FSW_INTERNET", null, null, null);
-
-		String processId = invokeSubProcess( "GenericGetService", variables);
-		
-
-		String successIndicator = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_SuccessIndicator",processId);
-		String found = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_FoundIndicator",processId);
-		String obtainUrl = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainObjectsUrl",processId);
-		String byName = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainServiceInstanceUrlByName",processId);
-		String workflowException = BPMNUtil.getVariable(processEngine, "GenericGetService", "WorkflowException",processId);
-		String siUrlResponseCode = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_genericQueryResponseCode",processId);
-
-		assertEquals("true", successIndicator);
-		assertEquals("false", found);
-		assertEquals("true", obtainUrl);
-		assertEquals("false", byName);
-		assertEquals("404", siUrlResponseCode);
-		assertEquals(null, workflowException);
-	}
-
-	@Test
-	
-	public void testGenericGetService_success_serviceInstanceEmptyResponse() throws Exception{
-
-		MockGetServiceInstance("SDN-ETHERNET-INTERNET", "123456789", "MIS%252F1604%252F0026%252FSW_INTERNET");
-
-		Map<String, Object> variables = new HashMap<>();
-		setVariablesInstance(variables, "MIS%2F1604%2F0026%2FSW_INTERNET", null, "SDN-ETHERNET-INTERNET", "123456789");
-
-		String processId = invokeSubProcess( "GenericGetService", variables);
-		
-
-		String successIndicator = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_SuccessIndicator",processId);
-		String found = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_FoundIndicator",processId);
-		String obtainUrl = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainObjectsUrl",processId);
-		String byName = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainServiceInstanceUrlByName",processId);
-		String workflowException = BPMNUtil.getVariable(processEngine, "GenericGetService", "WorkflowException",processId);
-
-		assertEquals("true", successIndicator);
-		assertEquals("false", found);
-		assertEquals("false", obtainUrl);
-		assertEquals("false", byName);
-		assertEquals(null, workflowException);
-	}
-
-	@Test
-	
-	public void testGenericGetService_success_serviceInstanceByNameEmpty() throws Exception{
-		MockNodeQueryServiceInstanceByName("1604-MVM-26", "");
-		
-		Map<String, Object> variables = new HashMap<>();
-		setVariablesInstance(variables, "", "1604-MVM-26", null, null);
-
-		String processId = invokeSubProcess( "GenericGetService", variables);
-		
-
-		String successIndicator = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_SuccessIndicator",processId);
-		String found = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_FoundIndicator",processId);
-		String obtainUrl = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainObjectsUrl",processId);
-		String byName = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainServiceInstanceUrlByName",processId);
-		String workflowException = BPMNUtil.getVariable(processEngine, "GenericGetService", "WorkflowException",processId);
-		String siUrlResponseCode = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainSIUrlResponseCode",processId);
-
-		assertEquals("true", successIndicator);
-		assertEquals("false", found);
-		assertEquals("true", obtainUrl);
-		assertEquals("true", byName);
-		assertEquals("200", siUrlResponseCode);
-		assertEquals(null, workflowException);
-	}
-
-	@Test
-	
-	public void testGenericGetService_success_serviceInstanceByIdEmpty() throws Exception{
-
-	        MockNodeQueryServiceInstanceById("MIS[%]2F1604[%]2F0026[%]2FSW_INTERNET", "");
-
-		Map<String, Object> variables = new HashMap<>();
-		setVariablesInstance(variables, "MIS%2F1604%2F0026%2FSW_INTERNET", null, null, null);
-
-		String processId = invokeSubProcess( "GenericGetService", variables);
-		
-
-		String successIndicator = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_SuccessIndicator",processId);
-		String found = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_FoundIndicator",processId);
-		String obtainUrl = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainObjectsUrl",processId);
-		String byName = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainServiceInstanceUrlByName",processId);
-		String workflowException = BPMNUtil.getVariable(processEngine, "GenericGetService", "WorkflowException",processId);
-		String siUrlResponseCode = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_genericQueryResponseCode",processId);
-
-		assertEquals("true", successIndicator);
-		assertEquals("false", found);
-		assertEquals("true", obtainUrl);
-		assertEquals("false", byName);
-		assertEquals("200", siUrlResponseCode);
-		assertEquals(null, workflowException);
-	}
-
-
-	@Test
-	
-	public void testGenericGetService_error_serviceInstanceInvalidVariables() throws Exception{
-
-		Map<String, Object> variables = new HashMap<>();
-		setVariablesInstance(variables, null, null, "SDN-ETHERNET-INTERNET", null);
-
-		String processId = invokeSubProcess( "GenericGetService", variables);
-		
-
-		String successIndicator = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_SuccessIndicator",processId);
-		String found = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_FoundIndicator",processId);
-		String workflowException = BPMNUtil.getVariable(processEngine, "GenericGetService", "WorkflowException",processId);
-		String obtainUrl = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainObjectsUrl",processId);
-		String byName = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainServiceInstanceUrlByName",processId);
-
-		String expectedWorkflowException = "WorkflowException[processKey=GenericGetService,errorCode=500,errorMessage=Incoming serviceInstanceId and serviceInstanceName are null. ServiceInstanceId or ServiceInstanceName is required to Get a service-instance.,workStep=*]";
-
-		assertEquals("false", successIndicator);
-		assertEquals("false", found);
-		assertEquals("false", obtainUrl);
-		assertEquals("false", byName);
-		assertEquals(expectedWorkflowException, workflowException);
-	}
-
-	@Test
-	
-	public void testGenericGetService_success_serviceSubscriptionInvalidVariables() throws Exception{
-
-		Map<String, Object> variables = new HashMap<>();
-		setVariablesSubscription(variables, "", "", "SDN-ETHERNET-INTERNET", null);
-
-		String processId = invokeSubProcess( "GenericGetService", variables);
-		
-
-		String successIndicator = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_SuccessIndicator",processId);
-		String found = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_FoundIndicator",processId);
-		String obtainUrl = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainObjectsUrl",processId);
-		String byName = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainServiceInstanceUrlByName",processId);
-		String workflowException = BPMNUtil.getVariable(processEngine, "GenericGetService", "WorkflowException",processId);
-
-		String expectedWorkflowException = "WorkflowException[processKey=GenericGetService,errorCode=500,errorMessage=Incoming ServiceType or GlobalCustomerId is null. These variables are required to Get a service-subscription.,workStep=*]";
-
-
-		assertEquals("false", successIndicator);
-		assertEquals("false", found);
-		assertEquals("false", obtainUrl);
-		assertEquals("false", byName);
-		assertEquals(expectedWorkflowException, workflowException);
-	}
-
-	@Test
-	
-	public void testGenericGetService_error_serviceInstance_getSIBadResponse() throws Exception{
-
-		MockGetServiceInstance_500("SDN-ETHERNET-INTERNET", "123456789", "MIS%252F1604%252F0026%252FSW_INTERNET");
-
-		Map<String, Object> variables = new HashMap<>();
-		setVariablesInstance(variables, "MIS%2F1604%2F0026%2FSW_INTERNET", "1604-MVM-26", "SDN-ETHERNET-INTERNET", "123456789");
-
-		String processId = invokeSubProcess( "GenericGetService", variables);
-		
-
-		String successIndicator = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_SuccessIndicator",processId);
-		String found = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_FoundIndicator",processId);
-		String workflowException = BPMNUtil.getVariable(processEngine, "GenericGetService", "WorkflowException",processId);
-		String obtainUrl = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainObjectsUrl",processId);
-		String byName = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainServiceInstanceUrlByName",processId);
-
-		String expectedWorkflowException = "WorkflowException[processKey=GenericGetService,errorCode=500,errorMessage=Received a bad response from AAI,workStep=*]";
-
-		assertEquals("false", successIndicator);
-		assertEquals("false", found);
-		assertEquals("false", obtainUrl);
-		assertEquals("false", byName);
-		assertEquals(expectedWorkflowException, workflowException);
-	}
-
-	@Test
-	
-	public void testGenericGetService_error_serviceInstance_getUrlByIdBadResponse() throws Exception{
-
-		MockNodeQueryServiceInstanceById_500("MIS%2F1604%2F0026%2FSW_INTERNET");
-
-		Map<String, Object> variables = new HashMap<>();
-		setVariablesInstance(variables, "MIS%2F1604%2F0026%2FSW_INTERNET", null, null, null);
-
-		String processId = invokeSubProcess( "GenericGetService", variables);
-		
-
-		String successIndicator = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_SuccessIndicator",processId);
-		String found = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_FoundIndicator",processId);
-		String workflowException = BPMNUtil.getVariable(processEngine, "GenericGetService", "WorkflowException",processId);
-		String obtainUrl = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainObjectsUrl",processId);
-		String byName = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainServiceInstanceUrlByName",processId);
-		String siUrlResponseCode = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_genericQueryResponseCode",processId);
-
-		String expectedWorkflowException = "WorkflowException[processKey=GenericGetService,errorCode=500,errorMessage=Received a bad response from AAI,workStep=*]";
-
-		assertEquals("false", successIndicator);
-		assertEquals("false", found);
-		assertEquals("true", obtainUrl);
-		assertEquals("false", byName);
-		assertEquals("500", siUrlResponseCode);
-		assertEquals(expectedWorkflowException, workflowException);
-	}
-
-	@Test
-	
-	public void testGenericGetService_error_serviceInstance_getUrlByNameBadResponse() throws Exception{
-
-		MockNodeQueryServiceInstanceByName_500("1604-MVM-26");
-
-		Map<String, Object> variables = new HashMap<>();
-		setVariablesInstance(variables, null, "1604-MVM-26", null, null);
-
-		String processId = invokeSubProcess( "GenericGetService", variables);
-		
-
-		String successIndicator = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_SuccessIndicator",processId);
-		String found = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_FoundIndicator",processId);
-		String workflowException = BPMNUtil.getVariable(processEngine, "GenericGetService", "WorkflowException",processId);
-		String obtainUrl = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainObjectsUrl",processId);
-		String byName = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainServiceInstanceUrlByName",processId);
-		String siUrlResponseCode = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainSIUrlResponseCode",processId);
-
-		String expectedWorkflowException = "WorkflowException[processKey=GenericGetService,errorCode=500,errorMessage=Received a bad response from AAI,workStep=*]";
-
-		assertEquals("false", successIndicator);
-		assertEquals("false", found);
-		assertEquals("true", obtainUrl);
-		assertEquals("true", byName);
-		assertEquals("500", siUrlResponseCode);
-		assertEquals(expectedWorkflowException, workflowException);
-	}
-
-    @Test
-    
-    public void testGenericGetService_success_serviceInstance_byNameServicePresent() throws Exception{
-
-        MockNodeQueryServiceInstanceByName("1604-MVM-26", "GenericFlows/getSIUrlByNameMultiCustomer.xml");
-        MockGetServiceInstance("AbcBank", "ABC-ST", "MIS%252F1604%252F0026%252FSW_INTERNET", "GenericFlows/getServiceInstance.xml");
-
-        Map<String, Object> variables = new HashMap<>();
-        setVariablesInstance(variables, null, "1604-MVM-26", "XyCorporation", null);
-
-        String processId = invokeSubProcess( "GenericGetService", variables);
-        
-
-        String successIndicator = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_SuccessIndicator",processId);
-        String found = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_FoundIndicator",processId);
-        String resourceLink = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_resourceLink",processId);
-        String response = BPMNUtil.getVariable(processEngine, "GenericGetService", "WorkflowResponse",processId);
-        String workflowException = BPMNUtil.getVariable(processEngine, "GenericGetService", "WorkflowException",processId);
-        String siUrlResponseCode = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainSIUrlResponseCode",processId);
-
-        assertEquals("true", successIndicator);
-        assertEquals("true", found);
-		assertNotNull(resourceLink);
-        assertNotNull(response);
-        assertEquals("200", siUrlResponseCode);
-        assertEquals(null, workflowException);
-    }
-
-	@Test
-	
-	public void testGenericGetService_success_serviceInstance_byNameServiceNotPresent() throws Exception{
-
-		MockNodeQueryServiceInstanceByName("1604-MVM-26", "GenericFlows/getSIUrlByNameMultiCustomer.xml");
-		MockGetServiceInstance("CorporationNotPresent", "123456789", "MIS%252F1604%252F0026%252FSW_INTERNET", "GenericFlows/getServiceInstance.xml");
-
-		Map<String, Object> variables = new HashMap<>();
-		setVariablesInstance(variables, null, "1604-MVM-26", "CorporationNotPresent", null);
-
-		String processId = invokeSubProcess( "GenericGetService", variables);
-		
-
-		String successIndicator = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_SuccessIndicator",processId);
-		String found = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_FoundIndicator",processId);
-		String resourceLink = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_resourceLink",processId);
-		String response = BPMNUtil.getVariable(processEngine, "GenericGetService", "WorkflowResponse",processId);
-		String workflowException = BPMNUtil.getVariable(processEngine, "GenericGetService", "WorkflowException",processId);
-		String siUrlResponseCode = BPMNUtil.getVariable(processEngine, "GenericGetService", "GENGS_obtainSIUrlResponseCode",processId);
-
-		assertEquals("true", successIndicator);
-		assertEquals("false", found);
-		assertEquals(null, resourceLink);
-		assertEquals("  ", response);
-		assertEquals("200", siUrlResponseCode);
-		assertEquals(null, workflowException);
-	}
-
-	private void setVariablesInstance(Map<String, Object> variables, String siId, String siName, String globalCustId, String serviceType) {
-		variables.put("isDebugLogEnabled", "true");
-		variables.put("GENGS_serviceInstanceId", siId);
-		variables.put("GENGS_serviceInstanceName", siName);
-		variables.put("GENGS_globalCustomerId",globalCustId);
-		variables.put("GENGS_serviceType", serviceType);
-		variables.put("GENGS_type", "service-instance");
-		variables.put("mso-request-id", UUID.randomUUID().toString());
-	}
-
-	private void setVariablesSubscription(Map<String, Object> variables, String siId, String siName, String globalCustId, String serviceType) {
-		variables.put("isDebugLogEnabled", "true");
-		variables.put("GENGS_serviceInstanceId", siId);
-		variables.put("GENGS_serviceInstanceName", siName);
-		variables.put("GENGS_globalCustomerId",globalCustId);
-		variables.put("GENGS_serviceType", serviceType);
-		variables.put("GENGS_type", "service-subscription");
-		variables.put("mso-request-id", UUID.randomUUID().toString());
-	}
-
-
-}
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCompareModelofE2EServiceInstance.groovy b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCompareModelofE2EServiceInstance.groovy
index eceba5a..3702862 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCompareModelofE2EServiceInstance.groovy
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCompareModelofE2EServiceInstance.groovy
@@ -2,14 +2,14 @@
  * ============LICENSE_START=======================================================
  * ONAP - SO
  * ================================================================================
- * Copyright (C) 2018 Huawei Technologies Co., Ltd. All rights reserved. 
+ * Copyright (C) 2018 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -20,47 +20,29 @@
 package org.onap.so.bpmn.infrastructure.scripts;
 
 import static org.apache.commons.lang3.StringUtils.*;
-import groovy.xml.XmlUtil
-import groovy.json.*
 
-import org.onap.so.bpmn.core.domain.ServiceDecomposition
-import org.onap.so.bpmn.core.domain.ServiceInstance
-import org.onap.so.bpmn.core.domain.ModelInfo
-import org.onap.so.bpmn.core.domain.Resource
-import org.onap.so.bpmn.core.domain.CompareModelsResult
-import org.onap.so.bpmn.core.domain.ResourceModelInfo
-import org.onap.so.bpmn.core.json.JsonUtils
-import org.onap.so.bpmn.common.scripts.AaiUtil
-import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
-import org.onap.so.bpmn.common.scripts.ExceptionUtil
-import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils
-import org.onap.so.bpmn.common.resource.ResourceRequestBuilder
-import org.onap.so.bpmn.core.RollbackData
-import org.onap.so.bpmn.core.WorkflowException
-import org.onap.so.rest.APIResponse;
-import org.onap.so.rest.RESTClient
-import org.onap.so.rest.RESTConfig
+import javax.ws.rs.NotFoundException
 
-
-import java.util.List
-import java.util.Map
-import java.util.UUID;
-import javax.xml.parsers.DocumentBuilder
-import javax.xml.parsers.DocumentBuilderFactory
-
+import org.apache.commons.lang3.*
 import org.camunda.bpm.engine.delegate.BpmnError
 import org.camunda.bpm.engine.delegate.DelegateExecution
-import org.json.JSONObject;
-import org.json.JSONArray;
-import org.apache.commons.lang3.*
-import org.apache.commons.codec.binary.Base64;
-import org.springframework.web.util.UriUtils;
+import org.onap.aai.domain.yang.ServiceInstance
+import org.onap.so.bpmn.common.resource.ResourceRequestBuilder
+import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
+import org.onap.so.bpmn.common.scripts.ExceptionUtil
+import org.onap.so.bpmn.core.domain.CompareModelsResult
+import org.onap.so.bpmn.core.domain.ModelInfo
+import org.onap.so.bpmn.core.domain.Resource
+import org.onap.so.bpmn.core.domain.ResourceModelInfo
+import org.onap.so.bpmn.core.json.JsonUtils
+import org.onap.so.client.aai.AAIObjectType
+import org.onap.so.client.aai.AAIResourcesClient
+import org.onap.so.client.aai.entities.AAIResultWrapper
+import org.onap.so.client.aai.entities.uri.AAIResourceUri
+import org.onap.so.client.aai.entities.uri.AAIUriFactory
 
-import org.w3c.dom.Document
-import org.w3c.dom.Element
-import org.w3c.dom.Node
-import org.w3c.dom.NodeList
-import org.xml.sax.InputSource
+import groovy.json.*
+
 /**
  * This groovy class supports the <class>DoCompareModelofE2EServiceInstance.bpmn</class> process.
  *
@@ -80,7 +62,7 @@
 
 	String Prefix="DCMPMDSI_"
 	private static final String DebugFlag = "isDebugEnabled"
-	
+
 	ExceptionUtil exceptionUtil = new ExceptionUtil()
 	JsonUtils jsonUtil = new JsonUtils()
 
@@ -94,11 +76,11 @@
 
 		execution.setVariable("prefix", Prefix)
 		//Inputs
-		
+
 		//subscriberInfo. for AAI GET
 		String globalSubscriberId = execution.getVariable("globalSubscriberId")
 		utils.log("INFO"," ***** globalSubscriberId *****" + globalSubscriberId,  isDebugEnabled)
-		
+
 		String serviceType = execution.getVariable("serviceType")
 		utils.log("INFO"," ***** serviceType *****" + serviceType,  isDebugEnabled)
 
@@ -142,85 +124,48 @@
 
 		utils.log("INFO", "Exited " + method, isDebugEnabled)
 	}
-	
-	public void postProcessAAIGET(DelegateExecution execution) {
-		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
-		utils.log("INFO"," ***** postProcessAAIGET ***** ", isDebugEnabled)
-		String msg = ""
 
+	/**
+	 * Gets the service instance from aai
+	 *
+	 * @author cb645j
+	 */
+	public void getServiceInstance(DelegateExecution execution) {
 		try {
-			String serviceInstanceId = execution.getVariable("serviceInstanceId")
-			boolean foundInAAI = execution.getVariable("GENGS_FoundIndicator")
-			String serviceType = ""
+			String serviceInstanceId = execution.getVariable('serviceInstanceId')
+			String globalSubscriberId = execution.getVariable('globalSubscriberId')
+			String serviceType = execution.getVariable('serviceType')
 
-			if(foundInAAI){
-				utils.log("INFO","Found Service-instance in AAI", isDebugEnabled)
+			AAIResourcesClient resourceClient = new AAIResourcesClient()
+			AAIResourceUri serviceInstanceUri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, globalSubscriberId, serviceType, serviceInstanceId)
+			AAIResultWrapper wrapper = resourceClient.get(serviceInstanceUri, NotFoundException.class)
 
-				String siData = execution.getVariable("GENGS_service")
-				utils.log("INFO", "SI Data", isDebugEnabled)
-				if (isBlank(siData))
-				{
-					msg = "Could not retrive ServiceInstance data from AAI, Id:" + serviceInstanceId
-					utils.log("INFO", msg, isDebugEnabled)
-					exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
-				}
-				else
-				{
-					utils.log("INFO", "SI Data" + siData, isDebugEnabled)
-					
-					// Get Template uuid and version
-					if (utils.nodeExists(siData, "model-invariant-id") && utils.nodeExists(siData, "model-version-id") ) {
-					    utils.log("INFO", "SI Data model-invariant-id and model-version-id exist", isDebugEnabled)
-						
-					    def modelInvariantId  = utils.getNodeText(siData, "model-invariant-id")
-					    def modelVersionId  = utils.getNodeText(siData, "model-version-id")
-					    
-					    // Set Original Template info
-					    execution.setVariable("model-invariant-id-original", modelInvariantId)
-					    execution.setVariable("model-version-id-original", modelVersionId)					
-					}					
-				}
-			}else{
-				boolean succInAAI = execution.getVariable("GENGS_SuccessIndicator")
-				if(!succInAAI){
-					utils.log("INFO","Error getting Service-instance from AAI", + serviceInstanceId, isDebugEnabled)
-					WorkflowException workflowException = execution.getVariable("WorkflowException")
-					utils.logAudit("workflowException: " + workflowException)
-					if(workflowException != null){
-						exceptionUtil.buildAndThrowWorkflowException(execution, workflowException.getErrorCode(), workflowException.getErrorMessage())
-					}
-					else
-					{
-						msg = "Failure in postProcessAAIGET GENGS_SuccessIndicator:" + succInAAI
-						utils.log("INFO", msg, isDebugEnabled)
-						exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg)
-					}
-				}
+			ServiceInstance si = wrapper.asBean(ServiceInstance.class)
+			execution.setVariable("model-invariant-id-original", si.getModelInvariantId())
+			execution.setVariable("model-version-id-original", si.getModelVersionId())
 
-				utils.log("INFO","Service-instance NOT found in AAI. Silent Success", isDebugEnabled)
-			}
-		}catch (BpmnError e) {
+		}catch(BpmnError e) {
 			throw e;
-		} catch (Exception ex) {
-			msg = "Exception in DoDeleteE2EServiceInstance.postProcessAAIGET. " + ex.getMessage()
-			utils.log("INFO", msg, isDebugEnabled)
+		}catch(NotFoundException e) {
+			exceptionUtil.buildAndThrowWorkflowException(execution, 404, "Service-instance does not exist AAI")
+		}catch(Exception ex) {
+			String msg = "Internal Error in getServiceInstance: " + ex.getMessage()
 			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 		}
-		msoLogger.trace("Exit postProcessAAIGET ")
 	}
 
 	public void postCompareModelVersions(DelegateExecution execution) {
 		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
 
-				
+
 		List<Resource> addResourceList = execution.getVariable("addResourceList")
 		List<Resource> delResourceList = execution.getVariable("delResourceList")
-		
+
 		CompareModelsResult cmpResult = new CompareModelsResult()
 		List<ResourceModelInfo> addedResourceList = new ArrayList<ResourceModelInfo>()
 		List<ResourceModelInfo> deletedResourceList = new ArrayList<ResourceModelInfo>()
-		
-		
+
+
 		String serviceModelUuid = execution.getVariable("model-version-id-target")
         List<String> requestInputs = new ArrayList<String>()
 		ModelInfo mi = null;
@@ -233,11 +178,11 @@
 			rmodel.setResourceUuid(mi.getModelUuid())
 			rmodel.setResourceCustomizationUuid(resourceCustomizationUuid)
 			addedResourceList.add(rmodel)
-			
+
 			Map<String, Object> resourceParameters = ResourceRequestBuilder.buildResouceRequest(serviceModelUuid, resourceCustomizationUuid, null)
-			requestInputs.addAll(resourceParameters.keySet())			
+			requestInputs.addAll(resourceParameters.keySet())
 		}
-		
+
 		for(Resource rc : delResourceList) {
 			mi = rc.getModelInfo()
 			String resourceCustomizationUuid = mi.getModelCustomizationUuid()
@@ -246,15 +191,15 @@
 			rmodel.setResourceInvariantUuid(mi.getModelInvariantUuid())
 			rmodel.setResourceUuid(mi.getModelUuid())
 			rmodel.setResourceCustomizationUuid(resourceCustomizationUuid)
-			deletedResourceList.add(rmodel)			
+			deletedResourceList.add(rmodel)
 		}
-		
+
 		cmpResult.setAddedResourceList(addedResourceList)
 		cmpResult.setDeletedResourceList(deletedResourceList)
-		cmpResult.setRequestInputs(requestInputs)	
+		cmpResult.setRequestInputs(requestInputs)
 
 		execution.setVariable("compareModelsResult", cmpResult)
 	}
-	
+
 }
-	
+
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateE2EServiceInstance.groovy b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateE2EServiceInstance.groovy
index bb48671..b5d1961 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateE2EServiceInstance.groovy
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateE2EServiceInstance.groovy
@@ -3,14 +3,14 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved. 
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -22,9 +22,12 @@
 
 import static org.apache.commons.lang3.StringUtils.*;
 
+import javax.ws.rs.NotFoundException
+
 import org.apache.commons.lang3.*
 import org.camunda.bpm.engine.delegate.BpmnError
 import org.camunda.bpm.engine.delegate.DelegateExecution
+import org.onap.aai.domain.yang.ServiceInstance
 import org.onap.so.bpmn.common.scripts.AaiUtil
 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
 import org.onap.so.bpmn.common.scripts.CatalogDbUtils;
@@ -35,6 +38,11 @@
 import org.onap.so.bpmn.core.domain.Resource
 import org.onap.so.bpmn.core.domain.ServiceDecomposition
 import org.onap.so.bpmn.core.json.JsonUtils
+import org.onap.so.client.aai.AAIObjectType
+import org.onap.so.client.aai.AAIResourcesClient
+import org.onap.so.client.aai.entities.AAIResultWrapper
+import org.onap.so.client.aai.entities.uri.AAIResourceUri
+import org.onap.so.client.aai.entities.uri.AAIUriFactory
 import org.onap.so.logger.MessageEnum
 import org.onap.so.logger.MsoLogger
 import org.springframework.web.util.UriUtils;
@@ -58,7 +66,7 @@
  * @param - failExists - TODO
  * @param - serviceInputParams (should contain aic_zone for serviceTypes TRANSPORT,ATM)
  * @param - sdncVersion ("1610")
- * @param - serviceDecomposition - Decomposition for R1710 
+ * @param - serviceDecomposition - Decomposition for R1710
  * (if macro provides serviceDecompsition then serviceModelInfo, serviceInstanceId & serviceInstanceName will be ignored)
  *
  * Outputs:
@@ -98,17 +106,17 @@
 				msoLogger.info(msg)
 				exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
 			}
-			
+
 			if (isBlank(serviceType)) {
 				msg = "Input serviceType is null"
 				msoLogger.info(msg)
 				exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
 			}
-			
+
 			if (productFamilyId == null) {
 				execution.setVariable("productFamilyId", "")
 			}
-			
+
 			String sdncCallbackUrl = execution.getVariable('URN_mso_workflow_sdncadapter_callback')
 			if (isBlank(sdncCallbackUrl)) {
 				msg = "URN_mso_workflow_sdncadapter_callback is null"
@@ -118,8 +126,8 @@
 			execution.setVariable("sdncCallbackUrl", sdncCallbackUrl)
 			msoLogger.info("SDNC Callback URL: " + sdncCallbackUrl)
 
-			//requestDetails.modelInfo.for AAI PUT servieInstanceData 			
-			//requestDetails.requestInfo. for AAI GET/PUT serviceInstanceData 
+			//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")
@@ -130,7 +138,7 @@
 			//aai serviceType and Role can be setted as fixed value now.
 			String aaiServiceType = "E2E Service"
 			String aaiServiceRole = "E2E Service"
-			
+
 			execution.setVariable("modelInvariantUuid", modelInvariantUuid)
 			execution.setVariable("modelUuid", modelUuid)
 
@@ -142,7 +150,7 @@
 			}
 
 			String statusLine = isBlank(oStatus) ? "" : "<orchestration-status>${MsoUtils.xmlEscape(oStatus)}</orchestration-status>"
-				
+
 			AaiUtil aaiUriUtil = new AaiUtil(this)
 			String aai_uri = aaiUriUtil.getBusinessCustomerUri(execution)
 			String namespace = aaiUriUtil.getNamespaceFromUri(aai_uri)
@@ -155,7 +163,7 @@
 					${statusLine}
 				    <model-invariant-id>${MsoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-id>
 				    <model-version-id>${MsoUtils.xmlEscape(modelUuid)}</model-version-id>
-					</service-instance>""".trim()					
+					</service-instance>""".trim()
 			execution.setVariable("serviceInstanceData", serviceInstanceData)
 			msoLogger.debug(serviceInstanceData)
 			msoLogger.info(" aai_uri " + aai_uri + " namespace:" + namespace)
@@ -170,7 +178,7 @@
 		}
 		msoLogger.trace("Exit preProcessRequest ")
 	}
-	
+
    public void prepareDecomposeService(DelegateExecution execution) {
         try {
             msoLogger.trace("Inside prepareDecomposeService of create generic e2e service ")
@@ -193,7 +201,7 @@
      }
 
     public void processDecomposition(DelegateExecution execution) {
-        msoLogger.trace("Inside processDecomposition() of  create generic e2e service flow ")    
+        msoLogger.trace("Inside processDecomposition() of  create generic e2e service flow ")
         try {
             ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
         } catch (Exception ex) {
@@ -202,23 +210,23 @@
             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
         }
     }
-    
+
     public void doServicePreOperation(DelegateExecution execution){
-       //we need a service plugin platform here. 
+       //we need a service plugin platform here.
     	ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
-    	String uuiRequest = execution.getVariable("uuiRequest")		
+    	String uuiRequest = execution.getVariable("uuiRequest")
     	String newUuiRequest = ServicePluginFactory.getInstance().preProcessService(serviceDecomposition, uuiRequest);
-    	execution.setVariable("uuiRequest", newUuiRequest)	
+    	execution.setVariable("uuiRequest", newUuiRequest)
     }
-    
+
     public void doServiceHoming(DelegateExecution execution) {
-    	//we need a service plugin platform here. 
+    	//we need a service plugin platform here.
     	ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
-    	String uuiRequest = execution.getVariable("uuiRequest")		
+    	String uuiRequest = execution.getVariable("uuiRequest")
     	String newUuiRequest = ServicePluginFactory.getInstance().doServiceHoming(serviceDecomposition, uuiRequest);
-    	execution.setVariable("uuiRequest", newUuiRequest)	
+    	execution.setVariable("uuiRequest", newUuiRequest)
     }
-    
+
 	public void postProcessAAIGET(DelegateExecution execution) {
 		msoLogger.trace("postProcessAAIGET ")
 		String msg = ""
@@ -260,6 +268,7 @@
 		msoLogger.trace("Exit postProcessAAIGET ")
 	}
 
+	//TODO use create if not exist
 	public void postProcessAAIPUT(DelegateExecution execution) {
 		msoLogger.trace("postProcessAAIPUT ")
 		String msg = ""
@@ -296,7 +305,32 @@
 		}
 		msoLogger.trace("Exit postProcessAAIPUT ")
 	}
-	
+
+	/**
+	 * Gets the service instance and its relationships from aai
+	 */
+	public void getServiceInstance(DelegateExecution execution) {
+		try {
+			String serviceInstanceId = execution.getVariable('serviceInstanceId')
+			String globalSubscriberId = execution.getVariable('globalSubscriberId')
+			String serviceType = execution.getVariable('subscriptionServiceType')
+
+			AAIResourcesClient resourceClient = new AAIResourcesClient()
+			AAIResourceUri serviceInstanceUri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, globalSubscriberId, serviceType, serviceInstanceId)
+			AAIResultWrapper wrapper = resourceClient.get(serviceInstanceUri, NotFoundException.class)
+
+			ServiceInstance si = wrapper.asBean(ServiceInstance.class)
+			execution.setVariable("serviceInstanceName", si.getServiceInstanceName())
+
+		}catch(BpmnError e) {
+			throw e;
+		}catch(Exception ex) {
+			String msg = "Internal Error in getServiceInstance: " + ex.getMessage()
+			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+		}
+	}
+
+
 	public void postProcessAAIGET2(DelegateExecution execution) {
 		msoLogger.trace("postProcessAAIGET2 ")
 		String msg = ""
@@ -342,7 +376,7 @@
 	public void preProcessRollback (DelegateExecution execution) {
 		msoLogger.trace("preProcessRollback ")
 		try {
-			
+
 			Object workflowException = execution.getVariable("WorkflowException");
 
 			if (workflowException instanceof WorkflowException) {
@@ -397,10 +431,10 @@
             execution.setVariable("operationType", operationType)
             ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
             List<Resource>  resourceList = serviceDecomposition.getServiceResources()
-            
+
             for(Resource resource : resourceList){
                     resourceTemplateUUIDs  = resourceTemplateUUIDs + resource.getModelInfo().getModelCustomizationUuid() + ":"
-            }           
+            }
 
             def dbAdapterEndpoint = "http://mso.mso.testlab.openecomp.org:8080/dbadapters/RequestsDbAdapter"
             execution.setVariable("CVFMI_dbAdapterEndpoint", dbAdapterEndpoint)
@@ -429,23 +463,23 @@
             msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, "Exception Occured Processing preInitResourcesOperStatus.", "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, e);
             execution.setVariable("CVFMI_ErrorResponse", "Error Occurred during preInitResourcesOperStatus Method:\n" + e.getMessage())
         }
-        msoLogger.trace("COMPLETED preInitResourcesOperStatus Process ")  
+        msoLogger.trace("COMPLETED preInitResourcesOperStatus Process ")
 	}
 
 	// prepare input param for using DoCreateResources.bpmn
 	public void preProcessForAddResource(DelegateExecution execution) {
 		msoLogger.trace("STARTED preProcessForAddResource Process ")
-		
+
 		ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
 		List<Resource> addResourceList = serviceDecomposition.getServiceResources()
 		execution.setVariable("addResourceList", addResourceList)
-		
+
 		msoLogger.trace("COMPLETED preProcessForAddResource Process ")
 	}
 
 	public void postProcessForAddResource(DelegateExecution execution) {
 		// do nothing now
-	
+
 	}
 
 }
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateNetworkInstance.groovy b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateNetworkInstance.groovy
index 4bbaef8..a376e58 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateNetworkInstance.groovy
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateNetworkInstance.groovy
@@ -7,9 +7,9 @@
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -36,6 +36,14 @@
 import org.onap.so.logger.MsoLogger
 import org.onap.so.rest.APIResponse;
 import org.springframework.web.util.UriUtils
+import org.onap.so.client.aai.AAIResourcesClient
+import org.onap.so.client.aai.AAIObjectType
+import org.onap.so.client.aai.entities.AAIResultWrapper
+import org.onap.so.client.aai.entities.Relationships
+import org.onap.so.client.aai.entities.uri.AAIResourceUri
+import org.onap.so.client.aai.entities.uri.AAIUriFactory
+import org.json.JSONObject
+import javax.ws.rs.NotFoundException
 
 import groovy.json.*
 import groovy.xml.XmlUtil
@@ -47,7 +55,7 @@
  */
 public class DoCreateNetworkInstance extends AbstractServiceTaskProcessor {
 	private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, DoCreateNetworkInstance.class);
-	
+
 	String Prefix="CRENWKI_"
 	ExceptionUtil exceptionUtil = new ExceptionUtil()
 	JsonUtils jsonUtil = new JsonUtils()
@@ -56,7 +64,7 @@
 	SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
 
 	def className = getClass().getSimpleName()
-	
+
 	/**
 	 * This method is executed during the preProcessRequest task of the <class>DoCreateNetworkInstance.bpmn</class> process.
 	 * @param execution
@@ -78,7 +86,7 @@
 		execution.setVariable(Prefix + "networkOutputs", "")
 		execution.setVariable(Prefix + "networkId","")
 		execution.setVariable(Prefix + "networkName","")
-		
+
 		// AAI query Name
 		execution.setVariable(Prefix + "queryNameAAIRequest","")
 		execution.setVariable(Prefix + "queryNameAAIResponse", "")
@@ -149,7 +157,7 @@
 		//execution.setVariable(Prefix + "rollbackSDNCReturnCode", "")
 		execution.setVariable(Prefix + "isSdncRollbackNeeded", false)
 		execution.setVariable(Prefix + "sdncResponseSuccess", false)
-		
+
 		execution.setVariable(Prefix + "activateSDNCRequest", "")
 		execution.setVariable(Prefix + "activateSDNCResponse", "")
 		execution.setVariable(Prefix + "rollbackActivateSDNCRequest", "")
@@ -164,7 +172,7 @@
 		execution.setVariable(Prefix + "Success", false)
 
 		execution.setVariable(Prefix + "isException", false)
-		
+
 	}
 
 	// **************************************************
@@ -175,25 +183,25 @@
 	 * @param execution
 	 */
 	public void preProcessRequest (DelegateExecution execution) {
-		
-		execution.setVariable("prefix",Prefix)		
+
+		execution.setVariable("prefix",Prefix)
 		msoLogger.trace("Inside preProcessRequest() of " + className + ".groovy")
-		
+
 		try {
 			// initialize flow variables
 			InitializeProcessVariables(execution)
-			
+
 			// GET Incoming request & validate 3 kinds of format.
 			execution.setVariable("action", "CREATE")
 			String networkRequest = execution.getVariable("bpmnRequest")
 			if (networkRequest != null) {
 				if (networkRequest.contains("requestDetails")) {
-					// JSON format request is sent, create xml 
+					// JSON format request is sent, create xml
 					try {
 						def prettyJson = JsonOutput.prettyPrint(networkRequest.toString())
 						msoLogger.debug(" Incoming message formatted . . . : " + '\n' + prettyJson)
 						networkRequest =  vidUtils.createXmlNetworkRequestInfra(execution, networkRequest)
-		
+
 					} catch (Exception ex) {
 						String dataErrorMessage = " Invalid json format Request - " + ex.getMessage()
 						msoLogger.debug(dataErrorMessage)
@@ -201,26 +209,26 @@
 					}
 				} else {
   				   // XML format request is sent
-				   
+
 				}
 			} else {
 				// vIPR format request is sent, create xml from individual variables
 				networkRequest = vidUtils.createXmlNetworkRequestInstance(execution)
 			}
-				
+
 			networkRequest = utils.formatXml(networkRequest)
 			execution.setVariable(Prefix + "networkRequest", networkRequest)
 			msoLogger.debug(Prefix + "networkRequest - " + '\n' + networkRequest)
-			
+
 			// validate 'backout-on-failure' to override 'mso.rollback'
 			boolean rollbackEnabled = networkUtils.isRollbackEnabled(execution, networkRequest)
 			execution.setVariable(Prefix + "rollbackEnabled", rollbackEnabled)
 			msoLogger.debug(Prefix + "rollbackEnabled - " + rollbackEnabled)
-										
+
 			String networkInputs = utils.getNodeXml(networkRequest, "network-inputs", false).replace("tag0:","").replace(":tag0","")
 			execution.setVariable(Prefix + "networkInputs", networkInputs)
 			msoLogger.debug(Prefix + "networkInputs - " + '\n' + networkInputs)
-			
+
 			// prepare messageId
 			String messageId = execution.getVariable("testMessageId")  // for testing
 			if (messageId == null || messageId == "") {
@@ -230,12 +238,12 @@
 				msoLogger.debug(Prefix + "messageId, pre-assigned: " + messageId)
 			}
 			execution.setVariable(Prefix + "messageId", messageId)
-			
+
 			String source = utils.getNodeText(networkRequest, "source")
 			execution.setVariable(Prefix + "source", source)
 			msoLogger.debug(Prefix + "source - " + source)
-			
-			// validate cloud region 
+
+			// validate cloud region
 			String lcpCloudRegionId = utils.getNodeText(networkRequest, "aic-cloud-region")
 			if ((lcpCloudRegionId == null) || (lcpCloudRegionId == "") || (lcpCloudRegionId == "null")) {
 				String dataErrorMessage = "Missing value/element: 'lcpCloudRegionId' or 'cloudConfiguration' or 'aic-cloud-region'."
@@ -244,7 +252,7 @@
 			}
 
 			// validate service instance id
-			String serviceInstanceId = utils.getNodeText(networkRequest, "service-instance-id") 
+			String serviceInstanceId = utils.getNodeText(networkRequest, "service-instance-id")
 			if ((serviceInstanceId == null) || (serviceInstanceId == "") || (serviceInstanceId == "null")) {
 				String dataErrorMessage = "Missing value/element: 'serviceInstanceId'."
 				msoLogger.debug(" Invalid Request - " + dataErrorMessage)
@@ -253,12 +261,12 @@
 
 			// PO Authorization Info / headers Authorization=
 			String basicAuthValuePO = UrnPropertiesReader.getVariable("mso.adapters.po.auth",execution)
-			
+
 			try {
 				def encodedString = utils.getBasicAuth(basicAuthValuePO, UrnPropertiesReader.getVariable("mso.msoKey",execution))
 				execution.setVariable("BasicAuthHeaderValuePO",encodedString)
 				execution.setVariable("BasicAuthHeaderValueSDNC", encodedString)
-	
+
 			} catch (IOException ex) {
 				String exceptionMessage = "Exception Encountered in DoCreateNetworkInstance, PreProcessRequest() - "
 				String dataErrorMessage = exceptionMessage + " Unable to encode PO/SDNC user/password string - " + ex.getMessage()
@@ -273,11 +281,11 @@
 			execution.setVariable("GENGS_type", "service-instance")
 			msoLogger.debug("GENGS_type - " + "service-instance")
 			msoLogger.debug(" Url for SDNC adapter: " + UrnPropertiesReader.getVariable("mso.adapters.sdnc.endpoint",execution))
-			
+
 			String sdncVersion = execution.getVariable("sdncVersion")
 			msoLogger.debug("sdncVersion? : " + sdncVersion)
-			
-			// build 'networkOutputs'			
+
+			// build 'networkOutputs'
 			String networkId = utils.getNodeText(networkRequest, "network-id")
 			if ((networkId == null) || (networkId == "null")) {
 				networkId = ""
@@ -295,25 +303,49 @@
 			msoLogger.debug(Prefix + "networkOutputs - " + '\n' + networkOutputs)
 			execution.setVariable(Prefix + "networkId", networkId)
 			execution.setVariable(Prefix + "networkName", networkName)
-		
+
 		} catch (BpmnError e) {
 		throw e;
-		
+
 		} catch (Exception ex) {
 			sendSyncError(execution)
 			// caught exception
 			String exceptionMessage = "Exception Encountered in PreProcessRequest() of " + className + ".groovy ***** : " + ex.getMessage()
 			msoLogger.debug(exceptionMessage)
 			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
-		
+
 		}
 
 	}
-	
+
+	/**
+	 * Gets the service instance uri from aai
+	 */
+	public void getServiceInstance(DelegateExecution execution) {
+		try {
+			String serviceInstanceId = execution.getVariable('CRENWKI_serviceInstanceId')
+
+			AAIResourcesClient resourceClient = new AAIResourcesClient()
+			AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, serviceInstanceId)
+
+			if(!resourceClient.exists(uri)){
+				exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Service instance was not found in aai")
+			}
+
+		}catch(BpmnError e) {
+			throw e;
+		}catch (Exception ex){
+			String msg = "Exception in getServiceInstance. " + ex.getMessage()
+			msoLogger.debug(msg)
+			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+		}
+	}
+
+
 	public void callRESTQueryAAINetworkName (DelegateExecution execution) {
-		
+
 		execution.setVariable("prefix",Prefix)
-		
+
 		msoLogger.debug(" ***** Inside callRESTQueryAAINetworkName() of DoCreateNetworkInstance ***** " )
 
 		// get variables
@@ -348,7 +380,7 @@
 					execution.setVariable(Prefix + "orchestrationStatus", orchestrationStatus.toUpperCase())
 					msoLogger.debug(Prefix + "orchestrationStatus - " + orchestrationStatus.toUpperCase())
 					execution.setVariable("orchestrationStatus", orchestrationStatus)
-					
+
 				} catch (Exception ex) {
 				    // response is empty
 					execution.setVariable(Prefix + "orchestrationStatus", orchestrationStatus)
@@ -385,9 +417,9 @@
 	}
 
 	public void callRESTQueryAAICloudRegion (DelegateExecution execution) {
-		
+
 		execution.setVariable("prefix",Prefix)
-				
+
 		msoLogger.debug(" ***** Inside callRESTQueryAAICloudRegion() of DoCreateNetworkInstance ***** " )
 
 		try {
@@ -434,7 +466,7 @@
 	}
 
 	public void callRESTQueryAAINetworkId(DelegateExecution execution) {
-		
+
 		execution.setVariable("prefix",Prefix)
 
 		msoLogger.debug(" ***** Inside callRESTQueryAAINetworkId() of DoCreateNetworkInstance ***** " )
@@ -445,15 +477,15 @@
 			String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse")
 			if (execution.getVariable("sdncVersion") != "1610") {
 			   String networkResponseInformation = ""
-			   try {	
+			   try {
 			      networkResponseInformation = utils.getNodeXml(assignSDNCResponse, "network-response-information", false).replace("tag0:","").replace(":tag0","")
 				  networkId = utils.getNodeText(networkResponseInformation, "instance-id")
 			   } catch (Exception ex) {
 			      String dataErrorMessage = " SNDC Response network validation for 'instance-id' (network-id) failed: Empty <network-response-information>"
 			      msoLogger.debug(dataErrorMessage)
 				  exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
-			   } 	  
-			   	  
+			   }
+
 			} else {
 			   networkId = utils.getNodeText(assignSDNCResponse, "network-id")
 			}
@@ -465,11 +497,11 @@
 			   msoLogger.debug(" SNDC Response network validation for 'instance-id' (network-id)' is good: " + networkId)
 			}
 
-    
+
 			execution.setVariable(Prefix + "networkId", networkId)
 			String networkName   = utils.getNodeText(assignSDNCResponse, "network-name")
 			execution.setVariable(Prefix + "networkName", networkName)
-			
+
 			networkId = UriUtils.encode(networkId,"UTF-8")
 
 			// Prepare AA&I url
@@ -491,7 +523,7 @@
 			if (returnCode=='200') {
 				execution.setVariable(Prefix + "queryIdAAIResponse", aaiResponseAsString)
 				msoLogger.debug(" QueryAAINetworkId Success REST Response - " + "\n" + aaiResponseAsString)
-				
+
 				String netId   = utils.getNodeText(aaiResponseAsString, "network-id")
 				execution.setVariable(Prefix + "networkId", netId)
 				String netName   = utils.getNodeText(aaiResponseAsString, "network-name")
@@ -532,7 +564,7 @@
 	}
 
 	public void callRESTReQueryAAINetworkId(DelegateExecution execution) {
-		
+
 		execution.setVariable("prefix",Prefix)
 
 		msoLogger.debug(" ***** Inside callRESTReQueryAAINetworkId() of DoCreateNetworkInstance ***** " )
@@ -540,7 +572,7 @@
 		try {
 			// get variables
 			String networkId   = execution.getVariable(Prefix + "networkId")
-			String netId = networkId 
+			String netId = networkId
 			networkId = UriUtils.encode(networkId,"UTF-8")
 
 			// Prepare AA&I url
@@ -606,7 +638,7 @@
 	}
 
 	public void callRESTQueryAAINetworkVpnBinding(DelegateExecution execution) {
-		
+
 		execution.setVariable("prefix",Prefix)
 
 		msoLogger.debug(" ***** Inside callRESTQueryAAINetworkVpnBinding() of DoCreateNetworkInstance ***** " )
@@ -748,7 +780,7 @@
 	}
 
 	public void callRESTQueryAAINetworkPolicy(DelegateExecution execution) {
-		
+
 		execution.setVariable("prefix",Prefix)
 
 		msoLogger.debug(" ***** Inside callRESTQueryAAINetworkPolicy() of DoCreateNetworkInstance ***** " )
@@ -882,7 +914,7 @@
 	}
 
 	public void callRESTQueryAAINetworkTableRef(DelegateExecution execution) {
-		
+
 		execution.setVariable("prefix",Prefix)
 
 		msoLogger.debug(" ***** Inside callRESTQueryAAINetworkTableRef() of DoCreateNetworkInstance ***** " )
@@ -1017,7 +1049,7 @@
 
 
 	public void callRESTUpdateContrailAAINetwork(DelegateExecution execution) {
-		
+
 		execution.setVariable("prefix",Prefix)
 
 		msoLogger.debug(" ***** Inside callRESTUpdateContrailAAINetwork() of DoCreateNetworkInstance ***** " )
@@ -1046,7 +1078,7 @@
 			msoLogger.debug(" 'payload' to Update Contrail - " + "\n" + payloadXml)
 
 			APIResponse response = aaiUriUtil.executeAAIPutCall(execution, updateContrailAAIUrlRequest, payloadXml)
-						
+
 			String returnCode = response.getStatusCode()
 			execution.setVariable(Prefix + "aaiUpdateContrailReturnCode", returnCode)
 			msoLogger.debug(" ***** AAI Update Contrail Response Code  : " + returnCode)
@@ -1060,7 +1092,7 @@
 				   execution.setVariable(Prefix + "isPONR", false)
 				} else {
 				   execution.setVariable(Prefix + "isPONR", true)
-				}  
+				}
 				msoLogger.debug(Prefix + "isPONR" + ": " + execution.getVariable(Prefix + "isPONR"))
 			} else {
 				if (returnCode=='404') {
@@ -1096,7 +1128,7 @@
 	}
 
 	public void prepareCreateNetworkRequest (DelegateExecution execution) {
-		
+
 		execution.setVariable("prefix",Prefix)
 
 		msoLogger.trace("Inside prepareCreateNetworkRequest() of DoCreateNetworkInstance")
@@ -1106,7 +1138,7 @@
 			// get variables
 			String requestId = execution.getVariable("msoRequestId")
 			if (requestId == null) {
-				requestId = execution.getVariable("mso-request-id") 
+				requestId = execution.getVariable("mso-request-id")
 			}
 			String messageId = execution.getVariable(Prefix + "messageId")
 			String source    = execution.getVariable(Prefix + "source")
@@ -1115,7 +1147,7 @@
 			String queryIdResponse = execution.getVariable(Prefix + "queryIdAAIResponse")
 			String cloudRegionId = execution.getVariable(Prefix + "cloudRegionPo")
 			String backoutOnFailure = execution.getVariable(Prefix + "rollbackEnabled")
-			
+
 			// Prepare Network request
 			String routeCollection = execution.getVariable(Prefix + "routeCollection")
 			String policyCollection = execution.getVariable(Prefix + "networkCollection")
@@ -1138,7 +1170,7 @@
 	}
 
 	public void prepareSDNCRequest (DelegateExecution execution) {
-		
+
 		execution.setVariable("prefix",Prefix)
 
 		msoLogger.trace("Inside prepareSDNCRequest() of DoCreateNetworkInstance")
@@ -1158,9 +1190,9 @@
 				execution.setVariable("mso-request-id", requestId)
 			} else {
 			    requestId = execution.getVariable("mso-request-id")
-			} 	
+			}
 			execution.setVariable(Prefix + "requestId", requestId)
-			
+
 			// 1. prepare assign topology via SDNC Adapter SUBFLOW call
  		   	String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, createNetworkInput, serviceInstanceId, sdncCallback, "assign", "NetworkActivateRequest", cloudRegionId, networkId, null, null)
 
@@ -1179,21 +1211,21 @@
 	}
 
 	public void prepareRpcSDNCRequest (DelegateExecution execution) {
-		
+
 		execution.setVariable("prefix",Prefix)
 
 		msoLogger.trace("Inside prepareRpcSDNCRequest() of DoCreateNetworkInstance")
 
 		try {
 			// get variables
-			
+
 			String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
 			String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
 			String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
 
 			String networkId = execution.getVariable(Prefix + "networkId")
 			String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
-			
+
 			// 1. prepare assign topology via SDNC Adapter SUBFLOW call
 			String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "assign", "CreateNetworkInstance", cloudRegionId, networkId, null)
 
@@ -1209,11 +1241,11 @@
 		}
 
 	}
-	
+
 	public void prepareRpcSDNCActivateRequest (DelegateExecution execution) {
-		
+
 		execution.setVariable("prefix",Prefix)
-		
+
 		msoLogger.trace("Inside prepareRpcSDNCActivateRequest() of DoCreateNetworkInstance")
 
 		try {
@@ -1223,7 +1255,7 @@
 			String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
 			String networkId = execution.getVariable(Prefix + "networkId")
 			String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
-			
+
 			// 1. prepare assign topology via SDNC Adapter SUBFLOW call
 			String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "activate", "CreateNetworkInstance", cloudRegionId, networkId, null)
 
@@ -1240,7 +1272,7 @@
 		}
 
 	}
-	
+
 
 
 
@@ -1249,7 +1281,7 @@
 	// **************************************************
 
 	public void validateCreateNetworkResponse (DelegateExecution execution) {
-		
+
 		execution.setVariable("prefix",Prefix)
 
 		msoLogger.trace("Inside validateNetworkResponse() of DoCreateNetworkInstance")
@@ -1321,7 +1353,7 @@
 	}
 
 	public void validateSDNCResponse (DelegateExecution execution) {
-		
+
 		execution.setVariable("prefix",Prefix)
 
 		msoLogger.trace("Inside validateSDNCResponse() of DoCreateNetworkInstance")
@@ -1329,7 +1361,7 @@
 		String response = execution.getVariable(Prefix + "assignSDNCResponse")
 		boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
 		WorkflowException workflowException = execution.getVariable("WorkflowException")
-		
+
 		SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this)
 		sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
 		// reset variable
@@ -1349,7 +1381,7 @@
 	}
 
 	public void validateRpcSDNCActivateResponse (DelegateExecution execution) {
-		
+
 		execution.setVariable("prefix",Prefix)
 
 		msoLogger.trace("Inside validateRpcSDNCActivateResponse() of DoCreateNetworkInstance")
@@ -1373,12 +1405,12 @@
 			msoLogger.debug("Did NOT Successfully Validated Rpc SDNC Activate Response")
 			throw new BpmnError("MSOWorkflowException")
 		}
-		
+
 	}
 
 
 	public void prepareSDNCRollbackRequest (DelegateExecution execution) {
-		
+
 		execution.setVariable("prefix",Prefix)
 
 		msoLogger.trace("Inside prepareSDNCRollbackRequest() of DoCreateNetworkInstance")
@@ -1392,7 +1424,7 @@
 			String networkId = execution.getVariable(Prefix + "networkId")
 			if (networkId == 'null') {networkId = ""}
 			String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
-			
+
 			// 2. prepare rollback topology via SDNC Adapter SUBFLOW call
 			String sndcTopologyRollbackRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, createNetworkInput, serviceInstanceId, sdncCallback, "rollback", "NetworkActivateRequest", cloudRegionId, networkId, null, null)
 			String sndcTopologyRollbackRequestAsString = utils.formatXml(sndcTopologyRollbackRequest)
@@ -1410,7 +1442,7 @@
 	}
 
 	public void prepareRpcSDNCRollbackRequest (DelegateExecution execution) {
-		
+
 		execution.setVariable("prefix",Prefix)
 
 		msoLogger.trace("Inside prepareRpcSDNCRollbackRequest() of DoCreateNetworkInstance")
@@ -1440,15 +1472,15 @@
 		}
 
 	}
-	
+
 	public void prepareRpcSDNCActivateRollback(DelegateExecution execution) {
-		
+
 		execution.setVariable("prefix",Prefix)
 
 		msoLogger.trace("Inside prepareRpcSDNCActivateRollback() of DoCreateNetworkInstance")
 
 		try {
-		
+
 			// get variables
 			String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
 			String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
@@ -1473,76 +1505,76 @@
 		}
 
 	}
-	
+
 	public void prepareRollbackData(DelegateExecution execution) {
-		
+
 		execution.setVariable("prefix",Prefix)
-		
+
 		msoLogger.trace("Inside prepareRollbackData() of DoCreateNetworkInstance")
-		
+
 		try {
-			
+
 			Map<String, String> rollbackData = new HashMap<String, String>();
 			String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
-			if (rollbackSDNCRequest != null) { 
+			if (rollbackSDNCRequest != null) {
 				if (rollbackSDNCRequest != "") {
 			        rollbackData.put("rollbackSDNCRequest", execution.getVariable(Prefix + "rollbackSDNCRequest"))
 			    }
-			}	
+			}
 			String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
 			if (rollbackNetworkRequest != null) {
-				if (rollbackNetworkRequest != "") { 	 
+				if (rollbackNetworkRequest != "") {
 			        rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
-				}	
+				}
 			}
 			String rollbackActivateSDNCRequest = execution.getVariable(Prefix + "rollbackActivateSDNCRequest")
 			if (rollbackActivateSDNCRequest != null) {
-				if (rollbackActivateSDNCRequest != "") {	 
+				if (rollbackActivateSDNCRequest != "") {
 			        rollbackData.put("rollbackActivateSDNCRequest", execution.getVariable(Prefix + "rollbackActivateSDNCRequest"))
-				}	
+				}
 			}
 			execution.setVariable("rollbackData", rollbackData)
 			msoLogger.debug("** rollbackData : " + rollbackData)
-			
+
 			execution.setVariable("WorkflowException", execution.getVariable(Prefix + "WorkflowException"))
 			msoLogger.debug("** WorkflowException : " + execution.getVariable("WorkflowException"))
-			
+
 		} catch (Exception ex) {
 			String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRollbackData() - " + ex.getMessage()
 			msoLogger.debug(exceptionMessage)
 			exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
-		
+
 		}
-		
+
 	}
-	
+
 	public void postProcessResponse(DelegateExecution execution) {
-		
+
 		execution.setVariable("prefix",Prefix)
-		
+
 		msoLogger.trace("Inside postProcessResponse() of DoCreateNetworkInstance")
-		
+
 		try {
-			
+
 			//Conditions:
-			// 1. Silent Success: execution.getVariable("CRENWKI_orchestrationStatus") == "ACTIVE"  
+			// 1. Silent Success: execution.getVariable("CRENWKI_orchestrationStatus") == "ACTIVE"
 			// 2. Success: execution.getVariable("WorkflowException") == null (NULL)
-			// 3. WorkflowException: execution.getVariable("WorkflowException") != null (NOT NULL) 
-			
+			// 3. WorkflowException: execution.getVariable("WorkflowException") != null (NOT NULL)
+
 			msoLogger.debug(" ***** Is Exception Encountered (isException)? : " + execution.getVariable(Prefix + "isException"))
 			// successful flow
-			if (execution.getVariable(Prefix + "isException") == false) {  
+			if (execution.getVariable(Prefix + "isException") == false) {
 				// set rollback data
 				execution.setVariable("orchestrationStatus", "")
 				execution.setVariable("networkId", execution.getVariable(Prefix + "networkId"))
 				execution.setVariable("networkName", execution.getVariable(Prefix + "networkName"))
-				prepareSuccessRollbackData(execution) // populate rollbackData  
+				prepareSuccessRollbackData(execution) // populate rollbackData
 				execution.setVariable("WorkflowException", null)
 				execution.setVariable(Prefix + "Success", true)
 				msoLogger.debug(" ***** postProcessResponse(), GOOD !!!")
 			} else {
    			   // inside sub-flow logic
-				execution.setVariable(Prefix + "Success", false) 
+				execution.setVariable(Prefix + "Success", false)
 				execution.setVariable("rollbackData", null)
 				String exceptionMessage = " Exception encountered in MSO Bpmn. "
 				if (execution.getVariable("workflowException") != null) {  // Output of Rollback flow.
@@ -1553,45 +1585,45 @@
 			       if (execution.getVariable(Prefix + "WorkflowException") != null) {
 				      WorkflowException pwfex = execution.getVariable(Prefix + "WorkflowException")
 				      exceptionMessage = pwfex.getErrorMessage()
-			       }   
+			       }
    				}
 			    // going to the Main flow: a-la-carte or macro
 			    msoLogger.debug(" ***** postProcessResponse(), BAD !!!")
 			    exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
 				throw new BpmnError("MSOWorkflowException")
 			}
-							
+
 		} catch(BpmnError b){
 		     msoLogger.debug("Rethrowing MSOWorkflowException")
 		     throw b
-			
+
 		} catch (Exception ex) {
 			String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. postProcessResponse() - " + ex.getMessage()
 			msoLogger.debug(exceptionMessage)
 			exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
 			throw new BpmnError("MSOWorkflowException")
-		
+
 		}
-		
-		
-		
+
+
+
 	}
-	
+
 	public void prepareSuccessRollbackData(DelegateExecution execution) {
-		
+
 		execution.setVariable("prefix",Prefix)
-		
+
 		msoLogger.trace("Inside prepareSuccessRollbackData() of DoCreateNetworkInstance")
-		
+
 		try {
-			
+
 			if (execution.getVariable("sdncVersion") != '1610') {
 			    prepareRpcSDNCRollbackRequest(execution)
 				prepareRpcSDNCActivateRollback(execution)
 			} else {
 			    prepareSDNCRollbackRequest(execution)
-			} 	
-			
+			}
+
 			Map<String, String> rollbackData = new HashMap<String, String>();
 			String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
 			if (rollbackSDNCRequest != null) {
@@ -1612,63 +1644,63 @@
 				}
 			}
 			execution.setVariable("rollbackData", rollbackData)
-			
+
 			msoLogger.debug("** 'rollbackData' for Full Rollback : " + rollbackData)
 			execution.setVariable("WorkflowException", null)
 
-			
+
 		} catch (Exception ex) {
 			String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSuccessRollbackData() - " + ex.getMessage()
 			msoLogger.debug(exceptionMessage)
 			exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
-		
+
 		}
-		
+
 	}
 
 	public void setExceptionFlag(DelegateExecution execution){
-		
+
 		execution.setVariable("prefix",Prefix)
-		
+
 		msoLogger.trace("Inside setExceptionFlag() of DoCreateNetworkInstance")
-		
+
 		try {
-			
+
 			execution.setVariable(Prefix + "isException", true)
-			
+
 			if (execution.getVariable("SavedWorkflowException1") != null) {
 				execution.setVariable(Prefix + "WorkflowException", execution.getVariable("SavedWorkflowException1"))
 			} else {
 				execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
 			}
 			msoLogger.debug(Prefix + "WorkflowException - " +execution.getVariable(Prefix + "WorkflowException"))
-			
+
 		} catch(Exception ex){
 		  	String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. setExceptionFlag(): " + ex.getMessage()
 			msoLogger.debug(exceptionMessage)
 			exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
-		}  
-		
+		}
+
 	}
-	
-	
+
+
 	// *******************************
 	//     Build Error Section
 	// *******************************
 
 
-	
+
 	public void processJavaException(DelegateExecution execution){
-		
+
 		execution.setVariable("prefix",Prefix)
-		
+
 		try{
 			msoLogger.debug( "Caught a Java Exception in " + Prefix)
 			msoLogger.debug("Started processJavaException Method")
 			msoLogger.debug("Variables List: " + execution.getVariables())
 			execution.setVariable("UnexpectedError", "Caught a Java Lang Exception - " + Prefix)  // Adding this line temporarily until this flows error handling gets updated
 			exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")
-			
+
 		}catch(Exception e){
 			msoLogger.debug("Caught Exception during processJavaException Method: " + e)
 			execution.setVariable("UnexpectedError", "Exception in processJavaException method - " + Prefix)  // Adding this line temporarily until this flows error handling gets updated
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateServiceInstance.groovy b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateServiceInstance.groovy
index 93a260a..b44940e 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateServiceInstance.groovy
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateServiceInstance.groovy
@@ -7,9 +7,9 @@
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -62,7 +62,7 @@
  * @param - failExists - TODO
  * @param - serviceInputParams (should contain aic_zone for serviceTypes TRANSPORT,ATM)
  * @param - sdncVersion ("1610")
- * @param - serviceDecomposition - Decomposition for R1710 
+ * @param - serviceDecomposition - Decomposition for R1710
  * (if macro provides serviceDecompsition then serviceModelInfo, serviceInstanceId & serviceInstanceName will be ignored)
  *
  * Outputs:
@@ -71,7 +71,7 @@
  * @param - WorkflowException
  * @param - serviceInstanceName - (GET from AAI if null in input)
  *
- * This BB processes Macros(except TRANSPORT all sent to sdnc) and Alacartes(sdncSvcs && nonSdncSvcs) 
+ * This BB processes Macros(except TRANSPORT all sent to sdnc) and Alacartes(sdncSvcs && nonSdncSvcs)
  */
 public class DoCreateServiceInstance extends AbstractServiceTaskProcessor {
 
@@ -89,7 +89,7 @@
 		try {
 			String requestId = execution.getVariable("msoRequestId")
 			execution.setVariable("prefix", Prefix)
-			
+
 			setBasicDBAuthHeader(execution, isDebugEnabled)
 			//Inputs
 			//requestDetails.subscriberInfo. for AAI GET & PUT & SDNC assignToplology
@@ -106,17 +106,17 @@
 				msoLogger.debug(msg)
 				exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
 			}
-			
+
 			if (isBlank(subscriptionServiceType)) {
 				msg = "Input subscriptionServiceType is null"
 				msoLogger.debug(msg)
 				exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
 			}
-			
+
 			if (productFamilyId == null) {
 				execution.setVariable("productFamilyId", "")
 			}
-			
+
 			String sdncCallbackUrl = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
 			if (isBlank(sdncCallbackUrl)) {
 				msg = "mso.workflow.sdncadapter.callback is null"
@@ -131,19 +131,19 @@
 			String modelVersion = ""
 			String modelUuid = ""
 			String modelName = ""
-			String serviceInstanceName = "" 
+			String serviceInstanceName = ""
 			//Generated in parent.for AAI PUT
 			String serviceInstanceId = ""
 			String serviceType = ""
 			String serviceRole = ""
-					
+
 			ServiceDecomposition serviceDecomp = (ServiceDecomposition) execution.getVariable("serviceDecomposition")
 			if (serviceDecomp != null)
 			{
 				serviceType = serviceDecomp.getServiceType() ?: ""
 				msoLogger.debug("serviceType:" + serviceType)
 				serviceRole = serviceDecomp.getServiceRole() ?: ""
-				
+
 				ServiceInstance serviceInstance = serviceDecomp.getServiceInstance()
 				if (serviceInstance != null)
 				{
@@ -152,7 +152,7 @@
 					execution.setVariable("serviceInstanceId", serviceInstanceId)
 					execution.setVariable("serviceInstanceName", serviceInstanceName)
 				}
-				
+
 				ModelInfo modelInfo = serviceDecomp.getModelInfo()
 				if (modelInfo != null)
 				{
@@ -161,7 +161,7 @@
 					modelUuid = modelInfo.getModelUuid() ?: ""
 					modelName = modelInfo.getModelName() ?: ""
 				}
-				else 
+				else
 				{
 					msg = "Input serviceModelInfo is null"
 					msoLogger.debug(msg)
@@ -173,21 +173,21 @@
 				//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"
 					msoLogger.debug(msg)
 					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)
 			execution.setVariable("serviceInstanceName", serviceInstanceName)
@@ -196,7 +196,7 @@
 			execution.setVariable("modelVersion", modelVersion)
 			execution.setVariable("modelUuid", modelUuid)
 			execution.setVariable("modelName", modelName)
-			
+
 			//alacarte SIs are NOT sent to sdnc. exceptions are listed in config variable
 			String svcTypes = UrnPropertiesReader.getVariable("sdnc.si.svc.types",execution) ?: ""
 			msoLogger.debug("SDNC SI serviceTypes:" + svcTypes)
@@ -208,13 +208,13 @@
 					break;
 				}
 			}
-			
+
 			//All Macros are sent to SDNC, TRANSPORT(Macro) is sent to SDNW
 			//Alacartes are sent to SDNC if they are listed in config variable above
 			execution.setVariable("sendToSDNC", true)
 			if(execution.getVariable("sdncVersion").equals("1610")) //alacarte
 			{
-				if(!isSdncService){ 
+				if(!isSdncService){
 					execution.setVariable("sendToSDNC", false)
 					//alacarte non-sdnc svcs must provide name (sdnc provides name for rest)
 					if (isBlank(execution.getVariable("serviceInstanceName" )))
@@ -225,25 +225,25 @@
 					}
 				}
 			}
-			
+
 			msoLogger.debug("isSdncService: " + isSdncService)
 			msoLogger.debug("Send To SDNC: " + execution.getVariable("sendToSDNC"))
 			msoLogger.debug("Service Type: " + execution.getVariable("serviceType"))
-			
+
 			//macro may provide name and alacarte-portm may provide name
 			execution.setVariable("checkAAI", false)
 			if (!isBlank(execution.getVariable("serviceInstanceName" )))
 			{
 				execution.setVariable("checkAAI", true)
 			}
-			
+
 			if (isBlank(serviceInstanceId)){
 				msg = "Input serviceInstanceId is null"
 				msoLogger.debug(msg)
 				exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
 			}
-			
-			
+
+
 			StringBuilder sbParams = new StringBuilder()
 			Map<String, String> paramsMap = execution.getVariable("serviceInputParams")
 			if (paramsMap != null)
@@ -278,16 +278,16 @@
 			String statusLine = isBlank(oStatus) ? "" : "<orchestration-status>${MsoUtils.xmlEscape(oStatus)}</orchestration-status>"
 			String serviceTypeLine = isBlank(serviceType) ? "" : "<service-type>${MsoUtils.xmlEscape(serviceType)}</service-type>"
 			String serviceRoleLine = isBlank(serviceRole) ? "" : "<service-role>${MsoUtils.xmlEscape(serviceRole)}</service-role>"
-				
+
 			//QUERY CATALOG DB AND GET WORKLOAD / ENVIRONMENT CONTEXT
 			String environmentContext = ""
 			String workloadContext =""
-			
+
 			try{
 				 String json = cutils.getServiceResourcesByServiceModelInvariantUuidString(execution,modelInvariantUuid )
-				 
+
 				 msoLogger.debug("JSON IS: "+json)
-				 				 
+
 				 environmentContext = jsonUtil.getJsonValue(json, "serviceResources.environmentContext") ?: ""
 				 workloadContext = jsonUtil.getJsonValue(json, "serviceResources.workloadContext") ?: ""
 				 msoLogger.debug("Env Context is: "+ environmentContext)
@@ -299,7 +299,7 @@
 				msoLogger.debug(msg)
 				exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 			}
-			
+
 			//Create AAI Payload
 			AaiUtil aaiUriUtil = new AaiUtil(this)
 			String aai_uri = aaiUriUtil.getBusinessCustomerUri(execution)
@@ -318,7 +318,7 @@
 
 			execution.setVariable("serviceInstanceData", serviceInstanceData)
 			msoLogger.debug(" 'payload' to create Service Instance in AAI - " + "\n" + serviceInstanceData)
-				
+
 		} catch (BpmnError e) {
 			throw e;
 		} catch (Exception ex){
@@ -329,7 +329,6 @@
 		msoLogger.trace("Exit preProcessRequest")
 	}
 
-	//TODO: Will be able to replace with call to GenericGetService
 	public void getAAICustomerById (DelegateExecution execution) {
 		// https://{aaiEP}/aai/v8/business/customers/customer/{globalCustomerId}
 		def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
@@ -400,47 +399,6 @@
 
 	}
 
-	public void postProcessAAIGET(DelegateExecution execution) {
-		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
-		msoLogger.trace("postProcessAAIGET")
-		String msg = ""
-
-		try {
-			String serviceInstanceName = execution.getVariable("serviceInstanceName")
-			boolean succInAAI = execution.getVariable("GENGS_SuccessIndicator")
-			if(!succInAAI){
-				msoLogger.debug("Error getting Service-instance from AAI", + serviceInstanceName)
-				WorkflowException workflowException = execution.getVariable("WorkflowException")
-				if(workflowException != null){
-					exceptionUtil.buildAndThrowWorkflowException(execution, workflowException.getErrorCode(), workflowException.getErrorMessage())
-				}
-				else
-				{
-					msg = "Failure in postProcessAAIGET GENGS_SuccessIndicator:" + succInAAI
-					msoLogger.debug(msg)
-					exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg)
-				}
-			}
-			else
-			{
-				boolean foundInAAI = execution.getVariable("GENGS_FoundIndicator")
-				if(foundInAAI){
-					msoLogger.debug("Found Service-instance in AAI")
-					msg = "ServiceInstance already exists in AAI:" + serviceInstanceName
-					msoLogger.debug(msg)
-					exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg)
-				}
-			}
-		} catch (BpmnError e) {
-			throw e;
-		} catch (Exception ex) {
-			msg = "Exception in DoCreateServiceInstance.postProcessAAIGET. " + ex.getMessage()
-			msoLogger.debug(msg)
-			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
-		}
-		msoLogger.trace("Exit postProcessAAIGET")
-	}
-
 	public void postProcessAAIPUT(DelegateExecution execution) {
 		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
 		msoLogger.trace("postProcessAAIPUT")
@@ -498,17 +456,17 @@
 			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")
-			
+
 			// special URL for SDNW, msoAction helps set diff url in SDNCA
 			if("TRANSPORT".equalsIgnoreCase(execution.getVariable("serviceType")))
 			{
 				msoAction = "TRANSPORT"
 			}
-			
+
 			String sdncAssignRequest =
 					"""<sdncadapterworkflow:SDNCAdapterWorkflowRequest xmlns:ns5="http://org.onap/so/request/types/v1"
 													xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1"
@@ -563,7 +521,7 @@
 			rollbackData.put("SERVICEINSTANCE", "sdncDeactivate", sdncDeactivate)
 			rollbackData.put("SERVICEINSTANCE", "sdncDelete", sdncDelete)
 			execution.setVariable("rollbackData", rollbackData)
-			
+
 			msoLogger.debug("rollbackData:\n" + rollbackData.toString())
 
 		} catch (BpmnError e) {
@@ -575,7 +533,7 @@
 		}
 		msoLogger.trace("Exit preProcessSDNCAssignRequest")
 	}
-	
+
 	public void postProcessSDNCAssign (DelegateExecution execution) {
 		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
 		msoLogger.trace("postProcessSDNCAssign")
@@ -612,7 +570,7 @@
 		}
 		msoLogger.trace("Exit postProcessSDNCAssign")
 	}
-	
+
 	public void postProcessAAIGET2(DelegateExecution execution) {
 		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
 		msoLogger.trace("postProcessAAIGET2")
@@ -660,7 +618,7 @@
 		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
 		msoLogger.trace("preProcessRollback")
 		try {
-			
+
 			Object workflowException = execution.getVariable("WorkflowException");
 
 			if (workflowException instanceof WorkflowException) {
@@ -697,19 +655,19 @@
 		}
 		msoLogger.trace("Exit postProcessRollback")
 	}
-	
+
 	public void createProject(DelegateExecution execution) {
 		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
 		msoLogger.trace("createProject")
 
-		String bpmnRequest = execution.getVariable("requestJson")	
-		String projectName = jsonUtil.getJsonValue(bpmnRequest, "requestDetails.project.projectName")		
+		String bpmnRequest = execution.getVariable("requestJson")
+		String projectName = jsonUtil.getJsonValue(bpmnRequest, "requestDetails.project.projectName")
 		String serviceInstance = execution.getVariable("serviceInstanceId")
-		
+
 		msoLogger.debug("BPMN REQUEST IS: "+ bpmnRequest)
 		msoLogger.debug("PROJECT NAME: " + projectName)
 		msoLogger.debug("Service Instance: " + serviceInstance)
-			
+
 		if(projectName == null||projectName.equals("")){
 			msoLogger.debug("Project Name was not found in input. Skipping task...")
 		}else{
@@ -722,27 +680,27 @@
 				msoLogger.error(ex);
 				exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 			}
-		}	
+		}
 		msoLogger.trace("Exit createProject")
 	}
-	
+
 	public void createOwningEntity(DelegateExecution execution) {
 		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
 		msoLogger.trace("createOwningEntity")
 		String msg = "";
-		String bpmnRequest = execution.getVariable("requestJson")	
-		String owningEntityId = jsonUtil.getJsonValue(bpmnRequest, "requestDetails.owningEntity.owningEntityId")		
+		String bpmnRequest = execution.getVariable("requestJson")
+		String owningEntityId = jsonUtil.getJsonValue(bpmnRequest, "requestDetails.owningEntity.owningEntityId")
 		String owningEntityName = jsonUtil.getJsonValue(bpmnRequest,"requestDetails.owningEntity.owningEntityName");
 		String serviceInstance = execution.getVariable("serviceInstanceId")
-			
+
 		msoLogger.debug("owningEntity: " + owningEntityId)
 		msoLogger.debug("OwningEntityName: "+ owningEntityName)
 		msoLogger.debug("Service Instance: " + serviceInstance)
-		
+
 		try{
 			AAICreateResources aaiCR = new AAICreateResources()
 			if(owningEntityId==null||owningEntityId.equals("")){
-				msg = "Exception in createOwningEntity. OwningEntityId is null in input.";	
+				msg = "Exception in createOwningEntity. OwningEntityId is null in input.";
 				throw new IllegalStateException();
 			}else{
 				if(aaiCR.existsOwningEntity(owningEntityId)){
@@ -769,21 +727,21 @@
 		}
 		msoLogger.trace("Exit createOwningEntity")
 	}
-	
+
 	// *******************************
 	//     Build Error Section
 	// *******************************
 
 	public void processJavaException(DelegateExecution execution){
 		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
-		
+
 		try{
 			msoLogger.debug("Caught a Java Exception in DoCreateServiceInstance")
 			msoLogger.debug("Started processJavaException Method")
 			msoLogger.debug("Variables List: " + execution.getVariables())
 			execution.setVariable("UnexpectedError", "Caught a Java Lang Exception in DoCreateServiceInstance")  // Adding this line temporarily until this flows error handling gets updated
 			exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception in DoCreateServiceInstance")
-			
+
 		}catch(Exception e){
 			msoLogger.debug("Caught Exception during processJavaException Method: " + e)
 			execution.setVariable("UnexpectedError", "Exception in processJavaException")  // Adding this line temporarily until this flows error handling gets updated
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVfModuleVolumeV2.groovy b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVfModuleVolumeV2.groovy
index f734ffb..f87f32c 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVfModuleVolumeV2.groovy
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVfModuleVolumeV2.groovy
@@ -7,9 +7,9 @@
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -35,6 +35,14 @@
 import org.onap.so.logger.MsoLogger
 import org.onap.so.rest.APIResponse
 import org.springframework.web.util.UriUtils
+import org.onap.so.client.aai.AAIResourcesClient
+import org.onap.so.client.aai.AAIObjectType
+import org.onap.so.client.aai.entities.AAIResultWrapper
+import org.onap.so.client.aai.entities.Relationships
+import org.onap.so.client.aai.entities.uri.AAIResourceUri
+import org.onap.so.client.aai.entities.uri.AAIUriFactory
+import org.json.JSONObject
+import javax.ws.rs.NotFoundException
 
 class DoCreateVfModuleVolumeV2 extends VfModuleBase {
 
@@ -53,16 +61,16 @@
     }
 
     public void preProcessRequest(DelegateExecution execution, isDebugLogEnabled) {
-		
+
 		execution.setVariable("prefix",prefix)
 		execution.setVariable(prefix+'SuccessIndicator', false)
 		execution.setVariable(prefix+'isPONR', false)
 
 		displayInput(execution, isDebugLogEnabled)
 		setRollbackData(execution, isDebugLogEnabled)
-		setRollbackEnabled(execution, isDebugLogEnabled) 
-		
-		
+		setRollbackEnabled(execution, isDebugLogEnabled)
+
+
 		def tenantId = execution.getVariable("tenantId")
 		if (tenantId == null) {
 			String cloudConfiguration = execution.getVariable("cloudConfiguration")
@@ -84,17 +92,17 @@
 		def modelCustomizationUuid = jsonUtil.getJsonValue(vfModuleModelInfo, "modelCustomizationUuid")
 		execution.setVariable("modelCustomizationId", modelCustomizationUuid)
 		msoLogger.debug("modelCustomizationId: " + modelCustomizationUuid)
-		
+
 		//modelName
 		def modelName = jsonUtil.getJsonValue(vfModuleModelInfo, "modelName")
 		execution.setVariable("modelName", modelName)
 		msoLogger.debug("modelName: " + modelName)
-		
+
 		// The following is used on the get Generic Service Instance call
 		execution.setVariable('GENGS_type', 'service-instance')
 	}
 
-	
+
 	/**
 	 * Display input variables
 	 * @param execution
@@ -111,10 +119,10 @@
 		}
 		msoLogger.debug('End input.')
 	}
-	
-	
+
+
 	/**
-	 * Define and set rollbackdata object 
+	 * Define and set rollbackdata object
 	 * @param execution
 	 * @param isDebugEnabled
 	 */
@@ -127,25 +135,29 @@
 		rollbackData.put("DCVFMODULEVOL", "volumeGroupName", volumeGroupName)
 		execution.setVariable("rollbackData", rollbackData)
 	}
-	
-		
+
+
 	/**
-	 * validate getServiceInstance response
-	 * @param execution
-	 * @param isDebugEnabled
+	 * Gets the service instance uri from aai
 	 */
-	public void validateGetServiceInstanceCall(DelegateExecution execution, isDebugEnabled) {
-		def found = execution.getVariable('GENGS_FoundIndicator')
-		def success = execution.getVariable('GENGS_SuccessIndicator')
-		def serviceInstanceId = execution.getVariable('serviceInstanceId')
-		msoLogger.debug("getServiceInstance success: " + success)
-		msoLogger.debug("getServiceInstance found: " + found)
-		if(!found || !success) {
-			String errorMessage = "Service instance id not found in AAI: ${serviceInstanceId}."
-			msoLogger.debug(errorMessage)
-			(new ExceptionUtil()).buildAndThrowWorkflowException(execution, 2500, errorMessage)
+	public void getServiceInstance(DelegateExecution execution) {
+		try {
+			String serviceInstanceId = execution.getVariable('serviceInstanceId')
+
+			AAIResourcesClient resourceClient = new AAIResourcesClient()
+			AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, serviceInstanceId)
+
+			if(!resourceClient.exists(uri)){
+				(new ExceptionUtil()).buildAndThrowWorkflowException(execution, 2500, "Service instance was not found in aai")
+			}
+
+		}catch(BpmnError e) {
+			throw e;
+		}catch (Exception ex){
+			String msg = "Exception in getServiceInstance. " + ex.getMessage()
+			msoLogger.debug(msg)
+			(new ExceptionUtil()).buildAndThrowWorkflowException(execution, 2500, msg)
 		}
-		
 	}
 
 	/**
@@ -175,7 +187,7 @@
 			msoLogger.debug(errorMessage)
 			(new ExceptionUtil()).buildAndThrowWorkflowException(execution, 2500, errorMessage)
 		}
-		
+
 		def poCloudRegion = aaiUtil.getAAICloudReqion(execution,  queryCloudRegionRequest, "PO", cloudRegion)
 		if ((poCloudRegion != "ERROR")) {
 			execution.setVariable("poLcpCloudRegionId", poCloudRegion)
@@ -185,7 +197,7 @@
 			msoLogger.debug(errorMessage)
 			(new ExceptionUtil()).buildAndThrowWorkflowException(execution, 2500, errorMessage)
 		}
-		
+
 		def rollbackData = execution.getVariable("rollbackData")
 		rollbackData.put("DCVFMODULEVOL", "aiccloudregion", cloudRegion)
 	}
@@ -242,7 +254,7 @@
 
 
 	/**
-	 * Create a WorkflowException 
+	 * Create a WorkflowException
 	 * @param execution
 	 * @param isDebugEnabled
 	 */
@@ -265,7 +277,7 @@
 		throw new BpmnError("MSOWorkflowException")
 	}
 
-	
+
 	/**
 	 * Create volume group in AAI
 	 * @param execution
@@ -280,7 +292,7 @@
 		def vnfType = execution.getVariable("vnfType")
 		def tenantId = execution.getVariable("tenantId")
 		def cloudRegion = execution.getVariable('lcpCloudRegionId')
-		
+
 		msoLogger.debug("volumeGroupId: " + volumeGroupId)
 
 		def testGroupId = execution.getVariable('test-volume-group-id')
@@ -316,7 +328,7 @@
 
 		execution.setVariable(prefix+"createAAIVolumeGrpNameReturnCode", returnCode)
 		execution.setVariable(prefix+"createAAIVolumeGrpNameResponse", aaiResponseAsString)
-		
+
 		ExceptionUtil exceptionUtil = new ExceptionUtil()
 
 		if (returnCode =='201') {
@@ -333,7 +345,7 @@
 			}
 		}
 	}
-	
+
 
 	/**
 	 * Prepare VNF adapter create request XML
@@ -345,7 +357,7 @@
 		def vnfId = utils.getNodeText(aaiGenericVnfResponse, 'vnf-id')
 		def vnfName = utils.getNodeText(aaiGenericVnfResponse, 'vnf-name')
 		def vnfType = utils.getNodeText(aaiGenericVnfResponse, "vnf-type")
-		
+
 		def requestId = execution.getVariable('msoRequestId')
 		def serviceId = execution.getVariable('serviceInstanceId')
 		def cloudSiteId = execution.getVariable('poLcpCloudRegionId')
@@ -353,11 +365,11 @@
 		def volumeGroupId = execution.getVariable('volumeGroupId')
 		def volumeGroupnName = execution.getVariable('volumeGroupName')
 
-		def vnfVersion = execution.getVariable("asdcServiceModelVersion") 
+		def vnfVersion = execution.getVariable("asdcServiceModelVersion")
 		def vnfModuleType = execution.getVariable("modelName")
 
 		def modelCustomizationId = execution.getVariable("modelCustomizationId")
-		
+
 		// for testing
 		msoLogger.debug("volumeGroupId: " + volumeGroupId)
 		def testGroupId = execution.getVariable('test-volume-group-id')
@@ -367,9 +379,9 @@
 			execution.setVariable("test-volume-group-name", "MSOTESTVOL101a-vSAMP12_base_vol_module-0")
 		}
 		msoLogger.debug("volumeGroupId to be used: " + volumeGroupId)
-				
+
 		// volume group parameters
-		
+
 		String volumeGroupParams = ''
 		StringBuilder sbParams = new StringBuilder()
 		Map<String, String> paramsMap = execution.getVariable("vfModuleInputParams")
@@ -396,17 +408,17 @@
 		if(failIfExists == null) {
 			failIfExists = 'true'
 		}
-		
+
 		String messageId = UUID.randomUUID()
 		msoLogger.debug("messageId to be used is generated: " + messageId)
-		
+
 		def notificationUrl = createCallbackURL(execution, "VNFAResponse", messageId)
 		def useQualifiedHostName = UrnPropertiesReader.getVariable("mso.use.qualified.host",execution)
 		if ('true'.equals(useQualifiedHostName)) {
 			notificationUrl = utils.getQualifiedHostNameForCallback(notificationUrl)
 		}
 		msoLogger.debug("CreateVfModuleVolume - notificationUrl: "+ notificationUrl)
-		
+
 		// build request
 		String vnfSubCreateWorkflowRequest =
 				"""
@@ -465,9 +477,9 @@
 		String vnfSubRollbackWorkflowRequestAsString = utils.formatXml(vnfSubRollbackWorkflowRequest)
 		execution.setVariable(prefix+"rollbackVnfARequest", vnfSubRollbackWorkflowRequestAsString)
 	}
-	
+
 	public String buildRollbackVolumeGroupRequestXml(volumeGroupId, cloudSiteId, tenantId, requestId, serviceId, messageId, notificationUrl) {
-		
+
 		def request = """
 		<rollbackVolumeGroupRequest>
 			<volumeGroupRollback>
@@ -485,16 +497,16 @@
 			<skipAAI>true</skipAAI>
 			<notificationUrl>${MsoUtils.xmlEscape(notificationUrl)}</notificationUrl>
 		</rollbackVolumeGroupRequest>
-		""" 
-		
-		return request	
+		"""
+
+		return request
 	}
 
 	public String updateRollbackVolumeGroupRequestXml(String rollabackRequest, String heatStackId) {
 		String newRequest = rollabackRequest.replace("{{VOLUMEGROUPSTACKID}}", heatStackId)
 		return newRequest
 	}
-	
+
 	/**
 	 * Validate VNF adapter response
 	 * @param execution
@@ -513,10 +525,10 @@
 			rollbackData.put("DCVFMODULEVOL", "isCreateVnfRollbackNeeded", "true")
 		}
 	}
-	
+
 
 	/**
-	 * Update voulume group in AAI 
+	 * Update voulume group in AAI
 	 * @TODO: Can we re-use the create method??
 	 * @param execution
 	 * @param isDebugEnabled
@@ -525,7 +537,7 @@
 
 		String requeryAAIVolGrpNameResponse = execution.getVariable(prefix+"queryAAIVolGrpNameResponse")
 		String volumeGroupId = utils.getNodeText(requeryAAIVolGrpNameResponse, "volume-group-id")
-		String modelCustomizationId = execution.getVariable("modelCustomizationId")  
+		String modelCustomizationId = execution.getVariable("modelCustomizationId")
 		String cloudRegion = execution.getVariable("lcpCloudRegionId")
 
 		AaiUtil aaiUtil = new AaiUtil(this)
@@ -538,7 +550,7 @@
 
 		String createVnfAResponse = execution.getVariable(prefix+"createVnfAResponse")
 		def heatStackID = utils.getNodeText(createVnfAResponse, "volumeGroupStackId")
-		
+
 		execution.setVariable(prefix+"heatStackId", heatStackID)
 
 		NetworkUtils networkUtils = new NetworkUtils()
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVnf.groovy b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVnf.groovy
index 46a502e..7fa8b44 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVnf.groovy
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVnf.groovy
@@ -43,6 +43,7 @@
 import org.onap.so.client.aai.entities.uri.AAIResourceUri
 import org.onap.so.client.aai.entities.uri.AAIUriFactory;
 import org.springframework.web.util.UriUtils
+import org.json.JSONObject
 
 
 /**
@@ -247,6 +248,32 @@
 		msoLogger.trace("COMPLETED DoCreateVnf PreProcessRequest Process")
 	}
 
+	/**
+	 * Gets the service instance from aai
+	 */
+	public void getServiceInstance(DelegateExecution execution) {
+		try {
+			String serviceInstanceId = execution.getVariable('DoCVNF_serviceInstanceId')
+
+			AAIResourcesClient resourceClient = new AAIResourcesClient()
+			AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, serviceInstanceId)
+
+			if(resourceClient.exists(uri)){
+				execution.setVariable("GENGS_siResourceLink", uri.build().toString())
+
+			}else{
+				exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Service instance was not found in aai")
+			}
+
+		}catch(BpmnError e) {
+			throw e;
+		}catch(Exception ex) {
+			String msg = "Exception in getServiceInstance. " + ex.getMessage()
+			msoLogger.debug(msg)
+			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+		}
+	}
+
 	private Object getVariableEnforced(DelegateExecution execution, String name){
 		Object enforced = execution.getVariable(name)
 		if(!enforced){
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCustomDeleteE2EServiceInstanceV2.groovy b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCustomDeleteE2EServiceInstanceV2.groovy
index 20a7f43..21bf0f2 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCustomDeleteE2EServiceInstanceV2.groovy
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCustomDeleteE2EServiceInstanceV2.groovy
@@ -37,7 +37,14 @@
 import org.onap.so.logger.MsoLogger
 import org.onap.so.rest.APIResponse;
 import org.springframework.web.util.UriUtils;
-
+import org.onap.so.client.aai.AAIResourcesClient
+import org.onap.so.client.aai.AAIObjectType
+import org.onap.so.client.aai.entities.AAIResultWrapper
+import org.onap.so.client.aai.entities.Relationships
+import org.onap.so.client.aai.entities.uri.AAIResourceUri
+import org.onap.so.client.aai.entities.uri.AAIUriFactory
+import org.json.JSONObject
+import javax.ws.rs.NotFoundException
 import groovy.json.*
 
 
@@ -149,63 +156,32 @@
 		msoLogger.info("Exited " + method)
 	}
 
-
-
-	public void postProcessAAIGET(DelegateExecution execution) {
-		def method = getClass().getSimpleName() + '.postProcessAAIGET(' +'execution=' + execution.getId() +')'
-		msoLogger.info("Entered " + method)
-
-		String msg = ""
-
+	/**
+	 * Gets the service instance and its relationships from aai
+	 *
+	 * @author cb645j
+	 */
+	public void getServiceInstance(DelegateExecution execution) {
 		try {
-			String serviceInstanceId = execution.getVariable("serviceInstanceId")
-			msoLogger.info("serviceInstanceId: "+serviceInstanceId)
+			String serviceInstanceId = execution.getVariable('serviceInstanceId')
+			String globalSubscriberId = execution.getVariable('globalSubscriberId')
+			String serviceType = execution.getVariable('serviceType')
 
-			boolean foundInAAI = execution.getVariable("GENGS_FoundIndicator")
-			msoLogger.info("foundInAAI: "+foundInAAI)
+			AAIResourcesClient resourceClient = new AAIResourcesClient()
+			AAIResourceUri serviceInstanceUri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, globalSubscriberId, serviceType, serviceInstanceId)
+			AAIResultWrapper wrapper = resourceClient.get(serviceInstanceUri, NotFoundException.class)
+			String json = wrapper.getJson()
 
-			String serviceType = ""
+			execution.setVariable("serviceInstance", json)
 
-
-			if(foundInAAI){
-				msoLogger.info("Found Service-instance in AAI")
-
-				String siData = execution.getVariable("GENGS_service")
-				msoLogger.info("SI Data")
-				if (isBlank(siData))
-				{
-					msg = "Could not retrive ServiceInstance data from AAI to delete id:" + serviceInstanceId
-					msoLogger.info(msg)
-					exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
-				}
-
-			}else{
-				boolean succInAAI = execution.getVariable("GENGS_SuccessIndicator")
-				if(!succInAAI){
-					msoLogger.info("Error getting Service-instance from AAI", + serviceInstanceId)
-					WorkflowException workflowException = execution.getVariable("WorkflowException")
-					msoLogger.debug("workflowException: " + workflowException)
-					if(workflowException != null){
-						exceptionUtil.buildAndThrowWorkflowException(execution, workflowException.getErrorCode(), workflowException.getErrorMessage())
-					}
-					else
-					{
-						msg = "Failure in postProcessAAIGET GENGS_SuccessIndicator:" + succInAAI
-						msoLogger.info(msg)
-						exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg)
-					}
-				}
-
-				msoLogger.info("Service-instance NOT found in AAI. Silent Success")
-			}
-		}catch (BpmnError e) {
+		}catch(BpmnError e) {
 			throw e;
-		} catch (Exception ex) {
-			msg = "Bpmn error encountered in " + method + "--" + ex.getMessage()
-			msoLogger.info(msg)
+		}catch(NotFoundException e) {
+			msoLogger.info("SI not found in aai. Silent Success ")
+		}catch(Exception ex) {
+			String msg = "Internal Error in getServiceInstance: " + ex.getMessage()
 			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 		}
-		msoLogger.info("Exited " + method)
 	}
 
 	private void loadResourcesProperties(DelegateExecution execution) {
@@ -334,23 +310,14 @@
 
 			String serviceInstanceId = execution.getVariable("serviceInstanceId")
 
-			// confirm if ServiceInstance was found
-			if ( !execution.getVariable("GENGS_FoundIndicator") )
-			{
-				String exceptionMessage = "Bpmn error encountered in DeleteMobileAPNCustService flow. Service Instance was not found in AAI by id: " + serviceInstanceId
-				exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
-			}
 
 			execution.setVariable(Prefix+"resourceList", "")
 			execution.setVariable(Prefix+"resourceCount", 0)
 			execution.setVariable(Prefix+"nextResource", 0)
 			execution.setVariable(Prefix+"resourceFinish", true)
 
-			// get SI extracted by GenericGetService
-			String serviceInstanceAaiRecord = execution.getVariable("GENGS_service");
-			msoLogger.info("serviceInstanceAaiRecord: " +serviceInstanceAaiRecord)
-
-			String aaiJsonRecord = jsonUtil.xml2json(serviceInstanceAaiRecord)
+			String aaiJsonRecord = execution.getVariable("serviceInstance");
+			msoLogger.info("serviceInstanceAaiRecord: " +aaiJsonRecord)
 
 			msoLogger.info("aaiJsonRecord: " +aaiJsonRecord)
 			def serviceInstanceName = jsonUtil.getJsonValue(aaiJsonRecord, "service-instance.service-instance-name")
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeleteServiceInstance.groovy b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeleteServiceInstance.groovy
index 198144a..c7e3eb4 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeleteServiceInstance.groovy
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeleteServiceInstance.groovy
@@ -22,12 +22,10 @@
 
 import static org.apache.commons.lang3.StringUtils.*;
 
-import javax.xml.parsers.DocumentBuilder
-import javax.xml.parsers.DocumentBuilderFactory
-
 import org.apache.commons.lang3.*
 import org.camunda.bpm.engine.delegate.BpmnError
 import org.camunda.bpm.engine.delegate.DelegateExecution
+import org.onap.aai.domain.yang.ServiceInstance
 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
 import org.onap.so.bpmn.common.scripts.ExceptionUtil
 import org.onap.so.bpmn.common.scripts.MsoUtils
@@ -35,17 +33,13 @@
 import org.onap.so.bpmn.core.UrnPropertiesReader;
 import org.onap.so.bpmn.core.WorkflowException
 import org.onap.so.bpmn.core.json.JsonUtils
-import org.onap.so.logger.MsoLogger
-import org.onap.so.client.aai.entities.uri.AAIResourceUri
-import org.onap.so.client.aai.entities.uri.AAIUriFactory
 import org.onap.so.client.aai.AAIObjectType
 import org.onap.so.client.aai.AAIResourcesClient
+import org.onap.so.client.aai.entities.AAIResultWrapper
+import org.onap.so.client.aai.entities.uri.AAIResourceUri
+import org.onap.so.client.aai.entities.uri.AAIUriFactory
+import org.onap.so.logger.MsoLogger
 import org.springframework.web.util.UriUtils;
-import org.w3c.dom.Document
-import org.w3c.dom.Element
-import org.w3c.dom.Node
-import org.w3c.dom.NodeList
-import org.xml.sax.InputSource
 
 import groovy.json.*
 
@@ -282,170 +276,86 @@
 		msoLogger.trace("Exit postProcessSDNC " + method + " ")
 	}
 
-	public void postProcessAAIGET(DelegateExecution execution) {
-
-		msoLogger.trace("postProcessAAIGET ")
-		String msg = ""
-
+	/**
+	 * Gets the service instance uri from aai
+	 */
+	public void getServiceInstance(DelegateExecution execution) {
+		msoLogger.trace("getServiceInstance ")
 		try {
+			String serviceInstanceId = execution.getVariable('serviceInstanceId')
 
-			String serviceInstanceId = execution.getVariable("serviceInstanceId")
-			boolean foundInAAI = execution.getVariable("GENGS_FoundIndicator")
-			String serviceType = ""
+			AAIResourcesClient resourceClient = new AAIResourcesClient()
+			AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, serviceInstanceId)
 
-			if(foundInAAI == true){
-				msoLogger.debug("Found Service-instance in AAI")
-
-				//Extract GlobalSubscriberId
-				String siRelatedLink = execution.getVariable("GENGS_siResourceLink")
-				if (isBlank(siRelatedLink))
-				{
-					msg = "Could not retrive ServiceInstance data from AAI to delete id:" + serviceInstanceId
-					msoLogger.debug(msg)
-					exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
-				}
-				else
-				{
-					msoLogger.debug("Found Service-instance in AAI. link: " + siRelatedLink)
-					String  globalSubscriberId = execution.getVariable("globalSubscriberId")
-					if(isBlank(globalSubscriberId)){
-						int custStart = siRelatedLink.indexOf("customer/")
-						int custEnd = siRelatedLink.indexOf("/service-subscriptions")
-						globalSubscriberId = siRelatedLink.substring(custStart + 9, custEnd)
-						execution.setVariable("globalSubscriberId", globalSubscriberId)
-					}
-
-					//Extract Service Type if not provided on request
-					String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
-					if(isBlank(subscriptionServiceType)){
-						int serviceStart = siRelatedLink.indexOf("service-subscription/")
-						int serviceEnd = siRelatedLink.indexOf("/service-instances/")
-						String serviceTypeEncoded = siRelatedLink.substring(serviceStart + 21, serviceEnd)
-						subscriptionServiceType = UriUtils.decode(serviceTypeEncoded, "UTF-8")
-						execution.setVariable("subscriptionServiceType", subscriptionServiceType)
-					}
-
-					if (isBlank(globalSubscriberId) || isBlank(subscriptionServiceType))
-					{
-						msg = "Could not retrive global-customer-id & subscription-service-type from AAI to delete id:" + serviceInstanceId
-						msoLogger.debug(msg)
-						exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
-					}
+			if(resourceClient.exists(uri)){
+				execution.setVariable("GENGS_siResourceLink", uri.build().toString())
+				Map<String, String> keys = uri.getURIKeys()
+				String  globalSubscriberId = execution.getVariable("globalSubscriberId")
+				if(isBlank(globalSubscriberId)){
+					globalSubscriberId = keys.get("global-customer-id")
+					execution.setVariable("globalSubscriberId", globalSubscriberId)
 				}
 
-				String siData = execution.getVariable("GENGS_service")
-				msoLogger.debug("SI Data")
-				if (isBlank(siData))
-				{
-					msg = "Could not retrive ServiceInstance data from AAI to delete id:" + serviceInstanceId
-					msoLogger.debug(msg)
-					exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
+				//Extract Service Type if not provided on request
+				String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
+				if(isBlank(subscriptionServiceType)){
+					String serviceTypeEncoded = keys.get("service-type") //TODO will this produce as already decoded?
+					subscriptionServiceType = UriUtils.decode(serviceTypeEncoded, "UTF-8")
+					execution.setVariable("subscriptionServiceType", subscriptionServiceType)
 				}
-				else
-				{
-					msoLogger.debug("SI Data" + siData)
-					serviceType = utils.getNodeText(siData,"service-type")
+
+				AAIResultWrapper wrapper = resourceClient.get(uri)
+				List<AAIResourceUri> uriList = wrapper.getRelationships().get().getRelatedAAIUris(AAIObjectType.ALLOTTED_RESOURCE)
+				uriList.addAll(wrapper.getRelationships().get().getRelatedAAIUris(AAIObjectType.GENERIC_VNF))
+				uriList.addAll(wrapper.getRelationships().get().getRelatedAAIUris(AAIObjectType.L3_NETWORK))
+
+				if(uriList.isEmpty){
+					ServiceInstance si = wrapper.asBean(ServiceInstance.class)
+					String orchestrationStatus = si.getOrchestrationStatus()
+					String serviceType = si.getServiceType()
 					execution.setVariable("serviceType", serviceType)
-					execution.setVariable("serviceRole", utils.getNodeText(siData,"service-role"))
-					String orchestrationStatus =  utils.getNodeText(siData,"orchestration-status")
+					execution.setVariable("serviceRole", si.getServiceRole())
 
-					//Confirm there are no related service instances (vnf/network or volume)
-					if (utils.nodeExists(siData, "relationship-list")) {
-						msoLogger.debug("SI Data relationship-list exists:")
-						InputSource source = new InputSource(new StringReader(siData));
-						DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
-						DocumentBuilder docBuilder = docFactory.newDocumentBuilder()
-						Document serviceXml = docBuilder.parse(source)
-
-						NodeList nodeList = serviceXml.getElementsByTagName("relationship")
-						for (int x = 0; x < nodeList.getLength(); x++) {
-							Node node = nodeList.item(x)
-							if (node.getNodeType() == Node.ELEMENT_NODE) {
-								Element eElement = (Element) node
-								def e = eElement.getElementsByTagName("related-to").item(0).getTextContent()
-								if(e.equals("generic-vnf") || e.equals("l3-network") || e.equals("allotted-resource") ){
-									msoLogger.debug("ServiceInstance still has relationship(s) to generic-vnfs, l3-networks or allotted-resources")
-									execution.setVariable("siInUse", true)
-									//there are relationship dependencies to this Service Instance
-									msg = " Stopped deleting Service Instance, it has dependencies. Service instance id: " + serviceInstanceId
-									msoLogger.debug(msg)
-									exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg)
-								}else{
-									msoLogger.debug("Relationship NOT related to OpenStack")
-								}
-							}
-						}
-					}
-
-					if ("TRANSPORT".equalsIgnoreCase(serviceType))
-					{
-						if ("PendingDelete".equals(orchestrationStatus))
-						{
+					if("TRANSPORT".equalsIgnoreCase(serviceType)){
+						if("PendingDelete".equals(orchestrationStatus)){
 							execution.setVariable("skipDeactivate", true)
+						}else{
+							exceptionUtil.buildAndThrowWorkflowException(execution, 500, "ServiceInstance of type TRANSPORT must in PendingDelete status to allow Delete. Orchestration-status: " + orchestrationStatus)
 						}
-						else
-						{
-							msg = "ServiceInstance of type TRANSPORT must in PendingDelete status to allow Delete. Orchestration-status:" + orchestrationStatus
-							msoLogger.debug(msg)
-							exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
-						}
-
 					}
 
-					//alacarte SIs are NOT sent to sdnc. exceptions are listed in config variable
 					String svcTypes = UrnPropertiesReader.getVariable("sdnc.si.svc.types",execution) ?: ""
-					msoLogger.debug("SDNC SI serviceTypes:" + svcTypes)
 					List<String> svcList = Arrays.asList(svcTypes.split("\\s*,\\s*"));
 					boolean isSdncService= false
-					for (String listEntry : svcList){
-						if (listEntry.equalsIgnoreCase(serviceType)){
+					for(String listEntry : svcList){
+						if(listEntry.equalsIgnoreCase(serviceType)){
 							isSdncService = true
 							break;
 						}
 					}
-
-					//All Macros are sent to SDNC, TRANSPORT(Macro) is sent to SDNW
-					//Alacartes are sent to SDNC if they are listed in config variable above
 					execution.setVariable("sendToSDNC", true)
-					if(execution.getVariable("sdncVersion").equals("1610")) //alacarte
-					{
+					if(execution.getVariable("sdncVersion").equals("1610")){
 						if(!isSdncService){
 							execution.setVariable("sendToSDNC", false)
 						}
 					}
 
-					msoLogger.debug("isSdncService: " + isSdncService)
-					msoLogger.debug("Send To SDNC: " + execution.getVariable("sendToSDNC"))
-					msoLogger.debug("Service Type: " + execution.getVariable("serviceType"))
-
+				}else{
+					execution.setVariable("siInUse", true)
+					msoLogger.debug("Stopped deleting Service Instance, it has dependencies")
+					exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Stopped deleting Service Instance, it has dependencies")
 				}
 			}else{
-				boolean succInAAI = execution.getVariable("GENGS_SuccessIndicator")
-				if(succInAAI != true){
-					msoLogger.debug("Error getting Service-instance from AAI", + serviceInstanceId)
-					WorkflowException workflowException = execution.getVariable("WorkflowException")
-					msoLogger.debug("workflowException: " + workflowException)
-					if(workflowException != null){
-						exceptionUtil.buildAndThrowWorkflowException(execution, workflowException.getErrorCode(), workflowException.getErrorMessage())
-					}
-					else
-					{
-						msg = "Failure in postProcessAAIGET GENGS_SuccessIndicator:" + succInAAI
-						msoLogger.debug(msg)
-						exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg)
-					}
-				}
-
-				msoLogger.debug("Service-instance NOT found in AAI. Silent Success")
+				exceptionUtil.buildAndThrowWorkflowException(execution, 500, "ServiceInstance not found in aai")
 			}
-		} catch (BpmnError e) {
+
+		}catch(BpmnError e) {
 			throw e;
-		} catch (Exception ex) {
-			msg = "Exception in DoDeleteServiceInstance.postProcessAAIGET. " + ex.getMessage()
+		}catch (Exception ex){
+			String msg = "Exception in getServiceInstance. " + ex.getMessage()
 			msoLogger.debug(msg)
 			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 		}
-		msoLogger.trace("Exit postProcessAAIGET ")
 	}
 
 	/**
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoUpdateE2EServiceInstance.groovy b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoUpdateE2EServiceInstance.groovy
index 5fb6a9d..cb50fbb 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoUpdateE2EServiceInstance.groovy
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoUpdateE2EServiceInstance.groovy
@@ -2,14 +2,14 @@
  * ============LICENSE_START=======================================================
  * ONAP - SO
  * ================================================================================
- * Copyright (C) 2018 Huawei Technologies Co., Ltd. All rights reserved. 
+ * Copyright (C) 2018 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -53,7 +53,7 @@
  * @param - serviceDecomposition_Original
  * @param - addResourceList
  * @param - delResourceList
- * 
+ *
  * Outputs:
  * @param - rollbackData (localRB->null)
  * @param - rolledBack (no localRB->null, localRB F->false, localRB S->true)
@@ -63,15 +63,15 @@
 
 	String Prefix="DUPDSI_"
 	private static final String DebugFlag = "isDebugEnabled"
-	
+
 	ExceptionUtil exceptionUtil = new ExceptionUtil()
 	JsonUtils jsonUtil = new JsonUtils()
 
 	public void preProcessRequest (DelegateExecution execution) {
 		def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
 		utils.log("INFO"," ***** Enter DoUpdateE2EServiceInstance preProcessRequest *****",  isDebugEnabled)
-		
-		String msg = ""	
+
+		String msg = ""
 
 		try {
 			execution.setVariable("prefix", Prefix)
@@ -79,11 +79,11 @@
 			//for AAI GET & PUT & SDNC assignToplology
 			String globalSubscriberId = execution.getVariable("globalSubscriberId") //globalCustomerId
 			utils.log("INFO"," ***** globalSubscriberId *****" + globalSubscriberId,  isDebugEnabled)
-			
+
 			//for AAI PUT & SDNC assignTopology
 			String serviceType = execution.getVariable("serviceType")
 			utils.log("INFO"," ***** serviceType *****" + serviceType,  isDebugEnabled)
-			
+
 			//for SDNC assignTopology
 			String productFamilyId = execution.getVariable("productFamilyId") //AAI productFamilyId
 
@@ -92,14 +92,14 @@
 				utils.log("INFO", msg, isDebugEnabled)
 				exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
 			}
-			
+
 			if (isBlank(serviceType)) {
 				msg = "Input serviceType is null"
 				utils.log("INFO", msg, isDebugEnabled)
 				exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
 			}
-			
-			//Generated in parent for AAI 
+
+			//Generated in parent for AAI
 			String serviceInstanceId = execution.getVariable("serviceInstanceId")
 			if (isBlank(serviceInstanceId)){
 				msg = "Input serviceInstanceId is null"
@@ -108,21 +108,21 @@
 			}
 
 			String serviceInstanceName = execution.getVariable("serviceInstanceName")
-			
+
 			// user params
 			String uuiRequest = execution.getVariable("uuiRequest")
-            
+
 			// target model Invariant uuid
 			String modelInvariantUuid = jsonUtil.getJsonValue(uuiRequest, "service.serviceInvariantUuid")
-			execution.setVariable("modelInvariantUuid", modelInvariantUuid)            
-			utils.log("INFO", "modelInvariantUuid: " + modelInvariantUuid, isDebugEnabled)            
-            
+			execution.setVariable("modelInvariantUuid", modelInvariantUuid)
+			utils.log("INFO", "modelInvariantUuid: " + modelInvariantUuid, isDebugEnabled)
+
 			// target model uuid
 			String modelUuid = jsonUtil.getJsonValue(uuiRequest, "service.serviceUuid")
 			execution.setVariable("modelUuid", modelUuid)
-			
+
 			utils.log("INFO","modelUuid: " + modelUuid, isDebugEnabled)
-				
+
 		} catch (BpmnError e) {
 			throw e;
 		} catch (Exception ex){
@@ -130,10 +130,10 @@
 			utils.log("INFO", msg, isDebugEnabled)
 			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 		}
-		utils.log("INFO", "======== COMPLETED preProcessRequest Process ======== ", isDebugEnabled)  
+		utils.log("INFO", "======== COMPLETED preProcessRequest Process ======== ", isDebugEnabled)
 	}
 
-	
+
 	public void preInitResourcesOperStatus(DelegateExecution execution){
         def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
 
@@ -161,7 +161,7 @@
 			for(Resource resource : resourceList){
 				resourceTemplateUUIDs  = resourceTemplateUUIDs + resource.getModelInfo().getModelCustomizationUuid() + ":"
 			}
-			
+
 			def dbAdapterEndpoint = "http://mso.mso.testlab.openecomp.org:8080/dbadapters/RequestsDbAdapter"
 			execution.setVariable("CVFMI_dbAdapterEndpoint", dbAdapterEndpoint)
 			utils.log("INFO", "DB Adapter Endpoint is: " + dbAdapterEndpoint, isDebugEnabled)
@@ -189,34 +189,34 @@
             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("INFO", "======== COMPLETED preInitResourcesOperStatus Process ======== ", isDebugEnabled)  
+        utils.log("INFO", "======== COMPLETED preInitResourcesOperStatus Process ======== ", isDebugEnabled)
     }
-    
+
 
     public void preProcessForAddResource(DelegateExecution execution) {
         def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
 		utils.log("INFO"," ***** preProcessForAddResource ***** ", isDebugEnabled)
-		
+
 	    execution.setVariable("operationType", "create")
-		
+
 		execution.setVariable("hasResourcetoAdd", false)
 		List<Resource> addResourceList =  execution.getVariable("addResourceList")
 		if(addResourceList != null && !addResourceList.isEmpty()) {
-			execution.setVariable("hasResourcetoAdd", true)			
+			execution.setVariable("hasResourcetoAdd", true)
 		}
-	
+
 		utils.log("INFO"," *** Exit preProcessForAddResource *** ", isDebugEnabled)
     }
 
     public void postProcessForAddResource(DelegateExecution execution) {
         def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
 		utils.log("INFO"," ***** postProcessForAddResource ***** ", isDebugEnabled)
-		
+
 		execution.setVariable("operationType", "update")
 
 		utils.log("INFO"," *** Exit postProcessForAddResource *** ", isDebugEnabled)
     }
-    
+
 	public void preProcessForDeleteResource(DelegateExecution execution) {
 		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
 		utils.log("INFO"," ***** preProcessForDeleteResource ***** ", isDebugEnabled)
@@ -232,7 +232,7 @@
 
 		if(hasResourcetoDelete) {
 			def jsonSlurper = new JsonSlurper()
-			String serviceRelationShip = execution.getVariable("serviceRelationShip")			
+			String serviceRelationShip = execution.getVariable("serviceRelationShip")
 			List relationShipList =  jsonSlurper.parseText(serviceRelationShip)
 
 			//Set the real resource instance id to the decomosed resource list
@@ -249,7 +249,7 @@
 				}
 			}
 		}
-		
+
 		execution.setVariable("deleteResourceList", delResourceList)
 
 		utils.log("INFO"," *** Exit preProcessForDeleteResource *** ", isDebugEnabled)
@@ -258,60 +258,13 @@
     public void postProcessForDeleteResource(DelegateExecution execution) {
         def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
 		utils.log("INFO"," ***** postProcessForDeleteResource ***** ", isDebugEnabled)
-		
+
 		execution.setVariable("operationType", "update")
 
 		utils.log("INFO"," *** Exit postProcessForDeleteResource *** ", isDebugEnabled)
-    } 
-    
-	public void preProcessAAIGET(DelegateExecution execution) {
-        def isDebugEnabled=execution.getVariable("isDebugLogEnabled")	
-	}
-    	
-	public void postProcessAAIGET(DelegateExecution execution) {
-		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
-		utils.log("INFO"," ***** postProcessAAIGET ***** ", isDebugEnabled)
-		String msg = ""
+    }
 
-		try {
-			String serviceInstanceName = execution.getVariable("serviceInstanceName")
-			boolean succInAAI = execution.getVariable("GENGS_SuccessIndicator")
-			if(!succInAAI){
-				utils.log("INFO","Error getting Service-instance from AAI in postProcessAAIGET", + serviceInstanceName, isDebugEnabled)
-				WorkflowException workflowException = execution.getVariable("WorkflowException")
-				utils.logAudit("workflowException: " + workflowException)
-				if(workflowException != null){
-					exceptionUtil.buildAndThrowWorkflowException(execution, workflowException.getErrorCode(), workflowException.getErrorMessage())
-				}
-				else
-				{
-					msg = "Failure in postProcessAAIGET GENGS_SuccessIndicator:" + succInAAI
-					utils.log("INFO", msg, isDebugEnabled)
-					exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg)
-				}
-			}
-			else
-			{
-				boolean foundInAAI = execution.getVariable("GENGS_FoundIndicator")
-				if(foundInAAI){
-					String aaiService = execution.getVariable("GENGS_service")
-					if (!isBlank(aaiService) && (utils.nodeExists(aaiService, "resource-version"))) {
-						execution.setVariable("serviceInstanceVersion",  utils.getNodeText(aaiService, "resource-version"))
-						utils.log("INFO","Found Service-instance in AAI.serviceInstanceName:" + execution.getVariable("serviceInstanceName"), isDebugEnabled)
-					}
-				}
-			}
-		} catch (BpmnError e) {
-			throw e;
-		} catch (Exception ex) {
-			msg = "Exception in DoUpdateE2EServiceInstance.postProcessAAIGET " + ex.getMessage()
-			utils.log("INFO", msg, isDebugEnabled)
-			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
-		}
-		utils.log("INFO"," *** Exit postProcessAAIGET *** ", isDebugEnabled)
-	}
-
-	public void preProcessAAIPUT(DelegateExecution execution) {		
+	public void preProcessAAIPUT(DelegateExecution execution) {
 		def method = getClass().getSimpleName() + '.preProcessRequest(' +'execution=' + execution.getId() +')'
 		def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
 		utils.log("INFO","Entered " + method, isDebugEnabled)
@@ -321,7 +274,7 @@
 
 		String serviceInstanceVersion = execution.getVariable("serviceInstanceVersion")
 		//execution.setVariable("GENPS_serviceResourceVersion", serviceInstanceVersion)
-        
+
 		//requestDetails.modelInfo.for AAI PUT servieInstanceData
 		//requestDetails.requestInfo. for AAI GET/PUT serviceInstanceData
 		String serviceInstanceName = execution.getVariable("serviceInstanceName")
@@ -334,7 +287,7 @@
 
 
 		AaiUtil aaiUriUtil = new AaiUtil(this)
-		utils.log("INFO","start create aai uri: " + aaiUriUtil, isDebugEnabled)	
+		utils.log("INFO","start create aai uri: " + aaiUriUtil, isDebugEnabled)
 		String aai_uri = aaiUriUtil.getBusinessCustomerUri(execution)
 		utils.log("INFO","aai_uri: " + aai_uri, isDebugEnabled)
 		String namespace = aaiUriUtil.getNamespaceFromUri(aai_uri)
@@ -349,7 +302,7 @@
                     <service-role>${MsoUtils.xmlEscape(aaiServiceRole)}</service-role>
                     <resource-version>${MsoUtils.xmlEscape(serviceInstanceVersion)}</resource-version>
                     <model-invariant-id>${MsoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-id>
-                    <model-version-id>${MsoUtils.xmlEscape(modelUuid)}</model-version-id>                    
+                    <model-version-id>${MsoUtils.xmlEscape(modelUuid)}</model-version-id>
 				 </service-instance>""".trim()
 
 		execution.setVariable("serviceInstanceData", serviceInstanceData)
@@ -357,10 +310,10 @@
 		utils.logAudit(serviceInstanceData)
 		utils.log("INFO", " aai_uri " + aai_uri + " namespace:" + namespace, isDebugEnabled)
 		utils.log("INFO", " 'payload' to update Service Instance in AAI - " + "\n" + serviceInstanceData, isDebugEnabled)
-	
+
 		utils.log("INFO", "Exited " + method, isDebugEnabled)
-	}	
-	
+	}
+
 	public void postProcessAAIPUT(DelegateExecution execution) {
 		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
 		utils.log("INFO"," ***** postProcessAAIPUT ***** ", isDebugEnabled)
@@ -397,13 +350,13 @@
 			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 		}
 		utils.log("INFO"," *** Exit postProcessAAIPUT *** ", isDebugEnabled)
-	}	
+	}
 
 	public void preProcessRollback (DelegateExecution execution) {
 		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
 		utils.log("INFO"," ***** preProcessRollback ***** ", isDebugEnabled)
 		try {
-			
+
 			Object workflowException = execution.getVariable("WorkflowException");
 
 			if (workflowException instanceof WorkflowException) {
@@ -441,11 +394,11 @@
 		utils.log("INFO"," *** Exit postProcessRollback *** ", isDebugEnabled)
 	}
 
-        
+
 	public void postConfigRequest(execution){
 	    //now do noting
 	}
 
-	
+
 }
-	
+
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoUpdateE2EServiceInstanceRollback.groovy b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoUpdateE2EServiceInstanceRollback.groovy
index a2d94ba..b5a8c89 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoUpdateE2EServiceInstanceRollback.groovy
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoUpdateE2EServiceInstanceRollback.groovy
@@ -7,9 +7,9 @@
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -67,13 +67,13 @@
 		execution.setVariable("rollbackAAI",false)
 		execution.setVariable("rollbackAdded",false)
 		execution.setVariable("rollbackDeleted",false)
-		
+
 		List addResourceList = execution.getVariable("addResourceList")
         List delResourceList = execution.getVariable("delResourceList")
         execution.setVariable("addResourceList_o",  addResourceList)
         execution.setVariable("delResourceList_o",  delResourceList)
         //exchange add and delete resource list
-        execution.setVariable("addResourceList",  delResourceList)        
+        execution.setVariable("addResourceList",  delResourceList)
         execution.setVariable("delResourceList",  addResourceList)
 
 		try {
@@ -103,14 +103,14 @@
 					{
 						execution.setVariable("rollbackAdded", true)
 					}
-					
+
 					def rollbackDeleted = rollbackData.get("SERVICEINSTANCE", "rollbackDeleted")
 					if ("true".equals(rollbackDeleted))
 					{
 						execution.setVariable("rollbackDeleted", true)
-					}					
+					}
 
-					if (execution.getVariable("rollbackAAI") != true && execution.getVariable("rollbackAdded") != true 
+					if (execution.getVariable("rollbackAAI") != true && execution.getVariable("rollbackAdded") != true
 					  && execution.getVariable("rollbackDeleted") != true)
 					{
 						execution.setVariable("skipRollback", true)
@@ -148,7 +148,7 @@
 			boolean rollbackAAI = execution.getVariable("rollbackAAI")
 			boolean rollbackAdded = execution.getVariable("rollbackAdded")
 			boolean rollbackDeleted = execution.getVariable("rollbackDeleted")
-			
+
 			List addResourceList = execution.getVariable("addResourceList_o")
 			List delResourceList = execution.getVariable("delResourceList_o")
 			execution.setVariable("addResourceList",  addResourceList)
@@ -177,66 +177,21 @@
 			msoLogger.debug(msg)
 		}
 	}
-	
-    
+
+
     public void preProcessForAddResource(DelegateExecution execution) {
     }
 
     public void postProcessForAddResource(DelegateExecution execution) {
     }
-    
+
     public void preProcessForDeleteResource(DelegateExecution execution) {
     }
 
     public void postProcessForDeleteResource(DelegateExecution execution) {
-    } 
+    }
 
-	public void preProcessAAIGET(DelegateExecution execution) {
-	}
-    	
-	public void postProcessAAIGET(DelegateExecution execution) {
-		msoLogger.trace("postProcessAAIGET ")
-		String msg = ""
-
-		try {
-			String serviceInstanceName = execution.getVariable("serviceInstanceName")
-			boolean succInAAI = execution.getVariable("GENGS_SuccessIndicator")
-			if(!succInAAI){
-				msoLogger.info("Error getting Service-instance from AAI in postProcessAAIGET", + serviceInstanceName)
-				WorkflowException workflowException = execution.getVariable("WorkflowException")
-				msoLogger.debug("workflowException: " + workflowException)
-				if(workflowException != null){
-					exceptionUtil.buildAndThrowWorkflowException(execution, workflowException.getErrorCode(), workflowException.getErrorMessage())
-				}
-				else
-				{
-					msg = "Failure in postProcessAAIGET GENGS_SuccessIndicator:" + succInAAI
-					msoLogger.info(msg)
-					exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg)
-				}
-			}
-			else
-			{
-				boolean foundInAAI = execution.getVariable("GENGS_FoundIndicator")
-				if(foundInAAI){
-					String aaiService = execution.getVariable("GENGS_service")
-					if (!isBlank(aaiService) && (utils.nodeExists(aaiService, "resource-version"))) {
-						execution.setVariable("serviceInstanceVersion_n",  utils.getNodeText(aaiService, "resource-version"))
-						msoLogger.info("Found Service-instance in AAI.serviceInstanceName:" + execution.getVariable("serviceInstanceName"))
-					}
-				}
-			}
-		} catch (BpmnError e) {
-			throw e;
-		} catch (Exception ex) {
-			msg = "Exception in DoCreateServiceInstance.postProcessAAIGET " + ex.getMessage()
-			msoLogger.info(msg)
-			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
-		}
-		msoLogger.trace("Exit postProcessAAIGET ")
-	}    
-
-	public void preProcessAAIPUT(DelegateExecution execution) {		
+	public void preProcessAAIPUT(DelegateExecution execution) {
 		def method = getClass().getSimpleName() + '.preProcessRequest(' +'execution=' + execution.getId() +')'
 		msoLogger.info("Entered " + method)
 		String msg = ""
@@ -244,7 +199,7 @@
 
 		String serviceInstanceVersion = execution.getVariable("serviceInstanceVersion_n")
 //		execution.setVariable("GENPS_serviceResourceVersion", serviceInstanceVersion)
-        
+
 		//requestDetails.modelInfo.for AAI PUT servieInstanceData
 		//requestDetails.requestInfo. for AAI GET/PUT serviceInstanceData
 		String serviceInstanceName = execution.getVariable("serviceInstanceName")
@@ -255,7 +210,7 @@
 		String modelInvariantUuid = execution.getVariable("modelInvariantUuid")
 		String modelUuid = execution.getVariable("model-version-id-original")
 
-		//AAI PUT      
+		//AAI PUT
 		AaiUtil aaiUriUtil = new AaiUtil(this)
 		utils.log("INFO","start create aai uri: " + aaiUriUtil, isDebugEnabled)
 		String aai_uri = aaiUriUtil.getBusinessCustomerUri(execution)
@@ -271,7 +226,7 @@
                     <service-role>${MsoUtils.xmlEscape(aaiServiceRole)}</service-role>
                     <resource-version>${MsoUtils.xmlEscape(serviceInstanceVersion)}</resource-version>
                     <model-invariant-id>${MsoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-id>
-                    <model-version-id>${MsoUtils.xmlEscape(modelUuid)}</model-version-id>   
+                    <model-version-id>${MsoUtils.xmlEscape(modelUuid)}</model-version-id>
 				 </service-instance>""".trim()
 
 		execution.setVariable("serviceInstanceData", serviceInstanceData)
@@ -279,10 +234,10 @@
 		msoLogger.debug(serviceInstanceData)
 		msoLogger.info(" aai_uri " + aai_uri + " namespace:" + namespace)
 		msoLogger.info(" 'payload' to update Service Instance in AAI - " + "\n" + serviceInstanceData)
-	
+
 		msoLogger.info("Exited " + method)
-	}	
-	
+	}
+
 	public void postProcessAAIPUT(DelegateExecution execution) {
 		msoLogger.trace("postProcessAAIPUT ")
 		String msg = ""
@@ -299,7 +254,7 @@
 			}
 			else
 			{
-				
+
 			}
 
 		} catch (BpmnError e) {
@@ -310,7 +265,7 @@
 			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 		}
 		msoLogger.trace("Exit postProcessAAIPUT ")
-	}	
+	}
 
 	public void processRollbackException(DelegateExecution execution){
 		msoLogger.trace("processRollbackException ")
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoUpdateNetworkInstance.groovy b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoUpdateNetworkInstance.groovy
index 7272f42..4f6fbf9 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoUpdateNetworkInstance.groovy
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoUpdateNetworkInstance.groovy
@@ -7,9 +7,9 @@
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -37,6 +37,15 @@
 import org.onap.so.rest.APIResponse
 import org.springframework.web.util.UriUtils
 
+import org.onap.so.client.aai.AAIResourcesClient
+import org.onap.so.client.aai.AAIObjectType
+import org.onap.so.client.aai.entities.AAIResultWrapper
+import org.onap.so.client.aai.entities.Relationships
+import org.onap.so.client.aai.entities.uri.AAIResourceUri
+import org.onap.so.client.aai.entities.uri.AAIUriFactory
+import org.json.JSONObject
+import javax.ws.rs.NotFoundException
+
 import groovy.json.*
 import groovy.xml.XmlUtil
 
@@ -46,7 +55,7 @@
  */
 public class DoUpdateNetworkInstance extends AbstractServiceTaskProcessor {
 	private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, DoUpdateNetworkInstance.class);
-	
+
 	String Prefix="UPDNETI_"
 	ExceptionUtil exceptionUtil = new ExceptionUtil()
 	JsonUtils jsonUtil = new JsonUtils()
@@ -109,7 +118,7 @@
 		execution.setVariable(Prefix + "networkTableRefUriList", null)
 		execution.setVariable(Prefix + "networkTableRefCount", 0)
 		execution.setVariable(Prefix + "tableRefCollection", "")
-		
+
 		// AAI requery Id
 		execution.setVariable(Prefix + "requeryIdAAIRequest","")
 		execution.setVariable(Prefix + "requeryIdAAIResponse", "")
@@ -137,9 +146,9 @@
 		execution.setVariable(Prefix + "isVnfBindingPresent", false)
 		execution.setVariable(Prefix + "Success", false)
 		execution.setVariable(Prefix + "serviceInstanceId", "")
-		
+
 		execution.setVariable(Prefix + "isException", false)
-		
+
 	}
 
 	// **************************************************
@@ -158,7 +167,7 @@
 		try {
 			// initialize flow variables
 			InitializeProcessVariables(execution)
-	
+
 			// GET Incoming request & validate 3 kinds of format.
 			execution.setVariable("action", "UPDATE")
 			String networkRequest = execution.getVariable("bpmnRequest")
@@ -169,7 +178,7 @@
 						def prettyJson = JsonOutput.prettyPrint(networkRequest.toString())
 						msoLogger.debug(" Incoming message formatted . . . : " + '\n' + prettyJson)
 						networkRequest =  vidUtils.createXmlNetworkRequestInfra(execution, networkRequest)
-		
+
 					} catch (Exception ex) {
 						String dataErrorMessage = " Invalid json format Request - " + ex.getMessage()
 						msoLogger.debug(dataErrorMessage)
@@ -177,27 +186,27 @@
 					}
 				} else {
 					 // XML format request is sent
-				   
+
 				}
 			} else {
 				// vIPR format request is sent, create xml from individual variables
 				networkRequest = vidUtils.createXmlNetworkRequestInstance(execution)
 			}
-			
+
 			networkRequest = utils.formatXml(networkRequest)
 			msoLogger.debug(networkRequest)
 			execution.setVariable(Prefix + "networkRequest", networkRequest)
 			msoLogger.debug(" network-request - " + '\n' + networkRequest)
-		
+
 			// validate 'disableRollback'  (aka, 'suppressRollback')
 			boolean rollbackEnabled = networkUtils.isRollbackEnabled(execution, networkRequest)
 			execution.setVariable(Prefix + "rollbackEnabled", rollbackEnabled)
 			msoLogger.debug(Prefix + "rollbackEnabled - " + rollbackEnabled)
-										
+
 			String networkInputs = utils.getNodeXml(networkRequest, "network-inputs", false).replace("tag0:","").replace(":tag0","")
 			execution.setVariable(Prefix + "networkInputs", networkInputs)
 			msoLogger.debug(Prefix + "networkInputs - " + '\n' + networkInputs)
-			
+
 			// prepare messageId
 			String messageId = execution.getVariable(Prefix + "messageId")  // for testing
 			if (messageId == null || messageId == "") {
@@ -207,11 +216,11 @@
 				msoLogger.debug(" UPDNETI_messageId, pre-assigned: " + messageId)
 			}
 			execution.setVariable(Prefix + "messageId", messageId)
-			
+
 			String source = utils.getNodeText(networkRequest, "source")
 			execution.setVariable(Prefix + "source", source)
 			msoLogger.debug(Prefix + "source - " + source)
-			
+
 			String networkId = ""
 			if (utils.nodeExists(networkRequest, "network-id")) {
 				networkId = utils.getNodeText(networkRequest, "network-id")
@@ -221,10 +230,10 @@
 					String dataErrorMessage = "Variable 'network-id' value/element is missing."
 					msoLogger.debug(" Invalid Request - " + dataErrorMessage)
 					exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
-	
+
 				}
 			}
-	
+
 			String lcpCloudRegion = ""
 			if (utils.nodeExists(networkRequest, "aic-cloud-region")) {
 				lcpCloudRegion = utils.getNodeText(networkRequest, "aic-cloud-region")
@@ -235,7 +244,7 @@
 					exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 				}
 			}
-	
+
 			String serviceInstanceId = ""
 			if (utils.nodeExists(networkRequest, "service-instance-id")) {
 				serviceInstanceId = utils.getNodeText(networkRequest, "service-instance-id")
@@ -246,35 +255,33 @@
 					exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 				}
 			}
-			
+
 			// PO Authorization Info / headers Authorization=
 			String basicAuthValuePO = UrnPropertiesReader.getVariable("mso.adapters.po.auth",execution)
-			
+
 
 			try {
 				def encodedString = utils.getBasicAuth(basicAuthValuePO, UrnPropertiesReader.getVariable("mso.msoKey", execution))
 				execution.setVariable("BasicAuthHeaderValuePO",encodedString)
 				execution.setVariable("BasicAuthHeaderValueSDNC", encodedString)
-	
+
 			} catch (IOException ex) {
 				String exceptionMessage = "Exception Encountered in DoUpdateNetworkInstance, PreProcessRequest() - "
 				String dataErrorMessage = exceptionMessage + " Unable to encode PO/SDNC user/password string - " + ex.getMessage()
 				msoLogger.debug(dataErrorMessage)
 				exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 			}
-			
+
 			// Set variables for Generic Get Sub Flow use
 			execution.setVariable(Prefix + "serviceInstanceId", serviceInstanceId)
 			msoLogger.debug(Prefix + "serviceInstanceId - " + serviceInstanceId)
-	
-			execution.setVariable("GENGS_type", "service-instance")
-			msoLogger.debug("GENGS_type - " + "service-instance")
+
 			msoLogger.debug(" Url for SDNC adapter: " + UrnPropertiesReader.getVariable("mso.adapters.sdnc.endpoint",execution))
-			
+
 			String sdncVersion = execution.getVariable("sdncVersion")
 			msoLogger.debug("sdncVersion? : " + sdncVersion)
-			
-			// build 'networkOutputs'			
+
+			// build 'networkOutputs'
 			networkId = utils.getNodeText(networkRequest, "network-id")
 			if ((networkId == null) || (networkId == "null")) {
 				networkId = ""
@@ -292,7 +299,7 @@
 			msoLogger.debug(Prefix + "networkOutputs - " + '\n' + networkOutputs)
 			execution.setVariable(Prefix + "networkId", networkId)
 			execution.setVariable(Prefix + "networkName", networkName)
-		
+
 
 		} catch (BpmnError e) {
 			throw e;
@@ -307,6 +314,31 @@
 		}
 	}
 
+	/**
+	 * Gets the service instance uri from aai
+	 *
+	 */
+	public void getServiceInstance(DelegateExecution execution) {
+		msoLogger.trace("getServiceInstance ")
+		try {
+			String serviceInstanceId = execution.getVariable('serviceInstanceId')
+
+			AAIResourcesClient resourceClient = new AAIResourcesClient()
+			AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, serviceInstanceId)
+
+			if(!resourceClient.exists(uri)){
+				exceptionUtil.buildAndThrowWorkflowException(execution, 7000, "Service Instance not found in aai")
+			}
+
+		}catch(BpmnError e) {
+			throw e;
+		}catch (Exception ex){
+			String msg = "Exception in getServiceInstance. " + ex.getMessage()
+			msoLogger.debug(msg)
+			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+		}
+	}
+
 	public void callRESTQueryAAICloudRegion (DelegateExecution execution) {
 
 		execution.setVariable("prefix", Prefix)
@@ -383,7 +415,7 @@
 			String returnCode = response.getStatusCode()
 			execution.setVariable(Prefix + "aaiIdReturnCode", returnCode)
 			msoLogger.debug(" ***** AAI Response Code  : " + returnCode)
-			
+
 			String aaiResponseAsString = response.getResponseBodyAsString()
 
 			if (returnCode=='200') {
@@ -462,12 +494,12 @@
 				String netName = utils.getNodeText(aaiResponseAsString, "network-name")
 				String networkOutputs =
 				   """<network-outputs>
-                   <network-id>${MsoUtils.xmlEscape(netId)}</network-id>			
+                   <network-id>${MsoUtils.xmlEscape(netId)}</network-id>
                    <network-name>${MsoUtils.xmlEscape(netName)}</network-name>
                  </network-outputs>"""
 				execution.setVariable(Prefix + "networkOutputs", networkOutputs)
 				msoLogger.debug(" networkOutputs - " + '\n' + networkOutputs)
-				
+
 			} else {
 				if (returnCode=='404') {
 					String dataErrorMessage = "Response Error from ReQueryAAINetworkId is 404 (Not Found)."
@@ -866,13 +898,13 @@
 							String dataErrorMessage = "Response Error from QueryAAINetworkTableRef is 404 (Not Found)."
 							msoLogger.debug(dataErrorMessage)
 							exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
-							
+
 						} else {
 						   if (aaiResponseAsString.contains("RESTFault")) {
 							   WorkflowException exceptionObject = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution)
 							   execution.setVariable("WorkflowException", exceptionObject)
 							   throw new BpmnError("MSOWorkflowException")
-		
+
 							   } else {
 									// aai all errors
 									String dataErrorMessage = "Unexpected Response from QueryAAINetworkTableRef - " + returnCode
@@ -908,7 +940,7 @@
 
 		} catch (BpmnError e) {
 			throw e;
-			
+
 		} catch (Exception ex) {
 			String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTQueryAAINetworkTableRef() - " + ex.getMessage()
 			msoLogger.debug(exceptionMessage)
@@ -917,7 +949,7 @@
 		}
 
 	}
-	
+
 	public void callRESTUpdateContrailAAINetwork(DelegateExecution execution) {
 
 		execution.setVariable("prefix", Prefix)
@@ -953,7 +985,7 @@
 			APIResponse response = aaiUriUtil.executeAAIPutCall(execution, updateContrailAAIUrlRequest, payload)
 			String returnCode = response.getStatusCode()
 			String aaiUpdateContrailResponseAsString = response.getResponseBodyAsString()
-			
+
 			execution.setVariable(Prefix + "aaiUpdateContrailReturnCode", returnCode)
 			msoLogger.debug(" ***** AAI Update Contrail Response Code  : " + returnCode)
 
@@ -1015,7 +1047,7 @@
 			String queryIdResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
 			String cloudRegionId = execution.getVariable(Prefix + "cloudRegionPo")
 			String backoutOnFailure = execution.getVariable(Prefix + "rollbackEnabled")
-			
+
 			// Prepare Network request
 			String routeCollection = execution.getVariable(Prefix + "routeCollection")
 			String policyCollection = execution.getVariable(Prefix + "networkCollection")
@@ -1057,7 +1089,7 @@
 			if (networkId == null) {networkId = ""}
 
 			String serviceInstanceId = utils.getNodeText(updateNetworkInput, "service-instance-id")
-			
+
 			String queryAAIResponse = execution.getVariable(Prefix + "queryIdAAIResponse")
 
 			// 1. prepare assign topology via SDNC Adapter SUBFLOW call
@@ -1078,7 +1110,7 @@
 
 	}
 
-	
+
 
 
 	// **************************************************
@@ -1212,7 +1244,7 @@
 				execution.setVariable(Prefix + "Success", true)
 				msoLogger.debug(" ***** postProcessResponse(), GOOD !!!")
 			} else {
-				execution.setVariable(Prefix + "Success", false) 
+				execution.setVariable(Prefix + "Success", false)
 				execution.setVariable("rollbackData", null)
 				String exceptionMessage = " Exception encountered in MSO Bpmn. "
 				if (execution.getVariable("workflowException") != null) {  // Output of Rollback flow.
@@ -1223,18 +1255,18 @@
 			       if (execution.getVariable(Prefix + "WorkflowException") != null) {
 				      WorkflowException pwfex = execution.getVariable(Prefix + "WorkflowException")
 				      exceptionMessage = pwfex.getErrorMessage()
-			       }   
+			       }
    				}
 			    // going to the Main flow: a-la-carte or macro
 			    msoLogger.debug(" ***** postProcessResponse(), BAD !!!")
 			    exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
 				throw new BpmnError("MSOWorkflowException")
 			}
-							
+
 		} catch(BpmnError b){
 		     msoLogger.debug("Rethrowing MSOWorkflowException")
 		     throw b
-			
+
 
 		} catch (Exception ex) {
 			String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. postProcessResponse() - " + ex.getMessage()
@@ -1253,7 +1285,7 @@
 		msoLogger.trace("Inside prepareSDNCRollbackRequest of DoUpdateNetworkInstance ")
 
 		try {
-			// for some reason the WorkflowException object is null after the sdnc rollback call task, need to save WorkflowException. 
+			// for some reason the WorkflowException object is null after the sdnc rollback call task, need to save WorkflowException.
 			execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
 			// get variables
 			String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
@@ -1282,11 +1314,11 @@
 	public void prepareRollbackData(DelegateExecution execution) {
 
 		execution.setVariable("prefix",Prefix)
-		
+
 		msoLogger.trace("Inside prepareRollbackData() of DoUpdateNetworkInstance ")
-		
+
 		try {
-			
+
 			Map<String, String> rollbackData = new HashMap<String, String>();
 			String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
 			if (rollbackSDNCRequest != null) {
@@ -1302,33 +1334,33 @@
 			}
 			execution.setVariable("rollbackData", rollbackData)
 			msoLogger.debug("** rollbackData : " + rollbackData)
-			
+
 			execution.setVariable("WorkflowException", execution.getVariable(Prefix + "WorkflowException"))
 			msoLogger.debug("** WorkflowException : " + execution.getVariable("WorkflowException"))
-			
+
 		} catch (Exception ex) {
 			String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareRollbackData() - " + ex.getMessage()
 			msoLogger.debug(exceptionMessage)
 			exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
-		
+
 		}
-		
+
 	}
-	
+
 	public void prepareSuccessRollbackData(DelegateExecution execution) {
 
 		execution.setVariable("prefix",Prefix)
-		
+
 		msoLogger.trace("Inside prepareSuccessRollbackData() of DoUpdateNetworkInstance ")
-		
+
 		try {
-			
+
 			if (execution.getVariable("sdncVersion") != '1610') {
 				// skip: 1702 for 'changeassign' or equivalent not yet defined in SNDC, so no rollback.
 			} else {
 				prepareSDNCRollbackRequest(execution)
 			}
-			
+
 			Map<String, String> rollbackData = new HashMap<String, String>();
 			String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
 			if (rollbackSDNCRequest != null) {
@@ -1343,43 +1375,43 @@
 				}
 			}
 			execution.setVariable("rollbackData", rollbackData)
-			
+
 			msoLogger.debug("** 'rollbackData' for Full Rollback : " + rollbackData)
 			execution.setVariable("WorkflowException", null)
 
-			
+
 		} catch (Exception ex) {
 			String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareSuccessRollbackData() - " + ex.getMessage()
 			msoLogger.debug(exceptionMessage)
 			exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
-		
+
 		}
-		
+
 	}
-	
+
 	public void setExceptionFlag(DelegateExecution execution){
 
 		execution.setVariable("prefix",Prefix)
-		
+
 		msoLogger.trace("Inside setExceptionFlag() of DoUpdateNetworkInstance ")
-		
+
 		try {
-			
+
 			execution.setVariable(Prefix + "isException", true)
-			
+
 			if (execution.getVariable("SavedWorkflowException1") != null) {
 				execution.setVariable(Prefix + "WorkflowException", execution.getVariable("SavedWorkflowException1"))
 			} else {
 				execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
 			}
 			msoLogger.debug(Prefix + "WorkflowException - " +execution.getVariable(Prefix + "WorkflowException"))
-			
+
 		} catch(Exception ex){
 			  String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. setExceptionFlag(): " + ex.getMessage()
 			msoLogger.debug(exceptionMessage)
 			exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
 		}
-		
+
 	}
 
 
@@ -1396,7 +1428,7 @@
 			msoLogger.debug("Variables List: " + execution.getVariables())
 			execution.setVariable("UnexpectedError", "Caught a Java Lang Exception - "  + Prefix)  // Adding this line temporarily until this flows error handling gets updated
 			exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")
-			
+
 		}catch(Exception e){
 			msoLogger.debug("Caught Exception during processJavaException Method: " + e)
 			execution.setVariable("UnexpectedError", "Exception in processJavaException method")  // Adding this line temporarily until this flows error handling gets updated
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/UpdateCustomE2EServiceInstance.groovy b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/UpdateCustomE2EServiceInstance.groovy
index 538f882..ac8e506 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/UpdateCustomE2EServiceInstance.groovy
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/UpdateCustomE2EServiceInstance.groovy
@@ -2,14 +2,14 @@
  * ============LICENSE_START=======================================================
  * ONAP - SO
  * ================================================================================
- * Copyright (C) 2018 Huawei Technologies Co., Ltd. All rights reserved. 
+ * Copyright (C) 2018 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -22,17 +22,25 @@
 
 import static org.apache.commons.lang3.StringUtils.*;
 
+import javax.ws.rs.NotFoundException
+
 import org.apache.commons.lang3.*
 import org.camunda.bpm.engine.delegate.BpmnError
 import org.camunda.bpm.engine.delegate.DelegateExecution
 import org.json.JSONArray
 import org.json.JSONObject
+import org.onap.aai.domain.yang.ServiceInstance
 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
 import org.onap.so.bpmn.common.scripts.ExceptionUtil
 import org.onap.so.bpmn.common.scripts.MsoUtils
 import org.onap.so.bpmn.core.WorkflowException
 import org.onap.so.bpmn.core.domain.Resource
 import org.onap.so.bpmn.core.json.JsonUtils
+import org.onap.so.client.aai.AAIObjectType
+import org.onap.so.client.aai.AAIResourcesClient
+import org.onap.so.client.aai.entities.AAIResultWrapper
+import org.onap.so.client.aai.entities.uri.AAIResourceUri
+import org.onap.so.client.aai.entities.uri.AAIUriFactory
 import org.springframework.web.util.UriUtils
 
 import groovy.json.*
@@ -68,7 +76,7 @@
 				msg = "Input serviceInstanceId' is null"
 				exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
 			}
-						
+
 			//subscriberInfo for aai
 			String globalSubscriberId = jsonUtil.getJsonValue(siRequest, "requestDetails.subscriberInfo.globalSubscriberId")
 			if (isBlank(globalSubscriberId)) {
@@ -86,16 +94,16 @@
 			if (isBlank(productFamilyId))
 			{
 				msg = "Input productFamilyId is null"
-				utils.log("INFO", msg, isDebugEnabled)				
+				utils.log("INFO", msg, isDebugEnabled)
 			} else {
 				execution.setVariable("productFamilyId", productFamilyId)
 			}
-			
+
 			 //user params
-	         String userParams = jsonUtil.getJsonValue(siRequest, "requestDetails.requestParameters.userParams")      
+	         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")			
+	         String uuiRequest = jsonUtil.getJsonValue(paramList.get(0), "UUIRequest")
 			if (isBlank(uuiRequest)) {
 				msg = "Input uuiRequest is null"
 				utils.log("INFO", msg, isDebugEnabled)
@@ -116,34 +124,34 @@
 			} else {
 				execution.setVariable("serviceType", serviceType)
 			}
-			
+
 			// target model info
 			String modelInvariantUuid = jsonUtil.getJsonValue(uuiRequest, "service.serviceInvariantUuid")
 			utils.log("INFO","modelInvariantUuid: " + modelInvariantUuid, isDebugEnabled)
 			execution.setVariable("modelInvariantUuid", modelInvariantUuid)
 			execution.setVariable("model-invariant-id-target", modelInvariantUuid)
-			
+
 			String modelUuid = jsonUtil.getJsonValue(uuiRequest, "service.serviceUuid")
 			utils.log("INFO","modelUuid: " + modelUuid, isDebugEnabled)
 			execution.setVariable("modelUuid", modelUuid)
 			execution.setVariable("model-version-id-target", modelUuid)
-			
+
 			String serviceModelName = jsonUtil.getJsonValue(uuiRequest, "service.parameters.templateName")
 			utils.log("INFO","serviceModelName: " + serviceModelName, isDebugEnabled)
 			if(serviceModelName == null) {
 				serviceModelName = ""
 			}
-			execution.setVariable("serviceModelName", serviceModelName)			
-			
+			execution.setVariable("serviceModelName", serviceModelName)
+
 			//operationId
 			String operationId = jsonUtil.getJsonValue(siRequest, "operationId")
 		 	if (isBlank(operationId)) {
 		 		operationId = UUID.randomUUID().toString()
-		 	 }   
-			execution.setVariable("operationId", operationId) 
+		 	 }
+			execution.setVariable("operationId", operationId)
 			execution.setVariable("operationType", "update")
 			execution.setVariable("hasResourcetoUpdate", false)
-			
+
 			execution.setVariable("URN_mso_adapters_openecomp_db_endpoint","http://mso.mso.testlab.openecomp.org:8080/dbadapters/RequestsDbAdapter")
 
 		} catch (BpmnError e) {
@@ -155,164 +163,69 @@
 		}
 		utils.log("INFO"," ***** Exit preProcessRequest *****",  isDebugEnabled)
 	}
-	
-	
-	public void postProcessAAIGET(DelegateExecution execution) {
-		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
-		utils.log("INFO"," ***** postProcessAAIGET ***** ", isDebugEnabled)
-		String msg = ""
 
+	/**
+	 * Gets the service instance and its relationships from aai
+	 */
+	public void getServiceInstance(DelegateExecution execution) {
 		try {
-			String serviceInstanceId = execution.getVariable("serviceInstanceId")
-			boolean foundInAAI = execution.getVariable("GENGS_FoundIndicator")
-			String serviceType = ""
+			String serviceInstanceId = execution.getVariable('serviceInstanceId')
+			String globalSubscriberId = execution.getVariable('globalSubscriberId')
+			String serviceType = execution.getVariable('serviceType')
 
-			if(foundInAAI){
-				utils.log("INFO","Found Service-instance in AAI", isDebugEnabled)
+			AAIResourcesClient resourceClient = new AAIResourcesClient()
+			AAIResourceUri serviceInstanceUri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, globalSubscriberId, serviceType, serviceInstanceId)
+			AAIResultWrapper wrapper = resourceClient.get(serviceInstanceUri, NotFoundException.class)
 
-				String siData = execution.getVariable("GENGS_service")
-				utils.log("INFO", "SI Data", isDebugEnabled)
-				if (isBlank(siData))
-				{
-					msg = "Could not retrive ServiceInstance data from AAI, Id:" + serviceInstanceId
-					utils.log("INFO", msg, isDebugEnabled)
-					exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
-				}
+			ServiceInstance si = wrapper.asBean(ServiceInstance.class)
+			execution.setVariable("serviceInstanceName", si.getServiceInstanceName())
+			execution.setVariable("model-invariant-id-original", si.getModelInvariantId())
+			execution.setVariable("model-version-id-original", si.getModelVersionId())
 
-				utils.log("INFO", "SI Data" + siData, isDebugEnabled)
-				
-				// serviceInstanceName
-				String serviceInstanceName = execution.getVariable("serviceInstanceName")
-				if(isBlank(serviceInstanceName) && utils.nodeExists(siData, "service-instance-name")) {
-					serviceInstanceName =  utils.getNodeText(siData, "service-instance-name")
-					execution.setVariable("serviceInstanceName", serviceInstanceName)
-				}
+			JSONObject ob = new JSONObject(wrapper.getJson())
+			JSONArray ar = ob.getJSONObject("relationship-list").getJSONArray("relationship")
 
-				// Get Template uuid and version
-				if (utils.nodeExists(siData, "model-invariant-id") && utils.nodeExists(siData, "model-version-id") ) {
-					utils.log("INFO", "SI Data model-invariant-id and model-version-id exist:", isDebugEnabled)
+			execution.setVariable("serviceRelationShip", ar.toString())
 
-					def modelInvariantId  = utils.getNodeText(siData, "model-invariant-id")
-					def modelVersionId  = utils.getNodeText(siData, "model-version-id")
 
-					// Set Original Template info
-					execution.setVariable("model-invariant-id-original", modelInvariantId)
-					execution.setVariable("model-version-id-original", modelVersionId)
-				}
-				
-				//get related service instances (vnf/network or volume) for delete
-				if (utils.nodeExists(siData, "relationship-list")) {
-					utils.log("INFO", "SI Data relationship-list exists:", isDebugEnabled)
-
-					JSONArray jArray = new JSONArray()
-
-					XmlParser xmlParser = new XmlParser()
-					Node root = xmlParser.parseText(siData)
-					def relation_list = utils.getChildNode(root, 'relationship-list')
-					def relationships = utils.getIdenticalChildren(relation_list, 'relationship')
-
-					for (def relation: relationships) {
-						def jObj = getRelationShipData(relation, isDebugEnabled)
-						jArray.put(jObj)
-					}
-
-					execution.setVariable("serviceRelationShip", jArray.toString())
-				}
-			}else{
-				boolean succInAAI = execution.getVariable("GENGS_SuccessIndicator")
-				if(!succInAAI){
-					utils.log("INFO","Error getting Service-instance from AAI", + serviceInstanceId, isDebugEnabled)
-					WorkflowException workflowException = execution.getVariable("WorkflowException")
-					utils.logAudit("workflowException: " + workflowException)
-					if(workflowException != null){
-						exceptionUtil.buildAndThrowWorkflowException(execution, workflowException.getErrorCode(), workflowException.getErrorMessage())
-					}
-					else
-					{
-						msg = "Failure in postProcessAAIGET GENGS_SuccessIndicator:" + succInAAI
-						utils.log("INFO", msg, isDebugEnabled)
-						exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg)
-					}
-				}
-
-				utils.log("INFO","Service-instance NOT found in AAI. Silent Success", isDebugEnabled)
-			}
-		}catch (BpmnError e) {
+		}catch(BpmnError e) {
 			throw e;
-		} catch (Exception ex) {
-			msg = "Exception in DoDeleteE2EServiceInstance.postProcessAAIGET. " + ex.getMessage()
-			utils.log("INFO", msg, isDebugEnabled)
+		}catch(NotFoundException e) {
+			exceptionUtil.buildAndThrowWorkflowException(execution, 404, "Service-instance does not exist AAI")
+		}catch(Exception ex) {
+			String msg = "Internal Error in getServiceInstance: " + ex.getMessage()
 			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 		}
-		utils.log("INFO"," *** Exit postProcessAAIGET *** ", isDebugEnabled)
 	}
-	
-	private JSONObject getRelationShipData(node, isDebugEnabled){
-		JSONObject jObj = new JSONObject()
-		
-		def relation  = utils.nodeToString(node)
-		def rt  = utils.getNodeText(relation, "related-to")
-		
-		def rl  = utils.getNodeText(relation, "related-link")
-		utils.log("INFO", "ServiceInstance Related NS/Configuration :" + rl, isDebugEnabled)
-		
-		def rl_datas = utils.getIdenticalChildren(node, "relationship-data")
-		for(def rl_data : rl_datas) {
-			def eKey =  utils.getChildNodeText(rl_data, "relationship-key")
-			def eValue = utils.getChildNodeText(rl_data, "relationship-value")
 
-			if ((rt == "service-instance" && eKey.equals("service-instance.service-instance-id"))
-			//for overlay/underlay
-			|| (rt == "configuration" && eKey.equals("configuration.configuration-id"))){
-				jObj.put("resourceInstanceId", eValue)
-			}
-		}
-
-		def rl_props = utils.getIdenticalChildren(node, "related-to-property")
-		for(def rl_prop : rl_props) {
-			def eKey =  utils.getChildNodeText(rl_prop, "property-key")
-			def eValue = utils.getChildNodeText(rl_prop, "property-value")
-			if((rt == "service-instance" && eKey.equals("service-instance.service-instance-name"))
-			//for overlay/underlay
-			|| (rt == "configuration" && eKey.equals("configuration.configuration-type"))){
-				jObj.put("resourceType", eValue)
-			}
-		}
-
-		utils.log("INFO", "Relationship related to Resource:" + jObj.toString(), isDebugEnabled)
-
-		return jObj
-	}
-	
-	
 	public void preCompareModelVersions(DelegateExecution execution) {
 		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
 	}
 
-	public void postCompareModelVersions(DelegateExecution execution) {		
+	public void postCompareModelVersions(DelegateExecution execution) {
 		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
 		utils.log("DEBUG", " ======== STARTED postCompareModelVersions Process ======== ", isDebugEnabled)
-		
+
 		def hasResourcetoUpdate = false
 		def hasResourcetoAdd = false
 		def hasResourcetoDelete = false
 		List<Resource> addResourceList =  execution.getVariable("addResourceList")
 		List<Resource> delResourceList =  execution.getVariable("delResourceList")
-		
+
 		if(addResourceList != null && !addResourceList.isEmpty()) {
 			hasResourcetoAdd = true
 		}
-				
+
 		if(delResourceList != null && !delResourceList.isEmpty()) {
 			hasResourcetoDelete = true
 		}
-		
+
 		hasResourcetoUpdate = hasResourcetoAdd || hasResourcetoDelete
 		execution.setVariable("hasResourcetoUpdate", hasResourcetoUpdate)
-		
-		utils.log("DEBUG", "======== COMPLETED postCompareModelVersions Process ======== ", isDebugEnabled)		
+
+		utils.log("DEBUG", "======== COMPLETED postCompareModelVersions Process ======== ", isDebugEnabled)
 	}
-	
+
 	/**
 	 * Init the service Operation Status
 	 */
@@ -367,28 +280,28 @@
 		}
 		utils.log("DEBUG", "======== COMPLETED prepareInitServiceOperationStatus Process ======== ", isDebugEnabled)
 	}
-	
+
 	/**
 	 * Update the service Operation Status
 	 */
-	public void preUpdateServiceOperationStatus(DelegateExecution execution){		
+	public void preUpdateServiceOperationStatus(DelegateExecution execution){
 		def method = getClass().getSimpleName() + '.preUpdateServiceOperationStatus(' +'execution=' + execution.getId() +')'
 		def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
 		utils.log("INFO","Entered " + method, isDebugEnabled)
-		
+
 		try{
 			String serviceId = execution.getVariable("serviceInstanceId")
 			String operationId = execution.getVariable("operationId")
 			String operationType = execution.getVariable("operationType")
 			String serviceName = execution.getVariable("serviceInstanceName")
-			String result = execution.getVariable("operationResult")						
+			String result = execution.getVariable("operationResult")
 			String progress = execution.getVariable("progress")
 			String reason = execution.getVariable("operationReason")
 			String userId = ""
 			utils.log("INFO", "progress: " + progress , isDebugEnabled)
 
 			String operationContent = "Prepare service : " + execution.getVariable("operationStatus")
-			
+
 			utils.log("INFO", "Generated new operation for Service Instance serviceId:" + serviceId + " operationId:" + operationId, isDebugEnabled)
 			serviceId = UriUtils.encode(serviceId,"UTF-8")
 			execution.setVariable("serviceInstanceId", serviceId)
@@ -421,7 +334,7 @@
 			payload = utils.formatXml(payload)
 			execution.setVariable("CVFMI_updateServiceOperStatusRequest", payload)
 			utils.log("INFO", "Outgoing preUpdateServiceOperationStatus: \n" + payload, isDebugEnabled)
-		   
+
 
 		}catch(Exception e){
 			utils.log("ERROR", "Exception Occured Processing preUpdateServiceOperationStatus. Exception is:\n" + e, isDebugEnabled)
@@ -429,7 +342,7 @@
 		}
 		utils.log("INFO", "======== COMPLETED preUpdateServiceOperationStatus Process ======== ", isDebugEnabled)
 		utils.log("INFO", "Exited " + method, isDebugEnabled)
-	}		
+	}
 
 	public void sendSyncResponse (DelegateExecution execution) {
 		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
@@ -438,7 +351,7 @@
 		try {
 			String operationId = execution.getVariable("operationId")
 			def hasResourcetoUpdate = execution.getVariable("hasResourcetoUpdate")
-			
+
 			String updateServiceResp = ""
 			if(hasResourcetoUpdate) {
 				// RESTResponse for API Handler (APIH) Reply Task
@@ -447,7 +360,7 @@
 			else {
 				updateServiceResp =  """{"OperationResult":"No Resource to Add or Delete or Service Instance not found in AAI."}"""
 			}
-			
+
 			utils.log("INFO", " sendSyncResponse to APIH:" + "\n" + updateServiceResp, isDebugEnabled)
 			sendWorkflowResponse(execution, 202, updateServiceResp)
 			execution.setVariable("sentSyncResponse", true)
@@ -498,7 +411,7 @@
 			String requestId = execution.getVariable("msoRequestId")
 			String serviceInstanceId = execution.getVariable("serviceInstanceId")
 			String source = execution.getVariable("source")
-			
+
 			String msoCompletionRequest =
 					"""<aetgt:MsoCompletionRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
 								xmlns:ns="http://org.onap/so/request/types/v1">
@@ -566,5 +479,5 @@
 			execution.setVariable("falloutRequest", falloutRequest)
 		}
 		utils.log("INFO", "*** Exit prepareFalloutRequest ***", isDebugEnabled)
-	}	
+	}
 }
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/vcpe/scripts/DeleteVcpeResCustService.groovy b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/vcpe/scripts/DeleteVcpeResCustService.groovy
index eaf3631..85993d6 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/vcpe/scripts/DeleteVcpeResCustService.groovy
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/vcpe/scripts/DeleteVcpeResCustService.groovy
@@ -7,9 +7,9 @@
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -33,6 +33,14 @@
 import org.onap.so.logger.MessageEnum
 import org.onap.so.logger.MsoLogger
 import org.onap.so.rest.APIResponse
+import org.onap.so.client.aai.AAIResourcesClient
+import org.onap.so.client.aai.AAIObjectType
+import org.onap.so.client.aai.entities.AAIResultWrapper
+import org.onap.so.client.aai.entities.Relationships
+import org.onap.so.client.aai.entities.uri.AAIResourceUri
+import org.onap.so.client.aai.entities.uri.AAIUriFactory
+import javax.ws.rs.NotFoundException
+import org.json.JSONObject
 
 import static org.apache.commons.lang3.StringUtils.isBlank
 
@@ -100,7 +108,7 @@
 				String dataErrorMessage = " Element 'serviceInstanceId' is missing. "
 				exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 			}
-			
+
 			String requestAction = execution.getVariable("requestAction")
 			execution.setVariable("requestAction", requestAction)
 
@@ -117,20 +125,20 @@
 
 			execution.setVariable("globalSubscriberId", globalSubscriberId)
 			execution.setVariable("globalCustomerId", globalSubscriberId)
-			
+
 			String suppressRollback = jsonUtil.getJsonValue(DeleteVcpeResCustServiceRequest, "requestDetails.requestInfo.suppressRollback")
 			execution.setVariable("disableRollback", suppressRollback)
 			msoLogger.debug("Incoming Suppress/Disable Rollback is: " + suppressRollback)
-			
+
 			String productFamilyId = jsonUtil.getJsonValue(DeleteVcpeResCustServiceRequest, "requestDetails.requestInfo.productFamilyId")
 			execution.setVariable("productFamilyId", productFamilyId)
 			msoLogger.debug("Incoming productFamilyId is: " + productFamilyId)
-			
+
 			// extract subscriptionServiceType
 			String subscriptionServiceType = jsonUtil.getJsonValue(DeleteVcpeResCustServiceRequest, "requestDetails.requestParameters.subscriptionServiceType")
 			execution.setVariable("subscriptionServiceType", subscriptionServiceType)
 			msoLogger.debug("Incoming subscriptionServiceType is: " + subscriptionServiceType)
-			
+
 			// extract cloud configuration
 			String cloudConfiguration = jsonUtil.getJsonValue(DeleteVcpeResCustServiceRequest, "requestDetails.cloudConfiguration")
 			execution.setVariable("cloudConfiguration", cloudConfiguration)
@@ -145,7 +153,7 @@
 			String sdncVersion = "1707"
 			execution.setVariable("sdncVersion", sdncVersion)
 			msoLogger.debug("sdncVersion: "+ sdncVersion)
-			
+
 			//For Completion Handler & Fallout Handler
 			String requestInfo =
 			"""<request-info xmlns="http://org.onap/so/infra/vnf-request/v1">
@@ -155,10 +163,7 @@
 				   </request-info>"""
 
 			execution.setVariable(Prefix+"requestInfo", requestInfo)
-			
-			//Setting for Generic Sub Flows
-			execution.setVariable("GENGS_type", "service-instance")
-			
+
 			msoLogger.trace("Completed preProcessRequest DeleteVcpeResCustServiceRequest Request ")
 
 		} catch (BpmnError e) {
@@ -189,120 +194,87 @@
 		}
 	}
 
-	public void prepareServiceDelete(DelegateExecution execution) {
-		def isDebugEnabled=execution.getVariable(DebugFlag)
-		msoLogger.trace("Inside prepareServiceDelete() of DeleteVcpeResCustService ")
-		
+	/**
+	 * Gets the service instance and its related resources from aai
+	 *
+	 * @author cb645j
+	 */
+	public void getServiceInstance(DelegateExecution execution) {
 		try {
-			
-			String serviceInstanceId = execution.getVariable("serviceInstanceId")
-			
-			// confirm if ServiceInstance was found
-			if ( !execution.getVariable("GENGS_FoundIndicator") )
-			{
-				String exceptionMessage = "Bpmn error encountered in DeleteVcpeResCustService flow. Service Instance was not found in AAI by id: " + serviceInstanceId
-				exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
-			}
-			
-			// get variable within incoming json
-			String DeleteVcpeResCustServiceRequest = execution.getVariable("DeleteVcpeResCustServiceRequest");
-			
-			// get SI extracted by GenericGetService
-			String serviceInstanceAaiRecord = execution.getVariable("GENGS_service");
-			
-			msoLogger.debug("serviceInstanceAaiRecord: "+serviceInstanceAaiRecord)
-			serviceInstanceAaiRecord = utils.removeXmlNamespaces(serviceInstanceAaiRecord)
-			
-			def (TXC_found, TXC_id) = new Tuple(false, null)
-			def (BRG_found, BRG_id) = new Tuple(false, null)
-			List relatedVnfIdList = []
-			
-			for(Node rel: utils.getMultNodeObjects(serviceInstanceAaiRecord, "relationship")) {
-				def relto = utils.getChildNodeText(rel, "related-to")
-				def relink = utils.getChildNodeText(rel, "related-link")
-				msoLogger.debug("check: "+relto+" link: "+relink)
-				
-				if(isBlank(relto) || isBlank(relink)) {
-					
-				} else if(relto == "generic-vnf") {
-					def id = relink.substring(relink.indexOf("/generic-vnf/")+13)
-					if(id.endsWith("/")) {
-						id = id.substring(0, id.length()-1)
+			String serviceInstanceId = execution.getVariable('serviceInstanceId')
+
+			AAIResourcesClient resourceClient = new AAIResourcesClient()
+			AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, serviceInstanceId)
+
+			if(resourceClient.exists(uri)){
+				AAIResultWrapper wrapper = resourceClient.get(uri, NotFoundException.class)
+				Optional<Relationships> relationships = wrapper.getRelationships()
+
+				def (TXC_found, TXC_id) = new Tuple(false, null)
+				def (BRG_found, BRG_id) = new Tuple(false, null)
+				List relatedVnfIdList = []
+
+				if(relationships.isPresent()){
+
+					List<AAIResourceUri> vnfUris = relationships.get().getRelatedAAIUris(AAIObjectType.GENERIC_VNF)
+					for(AAIResourceUri u:vnfUris){
+						Map<String, String> keys = u.getURIKeys()
+						String vnfId = keys.get("vnf-id")
+						relatedVnfIdList.add(vnfId)
 					}
-					
-					relatedVnfIdList.add(id)
-					
-				} else if(relto == "allotted-resource") {
-					def (type, id) = getAaiAr(execution, relink)
-					
-					if(isBlank(type) || isBlank(id)) {
-						
-					} else if(type == "TunnelXConn" || type == "Tunnel XConn") {
-						msoLogger.debug("TunnelXConn AR found")
-						TXC_found = true
-						TXC_id = id
-						
-					} else if(type == "BRG") {
-						msoLogger.debug("BRG AR found")
-						BRG_found = true
-						BRG_id = id
+					List<AAIResourceUri> arUris = relationships.get().getRelatedAAIUris(AAIObjectType.ALLOTTED_RESOURCE)
+					for(AAIResourceUri u:arUris){
+						String ar = resourceClient.get(u).getJson()
+
+						def type = jsonUtil.getJsonValue(ar, "type")
+						def id = jsonUtil.getJsonValue(ar, "id")
+
+						if(type == "TunnelXConn" || type == "Tunnel XConn") {
+							msoLogger.debug("TunnelXConn AR found")
+							TXC_found = true
+							TXC_id = id
+
+						}else if(type == "BRG") {
+							msoLogger.debug("BRG AR found")
+							BRG_found = true
+							BRG_id = id
+						}
+
+						execution.setVariable(Prefix+"TunnelXConn", TXC_found)
+						execution.setVariable("TXC_allottedResourceId", TXC_id)
+						msoLogger.debug("TXC_allottedResourceId: " + TXC_id)
+
+						execution.setVariable(Prefix+"BRG", BRG_found)
+						execution.setVariable("BRG_allottedResourceId", BRG_id)
+						msoLogger.debug("BRG_allottedResourceId: " + BRG_id)
+
 					}
 				}
+
+				execution.setVariable(Prefix+"vnfsCount", relatedVnfIdList.size())
+				if(relatedVnfIdList.size() > 0) {
+					execution.setVariable(Prefix+"relatedVnfIdList", relatedVnfIdList)
+				}
+
+			}else{
+				exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Service Instance was not found in aai")
 			}
-			
-			execution.setVariable(Prefix+"TunnelXConn", TXC_found)
-			execution.setVariable("TXC_allottedResourceId", TXC_id)
-			msoLogger.debug("TXC_allottedResourceId: " + TXC_id)
-						
-			execution.setVariable(Prefix+"BRG", BRG_found)
-			execution.setVariable("BRG_allottedResourceId", BRG_id)
-			msoLogger.debug("BRG_allottedResourceId: " + BRG_id)
-			
-			int vnfsCount = relatedVnfIdList.size()
-			execution.setVariable(Prefix+"vnfsCount", vnfsCount)
-			msoLogger.debug(" "+Prefix+"vnfsCount : " + vnfsCount)
-			if(vnfsCount > 0) {
-				execution.setVariable(Prefix+"relatedVnfIdList", relatedVnfIdList)
-			}
-			
-			msoLogger.trace("Completed prepareServiceDelete() of DeleteVcpeResCustService ")
-		} catch (BpmnError e){
+
+		}catch(BpmnError e) {
 			throw e;
-		} catch (Exception ex) {
-			sendSyncError(execution)
-		    String exceptionMessage = "Bpmn error encountered in DeleteVcpeResCustService flow. prepareServiceDelete() - " + ex.getMessage()
-		    msoLogger.debug(exceptionMessage)
-		    exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
+		}catch(NotFoundException e) {
+			msoLogger.debug("Service Instance does not exist AAI")
+			exceptionUtil.buildAndThrowWorkflowException(execution, 404, "Service Instance was not found in aai")
+		}catch(Exception ex) {
+			String msg = "Internal Error in getServiceInstance: " + ex.getMessage()
+			msoLogger.debug(msg)
+			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 		}
 	}
-	
-	private getAaiAr(DelegateExecution execution, String relink) {
-		def isDebugEnabled = execution.getVariable(DebugFlag)
-		AaiUtil aaiUtil = new AaiUtil(this)
-		String aaiEndpoint = UrnPropertiesReader.getVariable("aai.endpoint",execution) + relink
-		
-		msoLogger.debug("get AR info " + aaiEndpoint)
-		APIResponse response = aaiUtil.executeAAIGetCall(execution, aaiEndpoint)
-		
-		int responseCode = response.getStatusCode()
-		msoLogger.debug("get AR info responseCode:" + responseCode)
-		
-		String aaiResponse = response.getResponseBodyAsString()
-		msoLogger.debug("get AR info " + aaiResponse)
-		
-		if(responseCode < 200 || responseCode >= 300 || isBlank(aaiResponse)) {
-			return new Tuple2(null, null)
-		}
-		
-		def type = utils.getNodeText(aaiResponse, "type")
-		def id = utils.getNodeText(aaiResponse, "id")
-		
-		return new Tuple2(type, id)
-	}
-	
-	
+
+
 	// *******************************
-	//     
+	//
 	// *******************************
 	public void prepareVnfAndModulesDelete (DelegateExecution execution) {
 		def isDebugEnabled=execution.getVariable(DebugFlag)
@@ -316,7 +288,7 @@
 			if (vnfList.size() > 0 ) {
 				vnfId = vnfList.get(vnfsDeletedCount.intValue())
 			}
-							
+
 			execution.setVariable("vnfId", vnfId)
 			msoLogger.debug("need to delete vnfId:" + vnfId)
 
@@ -327,7 +299,7 @@
 			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 		}
 	 }
-	
+
 	// *******************************
 	//     Validate Vnf request Section -> increment count
 	// *******************************
@@ -338,9 +310,9 @@
 		try {
 			int vnfsDeletedCount = execution.getVariable(Prefix+"vnfsDeletedCount")
 			vnfsDeletedCount++
-			
+
 			execution.setVariable(Prefix+"vnfsDeletedCount", vnfsDeletedCount)
-			
+
 			msoLogger.debug(" ***** Completed validateVnfDelete of DeleteVcpeResCustService ***** "+" vnf # "+vnfsDeletedCount)
 		} catch (Exception ex) {
 			// try error in method block
@@ -349,7 +321,7 @@
 		}
 	 }
 
-	
+
 	// *****************************************
 	//     Prepare Completion request Section
 	// *****************************************
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/vcpe/scripts/DoCreateAllottedResourceBRG.groovy b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/vcpe/scripts/DoCreateAllottedResourceBRG.groovy
index 8a8aa2b..3c08779 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/vcpe/scripts/DoCreateAllottedResourceBRG.groovy
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/vcpe/scripts/DoCreateAllottedResourceBRG.groovy
@@ -7,9 +7,9 @@
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -37,12 +37,19 @@
 
 import org.onap.so.logger.MessageEnum
 import org.onap.so.logger.MsoLogger
-
+import org.onap.so.client.aai.AAIResourcesClient
+import org.onap.so.client.aai.AAIObjectType
+import org.onap.so.client.aai.entities.AAIResultWrapper
+import org.onap.so.client.aai.entities.Relationships
+import org.onap.so.client.aai.entities.uri.AAIResourceUri
+import org.onap.so.client.aai.entities.uri.AAIUriFactory
+import org.json.JSONObject
+import javax.ws.rs.NotFoundException
 /**
  * This groovy class supports the <class>DoCreateAllottedResourceBRG.bpmn</class> process.
  *
  * @author
- * 
+ *
  * Inputs:
  * @param - msoRequestId
  * @param - isDEbugLogEnabled
@@ -57,15 +64,15 @@
  * @param - allottedResourceRole
  * @param - allottedResourceType
  * @param - brgWanMacAddress
- * @param - vni 
- * @param - vgmuxBearerIP 
+ * @param - vni
+ * @param - vgmuxBearerIP
  *
  * Outputs:
  * @param - rollbackData (localRB->null)
  * @param - rolledBack (no localRB->null, localRB F->false, localRB S->true)
  * @param - WorkflowException - O
  * @param - allottedResourceId
- * @param - allottedResourceName 
+ * @param - allottedResourceName
  *
  */
 public class DoCreateAllottedResourceBRG extends AbstractServiceTaskProcessor{
@@ -155,6 +162,33 @@
 		msoLogger.trace("end preProcessRequest")
 	}
 
+	/**
+	 * Gets the service instance uri from aai
+	 */
+	public void getServiceInstance(DelegateExecution execution) {
+		msoLogger.trace("getServiceInstance ")
+		try {
+			String serviceInstanceId = execution.getVariable('serviceInstanceId')
+
+			AAIResourcesClient resourceClient = new AAIResourcesClient()
+			AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, serviceInstanceId)
+
+			if(resourceClient.exists(uri)){
+				execution.setVariable("CSI_resourceLink", uri.build().toString())
+			}else{
+				exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Service instance was not found in aai")
+			}
+
+		}catch(BpmnError e) {
+			throw e;
+		}catch (Exception ex){
+			String msg = "Exception in getServiceInstance. " + ex.getMessage()
+			msoLogger.debug(msg)
+			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+		}
+		msoLogger.trace("Exit getServiceInstance ")
+	}
+
 	public void getAaiAR (DelegateExecution execution) {
 
 
@@ -193,6 +227,39 @@
 		msoLogger.trace("end getAaiAR")
 	}
 
+	public void getParentServiceInstance(DelegateExecution execution) {
+		msoLogger.trace("getParentServiceInstance ")
+		try {
+			String serviceInstanceId = execution.getVariable('parentServiceInstanceId')
+
+			AAIResourcesClient resourceClient = new AAIResourcesClient()
+			AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.NODES_QUERY, "").queryParam("search-node-type", "service-instance").queryParam("filter", "service-instance-id:EQUALS:" + serviceInstanceId)
+			String json = resourceClient.get(uri).getJson()
+
+			JSONObject obj = new JSONObject(json)
+			if(obj.has("result-data")){
+				JSONObject ob = obj.getJSONArray("result-data").getJSONObject(0)
+				String resourceLink = ob.getString("resource-link")
+
+				String[] split = resourceLink.split("/aai/")
+				String siRelatedLink = "/aai/" + split[1]
+
+				execution.setVariable("PSI_resourceLink", resourceLink)
+			}else{
+				exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Service instance was not found in aai")
+			}
+
+		}catch(BpmnError e) {
+			throw e;
+		}catch (Exception ex){
+			String msg = "Exception in getParentServiceInstance. " + ex.getMessage()
+			msoLogger.debug(msg)
+			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+		}
+		msoLogger.trace("Exit getParentServiceInstance ")
+	}
+
+
 	public void createAaiAR(DelegateExecution execution) {
 
 
@@ -387,9 +454,9 @@
 						<global-customer-id>${MsoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
 					</service-information>
 					<allotted-resource-information>
-						<allotted-resource-id>${MsoUtils.xmlEscape(allottedResourceId)}</allotted-resource-id>    
+						<allotted-resource-id>${MsoUtils.xmlEscape(allottedResourceId)}</allotted-resource-id>
 						<allotted-resource-type>brg</allotted-resource-type>
-						<parent-service-instance-id>${MsoUtils.xmlEscape(parentServiceInstanceId)}</parent-service-instance-id>   
+						<parent-service-instance-id>${MsoUtils.xmlEscape(parentServiceInstanceId)}</parent-service-instance-id>
 						<onap-model-information>
 							<model-invariant-uuid>${MsoUtils.xmlEscape(modelInvariantId)}</model-invariant-uuid>
 							<model-uuid>${MsoUtils.xmlEscape(modelUUId)}</model-uuid>
@@ -575,7 +642,7 @@
 
 			String serviceInstanceId = execution.getVariable("serviceInstanceId")
 			String sdncRequestId = UUID.randomUUID().toString()
-			
+
 			//neeed the same url as used by vfmodules
 			String SDNCGetRequest =
 			"""<sdncadapterworkflow:SDNCAdapterWorkflowRequest xmlns:ns5="http://org.onap/so/request/types/v1"
@@ -600,7 +667,7 @@
 		}
 		msoLogger.trace("end preProcessSDNCGet")
 	}
-	
+
 	public void updateAaiAROrchStatus(DelegateExecution execution, String status){
 
 		msoLogger.trace("start updateAaiAROrchStatus")
@@ -609,7 +676,7 @@
 		String orchStatus = arUtils.updateAROrchStatus(execution, status, aaiARPath)
 		msoLogger.trace("end updateAaiAROrchStatus")
 	}
-	
+
 	public void generateOutputs(DelegateExecution execution)
 	{
 
@@ -619,7 +686,7 @@
 			msoLogger.debug("resp:" + sdncGetResponse)
 			String arData = utils.getNodeXml(sdncGetResponse, "brg-topology")
 			arData = utils.removeXmlNamespaces(arData)
-		
+
 			String brga = utils.getNodeXml(arData, "brg-assignments")
 			String ari = utils.getNodeXml(arData, "allotted-resource-identifiers")
 			execution.setVariable("allotedResourceName", utils.getNodeText(ari, "allotted-resource-name"))
@@ -630,7 +697,7 @@
 			msoLogger.debug(msg)
 		}
 		msoLogger.trace("end generateOutputs")
-		
+
 	}
 
 	public void preProcessRollback (DelegateExecution execution) {
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/DeleteVcpeResCustService.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/DeleteVcpeResCustService.bpmn
index a835946..0d287eb 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/DeleteVcpeResCustService.bpmn
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/DeleteVcpeResCustService.bpmn
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_MagIIMOUEeW8asg-vCEgWQ" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.9.0" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
+<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_MagIIMOUEeW8asg-vCEgWQ" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.10.0" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
   <bpmn2:process id="DeleteVcpeResCustService" name="DeleteVcpeResCustService" isExecutable="true">
     <bpmn2:scriptTask id="sendSyncAckResponse_ScriptTask" name="Send Sync Ack Response" scriptFormat="groovy">
       <bpmn2:incoming>SequenceFlow_7</bpmn2:incoming>
@@ -138,26 +138,12 @@
       <bpmn2:incoming>SequenceFlow_04ao07f</bpmn2:incoming>
       <bpmn2:linkEventDefinition name="FinishProcess" />
     </bpmn2:intermediateThrowEvent>
-    <bpmn2:callActivity id="callGetServiceInstance" name="Get&#10;Service&#10;Instance" calledElement="GenericGetService">
-      <bpmn2:extensionElements>
-        <camunda:in source="serviceInstanceId" target="GENGS_serviceInstanceId" />
-        <camunda:in source="isDebugLogEnabled" target="isDebugLogEnabled" />
-        <camunda:in source="GENGS_type" target="GENGS_type" />
-        <camunda:out source="GENGS_FoundIndicator" target="GENGS_FoundIndicator" />
-        <camunda:out source="GENGS_FoundIndicator" target="GENGS_FoundIndicator" />
-        <camunda:out source="GENGS_service" target="GENGS_service" />
-        <camunda:out source="WorkflowException" target="WorkflowException" />
-        <camunda:out source="GENGS_siResourceLink" target="GENGS_siResourceLink" />
-      </bpmn2:extensionElements>
+    <bpmn2:scriptTask id="ScriptTask_05m3m2e" name="&#10;AAI&#10;Query&#10;(svc instance)&#10;" scriptFormat="groovy">
       <bpmn2:incoming>SequenceFlow_0jek18q</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_1ttswdr</bpmn2:outgoing>
-    </bpmn2:callActivity>
-    <bpmn2:scriptTask id="ScriptTask_05m3m2e" name="Process Response &#38; ready data for subflows" scriptFormat="groovy">
-      <bpmn2:incoming>SequenceFlow_1ttswdr</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_18103ca</bpmn2:outgoing>
       <bpmn2:script><![CDATA[import org.onap.so.bpmn.vcpe.scripts.*
 def DeleteVcpeResCustService = new DeleteVcpeResCustService()
-DeleteVcpeResCustService.prepareServiceDelete(execution)]]></bpmn2:script>
+DeleteVcpeResCustService.getServiceInstance(execution)]]></bpmn2:script>
     </bpmn2:scriptTask>
     <bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_112zjtp" name="QueryServiceInstance">
       <bpmn2:outgoing>SequenceFlow_0jek18q</bpmn2:outgoing>
@@ -167,10 +153,9 @@
       <bpmn2:incoming>SequenceFlow_18103ca</bpmn2:incoming>
       <bpmn2:linkEventDefinition name="DeleteBRG" />
     </bpmn2:intermediateThrowEvent>
-    <bpmn2:sequenceFlow id="SequenceFlow_0jek18q" sourceRef="IntermediateCatchEvent_112zjtp" targetRef="callGetServiceInstance" />
+    <bpmn2:sequenceFlow id="SequenceFlow_0jek18q" sourceRef="IntermediateCatchEvent_112zjtp" targetRef="ScriptTask_05m3m2e" />
     <bpmn2:sequenceFlow id="SequenceFlow_18103ca" sourceRef="ScriptTask_05m3m2e" targetRef="IntermediateThrowEvent_162gs5w" />
     <bpmn2:sequenceFlow id="SequenceFlow_04ao07f" sourceRef="doDeleteServiceInstance_CallActivity" targetRef="IntermediateThrowEvent_0prlju0" />
-    <bpmn2:sequenceFlow id="SequenceFlow_1ttswdr" sourceRef="callGetServiceInstance" targetRef="ScriptTask_05m3m2e" />
     <bpmn2:callActivity id="CallActivity_1yap348" name="Delete BRG Resources&#10;" calledElement="DoDeleteAllottedResourceBRG">
       <bpmn2:extensionElements>
         <camunda:in source="msoRequestId" target="msoRequestId" />
@@ -508,11 +493,8 @@
           <dc:Bounds x="491" y="1072" width="70" height="24" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="CallActivity_0nmoax4_di" bpmnElement="callGetServiceInstance">
-        <dc:Bounds x="285" y="254" width="100" height="80" />
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_05m3m2e_di" bpmnElement="ScriptTask_05m3m2e">
-        <dc:Bounds x="476" y="254" width="100" height="80" />
+        <dc:Bounds x="382" y="254" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="IntermediateCatchEvent_112zjtp_di" bpmnElement="IntermediateCatchEvent_112zjtp">
         <dc:Bounds x="96" y="276" width="36" height="36" />
@@ -528,16 +510,16 @@
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0jek18q_di" bpmnElement="SequenceFlow_0jek18q">
         <di:waypoint xsi:type="dc:Point" x="132" y="294" />
-        <di:waypoint xsi:type="dc:Point" x="285" y="294" />
+        <di:waypoint xsi:type="dc:Point" x="382" y="294" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="209" y="279" width="0" height="0" />
+          <dc:Bounds x="212" y="279" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_18103ca_di" bpmnElement="SequenceFlow_18103ca">
-        <di:waypoint xsi:type="dc:Point" x="576" y="294" />
+        <di:waypoint xsi:type="dc:Point" x="482" y="294" />
         <di:waypoint xsi:type="dc:Point" x="732" y="294" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="654" y="279" width="0" height="0" />
+          <dc:Bounds x="562" y="279" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_04ao07f_di" bpmnElement="SequenceFlow_04ao07f">
@@ -547,15 +529,6 @@
           <dc:Bounds x="447" y="1034" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1ttswdr_di" bpmnElement="SequenceFlow_1ttswdr">
-        <di:waypoint xsi:type="dc:Point" x="385" y="294" />
-        <di:waypoint xsi:type="dc:Point" x="422" y="294" />
-        <di:waypoint xsi:type="dc:Point" x="422" y="294" />
-        <di:waypoint xsi:type="dc:Point" x="476" y="294" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="437" y="294" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_06llof4_di" bpmnElement="SequenceFlow_06llof4">
         <di:waypoint xsi:type="dc:Point" x="159" y="1466" />
         <di:waypoint xsi:type="dc:Point" x="237" y="1466" />
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/UpdateCustomE2EServiceInstance.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/UpdateCustomE2EServiceInstance.bpmn
index 28bd3f7..1be30d6 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/UpdateCustomE2EServiceInstance.bpmn
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/UpdateCustomE2EServiceInstance.bpmn
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.11.3">
+<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.10.0">
   <bpmn:process id="UpdateCustomE2EServiceInstance" name="UpdateCustomE2EServiceInstance" isExecutable="true">
     <bpmn:startEvent id="StartEvent_00qj6ro" name="Update SI Start Flow">
       <bpmn:outgoing>SequenceFlow_0s2spoq</bpmn:outgoing>
@@ -176,29 +176,13 @@
     </bpmn:sequenceFlow>
     <bpmn:sequenceFlow id="SequenceFlow_0je30si" sourceRef="ScriptTask_0ttvn8r" targetRef="CallActivity_02fyxz0" />
     <bpmn:sequenceFlow id="SequenceFlow_1fueo69" name="no" sourceRef="ExclusiveGateway_0aqn64l" targetRef="EndEvent_07uk5iy" />
-    <bpmn:callActivity id="CallActivity_1vejucv" name="Call AAI Generic GetService" calledElement="GenericGetService">
-      <bpmn:extensionElements>
-        <camunda:in source="serviceInstanceId" target="GENGS_serviceInstanceId" />
-        <camunda:in sourceExpression="service-instance" target="GENGS_type" />
-        <camunda:out source="GENGS_FoundIndicator" target="GENGS_FoundIndicator" />
-        <camunda:out source="GENGS_SuccessIndicator" target="GENGS_SuccessIndicator" />
-        <camunda:out source="WorkflowException" target="WorkflowException" />
-        <camunda:out source="GENGS_siResourceLink" target="GENGS_siResourceLink" />
-        <camunda:out source="GENGS_service" target="GENGS_service" />
-        <camunda:in source="globalSubscriberId" target="GENGS_globalCustomerId" />
-        <camunda:in source="serviceType" target="GENGS_serviceType" />
-      </bpmn:extensionElements>
+    <bpmn:scriptTask id="ScriptTask_0cx1y0g" name="AAI&#10;Query&#10;(svc instance)" scriptFormat="groovy">
       <bpmn:incoming>SequenceFlow_0az1n4y</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_1bd4711</bpmn:outgoing>
-    </bpmn:callActivity>
-    <bpmn:scriptTask id="ScriptTask_0cx1y0g" name="Post Process AAI GET" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_1bd4711</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_03i6zhx</bpmn:outgoing>
       <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
 def dcsi = new UpdateCustomE2EServiceInstance()
-dcsi.postProcessAAIGET(execution)]]></bpmn:script>
+dcsi.getServiceInstance(execution)]]></bpmn:script>
     </bpmn:scriptTask>
-    <bpmn:sequenceFlow id="SequenceFlow_1bd4711" sourceRef="CallActivity_1vejucv" targetRef="ScriptTask_0cx1y0g" />
     <bpmn:scriptTask id="ScriptTask_11y3uq6" name="Post for Compare Model Versions" scriptFormat="groovy">
       <bpmn:incoming>SequenceFlow_0xhbobd</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0t7zinj</bpmn:outgoing>
@@ -237,7 +221,7 @@
       <bpmn:outgoing>SequenceFlow_0zmd4rt</bpmn:outgoing>
       <bpmn:outgoing>SequenceFlow_1n8h3zt</bpmn:outgoing>
     </bpmn:exclusiveGateway>
-    <bpmn:sequenceFlow id="SequenceFlow_0az1n4y" sourceRef="ScriptTask_1s09c7d" targetRef="CallActivity_1vejucv" />
+    <bpmn:sequenceFlow id="SequenceFlow_0az1n4y" sourceRef="ScriptTask_1s09c7d" targetRef="ScriptTask_0cx1y0g" />
     <bpmn:intermediateCatchEvent id="IntermediateCatchEvent_0m01dm3" name="StartDoUpdate">
       <bpmn:outgoing>SequenceFlow_04qwbbf</bpmn:outgoing>
       <bpmn:linkEventDefinition name="StartDoUpdate" />
@@ -354,7 +338,7 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_1s09c7d_di" bpmnElement="ScriptTask_1s09c7d">
-        <dc:Bounds x="105" y="158" width="100" height="80" />
+        <dc:Bounds x="147" y="158" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_0ttvn8r_di" bpmnElement="ScriptTask_0ttvn8r">
         <dc:Bounds x="782" y="585" width="100" height="80" />
@@ -382,9 +366,9 @@
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0s2spoq_di" bpmnElement="SequenceFlow_0s2spoq">
         <di:waypoint xsi:type="dc:Point" x="30" y="198" />
-        <di:waypoint xsi:type="dc:Point" x="105" y="198" />
+        <di:waypoint xsi:type="dc:Point" x="147" y="198" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="22.5" y="177" width="90" height="12" />
+          <dc:Bounds x="43.5" y="177" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0klbpxx_di" bpmnElement="SequenceFlow_0klbpxx">
@@ -500,40 +484,30 @@
           <dc:Bounds x="875" y="991" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="CallActivity_1vejucv_di" bpmnElement="CallActivity_1vejucv">
-        <dc:Bounds x="274" y="158" width="100" height="80" />
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_0cx1y0g_di" bpmnElement="ScriptTask_0cx1y0g">
-        <dc:Bounds x="451" y="158" width="100" height="80" />
+        <dc:Bounds x="364" y="158" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1bd4711_di" bpmnElement="SequenceFlow_1bd4711">
-        <di:waypoint xsi:type="dc:Point" x="374" y="198" />
-        <di:waypoint xsi:type="dc:Point" x="451" y="198" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="367.5" y="177" width="90" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_11y3uq6_di" bpmnElement="ScriptTask_11y3uq6">
         <dc:Bounds x="959" y="158" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_0hixtxc_di" bpmnElement="ScriptTask_0hixtxc">
-        <dc:Bounds x="614" y="158" width="100" height="80" />
+        <dc:Bounds x="563" y="158" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="CallActivity_1rkoyc5_di" bpmnElement="CallActivity_1rkoyc5">
         <dc:Bounds x="782" y="158" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_03i6zhx_di" bpmnElement="SequenceFlow_03i6zhx">
-        <di:waypoint xsi:type="dc:Point" x="551" y="198" />
-        <di:waypoint xsi:type="dc:Point" x="614" y="198" />
+        <di:waypoint xsi:type="dc:Point" x="464" y="198" />
+        <di:waypoint xsi:type="dc:Point" x="563" y="198" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="537.5" y="177" width="90" height="12" />
+          <dc:Bounds x="468.5" y="177" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1pdv4qj_di" bpmnElement="SequenceFlow_1pdv4qj">
-        <di:waypoint xsi:type="dc:Point" x="714" y="198" />
+        <di:waypoint xsi:type="dc:Point" x="663" y="198" />
         <di:waypoint xsi:type="dc:Point" x="782" y="198" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="703" y="177" width="90" height="12" />
+          <dc:Bounds x="677.5" y="177" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0xhbobd_di" bpmnElement="SequenceFlow_0xhbobd">
@@ -550,10 +524,10 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0az1n4y_di" bpmnElement="SequenceFlow_0az1n4y">
-        <di:waypoint xsi:type="dc:Point" x="205" y="198" />
-        <di:waypoint xsi:type="dc:Point" x="274" y="198" />
+        <di:waypoint xsi:type="dc:Point" x="247" y="198" />
+        <di:waypoint xsi:type="dc:Point" x="364" y="198" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="239.5" y="177" width="0" height="12" />
+          <dc:Bounds x="260.5" y="177" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="IntermediateCatchEvent_0m01dm3_di" bpmnElement="IntermediateCatchEvent_0m01dm3">
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCompareModelofE2EServiceInstance.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCompareModelofE2EServiceInstance.bpmn
index c04c2d9..73d3687 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCompareModelofE2EServiceInstance.bpmn
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCompareModelofE2EServiceInstance.bpmn
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_MagIIMOUEeW8asg-vCEgWQ" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.11.3" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
+<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_MagIIMOUEeW8asg-vCEgWQ" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.10.0" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
   <bpmn2:process id="DoCompareModelofE2EServiceInstance" name="DoCompareModelofE2EServiceInstance" isExecutable="true">
     <bpmn2:sequenceFlow id="SequenceFlow_1rebkae" sourceRef="StartEvent_0jhv664" targetRef="CallActivity_1va14ul" />
     <bpmn2:intermediateCatchEvent id="StartEvent_0jhv664" name="StartCompare">
@@ -70,30 +70,14 @@
 dcsi.preProcessRequest(execution)
 ]]></bpmn2:script>
     </bpmn2:scriptTask>
-    <bpmn2:callActivity id="CallActivity_1a3n88w" name="Call AAI Generic GetService" calledElement="GenericGetService">
-      <bpmn2:extensionElements>
-        <camunda:in source="serviceInstanceId" target="GENGS_serviceInstanceId" />
-        <camunda:in sourceExpression="service-instance" target="GENGS_type" />
-        <camunda:out source="GENGS_FoundIndicator" target="GENGS_FoundIndicator" />
-        <camunda:out source="GENGS_SuccessIndicator" target="GENGS_SuccessIndicator" />
-        <camunda:out source="WorkflowException" target="WorkflowException" />
-        <camunda:out source="GENGS_siResourceLink" target="GENGS_siResourceLink" />
-        <camunda:out source="GENGS_service" target="GENGS_service" />
-        <camunda:in source="globalSubscriberId" target="GENGS_globalCustomerId" />
-        <camunda:in source="serviceType" target="GENGS_serviceType" />
-      </bpmn2:extensionElements>
+    <bpmn2:scriptTask id="ScriptTask_18k4xnm" name="&#10;AAI&#10;Query&#10;(svc instance)&#10;" scriptFormat="groovy">
       <bpmn2:incoming>SequenceFlow_1xzphe4</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_0b6eqin</bpmn2:outgoing>
-    </bpmn2:callActivity>
-    <bpmn2:scriptTask id="ScriptTask_18k4xnm" name="Post Process AAI GET" scriptFormat="groovy">
-      <bpmn2:incoming>SequenceFlow_0b6eqin</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_1cpg3ku</bpmn2:outgoing>
       <bpmn2:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
 def dcsi = new DoCompareModelofE2EServiceInstance()
-dcsi.postProcessAAIGET(execution)]]></bpmn2:script>
+dcsi.getServiceInstance(execution)]]></bpmn2:script>
     </bpmn2:scriptTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_1xzphe4" name="" sourceRef="ScriptTask_0ba0el1" targetRef="CallActivity_1a3n88w" />
-    <bpmn2:sequenceFlow id="SequenceFlow_0b6eqin" sourceRef="CallActivity_1a3n88w" targetRef="ScriptTask_18k4xnm" />
+    <bpmn2:sequenceFlow id="SequenceFlow_1xzphe4" name="" sourceRef="ScriptTask_0ba0el1" targetRef="ScriptTask_18k4xnm" />
     <bpmn2:sequenceFlow id="SequenceFlow_1cpg3ku" sourceRef="ScriptTask_18k4xnm" targetRef="IntermediateThrowEvent_1dhdmdy" />
   </bpmn2:process>
   <bpmn2:error id="Error_2" name="MSOWorkflowException" errorCode="MSOWorkflowException" />
@@ -102,9 +86,9 @@
     <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DoCompareModelofE2EServiceInstance">
       <bpmndi:BPMNEdge id="SequenceFlow_1rebkae_di" bpmnElement="SequenceFlow_1rebkae">
         <di:waypoint xsi:type="dc:Point" x="6" y="259" />
-        <di:waypoint xsi:type="dc:Point" x="363" y="259" />
+        <di:waypoint xsi:type="dc:Point" x="211" y="259" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="139.5" y="238" width="90" height="12" />
+          <dc:Bounds x="63.5" y="238" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="IntermediateCatchEvent_05z1jyy_di" bpmnElement="StartEvent_0jhv664">
@@ -114,16 +98,16 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="EndEvent_0x8im5g_di" bpmnElement="EndEvent_0x8im5g">
-        <dc:Bounds x="1038" y="241" width="36" height="36" />
+        <dc:Bounds x="912" y="241" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1011" y="281" width="90" height="12" />
+          <dc:Bounds x="885" y="281" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1lkpfe2_di" bpmnElement="SequenceFlow_1lkpfe2">
-        <di:waypoint xsi:type="dc:Point" x="801" y="259" />
-        <di:waypoint xsi:type="dc:Point" x="1038" y="259" />
+        <di:waypoint xsi:type="dc:Point" x="607" y="259" />
+        <di:waypoint xsi:type="dc:Point" x="912" y="259" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="874.5" y="238" width="90" height="12" />
+          <dc:Bounds x="714.5" y="238" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="SubProcess_0roysbg_di" bpmnElement="SubProcess_0roysbg" isExpanded="true">
@@ -165,9 +149,9 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="IntermediateThrowEvent_1dhdmdy_di" bpmnElement="IntermediateThrowEvent_1dhdmdy">
-        <dc:Bounds x="1048" y="83" width="36" height="36" />
+        <dc:Bounds x="853" y="83" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1023" y="123" width="88" height="36" />
+          <dc:Bounds x="838" y="123" width="68" height="24" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1chfao3_di" bpmnElement="SequenceFlow_1chfao3">
@@ -178,48 +162,36 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="CallActivity_1va14ul_di" bpmnElement="CallActivity_1va14ul">
-        <dc:Bounds x="363" y="219" width="100" height="80" />
+        <dc:Bounds x="211" y="219" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_1odhh8p_di" bpmnElement="ScriptTask_1odhh8p">
-        <dc:Bounds x="701" y="219" width="100" height="80" />
+        <dc:Bounds x="507" y="219" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1pe6r93_di" bpmnElement="SequenceFlow_1pe6r93">
-        <di:waypoint xsi:type="dc:Point" x="463" y="259" />
-        <di:waypoint xsi:type="dc:Point" x="701" y="259" />
+        <di:waypoint xsi:type="dc:Point" x="311" y="259" />
+        <di:waypoint xsi:type="dc:Point" x="507" y="259" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="537" y="238" width="90" height="12" />
+          <dc:Bounds x="364" y="238" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_0ba0el1_di" bpmnElement="ScriptTask_0ba0el1">
         <dc:Bounds x="211" y="61" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="CallActivity_1a3n88w_di" bpmnElement="CallActivity_1a3n88w">
-        <dc:Bounds x="499" y="59" width="100" height="80" />
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_18k4xnm_di" bpmnElement="ScriptTask_18k4xnm">
-        <dc:Bounds x="776" y="61" width="100" height="80" />
+        <dc:Bounds x="507" y="61" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1xzphe4_di" bpmnElement="SequenceFlow_1xzphe4">
-        <di:waypoint xsi:type="dc:Point" x="311" y="101" />
-        <di:waypoint xsi:type="dc:Point" x="499" y="99" />
+        <di:waypoint xsi:type="dc:Point" x="311" y="102" />
+        <di:waypoint xsi:type="dc:Point" x="507" y="101" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="360" y="85" width="0" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0b6eqin_di" bpmnElement="SequenceFlow_0b6eqin">
-        <di:waypoint xsi:type="dc:Point" x="599" y="99" />
-        <di:waypoint xsi:type="dc:Point" x="776" y="101" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="643.5" y="79" width="0" height="12" />
+          <dc:Bounds x="364" y="80.5" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1cpg3ku_di" bpmnElement="SequenceFlow_1cpg3ku">
-        <di:waypoint xsi:type="dc:Point" x="876" y="101" />
-        <di:waypoint xsi:type="dc:Point" x="968" y="101" />
-        <di:waypoint xsi:type="dc:Point" x="968" y="101" />
-        <di:waypoint xsi:type="dc:Point" x="1048" y="101" />
+        <di:waypoint xsi:type="dc:Point" x="607" y="101" />
+        <di:waypoint xsi:type="dc:Point" x="853" y="101" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="983" y="95" width="0" height="12" />
+          <dc:Bounds x="685" y="80" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateAllottedResourceBRG.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateAllottedResourceBRG.bpmn
index d7bd54c..6f1609c 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateAllottedResourceBRG.bpmn
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateAllottedResourceBRG.bpmn
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_DkzPAHB4EeaJwpcpVN5gXw" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.9.0" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
+<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_DkzPAHB4EeaJwpcpVN5gXw" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.10.0" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
   <bpmn2:process id="DoCreateAllottedResourceBRG" name="DoCreateAllottedResourceBRG" isExecutable="true">
     <bpmn2:startEvent id="StartEvent_1">
       <bpmn2:outgoing>SequenceFlow_1</bpmn2:outgoing>
@@ -13,49 +13,16 @@
 dcar.preProcessRequest(execution)]]></bpmn2:script>
     </bpmn2:scriptTask>
     <bpmn2:sequenceFlow id="SequenceFlow_2" name="" sourceRef="initialization" targetRef="GetAAIServiceInstance" />
-    <bpmn2:scriptTask id="buildWorkflowException" name="Create Workflow Exception" scriptFormat="groovy">
-      <bpmn2:incoming>notFound</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_6</bpmn2:outgoing>
-      <bpmn2:script><![CDATA[import org.onap.so.bpmn.common.scripts.*
-ExceptionUtil exceptionUtil = new ExceptionUtil()
-exceptionUtil.buildWorkflowException(execution, 404, "Input Service Instance Id Not Found in AAI")]]></bpmn2:script>
-    </bpmn2:scriptTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_6" name="" sourceRef="buildWorkflowException" targetRef="EndEvent_1" />
-    <bpmn2:callActivity id="GetAAIServiceInstance" name="Get AAI Service Instance" calledElement="GenericGetService">
-      <bpmn2:extensionElements>
-        <camunda:in source="serviceInstanceId" target="GENGS_serviceInstanceId" />
-        <camunda:out source="GENGS_FoundIndicator" target="CSI_FoundIndicator" />
-        <camunda:out source="GENGS_SuccessIndicator" target="CSI_SuccessIndicator" />
-        <camunda:out source="GENGS_serviceInstance" target="CSI_serviceInstance" />
-        <camunda:out source="WorkflowException" target="WorkflowException" />
-        <camunda:out source="GENGS_resourceLink" target="CSI_resourceLink" />
-        <camunda:in sourceExpression="service-instance" target="GENGS_type" />
-        <camunda:out source="GENGS_service" target="CSI_service" />
-      </bpmn2:extensionElements>
-      <bpmn2:incoming>SequenceFlow_2</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_4</bpmn2:outgoing>
-    </bpmn2:callActivity>
-    <bpmn2:sequenceFlow id="SequenceFlow_4" name="" sourceRef="GetAAIServiceInstance" targetRef="ServiceInstanceExists" />
-    <bpmn2:exclusiveGateway id="ServiceInstanceExists" name="Service Instance Exists in AAI?" default="notFound">
-      <bpmn2:incoming>SequenceFlow_4</bpmn2:incoming>
-      <bpmn2:outgoing>notFound</bpmn2:outgoing>
-      <bpmn2:outgoing>found</bpmn2:outgoing>
-    </bpmn2:exclusiveGateway>
-    <bpmn2:sequenceFlow id="notFound" name="No" sourceRef="ServiceInstanceExists" targetRef="buildWorkflowException" />
     <bpmn2:scriptTask id="GetAAIAR" name="Get AAI AR" scriptFormat="groovy">
-      <bpmn2:incoming>found</bpmn2:incoming>
+      <bpmn2:incoming>SequenceFlow_1a2mcyk</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_0gbsa12</bpmn2:outgoing>
       <bpmn2:script><![CDATA[import org.onap.so.bpmn.vcpe.scripts.*
 DoCreateAllottedResourceBRG dcar = new DoCreateAllottedResourceBRG()
 dcar.getAaiAR(execution)
 ]]></bpmn2:script>
     </bpmn2:scriptTask>
-    <bpmn2:endEvent id="EndEvent_1">
-      <bpmn2:incoming>SequenceFlow_6</bpmn2:incoming>
-      <bpmn2:errorEventDefinition id="ErrorEventDefinition_1" errorRef="Error_2" />
-    </bpmn2:endEvent>
     <bpmn2:scriptTask id="CreateAAIAR" name="Create AAI  AR&#10;" scriptFormat="groovy">
-      <bpmn2:incoming>SequenceFlow_17p4ohs</bpmn2:incoming>
+      <bpmn2:incoming>SequenceFlow_1vg5rfa</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_11</bpmn2:outgoing>
       <bpmn2:script><![CDATA[import org.onap.so.bpmn.vcpe.scripts.*
 DoCreateAllottedResourceBRG dcar = new DoCreateAllottedResourceBRG()
@@ -181,45 +148,7 @@
     </bpmn2:callActivity>
     <bpmn2:sequenceFlow id="SequenceFlow_1iy3cqb" sourceRef="postProcessSDNCGetResponse" targetRef="generateOutputs" />
     <bpmn2:sequenceFlow id="SequenceFlow_1dgzhsm" sourceRef="UpdateAAIARActive" targetRef="IntermediateCatchEvent_1f4tse6" />
-    <bpmn2:callActivity id="GetAAIParentSI" name="Get AAI  Parent ServiceInstance&#10;" calledElement="GenericGetService">
-      <bpmn2:extensionElements>
-        <camunda:in source="parentServiceInstanceId" target="GENGS_serviceInstanceId" />
-        <camunda:in sourceExpression="service-instance" target="GENGS_type" />
-        <camunda:out source="GENGS_SuccessIndicator" target="PSI_SuccessIndicator" />
-        <camunda:out source="GENGS_FoundIndicator" target="PSI_FoundIndicator" />
-        <camunda:out source="GENGS_serviceInstance" target="PSI_serviceInstance" />
-        <camunda:out source="WorkflowException" target="WorkflowException" />
-        <camunda:out source="GENGS_resourceLink" target="PSI_resourceLink" />
-        <camunda:out source="GENGS_service" target="PSI_service" />
-      </bpmn2:extensionElements>
-      <bpmn2:incoming>SequenceFlow_1m8u8dl</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_1vg5rfa</bpmn2:outgoing>
-    </bpmn2:callActivity>
-    <bpmn2:sequenceFlow id="SequenceFlow_1vg5rfa" sourceRef="GetAAIParentSI" targetRef="ParentSIExists" />
-    <bpmn2:exclusiveGateway id="ParentSIExists" name="Parent Service Instance Exists in AAI?" default="SequenceFlow_0f7u5pu">
-      <bpmn2:incoming>SequenceFlow_1vg5rfa</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_17p4ohs</bpmn2:outgoing>
-      <bpmn2:outgoing>SequenceFlow_0f7u5pu</bpmn2:outgoing>
-    </bpmn2:exclusiveGateway>
-    <bpmn2:sequenceFlow id="SequenceFlow_17p4ohs" name="Yes" sourceRef="ParentSIExists" targetRef="CreateAAIAR">
-      <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression"><![CDATA[#{execution.getVariable("PSI_FoundIndicator" ) == true && execution.getVariable("PSI_SuccessIndicator" ) == true}]]></bpmn2:conditionExpression>
-    </bpmn2:sequenceFlow>
-    <bpmn2:scriptTask id="ScriptTask_1hzsbck" name="Create Workflow Exception" scriptFormat="groovy">
-      <bpmn2:incoming>SequenceFlow_0f7u5pu</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_16o7col</bpmn2:outgoing>
-      <bpmn2:script><![CDATA[import org.onap.so.bpmn.common.scripts.*
-
-ExceptionUtil exceptionUtil = new ExceptionUtil()
-exceptionUtil.buildWorkflowException(execution, 404, "BRG alloted resource Parent ServiceInstance:"  +  
-execution.getVariable("parentServiceInstanceId") +
- " was not found in AAI")]]></bpmn2:script>
-    </bpmn2:scriptTask>
-    <bpmn2:endEvent id="EndEvent_0x4moh8">
-      <bpmn2:incoming>SequenceFlow_16o7col</bpmn2:incoming>
-      <bpmn2:errorEventDefinition errorRef="Error_2" />
-    </bpmn2:endEvent>
-    <bpmn2:sequenceFlow id="SequenceFlow_0f7u5pu" name="No" sourceRef="ParentSIExists" targetRef="ScriptTask_1hzsbck" />
-    <bpmn2:sequenceFlow id="SequenceFlow_16o7col" sourceRef="ScriptTask_1hzsbck" targetRef="EndEvent_0x4moh8" />
+    <bpmn2:sequenceFlow id="SequenceFlow_1vg5rfa" sourceRef="GetAAIParentSI" targetRef="CreateAAIAR" />
     <bpmn2:subProcess id="SubProcess_161pl4g" name="Sub-process for Application Errors" triggeredByEvent="true">
       <bpmn2:startEvent id="StartEvent_1ibe7qx">
         <bpmn2:outgoing>SequenceFlow_1h61pqs</bpmn2:outgoing>
@@ -314,9 +243,6 @@
       <bpmn2:incoming>SequenceFlow_11</bpmn2:incoming>
       <bpmn2:linkEventDefinition name="SDNCTasks" />
     </bpmn2:intermediateThrowEvent>
-    <bpmn2:sequenceFlow id="found" name="Yes" sourceRef="ServiceInstanceExists" targetRef="GetAAIAR">
-      <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression"><![CDATA[#{execution.getVariable("CSI_FoundIndicator" ) == true && execution.getVariable("CSI_SuccessIndicator" ) == true}]]></bpmn2:conditionExpression>
-    </bpmn2:sequenceFlow>
     <bpmn2:sequenceFlow id="SequenceFlow_0gbsa12" sourceRef="GetAAIAR" targetRef="ActiveARinAAI" />
     <bpmn2:scriptTask id="generateOutputs" name="Generate Outputs" scriptFormat="groovy">
       <bpmn2:incoming>SequenceFlow_1iy3cqb</bpmn2:incoming>
@@ -334,6 +260,22 @@
       </bpmn2:timerEventDefinition>
     </bpmn2:intermediateCatchEvent>
     <bpmn2:sequenceFlow id="SequenceFlow_0ec9eiq" sourceRef="IntermediateCatchEvent_1f4tse6" targetRef="PreProcessSDNCGet" />
+    <bpmn2:sequenceFlow id="SequenceFlow_1a2mcyk" sourceRef="GetAAIServiceInstance" targetRef="GetAAIAR" />
+    <bpmn2:scriptTask id="GetAAIServiceInstance" name="&#10;AAI&#10;Query&#10;(svc instance)&#10;" scriptFormat="groovy">
+      <bpmn2:incoming>SequenceFlow_2</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_1a2mcyk</bpmn2:outgoing>
+      <bpmn2:script><![CDATA[import org.onap.so.bpmn.vcpe.scripts.*
+DoCreateAllottedResourceBRG dcar = new DoCreateAllottedResourceBRG()
+dcar.getServiceInstance(execution)
+]]></bpmn2:script>
+    </bpmn2:scriptTask>
+    <bpmn2:scriptTask id="GetAAIParentSI" name="&#10;AAI&#10;Query&#10;(svc instance)&#10;" scriptFormat="groovy">
+      <bpmn2:incoming>SequenceFlow_1m8u8dl</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_1vg5rfa</bpmn2:outgoing>
+      <bpmn2:script><![CDATA[import org.onap.so.bpmn.vcpe.scripts.*
+DoCreateAllottedResourceBRG dcar = new DoCreateAllottedResourceBRG()
+dcar.getParentServiceInstance(execution)]]></bpmn2:script>
+    </bpmn2:scriptTask>
   </bpmn2:process>
   <bpmn2:error id="Error_1" name="Java Lang Exception" errorCode="java.lang.Exception" />
   <bpmn2:error id="Error_2" name="MSO Workflow Exception" errorCode="MSOWorkflowException" />
@@ -357,57 +299,16 @@
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_2" bpmnElement="SequenceFlow_2" sourceElement="_BPMNShape_ScriptTask_285">
         <di:waypoint xsi:type="dc:Point" x="119" y="239" />
-        <di:waypoint xsi:type="dc:Point" x="195" y="239" />
+        <di:waypoint xsi:type="dc:Point" x="241" y="240" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="157" y="224" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="_BPMNShape_CallActivity_59" bpmnElement="GetAAIServiceInstance">
-        <dc:Bounds x="195" y="199" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="_BPMNShape_ExclusiveGateway_229" bpmnElement="ServiceInstanceExists" isMarkerVisible="true">
-        <dc:Bounds x="367" y="217" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="349" y="270" width="83" height="25" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_4" bpmnElement="SequenceFlow_4" sourceElement="_BPMNShape_CallActivity_59" targetElement="_BPMNShape_ExclusiveGateway_229">
-        <di:waypoint xsi:type="dc:Point" x="295" y="239" />
-        <di:waypoint xsi:type="dc:Point" x="369" y="240" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="332" y="224.5" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="_BPMNShape_ScriptTask_293" bpmnElement="buildWorkflowException">
-        <dc:Bounds x="342" y="85" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_5" bpmnElement="notFound" sourceElement="_BPMNShape_ExclusiveGateway_229" targetElement="_BPMNShape_ScriptTask_293">
-        <di:waypoint xsi:type="dc:Point" x="392" y="217" />
-        <di:waypoint xsi:type="dc:Point" x="392" y="165" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="371" y="192.6917250252067" width="14" height="13" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="_BPMNShape_EndEvent_225" bpmnElement="EndEvent_1">
-        <dc:Bounds x="374" y="-11" width="36" height="36" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="392" y="30" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_6" bpmnElement="SequenceFlow_6" sourceElement="_BPMNShape_ScriptTask_293" targetElement="_BPMNShape_EndEvent_225">
-        <di:waypoint xsi:type="dc:Point" x="392" y="85" />
-        <di:waypoint xsi:type="dc:Point" x="392" y="58" />
-        <di:waypoint xsi:type="dc:Point" x="392" y="58" />
-        <di:waypoint xsi:type="dc:Point" x="392" y="25" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="407" y="58" width="0" height="0" />
+          <dc:Bounds x="135" y="224.5" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="_BPMNShape_ScriptTask_299" bpmnElement="GetAAIAR">
         <dc:Bounds x="506" y="200" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="_BPMNShape_ScriptTask_300" bpmnElement="CreateAAIAR">
-        <dc:Bounds x="1206" y="200" width="100" height="80" />
+        <dc:Bounds x="1086" y="200" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="_BPMNShape_EndEvent_228" bpmnElement="EndEvent_3">
         <dc:Bounds x="1527" y="776" width="36" height="36" />
@@ -416,11 +317,10 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_13" bpmnElement="SequenceFlow_11" sourceElement="_BPMNShape_ScriptTask_300">
-        <di:waypoint xsi:type="dc:Point" x="1306" y="240" />
-        <di:waypoint xsi:type="dc:Point" x="1338" y="240" />
-        <di:waypoint xsi:type="dc:Point" x="1408" y="240" />
+        <di:waypoint xsi:type="dc:Point" x="1186" y="240" />
+        <di:waypoint xsi:type="dc:Point" x="1311" y="240" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1322" y="225" width="0" height="0" />
+          <dc:Bounds x="1203.5" y="225" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1q6udwm_di" bpmnElement="SequenceFlow_1q6udwm">
@@ -545,51 +445,12 @@
           <dc:Bounds x="934" y="593.5" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="CallActivity_0e73um9_di" bpmnElement="GetAAIParentSI">
-        <dc:Bounds x="843" y="199" width="100" height="80" />
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1vg5rfa_di" bpmnElement="SequenceFlow_1vg5rfa">
         <di:waypoint xsi:type="dc:Point" x="943" y="239" />
-        <di:waypoint xsi:type="dc:Point" x="1033" y="240" />
+        <di:waypoint xsi:type="dc:Point" x="1058" y="241" />
+        <di:waypoint xsi:type="dc:Point" x="1086" y="241" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="988" y="224.5" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ExclusiveGateway_1q51t9m_di" bpmnElement="ParentSIExists" isMarkerVisible="true">
-        <dc:Bounds x="1033" y="215" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="1012" y="265" width="92" height="36" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_17p4ohs_di" bpmnElement="SequenceFlow_17p4ohs">
-        <di:waypoint xsi:type="dc:Point" x="1083" y="240" />
-        <di:waypoint xsi:type="dc:Point" x="1206" y="241" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="1127" y="222" width="19" height="14" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ScriptTask_1hzsbck_di" bpmnElement="ScriptTask_1hzsbck">
-        <dc:Bounds x="1008" y="77" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="EndEvent_0x4moh8_di" bpmnElement="EndEvent_0x4moh8">
-        <dc:Bounds x="1040" y="6" width="36" height="36" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="1058" y="47" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0f7u5pu_di" bpmnElement="SequenceFlow_0f7u5pu">
-        <di:waypoint xsi:type="dc:Point" x="1058" y="215" />
-        <di:waypoint xsi:type="dc:Point" x="1058" y="186" />
-        <di:waypoint xsi:type="dc:Point" x="1058" y="157" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="1034" y="173.413457125764" width="14" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_16o7col_di" bpmnElement="SequenceFlow_16o7col">
-        <di:waypoint xsi:type="dc:Point" x="1059" y="77" />
-        <di:waypoint xsi:type="dc:Point" x="1059" y="42" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="1074" y="59.5" width="0" height="0" />
+          <dc:Bounds x="955.5" y="225" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="SubProcess_161pl4g_di" bpmnElement="SubProcess_161pl4g" isExpanded="true">
@@ -672,7 +533,7 @@
         <di:waypoint xsi:type="dc:Point" x="750" y="240" />
         <di:waypoint xsi:type="dc:Point" x="843" y="239" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="777" y="224" width="14" height="14" />
+          <dc:Bounds x="777" y="223.99999999999994" width="14" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0z8luou_di" bpmnElement="SequenceFlow_0z8luou">
@@ -698,18 +559,11 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="IntermediateThrowEvent_0sb45m9_di" bpmnElement="IntermediateThrowEvent_1lqaeh8">
-        <dc:Bounds x="1408" y="222" width="36" height="36" />
+        <dc:Bounds x="1311" y="222" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1456" y="234" width="76" height="12" />
+          <dc:Bounds x="1359" y="234" width="77" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_7" bpmnElement="found" sourceElement="_BPMNShape_ExclusiveGateway_229">
-        <di:waypoint xsi:type="dc:Point" x="416" y="241" />
-        <di:waypoint xsi:type="dc:Point" x="506" y="242" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="432" y="220.27119611047112" width="17" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0gbsa12_di" bpmnElement="SequenceFlow_0gbsa12">
         <di:waypoint xsi:type="dc:Point" x="606" y="240" />
         <di:waypoint xsi:type="dc:Point" x="700" y="240" />
@@ -750,6 +604,19 @@
           <dc:Bounds x="1061" y="524" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1a2mcyk_di" bpmnElement="SequenceFlow_1a2mcyk">
+        <di:waypoint xsi:type="dc:Point" x="341" y="240" />
+        <di:waypoint xsi:type="dc:Point" x="506" y="240" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="423.5" y="219" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ScriptTask_0m6hxaw_di" bpmnElement="GetAAIServiceInstance">
+        <dc:Bounds x="241" y="200" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_0m8m8j1_di" bpmnElement="GetAAIParentSI">
+        <dc:Bounds x="843" y="199" width="100" height="80" />
+      </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
 </bpmn2:definitions>
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateAllottedResourceTXC.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateAllottedResourceTXC.bpmn
index f26bae0..3deaae4 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateAllottedResourceTXC.bpmn
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateAllottedResourceTXC.bpmn
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_DkzPAHB4EeaJwpcpVN5gXw" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.9.0" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
+<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_DkzPAHB4EeaJwpcpVN5gXw" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.10.0" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
   <bpmn2:process id="DoCreateAllottedResourceTXC" name="DoCreateAllottedResourceTXC" isExecutable="true">
     <bpmn2:startEvent id="StartEvent_1">
       <bpmn2:outgoing>SequenceFlow_1</bpmn2:outgoing>
@@ -12,50 +12,17 @@
 DoCreateAllottedResourceTXC dcar = new DoCreateAllottedResourceTXC()
 dcar.preProcessRequest(execution)]]></bpmn2:script>
     </bpmn2:scriptTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_2" name="" sourceRef="initialization" targetRef="GetAAIServiceInstance" />
-    <bpmn2:scriptTask id="buildWorkflowException" name="Create Workflow Exception" scriptFormat="groovy">
-      <bpmn2:incoming>notFound</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_6</bpmn2:outgoing>
-      <bpmn2:script><![CDATA[import org.onap.so.bpmn.common.scripts.*
-ExceptionUtil exceptionUtil = new ExceptionUtil()
-exceptionUtil.buildWorkflowException(execution, 404, "Input Service Instance Id Not Found in AAI")]]></bpmn2:script>
-    </bpmn2:scriptTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_6" name="" sourceRef="buildWorkflowException" targetRef="EndEvent_1" />
-    <bpmn2:callActivity id="GetAAIServiceInstance" name="Get AAI Service Instance" calledElement="GenericGetService">
-      <bpmn2:extensionElements>
-        <camunda:in source="serviceInstanceId" target="GENGS_serviceInstanceId" />
-        <camunda:out source="GENGS_FoundIndicator" target="CSI_FoundIndicator" />
-        <camunda:out source="GENGS_SuccessIndicator" target="CSI_SuccessIndicator" />
-        <camunda:out source="GENGS_serviceInstance" target="CSI_serviceInstance" />
-        <camunda:out source="WorkflowException" target="WorkflowException" />
-        <camunda:out source="GENGS_resourceLink" target="CSI_resourceLink" />
-        <camunda:in sourceExpression="service-instance" target="GENGS_type" />
-        <camunda:out source="GENGS_service" target="CSI_service" />
-      </bpmn2:extensionElements>
-      <bpmn2:incoming>SequenceFlow_2</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_4</bpmn2:outgoing>
-    </bpmn2:callActivity>
-    <bpmn2:sequenceFlow id="SequenceFlow_4" name="" sourceRef="GetAAIServiceInstance" targetRef="ServiceInstanceExists" />
-    <bpmn2:exclusiveGateway id="ServiceInstanceExists" name="Service Instance Exists in AAI?" default="notFound">
-      <bpmn2:incoming>SequenceFlow_4</bpmn2:incoming>
-      <bpmn2:outgoing>notFound</bpmn2:outgoing>
-      <bpmn2:outgoing>found</bpmn2:outgoing>
-    </bpmn2:exclusiveGateway>
-    <bpmn2:sequenceFlow id="notFound" name="No" sourceRef="ServiceInstanceExists" targetRef="buildWorkflowException" />
+    <bpmn2:sequenceFlow id="SequenceFlow_2" name="" sourceRef="initialization" targetRef="ScriptTask_0n6wvp0" />
     <bpmn2:scriptTask id="GetAAIAR" name="Get AAI AR" scriptFormat="groovy">
-      <bpmn2:incoming>found</bpmn2:incoming>
+      <bpmn2:incoming>SequenceFlow_01zb7a0</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_0gbsa12</bpmn2:outgoing>
       <bpmn2:script><![CDATA[import org.onap.so.bpmn.vcpe.scripts.*
 DoCreateAllottedResourceTXC dcar = new DoCreateAllottedResourceTXC()
 dcar.getAaiAR(execution)
 ]]></bpmn2:script>
     </bpmn2:scriptTask>
-    <bpmn2:endEvent id="EndEvent_1">
-      <bpmn2:incoming>SequenceFlow_6</bpmn2:incoming>
-      <bpmn2:errorEventDefinition id="ErrorEventDefinition_1" errorRef="Error_2" />
-    </bpmn2:endEvent>
     <bpmn2:scriptTask id="CreateAAIAR" name="Create AAI  AR&#10;" scriptFormat="groovy">
-      <bpmn2:incoming>SequenceFlow_17p4ohs</bpmn2:incoming>
+      <bpmn2:incoming>SequenceFlow_0vrw9a9</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_11</bpmn2:outgoing>
       <bpmn2:script><![CDATA[import org.onap.so.bpmn.vcpe.scripts.*
 DoCreateAllottedResourceTXC dcar = new DoCreateAllottedResourceTXC()
@@ -180,45 +147,6 @@
       <bpmn2:outgoing>SequenceFlow_0q1hz2p</bpmn2:outgoing>
     </bpmn2:callActivity>
     <bpmn2:sequenceFlow id="SequenceFlow_1iy3cqb" sourceRef="postProcessSDNCGetResponse" targetRef="generateOutputs" />
-    <bpmn2:callActivity id="GetAAIParentSI" name="Get AAI  Parent ServiceInstance&#10;" calledElement="GenericGetService">
-      <bpmn2:extensionElements>
-        <camunda:in source="parentServiceInstanceId" target="GENGS_serviceInstanceId" />
-        <camunda:in sourceExpression="service-instance" target="GENGS_type" />
-        <camunda:out source="GENGS_SuccessIndicator" target="PSI_SuccessIndicator" />
-        <camunda:out source="GENGS_FoundIndicator" target="PSI_FoundIndicator" />
-        <camunda:out source="GENGS_serviceInstance" target="PSI_serviceInstance" />
-        <camunda:out source="WorkflowException" target="WorkflowException" />
-        <camunda:out source="GENGS_resourceLink" target="PSI_resourceLink" />
-        <camunda:out source="GENGS_service" target="PSI_service" />
-      </bpmn2:extensionElements>
-      <bpmn2:incoming>SequenceFlow_1m8u8dl</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_1vg5rfa</bpmn2:outgoing>
-    </bpmn2:callActivity>
-    <bpmn2:sequenceFlow id="SequenceFlow_1vg5rfa" sourceRef="GetAAIParentSI" targetRef="ParentSIExists" />
-    <bpmn2:exclusiveGateway id="ParentSIExists" name="Parent Service Instance Exists in AAI?" default="SequenceFlow_0f7u5pu">
-      <bpmn2:incoming>SequenceFlow_1vg5rfa</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_17p4ohs</bpmn2:outgoing>
-      <bpmn2:outgoing>SequenceFlow_0f7u5pu</bpmn2:outgoing>
-    </bpmn2:exclusiveGateway>
-    <bpmn2:sequenceFlow id="SequenceFlow_17p4ohs" name="Yes" sourceRef="ParentSIExists" targetRef="CreateAAIAR">
-      <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression"><![CDATA[#{execution.getVariable("PSI_FoundIndicator" ) == true && execution.getVariable("PSI_SuccessIndicator" ) == true}]]></bpmn2:conditionExpression>
-    </bpmn2:sequenceFlow>
-    <bpmn2:scriptTask id="ScriptTask_1hzsbck" name="Create Workflow Exception" scriptFormat="groovy">
-      <bpmn2:incoming>SequenceFlow_0f7u5pu</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_16o7col</bpmn2:outgoing>
-      <bpmn2:script><![CDATA[import org.onap.so.bpmn.common.scripts.*
-
-ExceptionUtil exceptionUtil = new ExceptionUtil()
-exceptionUtil.buildWorkflowException(execution, 404, "TunnelXConn alloted resource Parent ServiceInstance:"  +  
-execution.getVariable("parentServiceInstanceId") +
- " was not found in AAI")]]></bpmn2:script>
-    </bpmn2:scriptTask>
-    <bpmn2:endEvent id="EndEvent_0x4moh8">
-      <bpmn2:incoming>SequenceFlow_16o7col</bpmn2:incoming>
-      <bpmn2:errorEventDefinition errorRef="Error_2" />
-    </bpmn2:endEvent>
-    <bpmn2:sequenceFlow id="SequenceFlow_0f7u5pu" name="No" sourceRef="ParentSIExists" targetRef="ScriptTask_1hzsbck" />
-    <bpmn2:sequenceFlow id="SequenceFlow_16o7col" sourceRef="ScriptTask_1hzsbck" targetRef="EndEvent_0x4moh8" />
     <bpmn2:subProcess id="SubProcess_161pl4g" name="Sub-process for Application Errors" triggeredByEvent="true">
       <bpmn2:startEvent id="StartEvent_1ibe7qx">
         <bpmn2:outgoing>SequenceFlow_1h61pqs</bpmn2:outgoing>
@@ -300,7 +228,7 @@
       <bpmn2:outgoing>SequenceFlow_1m8u8dl</bpmn2:outgoing>
       <bpmn2:outgoing>SequenceFlow_0z8luou</bpmn2:outgoing>
     </bpmn2:exclusiveGateway>
-    <bpmn2:sequenceFlow id="SequenceFlow_1m8u8dl" name="No" sourceRef="ActiveARinAAI" targetRef="GetAAIParentSI" />
+    <bpmn2:sequenceFlow id="SequenceFlow_1m8u8dl" name="No" sourceRef="ActiveARinAAI" targetRef="ScriptTask_10d76y6" />
     <bpmn2:sequenceFlow id="SequenceFlow_0z8luou" name="yes" sourceRef="ActiveARinAAI" targetRef="PreProcessSDNCGet">
       <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression"><![CDATA[#{execution.getVariable("foundActiveAR" ) == true}]]></bpmn2:conditionExpression>
     </bpmn2:sequenceFlow>
@@ -313,9 +241,6 @@
       <bpmn2:incoming>SequenceFlow_11</bpmn2:incoming>
       <bpmn2:linkEventDefinition name="SDNCTasks" />
     </bpmn2:intermediateThrowEvent>
-    <bpmn2:sequenceFlow id="found" name="Yes" sourceRef="ServiceInstanceExists" targetRef="GetAAIAR">
-      <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression"><![CDATA[#{execution.getVariable("CSI_FoundIndicator" ) == true && execution.getVariable("CSI_SuccessIndicator" ) == true}]]></bpmn2:conditionExpression>
-    </bpmn2:sequenceFlow>
     <bpmn2:sequenceFlow id="SequenceFlow_0gbsa12" sourceRef="GetAAIAR" targetRef="ActiveARinAAI" />
     <bpmn2:scriptTask id="generateOutputs" name="Generate Outputs" scriptFormat="groovy">
       <bpmn2:incoming>SequenceFlow_1iy3cqb</bpmn2:incoming>
@@ -334,6 +259,23 @@
       </bpmn2:timerEventDefinition>
     </bpmn2:intermediateCatchEvent>
     <bpmn2:sequenceFlow id="SequenceFlow_08hhqb2" sourceRef="IntermediateThrowEvent_0ti2fv8" targetRef="PreProcessSDNCGet" />
+    <bpmn2:scriptTask id="ScriptTask_0n6wvp0" name="&#10;AAI&#10;Query&#10;(svc instance)&#10;" scriptFormat="groovy">
+      <bpmn2:incoming>SequenceFlow_2</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_01zb7a0</bpmn2:outgoing>
+      <bpmn2:script><![CDATA[import org.onap.so.bpmn.vcpe.scripts.*
+DoCreateAllottedResourceBRG dcar = new DoCreateAllottedResourceBRG()
+dcar.getServiceInstance(execution)
+]]></bpmn2:script>
+    </bpmn2:scriptTask>
+    <bpmn2:scriptTask id="ScriptTask_10d76y6" name="&#10;AAI&#10;Query&#10;(svc instance)&#10;" scriptFormat="groovy">
+      <bpmn2:incoming>SequenceFlow_1m8u8dl</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_0vrw9a9</bpmn2:outgoing>
+      <bpmn2:script><![CDATA[import org.onap.so.bpmn.vcpe.scripts.*
+DoCreateAllottedResourceBRG dcar = new DoCreateAllottedResourceBRG()
+dcar.getParentServiceInstance(execution)]]></bpmn2:script>
+    </bpmn2:scriptTask>
+    <bpmn2:sequenceFlow id="SequenceFlow_01zb7a0" sourceRef="ScriptTask_0n6wvp0" targetRef="GetAAIAR" />
+    <bpmn2:sequenceFlow id="SequenceFlow_0vrw9a9" sourceRef="ScriptTask_10d76y6" targetRef="CreateAAIAR" />
   </bpmn2:process>
   <bpmn2:error id="Error_1" name="Java Lang Exception" errorCode="java.lang.Exception" />
   <bpmn2:error id="Error_2" name="MSO Workflow Exception" errorCode="MSOWorkflowException" />
@@ -357,57 +299,16 @@
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_2" bpmnElement="SequenceFlow_2" sourceElement="_BPMNShape_ScriptTask_285">
         <di:waypoint xsi:type="dc:Point" x="119" y="239" />
-        <di:waypoint xsi:type="dc:Point" x="195" y="239" />
+        <di:waypoint xsi:type="dc:Point" x="261" y="240" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="157" y="224" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="_BPMNShape_CallActivity_59" bpmnElement="GetAAIServiceInstance">
-        <dc:Bounds x="195" y="199" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="_BPMNShape_ExclusiveGateway_229" bpmnElement="ServiceInstanceExists" isMarkerVisible="true">
-        <dc:Bounds x="367" y="217" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="349" y="270" width="83" height="25" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_4" bpmnElement="SequenceFlow_4" sourceElement="_BPMNShape_CallActivity_59" targetElement="_BPMNShape_ExclusiveGateway_229">
-        <di:waypoint xsi:type="dc:Point" x="295" y="239" />
-        <di:waypoint xsi:type="dc:Point" x="369" y="240" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="332" y="224.5" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="_BPMNShape_ScriptTask_293" bpmnElement="buildWorkflowException">
-        <dc:Bounds x="342" y="85" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_5" bpmnElement="notFound" sourceElement="_BPMNShape_ExclusiveGateway_229" targetElement="_BPMNShape_ScriptTask_293">
-        <di:waypoint xsi:type="dc:Point" x="392" y="217" />
-        <di:waypoint xsi:type="dc:Point" x="392" y="165" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="371" y="192.6917250252067" width="14" height="13" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="_BPMNShape_EndEvent_225" bpmnElement="EndEvent_1">
-        <dc:Bounds x="374" y="-11" width="36" height="36" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="392" y="30" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_6" bpmnElement="SequenceFlow_6" sourceElement="_BPMNShape_ScriptTask_293" targetElement="_BPMNShape_EndEvent_225">
-        <di:waypoint xsi:type="dc:Point" x="392" y="85" />
-        <di:waypoint xsi:type="dc:Point" x="392" y="58" />
-        <di:waypoint xsi:type="dc:Point" x="392" y="58" />
-        <di:waypoint xsi:type="dc:Point" x="392" y="25" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="407" y="58" width="0" height="0" />
+          <dc:Bounds x="145" y="224.5" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="_BPMNShape_ScriptTask_299" bpmnElement="GetAAIAR">
-        <dc:Bounds x="506" y="200" width="100" height="80" />
+        <dc:Bounds x="478" y="200" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="_BPMNShape_ScriptTask_300" bpmnElement="CreateAAIAR">
-        <dc:Bounds x="1206" y="200" width="100" height="80" />
+        <dc:Bounds x="1099" y="200" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="_BPMNShape_EndEvent_228" bpmnElement="EndEvent_3">
         <dc:Bounds x="1527" y="776" width="36" height="36" />
@@ -416,11 +317,10 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_13" bpmnElement="SequenceFlow_11" sourceElement="_BPMNShape_ScriptTask_300">
-        <di:waypoint xsi:type="dc:Point" x="1306" y="240" />
-        <di:waypoint xsi:type="dc:Point" x="1338" y="240" />
-        <di:waypoint xsi:type="dc:Point" x="1408" y="240" />
+        <di:waypoint xsi:type="dc:Point" x="1199" y="240" />
+        <di:waypoint xsi:type="dc:Point" x="1309" y="240" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1322" y="225" width="0" height="0" />
+          <dc:Bounds x="1209" y="225" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1q6udwm_di" bpmnElement="SequenceFlow_1q6udwm">
@@ -538,53 +438,6 @@
           <dc:Bounds x="1277" y="779" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="CallActivity_0e73um9_di" bpmnElement="GetAAIParentSI">
-        <dc:Bounds x="843" y="199" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1vg5rfa_di" bpmnElement="SequenceFlow_1vg5rfa">
-        <di:waypoint xsi:type="dc:Point" x="943" y="239" />
-        <di:waypoint xsi:type="dc:Point" x="1033" y="240" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="988" y="224.5" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ExclusiveGateway_1q51t9m_di" bpmnElement="ParentSIExists" isMarkerVisible="true">
-        <dc:Bounds x="1033" y="215" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="1012" y="265" width="92" height="36" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_17p4ohs_di" bpmnElement="SequenceFlow_17p4ohs">
-        <di:waypoint xsi:type="dc:Point" x="1083" y="240" />
-        <di:waypoint xsi:type="dc:Point" x="1206" y="241" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="1127" y="222" width="19" height="14" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ScriptTask_1hzsbck_di" bpmnElement="ScriptTask_1hzsbck">
-        <dc:Bounds x="1008" y="77" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="EndEvent_0x4moh8_di" bpmnElement="EndEvent_0x4moh8">
-        <dc:Bounds x="1040" y="6" width="36" height="36" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="1058" y="47" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0f7u5pu_di" bpmnElement="SequenceFlow_0f7u5pu">
-        <di:waypoint xsi:type="dc:Point" x="1058" y="215" />
-        <di:waypoint xsi:type="dc:Point" x="1058" y="186" />
-        <di:waypoint xsi:type="dc:Point" x="1058" y="157" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="1034" y="173.413457125764" width="14" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_16o7col_di" bpmnElement="SequenceFlow_16o7col">
-        <di:waypoint xsi:type="dc:Point" x="1059" y="77" />
-        <di:waypoint xsi:type="dc:Point" x="1059" y="42" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="1074" y="59.5" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="SubProcess_161pl4g_di" bpmnElement="SubProcess_161pl4g" isExpanded="true">
         <dc:Bounds x="53" y="910" width="783" height="195" />
       </bpmndi:BPMNShape>
@@ -663,9 +516,9 @@
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1m8u8dl_di" bpmnElement="SequenceFlow_1m8u8dl">
         <di:waypoint xsi:type="dc:Point" x="750" y="240" />
-        <di:waypoint xsi:type="dc:Point" x="843" y="239" />
+        <di:waypoint xsi:type="dc:Point" x="893" y="240" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="777" y="224" width="14" height="14" />
+          <dc:Bounds x="795.4388439306359" y="224.36614831617715" width="14" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0z8luou_di" bpmnElement="SequenceFlow_0z8luou">
@@ -691,23 +544,16 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="IntermediateThrowEvent_0sb45m9_di" bpmnElement="IntermediateThrowEvent_1lqaeh8">
-        <dc:Bounds x="1408" y="222" width="36" height="36" />
+        <dc:Bounds x="1309" y="222" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1456" y="234" width="76" height="12" />
+          <dc:Bounds x="1357" y="234" width="77" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_7" bpmnElement="found" sourceElement="_BPMNShape_ExclusiveGateway_229">
-        <di:waypoint xsi:type="dc:Point" x="416" y="241" />
-        <di:waypoint xsi:type="dc:Point" x="506" y="242" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="432" y="220.27119611047112" width="17" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0gbsa12_di" bpmnElement="SequenceFlow_0gbsa12">
-        <di:waypoint xsi:type="dc:Point" x="606" y="240" />
+        <di:waypoint xsi:type="dc:Point" x="578" y="240" />
         <di:waypoint xsi:type="dc:Point" x="700" y="240" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="653" y="225" width="0" height="0" />
+          <dc:Bounds x="594" y="225" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_0pjzuns_di" bpmnElement="generateOutputs">
@@ -750,6 +596,26 @@
           <dc:Bounds x="1061" y="524" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ScriptTask_0n6wvp0_di" bpmnElement="ScriptTask_0n6wvp0">
+        <dc:Bounds x="261" y="200" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_10d76y6_di" bpmnElement="ScriptTask_10d76y6">
+        <dc:Bounds x="893" y="200" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_01zb7a0_di" bpmnElement="SequenceFlow_01zb7a0">
+        <di:waypoint xsi:type="dc:Point" x="361" y="240" />
+        <di:waypoint xsi:type="dc:Point" x="478" y="240" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="419.5" y="219" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0vrw9a9_di" bpmnElement="SequenceFlow_0vrw9a9">
+        <di:waypoint xsi:type="dc:Point" x="993" y="240" />
+        <di:waypoint xsi:type="dc:Point" x="1099" y="240" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1046" y="219" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
 </bpmn2:definitions>
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateE2ENetworkInstance.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateE2ENetworkInstance.bpmn
index 07de3fc..3fea746 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateE2ENetworkInstance.bpmn
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateE2ENetworkInstance.bpmn
@@ -33,32 +33,17 @@
     <bpmn:endEvent id="EndEvent_0tpifgl">
       <bpmn:incoming>SequenceFlow_0o6bjmn</bpmn:incoming>
     </bpmn:endEvent>
-    <bpmn:callActivity id="CallActivity_11yzhx1" name="Call CustomE2EGetService2" calledElement="CustomE2EGetService">
-      <bpmn:extensionElements>
-        <camunda:in source="serviceInstanceId" target="GENGS_serviceInstanceId" />
-        <camunda:in sourceExpression="service-instance" target="GENGS_type" />
-        <camunda:in source="globalSubscriberId" target="GENGS_globalCustomerId" />
-        <camunda:in source="subscriptionServiceType" target="GENGS_serviceType" />
-        <camunda:out source="GENGS_FoundIndicator" target="GENGS_FoundIndicator" />
-        <camunda:out source="GENGS_SuccessIndicator" target="GENGS_SuccessIndicator" />
-        <camunda:out source="WorkflowException" target="WorkflowException" />
-        <camunda:out source="GENGS_service" target="GENGS_service" />
-      </bpmn:extensionElements>
+    <bpmn:scriptTask id="ScriptTask_0yz4lym" name="&#10;AAI&#10;Query&#10;(svc instance)&#10;" scriptFormat="groovy">
       <bpmn:incoming>SequenceFlow_0k06cqp</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_1oql7zl</bpmn:outgoing>
-    </bpmn:callActivity>
-    <bpmn:scriptTask id="ScriptTask_0yz4lym" name="Post Process AAI GET2" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_1oql7zl</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0o6bjmn</bpmn:outgoing>
       <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
 def dcsi = new DoCreateE2EServiceInstance()
-dcsi.postProcessAAIGET2(execution)]]></bpmn:script>
+dcsi.getServiceInstance(execution)]]></bpmn:script>
     </bpmn:scriptTask>
     <bpmn:sequenceFlow id="SequenceFlow_0s7w7gp" name="" sourceRef="ScriptTask_16gvaru" targetRef="CallActivity_0ao684p" />
     <bpmn:sequenceFlow id="SequenceFlow_1wtx8gj" name="" sourceRef="CallActivity_0ao684p" targetRef="ScriptTask_0dp0qqq" />
-    <bpmn:sequenceFlow id="SequenceFlow_0k06cqp" name="" sourceRef="ScriptTask_0dp0qqq" targetRef="CallActivity_11yzhx1" />
+    <bpmn:sequenceFlow id="SequenceFlow_0k06cqp" name="" sourceRef="ScriptTask_0dp0qqq" targetRef="ScriptTask_0yz4lym" />
     <bpmn:sequenceFlow id="SequenceFlow_0o6bjmn" sourceRef="ScriptTask_0yz4lym" targetRef="EndEvent_0tpifgl" />
-    <bpmn:sequenceFlow id="SequenceFlow_1oql7zl" sourceRef="CallActivity_11yzhx1" targetRef="ScriptTask_0yz4lym" />
     <bpmn:sequenceFlow id="SequenceFlow_1gomb9n" sourceRef="StartEvent_1" targetRef="ScriptTask_16gvaru" />
   </bpmn:process>
   <bpmndi:BPMNDiagram id="BPMNDiagram_1">
@@ -81,9 +66,6 @@
           <dc:Bounds x="1405" y="143" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="CallActivity_11yzhx1_di" bpmnElement="CallActivity_11yzhx1">
-        <dc:Bounds x="983" y="80" width="100" height="80" />
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_0yz4lym_di" bpmnElement="ScriptTask_0yz4lym">
         <dc:Bounds x="1219" y="80" width="100" height="80" />
       </bpmndi:BPMNShape>
@@ -102,26 +84,17 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0k06cqp_di" bpmnElement="SequenceFlow_0k06cqp">
-        <di:waypoint xsi:type="dc:Point" x="854" y="120" />
-        <di:waypoint xsi:type="dc:Point" x="891" y="120" />
-        <di:waypoint xsi:type="dc:Point" x="983" y="120" />
+        <di:waypoint xsi:type="dc:Point" x="854" y="119" />
+        <di:waypoint xsi:type="dc:Point" x="1219" y="116" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="872.5" y="99" width="0" height="12" />
+          <dc:Bounds x="991.5" y="96.5" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0o6bjmn_di" bpmnElement="SequenceFlow_0o6bjmn">
         <di:waypoint xsi:type="dc:Point" x="1319" y="120" />
         <di:waypoint xsi:type="dc:Point" x="1432" y="120" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1375.5" y="99" width="0" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1oql7zl_di" bpmnElement="SequenceFlow_1oql7zl">
-        <di:waypoint xsi:type="dc:Point" x="1083" y="115" />
-        <di:waypoint xsi:type="dc:Point" x="1151" y="115" />
-        <di:waypoint xsi:type="dc:Point" x="1219" y="115" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="1117" y="94" width="0" height="12" />
+          <dc:Bounds x="1331" y="99" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1gomb9n_di" bpmnElement="SequenceFlow_1gomb9n">
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateE2EServiceInstance.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateE2EServiceInstance.bpmn
index a5fadcf..eeaa5e4 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateE2EServiceInstance.bpmn
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateE2EServiceInstance.bpmn
@@ -12,21 +12,6 @@
 dcsi.preProcessRequest(execution)
 ]]></bpmn2:script>
     </bpmn2:scriptTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_4" name="" sourceRef="CustomE2EGetService" targetRef="ScriptTask_0i8cqdy" />
-    <bpmn2:callActivity id="CustomE2EGetService" name="Call Custom E2E Get Service" calledElement="CustomE2EGetService">
-      <bpmn2:extensionElements>
-        <camunda:in source="serviceInstanceName" target="GENGS_serviceInstanceName" />
-        <camunda:in source="globalSubscriberId" target="GENGS_globalCustomerId" />
-        <camunda:in sourceExpression="service-instance" target="GENGS_type" />
-        <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" />
-        <camunda:in source="serviceInstanceId" target="GENGS_serviceInstanceId" />
-      </bpmn2:extensionElements>
-      <bpmn2:incoming>SequenceFlow_1i7t9hq</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" />
@@ -38,7 +23,7 @@
         <camunda:in source="msoRequestId" target="GENPS_requesId" />
         <camunda:out source="WorkflowException" target="WorkflowException" />
       </bpmn2:extensionElements>
-      <bpmn2:incoming>SequenceFlow_1w01tqs</bpmn2:incoming>
+      <bpmn2:incoming>SequenceFlow_1i7t9hq</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_129ih1g</bpmn2:outgoing>
     </bpmn2:callActivity>
     <bpmn2:sequenceFlow id="SequenceFlow_129ih1g" sourceRef="CustomE2EPutService" targetRef="ScriptTask_0q37vn9" />
@@ -82,14 +67,6 @@
       </bpmn2:scriptTask>
       <bpmn2:sequenceFlow id="SequenceFlow_1xzgv5k" sourceRef="ScriptTask_1p0vyip" targetRef="EndEvent_117lkk3" />
     </bpmn2:subProcess>
-    <bpmn2:scriptTask id="ScriptTask_0i8cqdy" name="Post Process AAI GET" scriptFormat="groovy">
-      <bpmn2:incoming>SequenceFlow_4</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_1w01tqs</bpmn2:outgoing>
-      <bpmn2:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
-def dcsi = new DoCreateE2EServiceInstance()
-dcsi.postProcessAAIGET(execution)]]></bpmn2:script>
-    </bpmn2:scriptTask>
-    <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_1tkgqu3</bpmn2:outgoing>
@@ -179,7 +156,7 @@
       <bpmn2:outgoing>SequenceFlow_1i7t9hq</bpmn2:outgoing>
       <bpmn2:linkEventDefinition name="StartService" />
     </bpmn2:intermediateCatchEvent>
-    <bpmn2:sequenceFlow id="SequenceFlow_1i7t9hq" sourceRef="IntermediateCatchEvent_0jrb3xu" targetRef="CustomE2EGetService" />
+    <bpmn2:sequenceFlow id="SequenceFlow_1i7t9hq" sourceRef="IntermediateCatchEvent_0jrb3xu" targetRef="CustomE2EPutService" />
     <bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_05dus9b" name="StartPrepareResource">
       <bpmn2:outgoing>SequenceFlow_1hbesp9</bpmn2:outgoing>
       <bpmn2:linkEventDefinition name="StartPrepareResource" />
@@ -258,18 +235,6 @@
       <bpmndi:BPMNShape id="_BPMNShape_ScriptTask_61" bpmnElement="preProcessRequest_ScriptTask">
         <dc:Bounds x="126" y="-229" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_10" bpmnElement="SequenceFlow_4">
-        <di:waypoint xsi:type="dc:Point" x="296" y="94" />
-        <di:waypoint xsi:type="dc:Point" x="387" y="94" />
-        <di:waypoint xsi:type="dc:Point" x="387" y="94" />
-        <di:waypoint xsi:type="dc:Point" x="478" y="94" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="357" y="94" width="90" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="CallActivity_1md4kyb_di" bpmnElement="CustomE2EGetService">
-        <dc:Bounds x="196" y="57" width="100" height="80" />
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="CallActivity_0khp0qc_di" bpmnElement="CustomE2EPutService">
         <dc:Bounds x="713" y="54" width="100" height="80" />
       </bpmndi:BPMNShape>
@@ -314,18 +279,6 @@
           <dc:Bounds x="152" y="945" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ScriptTask_0i8cqdy_di" bpmnElement="ScriptTask_0i8cqdy">
-        <dc:Bounds x="478" y="54" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1w01tqs_di" bpmnElement="SequenceFlow_1w01tqs">
-        <di:waypoint xsi:type="dc:Point" x="578" y="94" />
-        <di:waypoint xsi:type="dc:Point" x="646" y="94" />
-        <di:waypoint xsi:type="dc:Point" x="646" y="94" />
-        <di:waypoint xsi:type="dc:Point" x="713" y="94" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="616" y="94" width="90" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_0q37vn9_di" bpmnElement="ScriptTask_0q37vn9">
         <dc:Bounds x="1068" y="54" width="100" height="80" />
       </bpmndi:BPMNShape>
@@ -451,9 +404,12 @@
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1i7t9hq_di" bpmnElement="SequenceFlow_1i7t9hq">
         <di:waypoint xsi:type="dc:Point" x="54" y="97" />
-        <di:waypoint xsi:type="dc:Point" x="196" y="97" />
+        <di:waypoint xsi:type="dc:Point" x="528" y="94" />
+        <di:waypoint xsi:type="dc:Point" x="646" y="94" />
+        <di:waypoint xsi:type="dc:Point" x="646" y="94" />
+        <di:waypoint xsi:type="dc:Point" x="713" y="94" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="125" y="76" width="0" height="12" />
+          <dc:Bounds x="542" y="73" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="IntermediateCatchEvent_05dus9b_di" bpmnElement="IntermediateCatchEvent_05dus9b">
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateE2EServiceInstanceV2.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateE2EServiceInstanceV2.bpmn
index 4c107c7..77c62e5 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateE2EServiceInstanceV2.bpmn
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateE2EServiceInstanceV2.bpmn
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_MagIIMOUEeW8asg-vCEgWQ" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.11.3" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
+<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_MagIIMOUEeW8asg-vCEgWQ" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.10.0" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
   <bpmn2:process id="DoCreateE2EServiceInstanceV2" name="DoCreateE2EServiceInstanceV2" isExecutable="true">
     <bpmn2:startEvent id="createSI_startEvent" name="Start Flow">
       <bpmn2:outgoing>SequenceFlow_1</bpmn2:outgoing>
@@ -13,21 +13,7 @@
 dcsi.preProcessRequest(execution)
 ]]></bpmn2:script>
     </bpmn2:scriptTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_4" name="" sourceRef="CustomE2EGetService" targetRef="ScriptTask_0i8cqdy_PostProcessAAIGET" />
-    <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" />
-        <camunda:in source="globalSubscriberId" target="GENGS_globalCustomerId" />
-        <camunda:in sourceExpression="service-instance" target="GENGS_type" />
-        <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_2</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_4</bpmn2:outgoing>
-    </bpmn2:callActivity>
+    <bpmn2:sequenceFlow id="SequenceFlow_2" name="" sourceRef="preProcessRequest_ScriptTask" targetRef="IntermediateThrowEvent_0aggdcl_GoToStartService" />
     <bpmn2:callActivity id="CustomE2EPutService" name="Call Custom E2E Put Service" calledElement="CustomE2EPutService">
       <bpmn2:extensionElements>
         <camunda:in source="globalSubscriberId" target="GENPS_globalSubscriberId" />
@@ -83,13 +69,6 @@
       </bpmn2:scriptTask>
       <bpmn2:sequenceFlow id="SequenceFlow_1xzgv5k" sourceRef="ScriptTask_1p0vyip" targetRef="EndEvent_117lkk3" />
     </bpmn2:subProcess>
-    <bpmn2:scriptTask id="ScriptTask_0i8cqdy_PostProcessAAIGET" name="Post Process AAI GET" scriptFormat="groovy">
-      <bpmn2:incoming>SequenceFlow_4</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_10aubhh</bpmn2:outgoing>
-      <bpmn2:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
-def dcsi = new DoCreateE2EServiceInstanceV2()
-dcsi.postProcessAAIGET(execution)]]></bpmn2:script>
-    </bpmn2:scriptTask>
     <bpmn2:scriptTask id="ScriptTask_0q37vn9_PostProcessAAIPUT" name="Post Process AAI PUT" scriptFormat="groovy">
       <bpmn2:incoming>SequenceFlow_129ih1g</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_03fabby</bpmn2:outgoing>
@@ -225,9 +204,8 @@
 csi.postOtherControllerType(execution)]]></bpmn2:script>
     </bpmn2:scriptTask>
     <bpmn2:sequenceFlow id="SequenceFlow_0gxsqsa" sourceRef="Task_0zhvu4r_llllll" targetRef="ExclusiveGateway_0r4jkig" />
-    <bpmn2:sequenceFlow id="SequenceFlow_10aubhh" sourceRef="ScriptTask_0i8cqdy_PostProcessAAIGET" targetRef="IntermediateThrowEvent_0aggdcl_GoToStartService" />
     <bpmn2:intermediateThrowEvent id="IntermediateThrowEvent_0aggdcl_GoToStartService" name="GoTo StartService">
-      <bpmn2:incoming>SequenceFlow_10aubhh</bpmn2:incoming>
+      <bpmn2:incoming>SequenceFlow_2</bpmn2:incoming>
       <bpmn2:linkEventDefinition name="StartService" />
     </bpmn2:intermediateThrowEvent>
     <bpmn2:intermediateCatchEvent id="StartEvent_0l5bz4h_StartService" name="StartService">
@@ -486,23 +464,13 @@
           <dc:Bounds x="59.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="664" y="97" />
-        <di:waypoint xsi:type="dc:Point" x="917" y="97" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="745.5" y="82" width="90" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_3" bpmnElement="SequenceFlow_2" sourceElement="_BPMNShape_ScriptTask_61" targetElement="CallActivity_1md4kyb_di">
+      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_3" bpmnElement="SequenceFlow_2" sourceElement="_BPMNShape_ScriptTask_61" targetElement="IntermediateThrowEvent_1m5zb3d_di">
         <di:waypoint xsi:type="dc:Point" x="287" y="97" />
-        <di:waypoint xsi:type="dc:Point" x="564" y="97" />
+        <di:waypoint xsi:type="dc:Point" x="1239" y="97" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="380.5" y="82" width="90" height="0" />
+          <dc:Bounds x="718" y="82" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="CallActivity_1md4kyb_di" bpmnElement="CustomE2EGetService">
-        <dc:Bounds x="564" y="57" width="100" height="80" />
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="CallActivity_0khp0qc_di" bpmnElement="CustomE2EPutService">
         <dc:Bounds x="564" y="244" width="100" height="80" />
       </bpmndi:BPMNShape>
@@ -545,9 +513,6 @@
           <dc:Bounds x="126" y="1831" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ScriptTask_0i8cqdy_di" bpmnElement="ScriptTask_0i8cqdy_PostProcessAAIGET">
-        <dc:Bounds x="917" y="57" width="100" height="80" />
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_0q37vn9_di" bpmnElement="ScriptTask_0q37vn9_PostProcessAAIPUT">
         <dc:Bounds x="917" y="244" width="100" height="80" />
       </bpmndi:BPMNShape>
@@ -752,13 +717,6 @@
           <dc:Bounds x="312.5" y="1193" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_10aubhh_di" bpmnElement="SequenceFlow_10aubhh">
-        <di:waypoint xsi:type="dc:Point" x="1017" y="97" />
-        <di:waypoint xsi:type="dc:Point" x="1239" y="97" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="1128" y="76" width="0" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="IntermediateThrowEvent_1m5zb3d_di" bpmnElement="IntermediateThrowEvent_0aggdcl_GoToStartService">
         <dc:Bounds x="1239" y="79" width="36" height="36" />
         <bpmndi:BPMNLabel>
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateNetworkInstance.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateNetworkInstance.bpmn
index 12dbfe6..2f5fa39 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateNetworkInstance.bpmn
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateNetworkInstance.bpmn
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_MagIIMOUEeW8asg-vCEgWQ" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.4.0" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
+<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_MagIIMOUEeW8asg-vCEgWQ" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.10.0" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
   <bpmn2:process id="DoCreateNetworkInstance" name="DoCreateNetworkInstance" isExecutable="true">
     <bpmn2:startEvent id="createNetwork_startEvent" name="Start Flow">
       <bpmn2:outgoing>SequenceFlow_1n61wit</bpmn2:outgoing>
@@ -332,19 +332,6 @@
         <bpmn2:incoming>SequenceFlow_14</bpmn2:incoming>
       </bpmn2:endEvent>
     </bpmn2:subProcess>
-    <bpmn2:callActivity id="callGetServiceInstance" name="Get&#10;Service&#10;Instance" calledElement="GenericGetService">
-      <bpmn2:extensionElements>
-        <camunda:in source="CRENWKI_serviceInstanceId" target="GENGS_serviceInstanceId" />
-        <camunda:out source="GENGS_serviceInstance" target="CRENWKI_serviceInstance" />
-        <camunda:out source="GENGS_FoundIndicator" target="GENGSI_FoundIndicator" />
-        <camunda:out source="GENGS_SuccessIndicator" target="GENGSI_SuccessIndicator" />
-        <camunda:out source="GENGS_siResourceLink" target="GENGSI_siResourceLink" />
-        <camunda:out source="WorkflowException" target="WorkflowException" />
-        <camunda:in source="GENGS_type" target="GENGS_type" />
-      </bpmn2:extensionElements>
-      <bpmn2:incoming>SequenceFlow_0ftylq3</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_3</bpmn2:outgoing>
-    </bpmn2:callActivity>
     <bpmn2:scriptTask id="callAAIQuery_scriptTask" name="Call REST Query Network Name In AAI" scriptFormat="groovy">
       <bpmn2:incoming>isNameSentYes_SequenceFlow</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_6</bpmn2:outgoing>
@@ -353,23 +340,7 @@
 DoCreateNetworkInstance.callRESTQueryAAINetworkName(execution)]]></bpmn2:script>
     </bpmn2:scriptTask>
     <bpmn2:sequenceFlow id="SequenceFlow_6" name="" sourceRef="callAAIQuery_scriptTask" targetRef="isAAIQueryNameOk_ExclusiveGateway" />
-    <bpmn2:sequenceFlow id="SequenceFlow_3" name="" sourceRef="callGetServiceInstance" targetRef="siFoundCheck" />
-    <bpmn2:exclusiveGateway id="siFoundCheck" name="Service Instance Found?" default="siFoundNo">
-      <bpmn2:incoming>SequenceFlow_3</bpmn2:incoming>
-      <bpmn2:outgoing>siFoundYes</bpmn2:outgoing>
-      <bpmn2:outgoing>siFoundNo</bpmn2:outgoing>
-    </bpmn2:exclusiveGateway>
-    <bpmn2:sequenceFlow id="siFoundYes" name="Yes" sourceRef="siFoundCheck" targetRef="isNameSent_ExclusiveGateway">
-      <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression"><![CDATA[#{execution.getVariable("GENGSI_FoundIndicator" ) == true && execution.getVariable("GENGSI_SuccessIndicator" ) == true}]]></bpmn2:conditionExpression>
-    </bpmn2:sequenceFlow>
-    <bpmn2:sequenceFlow id="siFoundNo" name="No" sourceRef="siFoundCheck" targetRef="workflowExceptionSINotFound" />
-    <bpmn2:scriptTask id="workflowExceptionSINotFound" name="Create Workflow Exception" scriptFormat="groovy">
-      <bpmn2:incoming>siFoundNo</bpmn2:incoming>
-      <bpmn2:script><![CDATA[import org.onap.so.bpmn.common.scripts.*
-ExceptionUtil exceptionUtil = new ExceptionUtil()
-exceptionUtil.buildAndThrowWorkflowException(execution, 404, "Service Instance Not Found")
-]]></bpmn2:script>
-    </bpmn2:scriptTask>
+    <bpmn2:sequenceFlow id="SequenceFlow_3" name="" sourceRef="callGetServiceInstance" targetRef="isNameSent_ExclusiveGateway" />
     <bpmn2:scriptTask id="callRESTQueryVpnBinding_ScriptTask" name="Call REST Query Vpn Binding in AAI" scriptFormat="groovy">
       <bpmn2:incoming>SequenceFlow_16</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_15</bpmn2:outgoing>
@@ -413,7 +384,7 @@
     </bpmn2:scriptTask>
     <bpmn2:sequenceFlow id="SequenceFlow_0ftylq3" sourceRef="ScriptTask_preprocess" targetRef="callGetServiceInstance" />
     <bpmn2:exclusiveGateway id="isNameSent_ExclusiveGateway" name="is Network Name &#10;Sent?&#10;" default="isNameSentNo_SequenceFlow">
-      <bpmn2:incoming>siFoundYes</bpmn2:incoming>
+      <bpmn2:incoming>SequenceFlow_3</bpmn2:incoming>
       <bpmn2:outgoing>isNameSentYes_SequenceFlow</bpmn2:outgoing>
       <bpmn2:outgoing>isNameSentNo_SequenceFlow</bpmn2:outgoing>
     </bpmn2:exclusiveGateway>
@@ -535,6 +506,13 @@
 DoCreateNetworkInstance.postProcessResponse(execution)]]></bpmn2:script>
     </bpmn2:scriptTask>
     <bpmn2:sequenceFlow id="SequenceFlow_18ylufb" sourceRef="ScriptTask_0p3v749" targetRef="EndEvent_0ti2ctu" />
+    <bpmn2:scriptTask id="callGetServiceInstance" name="&#10;AAI&#10;Query&#10;(svc instance)&#10;" scriptFormat="groovy">
+      <bpmn2:incoming>SequenceFlow_0ftylq3</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_3</bpmn2:outgoing>
+      <bpmn2:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
+def DoCreateNetworkInstance = new DoCreateNetworkInstance()
+DoCreateNetworkInstance.getServiceInstance(execution)]]></bpmn2:script>
+    </bpmn2:scriptTask>
     <bpmn2:textAnnotation id="TextAnnotation_1orb6o6">    <bpmn2:text><![CDATA[if '200', Prepare PO Network Rollback]]></bpmn2:text>
 </bpmn2:textAnnotation>
     <bpmn2:association id="Association_0c315jr" sourceRef="validateCreatePONetwork_ScriptTask" targetRef="TextAnnotation_1orb6o6" />
@@ -898,37 +876,12 @@
           <dc:Bounds x="301" y="476" width="6" height="6" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="_BPMNShape_CallActivity_72" bpmnElement="callGetServiceInstance">
-        <dc:Bounds x="759" y="155" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="_BPMNShape_ExclusiveGateway_244" bpmnElement="siFoundCheck" isMarkerVisible="true">
-        <dc:Bounds x="784" y="291" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="696" y="304" width="80" height="25" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_3" bpmnElement="SequenceFlow_3" sourceElement="_BPMNShape_CallActivity_72" targetElement="_BPMNShape_ExclusiveGateway_244">
+      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_3" bpmnElement="SequenceFlow_3" sourceElement="ScriptTask_0z2n0hl_di" targetElement="ExclusiveGateway_0lw40k5_di">
         <di:waypoint xsi:type="dc:Point" x="809" y="235" />
-        <di:waypoint xsi:type="dc:Point" x="809" y="291" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="824" y="263" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_17" bpmnElement="siFoundYes" sourceElement="_BPMNShape_ExclusiveGateway_244" targetElement="_BPMNShape_ScriptTask_62">
-        <di:waypoint xsi:type="dc:Point" x="834" y="316" />
+        <di:waypoint xsi:type="dc:Point" x="809" y="316" />
         <di:waypoint xsi:type="dc:Point" x="951" y="316" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="851" y="319" width="18" height="13" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="_BPMNShape_ScriptTask_331" bpmnElement="workflowExceptionSINotFound">
-        <dc:Bounds x="759" y="395" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_20" bpmnElement="siFoundNo" sourceElement="_BPMNShape_ExclusiveGateway_244" targetElement="_BPMNShape_ScriptTask_331">
-        <di:waypoint xsi:type="dc:Point" x="809" y="341" />
-        <di:waypoint xsi:type="dc:Point" x="809" y="395" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="823" y="340.55618916742606" width="14" height="13" />
+          <dc:Bounds x="779" y="275.5" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="_BPMNShape_ScriptTask_333" bpmnElement="callRESTQueryNetworkTableRef_ScriptTask">
@@ -961,7 +914,7 @@
         <di:waypoint xsi:type="dc:Point" x="706" y="195" />
         <di:waypoint xsi:type="dc:Point" x="759" y="195" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="721" y="195" width="0" height="0" />
+          <dc:Bounds x="676" y="195" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ExclusiveGateway_0lw40k5_di" bpmnElement="isNameSent_ExclusiveGateway" isMarkerVisible="true">
@@ -1358,6 +1311,9 @@
           <dc:Bounds x="287" y="1159" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ScriptTask_0z2n0hl_di" bpmnElement="callGetServiceInstance">
+        <dc:Bounds x="759" y="155" width="100" height="80" />
+      </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
 </bpmn2:definitions>
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateServiceInstance.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateServiceInstance.bpmn
index 29116a6..2c6f5ee 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateServiceInstance.bpmn
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateServiceInstance.bpmn
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_MagIIMOUEeW8asg-vCEgWQ" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.4.0" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
+<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_MagIIMOUEeW8asg-vCEgWQ" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.10.0" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
   <bpmn2:process id="DoCreateServiceInstance" name="DoCreateServiceInstance" isExecutable="true">
     <bpmn2:startEvent id="createSI_startEvent" name="Start Flow">
       <bpmn2:outgoing>SequenceFlow_1</bpmn2:outgoing>
@@ -12,7 +12,7 @@
 def dcsi = new DoCreateServiceInstance()
 dcsi.getAAICustomerById(execution)]]></bpmn2:script>
     </bpmn2:scriptTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_3" name="" sourceRef="getAAICustomerById_scriptTask" targetRef="ExclusiveGateway_09wkav2" />
+    <bpmn2:sequenceFlow id="SequenceFlow_3" name="" sourceRef="getAAICustomerById_scriptTask" targetRef="callGenericPutService" />
     <bpmn2:scriptTask id="preProcessRequest_ScriptTask" name="PreProcess Incoming Request" scriptFormat="groovy">
       <bpmn2:incoming>SequenceFlow_1</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_2</bpmn2:outgoing>
@@ -21,7 +21,6 @@
 dcsi.preProcessRequest(execution)
 ]]></bpmn2:script>
     </bpmn2:scriptTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_4" name="" sourceRef="callGenericGetService" targetRef="ScriptTask_0i8cqdy" />
     <bpmn2:scriptTask id="PreProcessSDNCAssignRequest" name="PreProcess SDNC Assign Request" scriptFormat="groovy">
       <bpmn2:incoming>SequenceFlow_156ih25</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_14</bpmn2:outgoing>
@@ -49,24 +48,12 @@
       <bpmn2:outgoing>SequenceFlow_9</bpmn2:outgoing>
     </bpmn2:callActivity>
     <bpmn2:endEvent id="EndEvent_3">
-      <bpmn2:incoming>SequenceFlow_01q6pl4</bpmn2:incoming>
+      <bpmn2:incoming>SequenceFlow_10</bpmn2:incoming>
     </bpmn2:endEvent>
     <bpmn2:sequenceFlow id="SequenceFlow_2" name="" sourceRef="preProcessRequest_ScriptTask" targetRef="getAAICustomerById_scriptTask" />
     <bpmn2:sequenceFlow id="SequenceFlow_14" name="" sourceRef="PreProcessSDNCAssignRequest" targetRef="CallSDNCAdapterServiceTopologyAssign" />
     <bpmn2:sequenceFlow id="SequenceFlow_9" name="" sourceRef="CallSDNCAdapterServiceTopologyAssign" targetRef="PostProcessSDNCAssignRequest" />
-    <bpmn2:sequenceFlow id="SequenceFlow_10" name="" sourceRef="PostProcessSDNCAssignRequest" targetRef="CallActivity_1707jgc" />
-    <bpmn2:callActivity id="callGenericGetService" name="Call GenericGetService" calledElement="GenericGetService">
-      <bpmn2:extensionElements>
-        <camunda:in source="serviceInstanceName" target="GENGS_serviceInstanceName" />
-        <camunda:in source="globalSubscriberId" target="GENGS_globalCustomerId" />
-        <camunda:in sourceExpression="service-instance" target="GENGS_type" />
-        <camunda:out source="GENGS_FoundIndicator" target="GENGS_FoundIndicator" />
-        <camunda:out source="GENGS_SuccessIndicator" target="GENGS_SuccessIndicator" />
-        <camunda:out source="WorkflowException" target="WorkflowException" />
-      </bpmn2:extensionElements>
-      <bpmn2:incoming>SequenceFlow_11fnnkb</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_4</bpmn2:outgoing>
-    </bpmn2:callActivity>
+    <bpmn2:sequenceFlow id="SequenceFlow_10" name="" sourceRef="PostProcessSDNCAssignRequest" targetRef="EndEvent_3" />
     <bpmn2:callActivity id="callGenericPutService" name="Call Generic Put Service" calledElement="GenericPutService">
       <bpmn2:extensionElements>
         <camunda:in source="globalSubscriberId" target="GENPS_globalSubscriberId" />
@@ -78,19 +65,9 @@
         <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:incoming>SequenceFlow_3</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_1jhzmzn</bpmn2:outgoing>
     </bpmn2:callActivity>
-    <bpmn2:exclusiveGateway id="ExclusiveGateway_09wkav2" name="need to check SI name in AAI?" 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="callGenericGetService">
-      <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression"><![CDATA[#{ execution.getVariable("checkAAI" )   == true }]]></bpmn2:conditionExpression>
-    </bpmn2:sequenceFlow>
-    <bpmn2:sequenceFlow id="SequenceFlow_1uw2p9a" name="no" sourceRef="ExclusiveGateway_09wkav2" targetRef="callGenericPutService" />
     <bpmn2:subProcess id="SubProcess_06d8lk8" name="Sub-process for Application Errors" triggeredByEvent="true">
       <bpmn2:startEvent id="StartEvent_0yljq9y">
         <bpmn2:outgoing>SequenceFlow_0tgrn11</bpmn2:outgoing>
@@ -143,37 +120,6 @@
     <bpmn2:sequenceFlow id="SequenceFlow_00v4npo" name="yes" sourceRef="ExclusiveGateway_1nk6aol" targetRef="EndEvent_10659gr">
       <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression"><![CDATA[#{!execution.getVariable("sendToSDNC")}]]></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>
-      <bpmn2:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
-def dcsi = new DoCreateServiceInstance()
-dcsi.postProcessAAIGET(execution)]]></bpmn2:script>
-    </bpmn2:scriptTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_1w01tqs" sourceRef="ScriptTask_0i8cqdy" targetRef="callGenericPutService" />
-    <bpmn2:callActivity id="CallActivity_1707jgc" name="Call GenericGetService2" calledElement="GenericGetService">
-      <bpmn2:extensionElements>
-        <camunda:in source="serviceInstanceId" target="GENGS_serviceInstanceId" />
-        <camunda:in sourceExpression="service-instance" target="GENGS_type" />
-        <camunda:in source="globalSubscriberId" target="GENGS_globalCustomerId" />
-        <camunda:in source="subscriptionServiceType" target="GENGS_serviceType" />
-        <camunda:out source="GENGS_FoundIndicator" target="GENGS_FoundIndicator" />
-        <camunda:out source="GENGS_SuccessIndicator" target="GENGS_SuccessIndicator" />
-        <camunda:out source="WorkflowException" target="WorkflowException" />
-        <camunda:out source="GENGS_service" target="GENGS_service" />
-      </bpmn2:extensionElements>
-      <bpmn2:incoming>SequenceFlow_10</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_0tx5frq</bpmn2:outgoing>
-    </bpmn2:callActivity>
-    <bpmn2:sequenceFlow id="SequenceFlow_0tx5frq" sourceRef="CallActivity_1707jgc" targetRef="ScriptTask_1tp0fcx" />
-    <bpmn2:sequenceFlow id="SequenceFlow_01q6pl4" sourceRef="ScriptTask_1tp0fcx" targetRef="EndEvent_3" />
-    <bpmn2:scriptTask id="ScriptTask_1tp0fcx" name="Post Process AAI GET2" scriptFormat="groovy">
-      <bpmn2:incoming>SequenceFlow_0tx5frq</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_01q6pl4</bpmn2:outgoing>
-      <bpmn2:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
-def dcsi = new DoCreateServiceInstance()
-dcsi.postProcessAAIGET2(execution)]]></bpmn2:script>
-    </bpmn2:scriptTask>
     <bpmn2:scriptTask id="ScriptTask_0q37vn9" name="Post Process AAI PUT" scriptFormat="groovy">
       <bpmn2:incoming>SequenceFlow_1jhzmzn</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_16sdyz9</bpmn2:outgoing>
@@ -243,24 +189,18 @@
       </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" />
+        <di:waypoint xsi:type="dc:Point" x="1022" y="97" />
+        <di:waypoint xsi:type="dc:Point" x="1022" y="206" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="529" y="82" width="0" height="0" />
+          <dc:Bounds x="712.5" y="82" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="_BPMNShape_EndEvent_177" bpmnElement="EndEvent_3">
-        <dc:Bounds x="1122" y="1297" width="36" height="36" />
+        <dc:Bounds x="1004" y="1216" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1095" y="1338" width="90" height="0" />
+          <dc:Bounds x="977" y="1257" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <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="971" y="94" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="905" y="79" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="_BPMNShape_ScriptTask_334" bpmnElement="PreProcessSDNCAssignRequest">
         <dc:Bounds x="972" y="810" width="100" height="80" />
       </bpmndi:BPMNShape>
@@ -292,39 +232,15 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_12" bpmnElement="SequenceFlow_10" sourceElement="_BPMNShape_ScriptTask_335">
-        <di:waypoint xsi:type="dc:Point" x="1024" y="1134" />
-        <di:waypoint xsi:type="dc:Point" x="1024" y="1162" />
+        <di:waypoint xsi:type="dc:Point" x="1023" y="1134" />
+        <di:waypoint xsi:type="dc:Point" x="1022" y="1216" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="994" y="1148" width="90" height="0" />
+          <dc:Bounds x="977.5" y="1160" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="CallActivity_1md4kyb_di" bpmnElement="callGenericGetService">
-        <dc:Bounds x="739" y="57" width="100" height="80" />
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="CallActivity_0khp0qc_di" bpmnElement="callGenericPutService">
         <dc:Bounds x="972" y="206" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <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="27" width="85" height="24" />
-        </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="99" y="531" width="783" height="195" />
       </bpmndi:BPMNShape>
@@ -385,18 +301,6 @@
           <dc:Bounds x="1050.5" y="718" 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" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_0ocetux_di" bpmnElement="ScriptTask_0ocetux">
         <dc:Bounds x="330" y="586" width="100" height="80" />
       </bpmndi:BPMNShape>
@@ -419,28 +323,6 @@
           <dc:Bounds x="808" y="626" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="CallActivity_1707jgc_di" bpmnElement="CallActivity_1707jgc">
-        <dc:Bounds x="972" y="1162" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0tx5frq_di" bpmnElement="SequenceFlow_0tx5frq">
-        <di:waypoint xsi:type="dc:Point" x="1022" y="1242" />
-        <di:waypoint xsi:type="dc:Point" x="1022" y="1275" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="992" y="1258.5" width="90" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_01q6pl4_di" bpmnElement="SequenceFlow_01q6pl4">
-        <di:waypoint xsi:type="dc:Point" x="1072" y="1315" />
-        <di:waypoint xsi:type="dc:Point" x="1094" y="1315" />
-        <di:waypoint xsi:type="dc:Point" x="1094" y="1315" />
-        <di:waypoint xsi:type="dc:Point" x="1122" y="1315" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="1064" y="1315" width="90" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ScriptTask_1tp0fcx_di" bpmnElement="ScriptTask_1tp0fcx">
-        <dc:Bounds x="972" y="1275" width="100" height="80" />
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_0q37vn9_di" bpmnElement="ScriptTask_0q37vn9">
         <dc:Bounds x="972" y="336" width="100" height="80" />
       </bpmndi:BPMNShape>
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateVfModuleVolumeV2.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateVfModuleVolumeV2.bpmn
index ac48776..26a4112 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateVfModuleVolumeV2.bpmn
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateVfModuleVolumeV2.bpmn
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_FhrCQG2BEeaNdqnn65BT4A" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.8.0" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
+<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_FhrCQG2BEeaNdqnn65BT4A" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.10.0" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
   <bpmn2:process id="DoCreateVfModuleVolumeV2" name="DoCreateVfModuleVolumeV2" isExecutable="true">
     <bpmn2:scriptTask id="ScriptTask_preProcessRequest" name="Preprocess Request" scriptFormat="groovy">
       <bpmn2:incoming>SequenceFlow_1</bpmn2:incoming>
@@ -128,26 +128,14 @@
     </bpmn2:scriptTask>
     <bpmn2:sequenceFlow id="SequenceFlow_1qwurc5" sourceRef="CallActivity_callVnfAdapterCreate" targetRef="Task_07psich" />
     <bpmn2:sequenceFlow id="SequenceFlow_1gbt2n5" sourceRef="Task_07psich" targetRef="ScriptTask_callRestAaiRequeryVolGrpNm" />
-    <bpmn2:callActivity id="Task_1u766ge" name="Call Generic Get Service instance" calledElement="GenericGetService">
-      <bpmn2:extensionElements>
-        <camunda:in source="serviceInstanceId" target="GENGS_serviceInstanceId" />
-        <camunda:in source="isDebugLogEnabled" target="isDebugLogEnabled" />
-        <camunda:in source="GENGS_type" target="GENGS_type" />
-        <camunda:out source="GENGS_FoundIndicator" target="GENGS_FoundIndicator" />
-        <camunda:out source="GENGS_SuccessIndicator" target="GENGS_SuccessIndicator" />
-      </bpmn2:extensionElements>
+    <bpmn2:scriptTask id="Task_0qbm5cz" name="&#10;AAI&#10;Query&#10;(svc instance)&#10;" scriptFormat="groovy">
       <bpmn2:incoming>SequenceFlow_1wi1cf9</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_1vmbvy8</bpmn2:outgoing>
-    </bpmn2:callActivity>
-    <bpmn2:scriptTask id="Task_0qbm5cz" name="Validate Get Service Instance Call" scriptFormat="groovy">
-      <bpmn2:incoming>SequenceFlow_1vmbvy8</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_1dpt7ul</bpmn2:outgoing>
       <bpmn2:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
 def doCreateVfModuleVolumeV2 = new DoCreateVfModuleVolumeV2()
-doCreateVfModuleVolumeV2.executeMethod('validateGetServiceInstanceCall', execution, isDebugLogEnabled)]]></bpmn2:script>
+doCreateVfModuleVolumeV2.executeMethod('getServiceInstance', execution, isDebugLogEnabled)]]></bpmn2:script>
     </bpmn2:scriptTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_1wi1cf9" sourceRef="ScriptTask_preProcessRequest" targetRef="Task_1u766ge" />
-    <bpmn2:sequenceFlow id="SequenceFlow_1vmbvy8" sourceRef="Task_1u766ge" targetRef="Task_0qbm5cz" />
+    <bpmn2:sequenceFlow id="SequenceFlow_1wi1cf9" sourceRef="ScriptTask_preProcessRequest" targetRef="Task_0qbm5cz" />
     <bpmn2:sequenceFlow id="SequenceFlow_1dpt7ul" sourceRef="Task_0qbm5cz" targetRef="ScriptTask_callRestAaiCloudRegion" />
   </bpmn2:process>
   <bpmn2:error id="Error_1" name="MSOWorkflowException" errorCode="MSOWorkflowException" />
@@ -330,31 +318,21 @@
           <dc:Bounds x="837" y="322" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="CallActivity_1u596hd_di" bpmnElement="Task_1u766ge">
-        <dc:Bounds x="506" y="106" width="100" height="80" />
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_1n9cmka_di" bpmnElement="Task_0qbm5cz">
-        <dc:Bounds x="640" y="106" width="100" height="80" />
+        <dc:Bounds x="576" y="106" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1wi1cf9_di" bpmnElement="SequenceFlow_1wi1cf9">
         <di:waypoint xsi:type="dc:Point" x="469" y="146" />
-        <di:waypoint xsi:type="dc:Point" x="506" y="146" />
+        <di:waypoint xsi:type="dc:Point" x="576" y="146" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="488" y="121" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1vmbvy8_di" bpmnElement="SequenceFlow_1vmbvy8">
-        <di:waypoint xsi:type="dc:Point" x="606" y="146" />
-        <di:waypoint xsi:type="dc:Point" x="640" y="146" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="623" y="121" width="0" height="0" />
+          <dc:Bounds x="477.5" y="131" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1dpt7ul_di" bpmnElement="SequenceFlow_1dpt7ul">
-        <di:waypoint xsi:type="dc:Point" x="740" y="146" />
+        <di:waypoint xsi:type="dc:Point" x="676" y="146" />
         <di:waypoint xsi:type="dc:Point" x="768" y="146" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="754" y="121" width="0" height="0" />
+          <dc:Bounds x="677" y="131" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateVnf.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateVnf.bpmn
index dacce53..a093bea 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateVnf.bpmn
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateVnf.bpmn
@@ -13,39 +13,6 @@
 createVnf.preProcessRequest(execution)]]></bpmn2:script>
     </bpmn2:scriptTask>
     <bpmn2:sequenceFlow id="SequenceFlow_2" name="" sourceRef="initialization" targetRef="callGetService" />
-    <bpmn2:scriptTask id="buildWorkflowException" name="Create Workflow Exception" scriptFormat="groovy">
-      <bpmn2:incoming>notFound</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_6</bpmn2:outgoing>
-      <bpmn2:script><![CDATA[import org.onap.so.bpmn.common.scripts.*
-ExceptionUtil exceptionUtil = new ExceptionUtil()
-exceptionUtil.buildWorkflowException(execution, 404, "Service Instance Not Found")]]></bpmn2:script>
-    </bpmn2:scriptTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_6" name="" sourceRef="buildWorkflowException" targetRef="EndEvent_1" />
-    <bpmn2:callActivity id="callGetService" name="Get&#10;&#10;Service&#10;&#10;Instance" calledElement="GenericGetService">
-      <bpmn2:extensionElements>
-        <camunda:in source="DoCVNF_serviceInstanceId" target="GENGS_serviceInstanceId" />
-        <camunda:out source="GENGS_FoundIndicator" target="GENGS_FoundIndicator" />
-        <camunda:out source="GENGS_SuccessIndicator" target="GENGS_SuccessIndicator" />
-        <camunda:out source="GENGS_serviceInstance" target="CRTVI_serviceInstance" />
-        <camunda:out source="WorkflowException" target="WorkflowException" />
-        <camunda:out source="GENGS_siResourceLink" target="GENGS_siResourceLink" />
-        <camunda:in source="isDebugLogEnabled" target="isDebugLogEnabled" />
-        <camunda:in source="GENGS_type" target="GENGS_type" />
-        <camunda:in source="DoCVNF_serviceInstanceName" target="GENGS_serviceInstanceName" />
-      </bpmn2:extensionElements>
-      <bpmn2:incoming>SequenceFlow_2</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_4</bpmn2:outgoing>
-    </bpmn2:callActivity>
-    <bpmn2:sequenceFlow id="SequenceFlow_4" name="" sourceRef="callGetService" targetRef="serviceInstanceFound" />
-    <bpmn2:exclusiveGateway id="serviceInstanceFound" name="Service Instance Found?" default="notFound">
-      <bpmn2:incoming>SequenceFlow_4</bpmn2:incoming>
-      <bpmn2:outgoing>notFound</bpmn2:outgoing>
-      <bpmn2:outgoing>found</bpmn2:outgoing>
-    </bpmn2:exclusiveGateway>
-    <bpmn2:sequenceFlow id="notFound" name="No" sourceRef="serviceInstanceFound" targetRef="buildWorkflowException" />
-    <bpmn2:sequenceFlow id="found" name="Yes" sourceRef="serviceInstanceFound" targetRef="ExclusiveGateway_0j73e7c">
-      <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression"><![CDATA[#{execution.getVariable("GENGS_FoundIndicator" ) == true && execution.getVariable("GENGS_SuccessIndicator" ) == true}]]></bpmn2:conditionExpression>
-    </bpmn2:sequenceFlow>
     <bpmn2:exclusiveGateway id="vnfExist" name="Vnf Already Exist?" default="vnfExistYes">
       <bpmn2:incoming>SequenceFlow_7</bpmn2:incoming>
       <bpmn2:outgoing>vnfExistYes</bpmn2:outgoing>
@@ -77,10 +44,6 @@
 exceptionUtil.buildWorkflowException(execution, 5000, "Generic Vnf Already Exist.")]]></bpmn2:script>
     </bpmn2:scriptTask>
     <bpmn2:sequenceFlow id="SequenceFlow_10" name="" sourceRef="vnfExistWorkflowException" targetRef="EndEvent_2" />
-    <bpmn2:endEvent id="EndEvent_1">
-      <bpmn2:incoming>SequenceFlow_6</bpmn2:incoming>
-      <bpmn2:errorEventDefinition id="ErrorEventDefinition_1" errorRef="Error_2" />
-    </bpmn2:endEvent>
     <bpmn2:endEvent id="EndEvent_2">
       <bpmn2:incoming>SequenceFlow_10</bpmn2:incoming>
       <bpmn2:errorEventDefinition id="ErrorEventDefinition_2" errorRef="Error_2" />
@@ -200,7 +163,7 @@
 createVnf.postProcessCreateGenericVnf(execution)]]></bpmn2:script>
     </bpmn2:scriptTask>
     <bpmn2:exclusiveGateway id="ExclusiveGateway_0j73e7c" name="Vnf-name specified?" default="VnfNameSpecified1">
-      <bpmn2:incoming>found</bpmn2:incoming>
+      <bpmn2:incoming>SequenceFlow_1mvplyi</bpmn2:incoming>
       <bpmn2:outgoing>VnfNameNotSpecified1</bpmn2:outgoing>
       <bpmn2:outgoing>VnfNameSpecified1</bpmn2:outgoing>
     </bpmn2:exclusiveGateway>
@@ -271,6 +234,14 @@
 def doCreateVnf = new DoCreateVnf()
 doCreateVnf.prepUpdateAAIGenericVnf(execution)]]></bpmn2:script>
     </bpmn2:scriptTask>
+    <bpmn2:scriptTask id="callGetService" name="AAI&#10;Query&#10;(svc instance)" scriptFormat="groovy">
+      <bpmn2:incoming>SequenceFlow_2</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_1mvplyi</bpmn2:outgoing>
+      <bpmn2:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
+DoCreateVnf createVnf = new DoCreateVnf()
+createVnf.getServiceInstance(execution)]]></bpmn2:script>
+    </bpmn2:scriptTask>
+    <bpmn2:sequenceFlow id="SequenceFlow_1mvplyi" sourceRef="callGetService" targetRef="ExclusiveGateway_0j73e7c" />
   </bpmn2:process>
   <bpmn2:error id="Error_1" name="Java Lang Exception" errorCode="java.lang.Exception" />
   <bpmn2:error id="Error_2" name="MSO Workflow Exception" errorCode="MSOWorkflowException" />
@@ -283,67 +254,20 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="_BPMNShape_ScriptTask_285" bpmnElement="initialization">
-        <dc:Bounds x="216" y="200" width="100" height="80" />
+        <dc:Bounds x="238" y="200" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_1" bpmnElement="SequenceFlow_1" sourceElement="_BPMNShape_StartEvent_68" targetElement="_BPMNShape_ScriptTask_285">
         <di:waypoint xsi:type="dc:Point" x="132" y="240" />
-        <di:waypoint xsi:type="dc:Point" x="216" y="240" />
+        <di:waypoint xsi:type="dc:Point" x="238" y="240" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="165" y="240" width="6" height="6" />
+          <dc:Bounds x="140" y="222" width="90" height="6" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_2" bpmnElement="SequenceFlow_2" sourceElement="_BPMNShape_ScriptTask_285">
-        <di:waypoint xsi:type="dc:Point" x="316" y="240" />
-        <di:waypoint xsi:type="dc:Point" x="406" y="240" />
+        <di:waypoint xsi:type="dc:Point" x="338" y="240" />
+        <di:waypoint xsi:type="dc:Point" x="425" y="240" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="361" y="225" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="_BPMNShape_CallActivity_59" bpmnElement="callGetService">
-        <dc:Bounds x="406" y="200" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="_BPMNShape_ExclusiveGateway_229" bpmnElement="serviceInstanceFound" isMarkerVisible="true">
-        <dc:Bounds x="552" y="215" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="536" y="267" width="82" height="24" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_4" bpmnElement="SequenceFlow_4" sourceElement="_BPMNShape_CallActivity_59" targetElement="_BPMNShape_ExclusiveGateway_229">
-        <di:waypoint xsi:type="dc:Point" x="506" y="240" />
-        <di:waypoint xsi:type="dc:Point" x="552" y="240" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="529" y="225" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="_BPMNShape_ScriptTask_293" bpmnElement="buildWorkflowException">
-        <dc:Bounds x="720" y="115" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_5" bpmnElement="notFound" sourceElement="_BPMNShape_ExclusiveGateway_229" targetElement="_BPMNShape_ScriptTask_293">
-        <di:waypoint xsi:type="dc:Point" x="577" y="215" />
-        <di:waypoint xsi:type="dc:Point" x="577" y="155" />
-        <di:waypoint xsi:type="dc:Point" x="720" y="155" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="580" y="174.4237288135593" width="14" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="_BPMNShape_EndEvent_225" bpmnElement="EndEvent_1">
-        <dc:Bounds x="876" y="137" width="36" height="36" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="894" y="178" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_6" bpmnElement="SequenceFlow_6" sourceElement="_BPMNShape_ScriptTask_293" targetElement="_BPMNShape_EndEvent_225">
-        <di:waypoint xsi:type="dc:Point" x="820" y="155" />
-        <di:waypoint xsi:type="dc:Point" x="876" y="155" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="846" y="155" width="6" height="6" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_7" bpmnElement="found" sourceElement="_BPMNShape_ExclusiveGateway_229" targetElement="_BPMNShape_CallActivity_60">
-        <di:waypoint xsi:type="dc:Point" x="602" y="240" />
-        <di:waypoint xsi:type="dc:Point" x="646" y="240" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="614" y="216.01288698145387" width="18" height="12" />
+          <dc:Bounds x="336.5" y="225" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="_BPMNShape_CallActivity_60" bpmnElement="callGetVnf">
@@ -630,6 +554,16 @@
       <bpmndi:BPMNShape id="ScriptTask_0aonzix_di" bpmnElement="Task_053tb0h">
         <dc:Bounds x="1445" y="515" width="100" height="80" />
       </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_019g8vu_di" bpmnElement="callGetService">
+        <dc:Bounds x="425" y="200" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_1mvplyi_di" bpmnElement="SequenceFlow_1mvplyi">
+        <di:waypoint xsi:type="dc:Point" x="525" y="240" />
+        <di:waypoint xsi:type="dc:Point" x="646" y="240" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="585.5" y="219" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
 </bpmn2:definitions>
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCustomDeleteE2EServiceInstance.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCustomDeleteE2EServiceInstance.bpmn
index 73c2109..2e12dd3 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCustomDeleteE2EServiceInstance.bpmn
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCustomDeleteE2EServiceInstance.bpmn
@@ -15,13 +15,6 @@
     <bpmn:endEvent id="EndEvent_1uqzt26">
       <bpmn:incoming>SequenceFlow_0e7inkl</bpmn:incoming>
     </bpmn:endEvent>
-    <bpmn:scriptTask id="ScriptTask_1rtnsh8" name="Post Process AAI GET" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_188ejvu</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_0vi0sv6</bpmn:outgoing>
-      <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
-def ddsi = new DoCustomDeleteE2EServiceInstance()
-ddsi.postProcessAAIGET(execution)]]></bpmn:script>
-    </bpmn:scriptTask>
     <bpmn:scriptTask id="ScriptTask_01erufg" name="&#10;AAI&#10;Delete&#10;(svc instance)&#10;" scriptFormat="groovy">
       <bpmn:incoming>SequenceFlow_0oj2anh</bpmn:incoming>
       <bpmn:incoming>SequenceFlow_1ev7z6q</bpmn:incoming>
@@ -49,9 +42,8 @@
       <bpmn:sequenceFlow id="SequenceFlow_18vlzfo" name="" sourceRef="ScriptTask_0nha3pr" targetRef="EndEvent_06utmg4" />
     </bpmn:subProcess>
     <bpmn:sequenceFlow id="SequenceFlow_0vz7cd9" sourceRef="StartEvent_0212h2r" targetRef="ScriptTask_06phzgv" />
-    <bpmn:sequenceFlow id="SequenceFlow_11e6bfy" sourceRef="ScriptTask_06phzgv" targetRef="CallActivity_076pc2z" />
+    <bpmn:sequenceFlow id="SequenceFlow_11e6bfy" sourceRef="ScriptTask_06phzgv" targetRef="ScriptTask_146jt8v" />
     <bpmn:sequenceFlow id="SequenceFlow_0e7inkl" sourceRef="ScriptTask_01erufg" targetRef="EndEvent_1uqzt26" />
-    <bpmn:sequenceFlow id="SequenceFlow_0vi0sv6" sourceRef="ScriptTask_1rtnsh8" targetRef="ScriptTask_146jt8v" />
     <bpmn:scriptTask id="ScriptTask_0z30dax" name="Prepare Resource Delele For WAN" scriptFormat="groovy">
       <bpmn:incoming>SequenceFlow_1ubor5z</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_1dza4q4</bpmn:outgoing>
@@ -93,7 +85,7 @@
       <bpmn:outgoing>SequenceFlow_1ev7z6q</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:scriptTask id="ScriptTask_146jt8v" name="Prepare Resource Oper Status" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_0vi0sv6</bpmn:incoming>
+      <bpmn:incoming>SequenceFlow_11e6bfy</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_1ym9otf</bpmn:outgoing>
       <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
 def ddsi = new DoCustomDeleteE2EServiceInstance()
@@ -122,22 +114,6 @@
       <bpmn:outgoing>SequenceFlow_1j08ko3</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_1ym9otf" sourceRef="ScriptTask_146jt8v" targetRef="ServiceTask_00tg69u" />
-    <bpmn:callActivity id="CallActivity_076pc2z" name="Call AAI Generic GetService" calledElement="GenericGetService">
-      <bpmn:extensionElements>
-        <camunda:in source="serviceInstanceId" target="GENGS_serviceInstanceId" />
-        <camunda:in sourceExpression="service-instance" target="GENGS_type" />
-        <camunda:out source="GENGS_FoundIndicator" target="GENGS_FoundIndicator" />
-        <camunda:out source="GENGS_SuccessIndicator" target="GENGS_SuccessIndicator" />
-        <camunda:out source="WorkflowException" target="WorkflowException" />
-        <camunda:out source="GENGS_siResourceLink" target="GENGS_siResourceLink" />
-        <camunda:out source="GENGS_service" target="GENGS_service" />
-        <camunda:in source="globalSubscriberId" target="GENGS_globalCustomerId" />
-        <camunda:in source="serviceType" target="GENGS_serviceType" />
-      </bpmn:extensionElements>
-      <bpmn:incoming>SequenceFlow_11e6bfy</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_188ejvu</bpmn:outgoing>
-    </bpmn:callActivity>
-    <bpmn:sequenceFlow id="SequenceFlow_188ejvu" sourceRef="CallActivity_076pc2z" targetRef="ScriptTask_1rtnsh8" />
     <bpmn:scriptTask id="ScriptTask_0o5bglz" name="Sequense Resources" scriptFormat="groovy">
       <bpmn:incoming>SequenceFlow_1j08ko3</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_03c0zlq</bpmn:outgoing>
@@ -219,9 +195,6 @@
           <dc:Bounds x="1316" y="831" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_1rtnsh8_di" bpmnElement="ScriptTask_1rtnsh8">
-        <dc:Bounds x="-193" y="-57" width="100" height="80" />
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_01erufg_di" bpmnElement="ScriptTask_01erufg">
         <dc:Bounds x="1356" y="513" width="100" height="80" />
       </bpmndi:BPMNShape>
@@ -237,9 +210,9 @@
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_11e6bfy_di" bpmnElement="SequenceFlow_11e6bfy">
         <di:waypoint xsi:type="dc:Point" x="-419" y="-17" />
-        <di:waypoint xsi:type="dc:Point" x="-357" y="-17" />
+        <di:waypoint xsi:type="dc:Point" x="-26" y="-17" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="-433" y="-38" width="90" height="12" />
+          <dc:Bounds x="-267.5" y="-38" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0e7inkl_di" bpmnElement="SequenceFlow_0e7inkl">
@@ -249,13 +222,6 @@
           <dc:Bounds x="1376" y="685.5" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0vi0sv6_di" bpmnElement="SequenceFlow_0vi0sv6">
-        <di:waypoint xsi:type="dc:Point" x="-93" y="-17" />
-        <di:waypoint xsi:type="dc:Point" x="-26" y="-17" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="-104.5" y="-38" width="90" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="StartEvent_0sf5lpt_di" bpmnElement="StartEvent_0sf5lpt">
         <dc:Bounds x="360" y="742" width="36" height="36" />
         <bpmndi:BPMNLabel>
@@ -327,16 +293,6 @@
           <dc:Bounds x="-6" y="39" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="CallActivity_076pc2z_di" bpmnElement="CallActivity_076pc2z">
-        <dc:Bounds x="-357" y="-57" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_188ejvu_di" bpmnElement="SequenceFlow_188ejvu">
-        <di:waypoint xsi:type="dc:Point" x="-257" y="-17" />
-        <di:waypoint xsi:type="dc:Point" x="-193" y="-17" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="-225" y="-38" width="0" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_0o5bglz_di" bpmnElement="ScriptTask_0o5bglz">
         <dc:Bounds x="-26" y="233" width="100" height="80" />
       </bpmndi:BPMNShape>
@@ -467,4 +423,4 @@
       </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
-</bpmn:definitions>
\ No newline at end of file
+</bpmn:definitions>
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCustomDeleteE2EServiceInstanceV2.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCustomDeleteE2EServiceInstanceV2.bpmn
index 3e76f61..2df19ab 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCustomDeleteE2EServiceInstanceV2.bpmn
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCustomDeleteE2EServiceInstanceV2.bpmn
@@ -15,12 +15,12 @@
     <bpmn:endEvent id="EndEvent_1uqzt26">
       <bpmn:incoming>SequenceFlow_06tonva</bpmn:incoming>
     </bpmn:endEvent>
-    <bpmn:scriptTask id="ScriptTask_1rtnsh8" name="Post Process AAI GET" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_188ejvu</bpmn:incoming>
+    <bpmn:scriptTask id="ScriptTask_1rtnsh8" name="AAI&#10;Query&#10;(svc instance)" scriptFormat="groovy">
+      <bpmn:incoming>SequenceFlow_11e6bfy</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_00a3ijv</bpmn:outgoing>
       <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
 def ddsi = new DoCustomDeleteE2EServiceInstanceV2()
-ddsi.postProcessAAIGET(execution)]]></bpmn:script>
+ddsi.getServiceInstance(execution)]]></bpmn:script>
     </bpmn:scriptTask>
     <bpmn:scriptTask id="ScriptTask_01erufg" name="&#10;AAI&#10;Delete&#10;(svc instance)&#10;" scriptFormat="groovy">
       <bpmn:incoming>SequenceFlow_0t5f2dt</bpmn:incoming>
@@ -48,7 +48,7 @@
       <bpmn:sequenceFlow id="SequenceFlow_18vlzfo" name="" sourceRef="ScriptTask_0nha3pr" targetRef="EndEvent_06utmg4" />
     </bpmn:subProcess>
     <bpmn:sequenceFlow id="SequenceFlow_0vz7cd9" sourceRef="StartEvent_0212h2r" targetRef="ScriptTask_06phzgv" />
-    <bpmn:sequenceFlow id="SequenceFlow_11e6bfy" sourceRef="ScriptTask_06phzgv" targetRef="CallActivity_076pc2z" />
+    <bpmn:sequenceFlow id="SequenceFlow_11e6bfy" sourceRef="ScriptTask_06phzgv" targetRef="ScriptTask_1rtnsh8" />
     <bpmn:sequenceFlow id="SequenceFlow_0e7inkl" sourceRef="ScriptTask_01erufg" targetRef="ScriptTask_1vlvb1r" />
     <bpmn:scriptTask id="ScriptTask_postProcessVFCDelete" name="Post Process VFC Delete" scriptFormat="groovy">
       <bpmn:incoming>SequenceFlow_1931m8u</bpmn:incoming>
@@ -122,22 +122,6 @@
       <bpmn:incoming>SequenceFlow_0akcnw7</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0uc2beq</bpmn:outgoing>
     </bpmn:serviceTask>
-    <bpmn:callActivity id="CallActivity_076pc2z" name="Call AAI Generic GetService" calledElement="GenericGetService">
-      <bpmn:extensionElements>
-        <camunda:in source="serviceInstanceId" target="GENGS_serviceInstanceId" />
-        <camunda:in sourceExpression="service-instance" target="GENGS_type" />
-        <camunda:out source="GENGS_FoundIndicator" target="GENGS_FoundIndicator" />
-        <camunda:out source="GENGS_SuccessIndicator" target="GENGS_SuccessIndicator" />
-        <camunda:out source="WorkflowException" target="WorkflowException" />
-        <camunda:out source="GENGS_siResourceLink" target="GENGS_siResourceLink" />
-        <camunda:out source="GENGS_service" target="GENGS_service" />
-        <camunda:in source="globalSubscriberId" target="GENGS_globalCustomerId" />
-        <camunda:in source="serviceType" target="GENGS_serviceType" />
-      </bpmn:extensionElements>
-      <bpmn:incoming>SequenceFlow_11e6bfy</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_188ejvu</bpmn:outgoing>
-    </bpmn:callActivity>
-    <bpmn:sequenceFlow id="SequenceFlow_188ejvu" sourceRef="CallActivity_076pc2z" targetRef="ScriptTask_1rtnsh8" />
     <bpmn:intermediateThrowEvent id="IntermediateThrowEvent_1d5z35x" name="GoTo Delete SDNC Resource">
       <bpmn:incoming>SequenceFlow_1qzxy2i</bpmn:incoming>
       <bpmn:linkEventDefinition name="DeleteSDNCResource" />
@@ -430,7 +414,7 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_1rtnsh8_di" bpmnElement="ScriptTask_1rtnsh8">
-        <dc:Bounds x="1055" y="88" width="100" height="80" />
+        <dc:Bounds x="795" y="88" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_01erufg_di" bpmnElement="ScriptTask_01erufg">
         <dc:Bounds x="286" y="1216" width="100" height="80" />
@@ -447,10 +431,9 @@
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_11e6bfy_di" bpmnElement="SequenceFlow_11e6bfy">
         <di:waypoint xsi:type="dc:Point" x="411" y="128" />
-        <di:waypoint xsi:type="dc:Point" x="461" y="128" />
-        <di:waypoint xsi:type="dc:Point" x="667" y="128" />
+        <di:waypoint xsi:type="dc:Point" x="795" y="128" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="391" y="107" width="90" height="12" />
+          <dc:Bounds x="558" y="107" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0e7inkl_di" bpmnElement="SequenceFlow_0e7inkl">
@@ -553,16 +536,6 @@
       <bpmndi:BPMNShape id="ServiceTask_0p4b7e1_di" bpmnElement="Task_0edkv0m">
         <dc:Bounds x="1055" y="577" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="CallActivity_076pc2z_di" bpmnElement="CallActivity_076pc2z">
-        <dc:Bounds x="667" y="88" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_188ejvu_di" bpmnElement="SequenceFlow_188ejvu">
-        <di:waypoint xsi:type="dc:Point" x="767" y="128" />
-        <di:waypoint xsi:type="dc:Point" x="1055" y="128" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="866" y="107" width="90" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="IntermediateThrowEvent_1gbu8tc_di" bpmnElement="IntermediateThrowEvent_1d5z35x">
         <dc:Bounds x="1294" y="376" width="36" height="36" />
         <bpmndi:BPMNLabel>
@@ -781,10 +754,10 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_00a3ijv_di" bpmnElement="SequenceFlow_00a3ijv">
-        <di:waypoint xsi:type="dc:Point" x="1155" y="128" />
+        <di:waypoint xsi:type="dc:Point" x="895" y="128" />
         <di:waypoint xsi:type="dc:Point" x="1294" y="128" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1179.5" y="107" width="90" height="12" />
+          <dc:Bounds x="1049.5" y="107" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_1fqk4c6_di" bpmnElement="ScriptTask_PrepareServiceResources">
@@ -925,4 +898,4 @@
       </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
-</bpmn:definitions>
\ No newline at end of file
+</bpmn:definitions>
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeleteServiceInstance.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeleteServiceInstance.bpmn
index fae66a7..d9a93e6 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeleteServiceInstance.bpmn
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeleteServiceInstance.bpmn
@@ -67,28 +67,14 @@
       <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression"><![CDATA[#{ execution.getVariable("sendToSDNC" )   == false }]]></bpmn2:conditionExpression>
     </bpmn2:sequenceFlow>
     <bpmn2:sequenceFlow id="SequenceFlow_1dwch0k" name="yes" sourceRef="ExclusiveGateway_1mrh7us" targetRef="ScriptTask_0xxwbdq" />
-    <bpmn2:callActivity id="CallActivity_1s8pf0x" name="Call AAI Generic GetService" calledElement="GenericGetService">
-      <bpmn2:extensionElements>
-        <camunda:in source="serviceInstanceId" target="GENGS_serviceInstanceId" />
-        <camunda:in sourceExpression="service-instance" target="GENGS_type" />
-        <camunda:out source="GENGS_FoundIndicator" target="GENGS_FoundIndicator" />
-        <camunda:out source="GENGS_SuccessIndicator" target="GENGS_SuccessIndicator" />
-        <camunda:out source="WorkflowException" target="WorkflowException" />
-        <camunda:out source="GENGS_siResourceLink" target="GENGS_siResourceLink" />
-        <camunda:out source="GENGS_service" target="GENGS_service" />
-      </bpmn2:extensionElements>
+    <bpmn2:sequenceFlow id="SequenceFlow_1jqc16k" sourceRef="preProcessRequest_ScriptTask" targetRef="ScriptTask_02da0lj" />
+    <bpmn2:scriptTask id="ScriptTask_02da0lj" name="AAI&#10;Query&#10;(svc instance)" scriptFormat="groovy">
       <bpmn2:incoming>SequenceFlow_1jqc16k</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_1grea1r</bpmn2:outgoing>
-    </bpmn2:callActivity>
-    <bpmn2:sequenceFlow id="SequenceFlow_1jqc16k" sourceRef="preProcessRequest_ScriptTask" targetRef="CallActivity_1s8pf0x" />
-    <bpmn2:scriptTask id="ScriptTask_02da0lj" name="Post Process AAI GET" scriptFormat="groovy">
-      <bpmn2:incoming>SequenceFlow_1grea1r</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_1up0j5r</bpmn2:outgoing>
       <bpmn2:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
 def ddsi = new DoDeleteServiceInstance()
-ddsi.postProcessAAIGET(execution)]]></bpmn2:script>
+ddsi.getServiceInstance(execution)]]></bpmn2:script>
     </bpmn2:scriptTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_1grea1r" sourceRef="CallActivity_1s8pf0x" targetRef="ScriptTask_02da0lj" />
     <bpmn2:sequenceFlow id="SequenceFlow_1up0j5r" sourceRef="ScriptTask_02da0lj" targetRef="ExclusiveGateway_0590oev" />
     <bpmn2:scriptTask id="ScriptTask_1ybdq3e" name="&#10;AAI&#10;Delete&#10;(svc instance)&#10;" scriptFormat="groovy">
       <bpmn2:incoming>SequenceFlow_0riudmc</bpmn2:incoming>
@@ -250,26 +236,16 @@
           <dc:Bounds x="306" y="101" width="18" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="CallActivity_1s8pf0x_di" bpmnElement="CallActivity_1s8pf0x">
-        <dc:Bounds x="-121" y="57" width="100" height="80" />
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1jqc16k_di" bpmnElement="SequenceFlow_1jqc16k">
         <di:waypoint xsi:type="dc:Point" x="-165" y="97" />
-        <di:waypoint xsi:type="dc:Point" x="-121" y="97" />
+        <di:waypoint xsi:type="dc:Point" x="20" y="97" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="-143" y="82" width="0" height="0" />
+          <dc:Bounds x="-117.5" y="82" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_02da0lj_di" bpmnElement="ScriptTask_02da0lj">
         <dc:Bounds x="20" y="57" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1grea1r_di" bpmnElement="SequenceFlow_1grea1r">
-        <di:waypoint xsi:type="dc:Point" x="-21" y="97" />
-        <di:waypoint xsi:type="dc:Point" x="20" y="97" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="0" y="82" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1up0j5r_di" bpmnElement="SequenceFlow_1up0j5r">
         <di:waypoint xsi:type="dc:Point" x="120" y="97" />
         <di:waypoint xsi:type="dc:Point" x="150" y="97" />
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoUpdateE2EServiceInstance.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoUpdateE2EServiceInstance.bpmn
index a46d8d4..ef3340e 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoUpdateE2EServiceInstance.bpmn
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoUpdateE2EServiceInstance.bpmn
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_MagIIMOUEeW8asg-vCEgWQ" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.11.3" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
+<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_MagIIMOUEeW8asg-vCEgWQ" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.10.0" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
   <bpmn2:process id="DoUpdateE2EServiceInstance" name="DoUpdateE2EServiceInstance" isExecutable="true">
     <bpmn2:startEvent id="createSI_startEvent" name="Start Flow">
       <bpmn2:outgoing>SequenceFlow_1</bpmn2:outgoing>
@@ -113,7 +113,7 @@
       <bpmn2:outgoing>SequenceFlow_1demy08</bpmn2:outgoing>
       <bpmn2:linkEventDefinition name="UpdateAAI" />
     </bpmn2:intermediateCatchEvent>
-    <bpmn2:sequenceFlow id="SequenceFlow_1demy08" sourceRef="IntermediateCatchEvent_0a9bdjw" targetRef="ScriptTask_195nptq" />
+    <bpmn2:sequenceFlow id="SequenceFlow_1demy08" sourceRef="IntermediateCatchEvent_0a9bdjw" targetRef="ScriptTask_0sis7k0" />
     <bpmn2:sequenceFlow id="SequenceFlow_0f76thv" sourceRef="CallActivity_1nm9zq7" targetRef="ScriptTask_0xtabf8" />
     <bpmn2:scriptTask id="ScriptTask_19v8l1w" name="Post Config Service Instance Update" scriptFormat="groovy">
       <bpmn2:incoming>SequenceFlow_0ku36oy</bpmn2:incoming>
@@ -173,40 +173,8 @@
       <bpmn2:sequenceFlow id="SequenceFlow_02znk15" sourceRef="ScriptTask_0vc9jgo" targetRef="EndEvent_014jyvb" />
       <bpmn2:sequenceFlow id="SequenceFlow_19ly8h7" sourceRef="ScriptTask_1awrp72" targetRef="ScriptTask_0vc9jgo" />
     </bpmn2:subProcess>
-    <bpmn2:scriptTask id="ScriptTask_195nptq" name="Pre Process AAI GET" scriptFormat="groovy">
-      <bpmn2:incoming>SequenceFlow_1demy08</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_1cy5gq2</bpmn2:outgoing>
-      <bpmn2:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
-def dcsi = new DoUpdateE2EServiceInstance()
-dcsi.preProcessAAIGET(execution)]]></bpmn2:script>
-    </bpmn2:scriptTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_1cy5gq2" sourceRef="ScriptTask_195nptq" targetRef="CallActivity_069o6fn" />
-    <bpmn2:callActivity id="CallActivity_069o6fn" name="Call AAI Generic GetService" calledElement="GenericGetService">
-      <bpmn2:extensionElements>
-        <camunda:in source="serviceInstanceId" target="GENGS_serviceInstanceId" />
-        <camunda:in sourceExpression="service-instance" target="GENGS_type" />
-        <camunda:out source="GENGS_FoundIndicator" target="GENGS_FoundIndicator" />
-        <camunda:out source="GENGS_SuccessIndicator" target="GENGS_SuccessIndicator" />
-        <camunda:out source="WorkflowException" target="WorkflowException" />
-        <camunda:out source="GENGS_siResourceLink" target="GENGS_siResourceLink" />
-        <camunda:out source="GENGS_service" target="GENGS_service" />
-        <camunda:in source="globalSubscriberId" target="GENGS_globalCustomerId" />
-        <camunda:in source="serviceType" target="GENGS_serviceType" />
-      </bpmn2:extensionElements>
-      <bpmn2:incoming>SequenceFlow_1cy5gq2</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_1vy856f</bpmn2:outgoing>
-    </bpmn2:callActivity>
-    <bpmn2:scriptTask id="ScriptTask_0lp9y03" name="Post Process AAI GET" scriptFormat="groovy">
-      <bpmn2:incoming>SequenceFlow_1vy856f</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_14ggluy</bpmn2:outgoing>
-      <bpmn2:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
-def dcsi = new DoUpdateE2EServiceInstance()
-dcsi.postProcessAAIGET(execution)]]></bpmn2:script>
-    </bpmn2:scriptTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_1vy856f" sourceRef="CallActivity_069o6fn" targetRef="ScriptTask_0lp9y03" />
-    <bpmn2:sequenceFlow id="SequenceFlow_14ggluy" sourceRef="ScriptTask_0lp9y03" targetRef="ScriptTask_0sis7k0" />
     <bpmn2:scriptTask id="ScriptTask_0sis7k0" name="Pre Process AAI PUT" scriptFormat="groovy">
-      <bpmn2:incoming>SequenceFlow_14ggluy</bpmn2:incoming>
+      <bpmn2:incoming>SequenceFlow_1demy08</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_1kx5ke9</bpmn2:outgoing>
       <bpmn2:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
 def dcsi = new DoUpdateE2EServiceInstance()
@@ -387,11 +355,9 @@
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1demy08_di" bpmnElement="SequenceFlow_1demy08">
         <di:waypoint xsi:type="dc:Point" x="110" y="1373" />
-        <di:waypoint xsi:type="dc:Point" x="197" y="1373" />
-        <di:waypoint xsi:type="dc:Point" x="197" y="1373" />
-        <di:waypoint xsi:type="dc:Point" x="293" y="1373" />
+        <di:waypoint xsi:type="dc:Point" x="978" y="1373" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="212" y="1367" width="0" height="12" />
+          <dc:Bounds x="499" y="1352" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0f76thv_di" bpmnElement="SequenceFlow_0f76thv">
@@ -504,36 +470,6 @@
           <dc:Bounds x="907.5" y="1892" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ScriptTask_195nptq_di" bpmnElement="ScriptTask_195nptq">
-        <dc:Bounds x="293" y="1333" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1cy5gq2_di" bpmnElement="SequenceFlow_1cy5gq2">
-        <di:waypoint xsi:type="dc:Point" x="393" y="1373" />
-        <di:waypoint xsi:type="dc:Point" x="495" y="1373" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="399" y="1352" width="90" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="CallActivity_069o6fn_di" bpmnElement="CallActivity_069o6fn">
-        <dc:Bounds x="495" y="1333" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_0lp9y03_di" bpmnElement="ScriptTask_0lp9y03">
-        <dc:Bounds x="724" y="1333" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1vy856f_di" bpmnElement="SequenceFlow_1vy856f">
-        <di:waypoint xsi:type="dc:Point" x="595" y="1373" />
-        <di:waypoint xsi:type="dc:Point" x="724" y="1373" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="614.5" y="1352" width="90" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_14ggluy_di" bpmnElement="SequenceFlow_14ggluy">
-        <di:waypoint xsi:type="dc:Point" x="824" y="1373" />
-        <di:waypoint xsi:type="dc:Point" x="978" y="1373" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="856" y="1352" width="90" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_0sis7k0_di" bpmnElement="ScriptTask_0sis7k0">
         <dc:Bounds x="978" y="1333" width="100" height="80" />
       </bpmndi:BPMNShape>
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoUpdateE2EServiceInstanceRollback.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoUpdateE2EServiceInstanceRollback.bpmn
index 1589633..b53e87d 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoUpdateE2EServiceInstanceRollback.bpmn
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoUpdateE2EServiceInstanceRollback.bpmn
@@ -184,7 +184,7 @@
       <bpmn2:linkEventDefinition name="UpdateAAI" />
     </bpmn2:intermediateCatchEvent>
     <bpmn2:scriptTask id="ScriptTask_0gj4dj5" name="Pre Process AAI PUT" scriptFormat="groovy">
-      <bpmn2:incoming>SequenceFlow_1ixphei</bpmn2:incoming>
+      <bpmn2:incoming>SequenceFlow_1a65s3k</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_1lppnhy</bpmn2:outgoing>
       <bpmn2:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
 def dcsi = new DoUpdateE2EServiceInstanceRollback()
@@ -212,7 +212,7 @@
 def dcsi = new DoUpdateE2EServiceInstanceRollback()
 dcsi.postProcessAAIPUT(execution)]]></bpmn2:script>
     </bpmn2:scriptTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_1a65s3k" sourceRef="IntermediateCatchEvent_0546q5i" targetRef="ScriptTask_13h2onn" />
+    <bpmn2:sequenceFlow id="SequenceFlow_1a65s3k" sourceRef="IntermediateCatchEvent_0546q5i" targetRef="ScriptTask_0gj4dj5" />
     <bpmn2:sequenceFlow id="SequenceFlow_1lppnhy" sourceRef="ScriptTask_0gj4dj5" targetRef="CallActivity_0zs5y0x" />
     <bpmn2:sequenceFlow id="SequenceFlow_0kbisn8" sourceRef="CallActivity_0zs5y0x" targetRef="ScriptTask_1p96syr" />
     <bpmn2:exclusiveGateway id="ExclusiveGateway_1k16vgh" name="RollBackAAI?" default="SequenceFlow_161uzhj">
@@ -287,38 +287,6 @@
     <bpmn2:sequenceFlow id="SequenceFlow_1n6foyw" sourceRef="ScriptTask_17k4l6y" targetRef="EndEvent_193e9tt" />
     <bpmn2:sequenceFlow id="SequenceFlow_1azhgda" sourceRef="ScriptTask_1p96syr" targetRef="ScriptTask_17k4l6y" />
     <bpmn2:sequenceFlow id="SequenceFlow_055b52t" name="no" sourceRef="ExclusiveGateway_0ii31dq" targetRef="ExclusiveGateway_0ybxh3b" />
-    <bpmn2:scriptTask id="ScriptTask_13h2onn" name="Pre Process AAI GET" scriptFormat="groovy">
-      <bpmn2:incoming>SequenceFlow_1a65s3k</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_0870pzc</bpmn2:outgoing>
-      <bpmn2:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
-def dcsi = new DoUpdateE2EServiceInstanceRollback()
-dcsi.preProcessAAIGET(execution)]]></bpmn2:script>
-    </bpmn2:scriptTask>
-    <bpmn2:callActivity id="CallActivity_1527zgc" name="Call AAI Generic GetService" calledElement="GenericGetService">
-      <bpmn2:extensionElements>
-        <camunda:in source="serviceInstanceId" target="GENGS_serviceInstanceId" />
-        <camunda:in sourceExpression="service-instance" target="GENGS_type" />
-        <camunda:out source="GENGS_FoundIndicator" target="GENGS_FoundIndicator" />
-        <camunda:out source="GENGS_SuccessIndicator" target="GENGS_SuccessIndicator" />
-        <camunda:out source="WorkflowException" target="WorkflowException" />
-        <camunda:out source="GENGS_siResourceLink" target="GENGS_siResourceLink" />
-        <camunda:out source="GENGS_service" target="GENGS_service" />
-        <camunda:in source="globalSubscriberId" target="GENGS_globalCustomerId" />
-        <camunda:in source="serviceType" target="GENGS_serviceType" />
-      </bpmn2:extensionElements>
-      <bpmn2:incoming>SequenceFlow_0870pzc</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_1f31l5s</bpmn2:outgoing>
-    </bpmn2:callActivity>
-    <bpmn2:sequenceFlow id="SequenceFlow_0870pzc" sourceRef="ScriptTask_13h2onn" targetRef="CallActivity_1527zgc" />
-    <bpmn2:scriptTask id="ScriptTask_0td1f55" name="Post Process AAI GET" scriptFormat="groovy">
-      <bpmn2:incoming>SequenceFlow_1f31l5s</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_1ixphei</bpmn2:outgoing>
-      <bpmn2:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
-def dcsi = new DoUpdateE2EServiceInstanceRollback()
-dcsi.postProcessAAIGET(execution)]]></bpmn2:script>
-    </bpmn2:scriptTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_1f31l5s" sourceRef="CallActivity_1527zgc" targetRef="ScriptTask_0td1f55" />
-    <bpmn2:sequenceFlow id="SequenceFlow_1ixphei" sourceRef="ScriptTask_0td1f55" targetRef="ScriptTask_0gj4dj5" />
   </bpmn2:process>
   <bpmn2:error id="Error_2" name="MSOWorkflowException" errorCode="MSOWorkflowException" />
   <bpmn2:error id="Error_1" name="java.lang.Exception" errorCode="java.lang.Exception" />
@@ -602,9 +570,9 @@
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1a65s3k_di" bpmnElement="SequenceFlow_1a65s3k">
         <di:waypoint xsi:type="dc:Point" x="192" y="783" />
-        <di:waypoint xsi:type="dc:Point" x="234" y="783" />
+        <di:waypoint xsi:type="dc:Point" x="687" y="783" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="168" y="762" width="90" height="12" />
+          <dc:Bounds x="394.5" y="762" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1lppnhy_di" bpmnElement="SequenceFlow_1lppnhy">
@@ -764,36 +732,6 @@
           <dc:Bounds x="769" y="106" width="15" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ScriptTask_13h2onn_di" bpmnElement="ScriptTask_13h2onn">
-        <dc:Bounds x="234" y="743" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="CallActivity_1527zgc_di" bpmnElement="CallActivity_1527zgc">
-        <dc:Bounds x="391" y="743" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0870pzc_di" bpmnElement="SequenceFlow_0870pzc">
-        <di:waypoint xsi:type="dc:Point" x="334" y="783" />
-        <di:waypoint xsi:type="dc:Point" x="391" y="783" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="362.5" y="762" width="0" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ScriptTask_0td1f55_di" bpmnElement="ScriptTask_0td1f55">
-        <dc:Bounds x="543" y="743" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1f31l5s_di" bpmnElement="SequenceFlow_1f31l5s">
-        <di:waypoint xsi:type="dc:Point" x="491" y="783" />
-        <di:waypoint xsi:type="dc:Point" x="543" y="783" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="517" y="762" width="0" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1ixphei_di" bpmnElement="SequenceFlow_1ixphei">
-        <di:waypoint xsi:type="dc:Point" x="643" y="783" />
-        <di:waypoint xsi:type="dc:Point" x="687" y="783" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="665" y="762" width="0" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
 </bpmn2:definitions>
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoUpdateNetworkInstance.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoUpdateNetworkInstance.bpmn
index 306b05c..b82b1da 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoUpdateNetworkInstance.bpmn
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoUpdateNetworkInstance.bpmn
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_MagIIMOUEeW8asg-vCEgWQ" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.4.0" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
+<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_MagIIMOUEeW8asg-vCEgWQ" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.10.0" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
   <bpmn2:process id="DoUpdateNetworkInstance" name="DoUpdateNetworkInstance" isExecutable="true">
     <bpmn2:startEvent id="updateNetwork_startEvent" name="Start Flow">
       <bpmn2:outgoing>SequenceFlow_1</bpmn2:outgoing>
@@ -231,42 +231,14 @@
     </bpmn2:scriptTask>
     <bpmn2:sequenceFlow id="SequenceFlow_32" name="" sourceRef="callRESTQueryCloudRegion_ScriptTask" targetRef="prepareSDNCTopoRequest_ScriptTask" />
     <bpmn2:scriptTask id="callRESTQueryNetworkId_ScriptTask" name="Call REST Query Network Id In AAI" scriptFormat="groovy">
-      <bpmn2:incoming>siFoundYes</bpmn2:incoming>
+      <bpmn2:incoming>SequenceFlow_3</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_24</bpmn2:outgoing>
       <bpmn2:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
 def DoUpdateNetworkInstance = new DoUpdateNetworkInstance()
 DoUpdateNetworkInstance.callRESTQueryAAINetworkId(execution)]]></bpmn2:script>
     </bpmn2:scriptTask>
     <bpmn2:sequenceFlow id="SequenceFlow_24" name="" sourceRef="callRESTQueryNetworkId_ScriptTask" targetRef="callRESTQueryCloudRegion_ScriptTask" />
-    <bpmn2:scriptTask id="workflowExceptionSINotFound" name="Create Workflow Exception" scriptFormat="groovy">
-      <bpmn2:incoming>siFoundNo</bpmn2:incoming>
-      <bpmn2:script><![CDATA[import org.onap.so.bpmn.common.scripts.*
-ExceptionUtil exceptionUtil = new ExceptionUtil()
-exceptionUtil.buildAndThrowWorkflowException(execution, 404, "Service Instance Not Found")]]></bpmn2:script>
-    </bpmn2:scriptTask>
-    <bpmn2:exclusiveGateway id="siFoundCheck" name="is SI Found?" default="siFoundNo">
-      <bpmn2:incoming>SequenceFlow_3</bpmn2:incoming>
-      <bpmn2:outgoing>siFoundYes</bpmn2:outgoing>
-      <bpmn2:outgoing>siFoundNo</bpmn2:outgoing>
-    </bpmn2:exclusiveGateway>
-    <bpmn2:sequenceFlow id="siFoundYes" name="Yes" sourceRef="siFoundCheck" targetRef="callRESTQueryNetworkId_ScriptTask">
-      <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression"><![CDATA[#{execution.getVariable("GENGSI_FoundIndicator" ) == true && execution.getVariable("GENGSI_SuccessIndicator" ) == true}]]></bpmn2:conditionExpression>
-    </bpmn2:sequenceFlow>
-    <bpmn2:sequenceFlow id="siFoundNo" name="No" sourceRef="siFoundCheck" targetRef="workflowExceptionSINotFound" />
-    <bpmn2:callActivity id="callGetServiceInstance" name="Get&#10;Service&#10;Instance" calledElement="GenericGetService">
-      <bpmn2:extensionElements>
-        <camunda:in source="UPDNETI_serviceInstanceId" target="GENGS_serviceInstanceId" />
-        <camunda:out source="GENGS_serviceInstance" target="UPDNETI_serviceInstanceId" />
-        <camunda:out source="GENGS_FoundIndicator" target="GENGSI_FoundIndicator" />
-        <camunda:out source="GENGS_SuccessIndicator" target="GENGSI_SuccessIndicator" />
-        <camunda:out source="GENGS_siResourceLink" target="GENGSI_siResourceLink" />
-        <camunda:out source="WorkflowException" target="WorkflowException" />
-        <camunda:in source="GENGS_type" target="GENGS_type" />
-      </bpmn2:extensionElements>
-      <bpmn2:incoming>SequenceFlow_7</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_3</bpmn2:outgoing>
-    </bpmn2:callActivity>
-    <bpmn2:sequenceFlow id="SequenceFlow_3" name="" sourceRef="callGetServiceInstance" targetRef="siFoundCheck" />
+    <bpmn2:sequenceFlow id="SequenceFlow_3" name="" sourceRef="callGetServiceInstance" targetRef="callRESTQueryNetworkId_ScriptTask" />
     <bpmn2:scriptTask id="validateUpdatePONetwork_ScriptTask" name="Validate Update PO Network" scriptFormat="groovy">
       <bpmn2:incoming>SequenceFlow_59</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_13</bpmn2:outgoing>
@@ -340,6 +312,13 @@
 DoUpdateNetworkInstance.callRESTQueryAAINetworkPolicy(execution)]]></bpmn2:script>
     </bpmn2:scriptTask>
     <bpmn2:sequenceFlow id="SequenceFlow_38" name="" sourceRef="callRESTQueryNetworkPolicy_ScriptTask" targetRef="callRESTQueryNetworkTableRef_ScriptTask" />
+    <bpmn2:scriptTask id="callGetServiceInstance" name="AAI&#10;Query&#10;(svc instance)" scriptFormat="groovy">
+      <bpmn2:incoming>SequenceFlow_7</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_3</bpmn2:outgoing>
+      <bpmn2:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
+def DoUpdateNetworkInstance = new DoUpdateNetworkInstance()
+DoUpdateNetworkInstance.getServiceInstance(execution)]]></bpmn2:script>
+    </bpmn2:scriptTask>
   </bpmn2:process>
   <bpmn2:error id="Error_2" name="MSOWorkflowException" errorCode="MSOWorkflowException" />
   <bpmn2:error id="Error_1" name="java.lang.Exception" errorCode="java.lang.Exception" />
@@ -430,7 +409,7 @@
         <di:waypoint xsi:type="dc:Point" x="572" y="203" />
         <di:waypoint xsi:type="dc:Point" x="686" y="203" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="629" y="188" width="0" height="0" />
+          <dc:Bounds x="584" y="188" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_35" bpmnElement="SequenceFlow_23" sourceElement="_BPMNShape_StartEvent_50" targetElement="_BPMNShape_ExclusiveGateway_90">
@@ -682,42 +661,16 @@
           <dc:Bounds x="221" y="470" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="_BPMNShape_CallActivity_72" bpmnElement="callGetServiceInstance">
-        <dc:Bounds x="686" y="163" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="_BPMNShape_ExclusiveGateway_244" bpmnElement="siFoundCheck" isMarkerVisible="true">
-        <dc:Bounds x="836" y="177" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="891" y="195" width="79" height="22" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_3" bpmnElement="SequenceFlow_3" sourceElement="_BPMNShape_CallActivity_72" targetElement="_BPMNShape_ExclusiveGateway_244">
+      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_3" bpmnElement="SequenceFlow_3" sourceElement="ScriptTask_0e58tta_di" targetElement="_BPMNShape_ScriptTask_133">
         <di:waypoint xsi:type="dc:Point" x="786" y="203" />
         <di:waypoint xsi:type="dc:Point" x="805" y="203" />
         <di:waypoint xsi:type="dc:Point" x="805" y="202" />
-        <di:waypoint xsi:type="dc:Point" x="836" y="202" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="799" y="203" width="6" height="6" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_17" bpmnElement="siFoundYes" sourceElement="_BPMNShape_ExclusiveGateway_244" targetElement="_BPMNShape_ScriptTask_133">
-        <di:waypoint xsi:type="dc:Point" x="861" y="177" />
+        <di:waypoint xsi:type="dc:Point" x="861" y="202" />
         <di:waypoint xsi:type="dc:Point" x="861" y="140" />
         <di:waypoint xsi:type="dc:Point" x="910" y="140" />
         <di:waypoint xsi:type="dc:Point" x="984" y="140" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="868" y="157" width="29" height="22" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="_BPMNShape_ScriptTask_331" bpmnElement="workflowExceptionSINotFound">
-        <dc:Bounds x="984" y="256" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_20" bpmnElement="siFoundNo" sourceElement="_BPMNShape_ExclusiveGateway_244" targetElement="_BPMNShape_ScriptTask_331">
-        <di:waypoint xsi:type="dc:Point" x="861" y="227" />
-        <di:waypoint xsi:type="dc:Point" x="861" y="296" />
-        <di:waypoint xsi:type="dc:Point" x="984" y="296" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="871" y="233" width="22" height="22" />
+          <dc:Bounds x="788" y="184" width="90" height="6" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_22" bpmnElement="SequenceFlow_24" sourceElement="_BPMNShape_ScriptTask_133" targetElement="_BPMNShape_ScriptTask_245">
@@ -824,6 +777,9 @@
         <di:waypoint xsi:type="dc:Point" x="797" y="946" />
         <di:waypoint xsi:type="dc:Point" x="816" y="847" />
       </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ScriptTask_0e58tta_di" bpmnElement="callGetServiceInstance">
+        <dc:Bounds x="686" y="163" width="100" height="80" />
+      </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
 </bpmn2:definitions>
