diff --git a/adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/beans/CreateStackRequest.java b/adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/beans/CreateStackRequest.java
new file mode 100644
index 0000000..86be9ec
--- /dev/null
+++ b/adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/beans/CreateStackRequest.java
@@ -0,0 +1,36 @@
+package org.onap.so.openstack.beans;
+
+import java.util.Map;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class CreateStackRequest {
+
+    @JsonProperty("parameters")
+    private Map<String, Object> parameters;
+
+    @JsonProperty("environment")
+    private String environment;
+
+    public Map<String, Object> getParameters() {
+        return parameters;
+    }
+
+    public void setParameters(Map<String, Object> parameters) {
+        this.parameters = parameters;
+    }
+
+    public String getEnvironment() {
+        return environment;
+    }
+
+    public void setEnvironment(String environment) {
+        this.environment = environment;
+    }
+
+    @Override
+    public String toString() {
+        return "CreateStackRequest [parameters=" + parameters + ", environment=" + environment + "]";
+    }
+
+
+}
diff --git a/adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoHeatUtils.java b/adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoHeatUtils.java
index 28d4f3f..1d75892 100644
--- a/adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoHeatUtils.java
+++ b/adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoHeatUtils.java
@@ -55,6 +55,7 @@
 import org.onap.so.db.request.client.RequestsDbClient;
 import org.onap.so.logger.ErrorCode;
 import org.onap.so.logger.MessageEnum;
+import org.onap.so.openstack.beans.CreateStackRequest;
 import org.onap.so.openstack.beans.HeatStatus;
 import org.onap.so.openstack.beans.StackInfo;
 import org.onap.so.openstack.exceptions.MsoCloudSiteNotFound;
@@ -354,7 +355,10 @@
         try {
             ObjectMapper mapper = new ObjectMapper();
             InfraActiveRequests foundRequest = requestDBClient.getInfraActiveRequestbyRequestId(requestId);
-            String stackRequest = mapper.writeValueAsString(request.getParameters());
+            CreateStackRequest createStackRequest = new CreateStackRequest();
+            createStackRequest.setEnvironment(request.getEnvironment());
+            createStackRequest.setParameters(request.getParameters());
+            String stackRequest = mapper.writeValueAsString(createStackRequest);
             CloudApiRequests cloudReq = new CloudApiRequests();
             cloudReq.setCloudIdentifier(stackName);
             cloudReq.setRequestBody(stackRequest);
diff --git a/adapters/mso-adapter-utils/src/test/java/org/onap/so/openstack/utils/MsoHeatUtilsTest.java b/adapters/mso-adapter-utils/src/test/java/org/onap/so/openstack/utils/MsoHeatUtilsTest.java
index 687b7d8..e840d5a 100644
--- a/adapters/mso-adapter-utils/src/test/java/org/onap/so/openstack/utils/MsoHeatUtilsTest.java
+++ b/adapters/mso-adapter-utils/src/test/java/org/onap/so/openstack/utils/MsoHeatUtilsTest.java
@@ -48,10 +48,12 @@
 import org.onap.so.db.request.beans.CloudApiRequests;
 import org.onap.so.db.request.beans.InfraActiveRequests;
 import org.onap.so.db.request.client.RequestsDbClient;
+import org.onap.so.openstack.beans.CreateStackRequest;
 import org.onap.so.openstack.exceptions.MsoException;
 import org.onap.so.openstack.exceptions.MsoOpenstackException;
 import org.onap.so.openstack.exceptions.MsoStackAlreadyExists;
 import org.springframework.core.env.Environment;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.woorea.openstack.base.client.OpenStackResponseException;
 import com.woorea.openstack.heat.Heat;
 import com.woorea.openstack.heat.StackResource;
@@ -415,11 +417,22 @@
 
     @Test
     public final void saveStack_Test() throws MsoException, IOException, NovaClientException {
+
         CreateStackParam createStackParam = new CreateStackParam();
         createStackParam.setStackName("stackName");
         Map<String, Object> parameters = new HashMap<String, Object>();
         parameters.put("test", "value");
+        String environment =
+                "parameters:\n  mmn_volume_name_1: \"data-mn-v-vdb\"\n  mmn_volume_name_2: \"arch-mn-v-vdc\"\n";
         createStackParam.setParameters(parameters);
+        createStackParam.setEnvironment(environment);
+
+        CreateStackRequest createStackRequest = new CreateStackRequest();
+        createStackRequest.setEnvironment(environment);
+        createStackRequest.setParameters(parameters);
+        ObjectMapper mapper = new ObjectMapper();
+        String stackRequest = mapper.writeValueAsString(createStackRequest);
+
         InfraActiveRequests request = new InfraActiveRequests();
         request.setRequestId("requestId");
         doReturn(request).when(requestDbClient).getInfraActiveRequestbyRequestId("requestId");
@@ -427,7 +440,8 @@
         heatUtils.saveStackRequest(createStackParam, "requestId", "stackName");
         Mockito.verify(requestDbClient, times(1)).updateInfraActiveRequests(request);
         assertNotNull(request.getCloudApiRequests().get(0));
-        assertEquals(request.getCloudApiRequests().get(0).getRequestId(), "requestId");
+        assertEquals("requestId", request.getCloudApiRequests().get(0).getRequestId());
+        assertEquals(stackRequest, request.getCloudApiRequests().get(0).getRequestBody());
     }
 
     @Test
diff --git a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceVnfs.java b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceVnfs.java
index a0d822d..0b8de60 100644
--- a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceVnfs.java
+++ b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceVnfs.java
@@ -3,6 +3,8 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===========================================================================
+ *  Modifications Copyright (C) 2019 IBM.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -25,10 +27,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.stream.Collectors;
 import javax.xml.bind.annotation.XmlRootElement;
-import org.onap.so.db.catalog.beans.InstanceGroup;
-import org.onap.so.db.catalog.beans.VFCInstanceGroup;
 import org.onap.so.db.catalog.beans.VnfResourceCustomization;
 import org.onap.so.db.catalog.beans.VnfcInstanceGroupCustomization;
 import org.slf4j.Logger;
diff --git a/asdc-controller/src/test/resources/resource-examples/vcpe-infra/service-Demovcpeinfra-csar.csar b/asdc-controller/src/test/resources/resource-examples/vcpe-infra/service-Demovcpeinfra-csar.csar
index 841c681..40b8b7b 100644
--- a/asdc-controller/src/test/resources/resource-examples/vcpe-infra/service-Demovcpeinfra-csar.csar
+++ b/asdc-controller/src/test/resources/resource-examples/vcpe-infra/service-Demovcpeinfra-csar.csar
Binary files differ
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/resource/ResourceRequestBuilder.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/resource/ResourceRequestBuilder.java
index b814d6c..8d02fa3 100644
--- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/resource/ResourceRequestBuilder.java
+++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/resource/ResourceRequestBuilder.java
@@ -113,7 +113,17 @@
         if (resource.getResourceType() == ResourceType.VNF) {
             for (String eachResource : resourceList) {
                 String resCusUuid = JsonUtils.getJsonValue(eachResource, "resourceCustomizationUuid");
-                if ((null != resCusUuid) && resCusUuid.equals(resource.getModelInfo().getModelCustomizationUuid())) {
+                // in case of external api invocation customizatoin id is coming null
+                if (resCusUuid == null || resCusUuid.contains("null") || resCusUuid.isEmpty()) {
+                    logger.info("resource resolved using model uuid");
+                    String uuid = (String) JsonUtils.getJsonValue(eachResource, "resourceUuid");
+                    if ((null != uuid) && uuid.equals(resource.getModelInfo().getModelUuid())) {
+                        logger.info("found resource uuid" + uuid);
+                        String resourceParameters = JsonUtils.getJsonValue(eachResource, "parameters");
+                        locationConstraints = JsonUtils.getJsonValue(resourceParameters, "locationConstraints");
+                    }
+                } else if (resCusUuid.equals(resource.getModelInfo().getModelCustomizationUuid())) {
+                    logger.info("resource resolved using customization-id");
                     String resourceParameters = JsonUtils.getJsonValue(eachResource, "parameters");
                     locationConstraints = JsonUtils.getJsonValue(resourceParameters, "locationConstraints");
                 }
diff --git a/bpmn/mso-infrastructure-bpmn/src/main/java/org/onap/so/bpmn/common/workflow/service/WorkflowAsyncResource.java b/bpmn/mso-infrastructure-bpmn/src/main/java/org/onap/so/bpmn/common/workflow/service/WorkflowAsyncResource.java
index e8e4b85..ace6e19 100644
--- a/bpmn/mso-infrastructure-bpmn/src/main/java/org/onap/so/bpmn/common/workflow/service/WorkflowAsyncResource.java
+++ b/bpmn/mso-infrastructure-bpmn/src/main/java/org/onap/so/bpmn/common/workflow/service/WorkflowAsyncResource.java
@@ -101,7 +101,7 @@
         try {
             MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, getRequestId(inputVariables));
             processor.startProcess(processKey, variableMap);
-            WorkflowResponse response = waitForResponse(getRequestId(inputVariables));
+            WorkflowResponse response = waitForResponse(inputVariables);
             return Response.status(202).entity(response).build();
         } catch (WorkflowProcessorException e) {
             WorkflowResponse response = e.getWorkflowResponse();
@@ -112,9 +112,12 @@
         }
     }
 
-    private WorkflowResponse waitForResponse(String requestId) throws Exception {
+    private WorkflowResponse waitForResponse(Map<String, Object> inputVariables) throws Exception {
+        String requestId = getRequestId(inputVariables);
         long currentWaitTime = 0;
-        while (DEFAULT_WAIT_TIME > currentWaitTime) {
+        long waitTime = getWaitTime(inputVariables);
+        logger.debug("WorkflowAsyncResource.waitForResponse using timeout: " + waitTime);
+        while (waitTime > currentWaitTime) {
             Thread.sleep(workflowPollInterval);
             currentWaitTime = currentWaitTime + workflowPollInterval;
             WorkflowContext foundContext = contextHolder.getWorkflowContext(requestId);
@@ -123,7 +126,7 @@
                 return buildResponse(foundContext);
             }
         }
-        throw new Exception("TimeOutOccured");
+        throw new Exception("TimeOutOccured in WorkflowAsyncResource.waitForResponse for time " + waitTime + "ms");
     }
 
     private WorkflowResponse buildUnkownError(String requestId, String error) {
@@ -171,4 +174,25 @@
         return inputVariables;
     }
 
+    /**
+     * Returns the wait time, this is used by the resource on how long it should wait to send a response If none
+     * specified DEFAULT_WAIT_TIME is used
+     *
+     * @param inputVariables
+     * @return
+     */
+    private long getWaitTime(Map<String, Object> inputVariables) {
+        String timeout = inputVariables.get("mso-service-request-timeout") == null ? null
+                : inputVariables.get("mso-service-request-timeout").toString();
+
+        if (timeout != null) {
+            try {
+                return Long.parseLong(timeout) * 1000;
+            } catch (NumberFormatException nex) {
+                logger.debug("Invalid input for mso-service-request-timeout");
+            }
+        }
+        return DEFAULT_WAIT_TIME;
+    }
+
 }
diff --git a/bpmn/mso-infrastructure-bpmn/src/main/java/org/onap/so/bpmn/common/workflow/service/WorkflowResource.java b/bpmn/mso-infrastructure-bpmn/src/main/java/org/onap/so/bpmn/common/workflow/service/WorkflowResource.java
index 20f3eb4..bcc3739 100644
--- a/bpmn/mso-infrastructure-bpmn/src/main/java/org/onap/so/bpmn/common/workflow/service/WorkflowResource.java
+++ b/bpmn/mso-infrastructure-bpmn/src/main/java/org/onap/so/bpmn/common/workflow/service/WorkflowResource.java
@@ -116,7 +116,7 @@
             long timeToWaitAfterProcessEnded = uriInfo == null ? 5000 : 60000;
             AtomicLong timeProcessEnded = new AtomicLong(0);
             boolean endedWithNoResponse = false;
-
+            logger.debug(LOGMARKER + "WorkflowResource.startProcessInstanceByKey using timeout: " + waitTime);
             while (now <= endTime) {
                 Thread.sleep(pollingInterval);
 
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/Create3rdONAPE2EServiceInstance.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/Create3rdONAPE2EServiceInstance.groovy
index 044f0b4..8bb48a2 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/Create3rdONAPE2EServiceInstance.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/Create3rdONAPE2EServiceInstance.groovy
@@ -22,6 +22,7 @@
 
 package org.onap.so.bpmn.infrastructure.scripts
 
+import com.google.gson.JsonObject
 import org.json.JSONArray
 import org.json.JSONObject
 import org.json.XML
@@ -93,11 +94,12 @@
 			// set local resourceInput
 			execution.setVariable(Prefix + "ResourceInput", resourceInputObj)
 
+			String spPartnerModelName = UrnPropertiesReader.getVariable("sp-partner.modelName")
 			boolean is3rdONAPExist = false
 
-			if(inputParameters.has("sppartner_url"))
+			if(inputParameters.has(spPartnerModelName + "_url"))
 			{
-				String sppartnerUrl = inputParameters.get("sppartner_url")
+				String sppartnerUrl = inputParameters.get(spPartnerModelName + "_url")
 				if(!isBlank(sppartnerUrl)) {
 					execution.setVariable(Prefix + "SppartnerUrl", sppartnerUrl)
 					is3rdONAPExist = true
@@ -108,9 +110,9 @@
 					logger.debug(msg)
 				}
 			}
-			if(inputParameters.has("sppartner_providingServiceUuid"))
+			if(inputParameters.has(spPartnerModelName + "_providingServiceUuid"))
 			{
-				String sppartnerUUID= inputParameters.get("sppartner_providingServiceUuid")
+				String sppartnerUUID= inputParameters.get(spPartnerModelName + "_providingServiceUuid")
 				execution.setVariable(Prefix + "SppartnerUUID", sppartnerUUID)
 				is3rdONAPExist = true
 			}
@@ -119,9 +121,9 @@
 				String msg = "sppartner providingServiceUuid is blank."
 				logger.debug(msg)
 			}
-			if(inputParameters.has("sppartner_providingServiceInvariantUuid"))
+			if(inputParameters.has(spPartnerModelName + "_providingServiceInvariantUuid"))
 			{
-				String sppartnerInvarianteUUID  = inputParameters.get("sppartner_providingServiceInvariantUuid")
+				String sppartnerInvarianteUUID  = inputParameters.get(spPartnerModelName + "_providingServiceInvariantUuid")
 				execution.setVariable(Prefix + "SppartnerInvarianteUUID", sppartnerInvarianteUUID)
 				is3rdONAPExist = true
 			}
@@ -131,9 +133,9 @@
 				logger.debug(msg)
 			}
 
-			if(inputParameters.has("sppartner_handoverMode"))
+			if(inputParameters.has(spPartnerModelName + "_handoverMode"))
 			{
-				String handoverMode = inputParameters.get("sppartner_handoverMode")
+				String handoverMode = inputParameters.get(spPartnerModelName + "_handoverMode")
 				execution.setVariable(Prefix + "HandoverMode", handoverMode)
 			    is3rdONAPExist = true
 			}
@@ -167,7 +169,7 @@
 			String serviceParameters = JsonUtils.getJsonValue(incomingRequest, "service.parameters")
 			String requestInputs = JsonUtils.getJsonValue(serviceParameters, "requestInputs")
 			JSONObject inputParameters = new JSONObject(requestInputs)
-			execution.setVariable(Prefix + "ServiceParameters", inputParameters)
+			execution.setVariable(Prefix + "ServiceParameters", inputParameters.toString())
 
 			// CallSource is added only when ONAP SO calling 3rdONAP(External API) SO(Remote call)
 			boolean isLocalCall = true
@@ -182,7 +184,7 @@
 				}
 			}
 			execution.setVariable(Prefix + "CallSource", callSource)
-			logger.debug("callSource is: " + callSource )
+			logger.info("callSource is: " + callSource )
 
 			execution.setVariable("IsLocalCall", isLocalCall)
 
@@ -308,39 +310,39 @@
 		String handoverMode = execution.getVariable(Prefix + "HandoverMode")
 		if("SOTN".equalsIgnoreCase(handoverMode)) {
 			// Put TP Link info into serviceParameters
-			JSONObject inputParameters = execution.getVariable(Prefix + "ServiceParameters")
+			JSONObject inputParameters = new JSONObject(execution.getVariable(Prefix + "ServiceParameters"))
 			if(inputParameters.has("remote-access-provider-id")) {
 				Map<String, Object> crossTPs = new HashMap<String, Object>();
-				crossTPs.put("local-access-provider-id", inputParameters.get("remote-access-provider-id"));
-				crossTPs.put("local-access-client-id", inputParameters.get("remote-access-client-id"));
-				crossTPs.put("local-access-topology-id", inputParameters.get("remote-access-topology-id"));
-				crossTPs.put("local-access-node-id", inputParameters.get("remote-access-node-id"));
-				crossTPs.put("local-access-ltp-id", inputParameters.get("remote-access-ltp-id"));
-				crossTPs.put("remote-access-provider-id", inputParameters.get("local-access-provider-id"));
-				crossTPs.put("remote-access-client-id", inputParameters.get("local-access-client-id"));
-				crossTPs.put("remote-access-topology-id", inputParameters.get("local-access-topology-id"));
-				crossTPs.put("remote-access-node-id", inputParameters.get("local-access-node-id"));
-				crossTPs.put("remote-access-ltp-id", inputParameters.get("local-access-ltp-id"));
+				crossTPs.put("local-access-provider-id", inputParameters.get("remote-access-provider-id"))
+				crossTPs.put("local-access-client-id", inputParameters.get("remote-access-client-id"))
+				crossTPs.put("local-access-topology-id", inputParameters.get("remote-access-topology-id"))
+				crossTPs.put("local-access-node-id", inputParameters.get("remote-access-node-id"))
+				crossTPs.put("local-access-ltp-id", inputParameters.get("remote-access-ltp-id"))
+				crossTPs.put("remote-access-provider-id", inputParameters.get("local-access-provider-id"))
+				crossTPs.put("remote-access-client-id", inputParameters.get("local-access-client-id"))
+				crossTPs.put("remote-access-topology-id", inputParameters.get("local-access-topology-id"))
+				crossTPs.put("remote-access-node-id", inputParameters.get("local-access-node-id"))
+				crossTPs.put("remote-access-ltp-id", inputParameters.get("local-access-ltp-id"))
 
-				inputParameters.put("local-access-provider-id", crossTPs.get("local-access-provider-id"));
-				inputParameters.put("local-access-client-id", crossTPs.get("local-access-client-id"));
-				inputParameters.put("local-access-topology-id", crossTPs.get("local-access-topology-id"));
-				inputParameters.put("local-access-node-id", crossTPs.get("local-access-node-id"));
-				inputParameters.put("local-access-ltp-id", crossTPs.get("local-access-ltp-id"));
-				inputParameters.put("remote-access-provider-id", crossTPs.get("remote-access-provider-id"));
-				inputParameters.put("remote-access-client-id", crossTPs.get("remote-access-client-id"));
-				inputParameters.put("remote-access-topology-id", crossTPs.get("remote-access-topology-id"));
-				inputParameters.put("remote-access-node-id", crossTPs.get("remote-access-node-id"));
-				inputParameters.put("remote-access-ltp-id", crossTPs.get("remote-access-ltp-id"));
+				inputParameters.put("local-access-provider-id", crossTPs.get("local-access-provider-id"))
+				inputParameters.put("local-access-client-id", crossTPs.get("local-access-client-id"))
+				inputParameters.put("local-access-topology-id", crossTPs.get("local-access-topology-id"))
+				inputParameters.put("local-access-node-id", crossTPs.get("local-access-node-id"))
+				inputParameters.put("local-access-ltp-id", crossTPs.get("local-access-ltp-id"))
+				inputParameters.put("remote-access-provider-id", crossTPs.get("remote-access-provider-id"))
+				inputParameters.put("remote-access-client-id", crossTPs.get("remote-access-client-id"))
+				inputParameters.put("remote-access-topology-id", crossTPs.get("remote-access-topology-id"))
+				inputParameters.put("remote-access-node-id", crossTPs.get("remote-access-node-id"))
+				inputParameters.put("remote-access-ltp-id", crossTPs.get("remote-access-ltp-id"))
 
-				execution.setVariable(Prefix + "ServiceParameters", inputParameters)
+				execution.setVariable(Prefix + "ServiceParameters", inputParameters.toString())
 			}
 			else {
 					logger.error("No allocated CrossONAPResource found in ServiceParameters")
 			}
 		}
 
-		logger.info("Exit " + allocateCrossONAPResource)
+		logger.info("Exit  allocateCrossONAPResource")
 	}
 
 	public void prepare3rdONAPRequest(DelegateExecution execution) {
@@ -409,7 +411,7 @@
 		_requestInputs_ +=  ",\n" + externalAPIUtil.setTemplate(ExternalAPIUtil.RequestInputsTemplate, requestInputsMap)
 
 		// Transfer all uuiRequest incomeParameters to ExternalAPI format
-		JSONObject inputParameters = execution.getVariable(Prefix + "ServiceParameters")
+		JSONObject inputParameters = new JSONObject(execution.getVariable(Prefix + "ServiceParameters"))
 		for(String key : inputParameters.keySet()) {
 			String inputName = key
 			String inputValue = inputParameters.opt(key)
@@ -506,7 +508,7 @@
 			}
 
 			JSONArray items = responseObj.getJSONArray("orderItem")
-			JSONObject item = items[0]
+			JSONObject item = items.get(0)
 			JSONObject service = item.get("service")
 			String sppartnerServiceId = service.get("id")
 			if(sppartnerServiceId == null || sppartnerServiceId.equals("null")) {
@@ -572,7 +574,9 @@
 	 */
 	public void timeDelay(DelegateExecution execution) {
 		try {
+			logger.debug("going to sleep for 5 sec")
 			Thread.sleep(5000)
+			logger.debug("wakeup after 5 sec")
 		} catch(InterruptedException e) {
 			logger.error("Time Delay exception" + e)
 		}
@@ -601,6 +605,8 @@
 
 		AAIResourcesClient client = new AAIResourcesClient()
 		AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SP_PARTNER, sppartnerId)
+		logger.info("sending request to create sp-partner: " +  uri.toString())
+		logger.info("requestbody: " + partner)
 		client.create(uri, partner)
 
 		AAIResourceUri siUri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, globalSubscriberId, serviceType, serviceInstanceId)
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateSDNCNetworkResource.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateSDNCNetworkResource.groovy
index b0419be..bcd3353 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateSDNCNetworkResource.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateSDNCNetworkResource.groovy
@@ -276,9 +276,10 @@
 
             case ~/[\w\s\W]*sdwanvpnattachment[\w\s\W]*/ :
             case ~/[\w\s\W]*sotnvpnattachment[\w\s\W]*/ :
+            case ~/[\w\s\W]*SOTN-Attachment[\w\s\W]*/ :
                 // fill attachment TP in networkInputParamJson
-                def vpnName = StringUtils.containsIgnoreCase(modelName, "sotnvpnattachment") ? "sotnvpnattachmentvf_sotncondition_sotnVpnName" : "sdwanvpnattachmentvf_sdwancondition_sdwanVpnName"
-                fillAttachmentTPInfo(resourceInputObj, modelName, execution, vpnName)
+                def vpnName = StringUtils.containsIgnoreCase(modelName, "sotnvpnattachment") ? "sotnvpnattachmentvf_sotncondition_sotnVpnName" : (StringUtils.containsIgnoreCase(modelName, "SOTN-Attachment") ? "elinesotnattachmentvf0_elinesotnattachmentvfc0_sotnVpnName" : "sdwanvpnattachmentvf_sdwancondition_sdwanVpnName")
+                fillAttachmentTPInfo(resourceInputObj, execution, vpnName)
 
                 break
             default:
@@ -286,27 +287,36 @@
                 // in case name is different as expected
                 if ("ALLOTTED_RESOURCE".equals(resourceInputObj.getResourceModelInfo().getModelType())) {
                     def vpnName = modelName + "_sotnVpnName"
-                    fillAttachmentTPInfo(resourceInputObj, modelName, execution, vpnName)
+                    fillAttachmentTPInfo(resourceInputObj, execution, vpnName)
                 }
                 break
         }
         return resourceInputObj
     }
 
-    private void fillAttachmentTPInfo(ResourceInput resourceInputObj, String modelName, DelegateExecution execution, String vpnName) {
-        String customer = resourceInputObj.getGlobalSubscriberId()
-        String serviceType = resourceInputObj.getServiceType()
+    private void fillAttachmentTPInfo(ResourceInput resourceInputObj, DelegateExecution execution, String vpnName) {
 
         String parentServiceName = jsonUtil.getJsonValueForKey(resourceInputObj.getRequestsInputs(), vpnName)
 
         AAIResourcesClient client = new AAIResourcesClient()
-        AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.SERVICE_INSTANCE, customer, serviceType).queryParam("service-instance-name", parentServiceName)
-        ServiceInstances sis = client.get(uri).asBean(ServiceInstances.class).get()
-        logger.debug("Fetched AAI ServiceInstances for the vpnName:" + vpnName + " is " + sis.getServiceInstance().toString())
-        ServiceInstance si = sis.getServiceInstance().get(0)
+        logger.info("sending request to resolve vpn-name:" + vpnName)
+        AAIResourceUri uri = AAIUriFactory.createResourceUri(new AAIObjectPlurals("/nodes", "/service-instances", "queryByName")).queryParam("service-instance-name", parentServiceName)
+        Optional<ServiceInstances> serviceInstancesOpt = client.get(ServiceInstances.class, uri)
 
-        def parentServiceInstanceId = si.getServiceInstanceId()
-        execution.setVariable("parentServiceInstanceId", parentServiceInstanceId)
+        if(serviceInstancesOpt.isPresent()) {
+            List<ServiceInstance> serviceInstanceList = serviceInstancesOpt.get().getServiceInstance()
+            logger.info("response from aai:" + serviceInstanceList.toString())
+            if (serviceInstanceList.size() > 0) {
+                ServiceInstance si = serviceInstanceList.get(0)
+                String parentServiceInstanceId = si.getServiceInstanceId()
+                execution.setVariable("parentServiceInstanceId", parentServiceInstanceId)
+                logger.info("setting parentService id:" + parentServiceInstanceId)
+            } else {
+                logger.error("No service instance found for given name.")
+            }
+        } else {
+            logger.error("No nodes found with this name" + vpnName)
+        }
     }
 
     /**
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateE2EServiceInstance.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateE2EServiceInstance.groovy
index d9f9299..0191439 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateE2EServiceInstance.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateE2EServiceInstance.groovy
@@ -584,6 +584,13 @@
 		List<Resource> addResourceList = serviceDecomposition.getServiceResources()
 		execution.setVariable("addResourceList", addResourceList)
 
+		boolean isCreateResourceListValid = true
+		if (addResourceList == null || addResourceList.isEmpty()) {
+			isCreateResourceListValid = false
+		}
+
+		execution.setVariable("isCreateResourceListValid", isCreateResourceListValid)
+
 		logger.trace("COMPLETED preProcessForAddResource Process ")
 	}
 
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/workflow/service/ServicePluginFactory.java b/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/workflow/service/ServicePluginFactory.java
index 9319353..95be6ba 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/workflow/service/ServicePluginFactory.java
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/workflow/service/ServicePluginFactory.java
@@ -29,6 +29,7 @@
 import java.io.InputStream;
 import java.net.SocketTimeoutException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
@@ -56,6 +57,8 @@
 import org.onap.aai.domain.yang.LogicalLink;
 import org.onap.aai.domain.yang.LogicalLinks;
 import org.onap.aai.domain.yang.PInterface;
+import org.onap.aai.domain.yang.Pnf;
+import org.onap.aai.domain.yang.Relationship;
 import org.onap.so.bpmn.core.UrnPropertiesReader;
 import org.onap.so.bpmn.core.domain.Resource;
 import org.onap.so.bpmn.core.domain.ServiceDecomposition;
@@ -166,8 +169,7 @@
     }
 
     private boolean isNeedProcessSite(String uuiRequest) {
-        return uuiRequest.toLowerCase().contains("site_address")
-                && uuiRequest.toLowerCase().contains("sotncondition_clientsignal");
+        return uuiRequest.toLowerCase().contains("address") && uuiRequest.toLowerCase().contains("clientsignal");
     }
 
     @SuppressWarnings("unchecked")
@@ -178,6 +180,7 @@
             return true;
         }
         String host = (String) tpInfoMap.get("host");
+        logger.info("host string from tpinfo:" + host);
         // host is empty means TP is in local, not empty means TP is in remote ONAP
         if (!host.isEmpty()) {
             return false;
@@ -191,17 +194,33 @@
         accessTPInfo.put("access-ltp-id", tpInfoMap.get("access-ltp-id"));
 
         // change resources
+        boolean flgResourceFound = false;
         String resourceName = (String) tpInfoMap.get("resourceName");
         for (Object curResource : resources) {
             Map<String, Object> resource = (Map<String, Object>) curResource;
             String curResourceName = (String) resource.get("resourceName");
             curResourceName = curResourceName.replaceAll(" ", "");
             if (resourceName.equalsIgnoreCase(curResourceName)) {
+                flgResourceFound = true;
+                logger.info("found match to add site tp info using uui template resource name");
                 putResourceRequestInputs(resource, accessTPInfo);
                 break;
             }
         }
 
+        if (!flgResourceFound) {
+            String attacmentResName = UrnPropertiesReader.getVariable("sp-partner.attachment-resource-name");
+            for (Object curResource : resources) {
+                Map<String, Object> resource = (Map<String, Object>) curResource;
+                String curResourceName = (String) resource.get("resourceName");
+
+                if (attacmentResName.equals(curResourceName)) {
+                    logger.info("found match to add site tp info using customized resource name");
+                    putResourceRequestInputs(resource, accessTPInfo);
+                }
+            }
+        }
+
         return true;
     }
 
@@ -215,10 +234,10 @@
         // logic for R2 uuiRequest params in service level
         for (Entry<String, Object> entry : serviceRequestInputs.entrySet()) {
             String key = entry.getKey();
-            if (key.toLowerCase().contains("site_address")) {
+            if (key.toLowerCase().contains("address")) {
                 location = entry.getValue();
             }
-            if (key.toLowerCase().contains("sotncondition_clientsignal")) {
+            if (key.toLowerCase().contains("clientsignal")) {
                 clientSignal = entry.getValue();
                 vpnAttachmentResourceName = key.substring(0, key.indexOf("_"));
             }
@@ -242,10 +261,12 @@
                     tpInfoMap = tpJson;
                     // add resourceName
                     tpInfoMap.put("resourceName", vpnAttachmentResourceName);
+                    logger.info("*** we will try to find resourcename(" + vpnAttachmentResourceName
+                            + ") to add resource input ***");
                     break;
                 }
             }
-            logger.debug("Get Terminal TP from InventoryOSS");
+            logger.info("Get Terminal TP from InventoryOSS: " + tpInfoMap);
             return tpInfoMap;
         }
 
@@ -330,10 +351,40 @@
         return false;
     }
 
+    public static String CUSTOM_RESOURCE_TP = "custom-resource-tp";
+    public static String VS_MONITORED = "VS_assured";
+    public static String VS_UNMONITORED = "VS_besteffort";
+    public static String TS_MONITORED = "TS1";
+    public static String TS_UNMONITORED = "TS2";
+    public static String CUSTOM_TP_LIST[] = new String[] {VS_MONITORED, VS_UNMONITORED, TS_MONITORED, TS_UNMONITORED};
+
+    private void customizeTP(Map<String, Object> crossTps, String svcName, DelegateExecution execution) {
+        Optional<String> customType = Arrays.stream(CUSTOM_TP_LIST).filter(svcName::contains).findFirst();
+        if (customType.isPresent()) {
+            logger.info("customizing TP");
+            String localTPs = UrnPropertiesReader.getVariable(CUSTOM_RESOURCE_TP + "." + customType.get() + ".local");
+            String remoteTPs = UrnPropertiesReader.getVariable(CUSTOM_RESOURCE_TP + "." + customType.get() + ".remote");
+
+            String localTP = (String) crossTps.get("local-access-ltp-id");
+            String remoteTP = (String) crossTps.get("remote-access-ltp-id");
+
+            if (localTPs.contains(localTP) && remoteTPs.contains(remoteTP)) {
+                logger.info("using same tp returned from AAI");
+                return;
+            }
+
+            crossTps.put("local-access-ltp-id", localTPs.split(",")[0]);
+            crossTps.put("remote-access-ltp-id", remoteTPs.split(",")[0]);
+        }
+        logger.info("cross TP info:" + crossTps);
+    }
+
     @SuppressWarnings("unchecked")
     private void allocateCrossTPResources(DelegateExecution execution, Map<String, Object> serviceRequestInputs) {
 
-        Map<String, Object> crossTPs = this.getTPsfromAAI();
+        String serviceName = (String) execution.getVariable("serviceInstanceName");
+        Map<String, Object> crossTPs = this.getTPsfromAAI(serviceName);
+        // customizeTP(crossTPs, serviceName, execution);
 
         if (crossTPs == null || crossTPs.isEmpty()) {
             serviceRequestInputs.put("local-access-provider-id", "");
@@ -353,17 +404,45 @@
             serviceRequestInputs.put("local-access-node-id", crossTPs.get("local-access-node-id"));
             serviceRequestInputs.put("local-access-ltp-id", crossTPs.get("local-access-ltp-id"));
             serviceRequestInputs.put("remote-access-provider-id", crossTPs.get("remote-access-provider-id"));
-            serviceRequestInputs.put("remote-access-client-id", crossTPs.get("remote-client-id"));
-            serviceRequestInputs.put("remote-access-topology-id", crossTPs.get("remote-topology-id"));
-            serviceRequestInputs.put("remote-access-node-id", crossTPs.get("remote-node-id"));
-            serviceRequestInputs.put("remote-access-ltp-id", crossTPs.get("remote-ltp-id"));
+            serviceRequestInputs.put("remote-access-client-id", crossTPs.get("remote-access-client-id"));
+            serviceRequestInputs.put("remote-access-topology-id", crossTPs.get("remote-access-topology-id"));
+            serviceRequestInputs.put("remote-access-node-id", crossTPs.get("remote-access-node-id"));
+            serviceRequestInputs.put("remote-access-ltp-id", crossTPs.get("remote-access-ltp-id"));
         }
 
         return;
     }
 
+    private LogicalLink selectLogicalLink(List<LogicalLink> logicalLinks, String svcName) {
+        Optional<String> customType = Arrays.stream(CUSTOM_TP_LIST).filter(svcName::contains).findFirst();
+        if (customType.isPresent()) {
+
+            String[] allowedList =
+                    UrnPropertiesReader.getVariable(CUSTOM_RESOURCE_TP + "." + customType.get() + ".local").split(",");
+
+            for (String localTp : allowedList) {
+                for (LogicalLink link : logicalLinks) {
+                    for (Relationship relationship : link.getRelationshipList().getRelationship()) {
+                        if (relationship.getRelatedTo().equals("p-interface")
+                                && relationship.getRelatedLink().contains("-ltpId-" + localTp)
+                                && link.getOperationalStatus().equalsIgnoreCase("up")) {
+                            logger.info("linkname:" + link.getLinkName() + " is matching with allowed list");
+                            return link;
+                        }
+                    }
+                }
+            }
+
+            logger.error("There is no matching logical link for allowed list :" + allowedList.toString());
+            return null;
+        } else {
+            logger.info("link customization is not required");
+            return logicalLinks.get(0);
+        }
+    }
+
     // This method returns Local and remote TPs information from AAI
-    public Map getTPsfromAAI() {
+    public Map getTPsfromAAI(String serviceName) {
         Map<String, Object> tpInfo = new HashMap<>();
 
         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.LOGICAL_LINK);
@@ -372,11 +451,11 @@
 
         if (result.isPresent()) {
             LogicalLinks links = result.get();
-            boolean isRemoteLink = false;
+            LogicalLink link = selectLogicalLink(links.getLogicalLink(), serviceName);
 
-            links.getLogicalLink();
-
-            for (LogicalLink link : links.getLogicalLink()) {
+            if (link != null) {
+                boolean isRemoteLink = false;
+                logger.info("processing link :" + link.getLinkName());
                 AAIResultWrapper wrapper = new AAIResultWrapper(link);
                 Optional<Relationships> optRelationships = wrapper.getRelationships();
                 List<AAIResourceUri> pInterfaces = new ArrayList<>();
@@ -386,57 +465,85 @@
                         isRemoteLink = true;
                     }
                     pInterfaces.addAll(relationships.getRelatedAAIUris(AAIObjectType.P_INTERFACE));
-                }
+                    if (isRemoteLink) {
+                        // find remote p interface
+                        AAIResourceUri localTP = null;
+                        AAIResourceUri remoteTP = null;
 
-                if (isRemoteLink) {
-                    // find remote p interface
-                    AAIResourceUri localTP = null;
-                    AAIResourceUri remoteTP = null;
+                        AAIResourceUri pInterface0 = pInterfaces.get(0);
 
-                    AAIResourceUri pInterface0 = pInterfaces.get(0);
-
-                    if (isRemotePInterface(client, pInterface0)) {
-                        remoteTP = pInterfaces.get(0);
-                        localTP = pInterfaces.get(1);
-                    } else {
-                        localTP = pInterfaces.get(0);
-                        remoteTP = pInterfaces.get(1);
-                    }
-
-                    if (localTP != null && remoteTP != null) {
-                        // give local tp
-                        String tpUrl = localTP.build().toString();
-                        PInterface intfLocal = client.get(PInterface.class, localTP).get();
-                        tpInfo.put("local-access-node-id", tpUrl.split("/")[6]);
-
-                        String[] networkRef = intfLocal.getNetworkRef().split("/");
-                        if (networkRef.length == 6) {
-                            tpInfo.put("local-access-provider-id", networkRef[1]);
-                            tpInfo.put("local-access-client-id", networkRef[3]);
-                            tpInfo.put("local-access-topology-id", networkRef[5]);
-                        }
-                        String ltpIdStr = tpUrl.substring(tpUrl.lastIndexOf("/") + 1);
-                        if (ltpIdStr.contains("-")) {
-                            tpInfo.put("local-access-ltp-id", ltpIdStr.substring(ltpIdStr.lastIndexOf("-") + 1));
+                        if (isRemotePInterface(client, pInterface0)) {
+                            remoteTP = pInterfaces.get(0);
+                            localTP = pInterfaces.get(1);
+                        } else {
+                            localTP = pInterfaces.get(0);
+                            remoteTP = pInterfaces.get(1);
                         }
 
-                        // give remote tp
-                        tpUrl = remoteTP.build().toString();
-                        PInterface intfRemote = client.get(PInterface.class, remoteTP).get();
-                        tpInfo.put("remote-access-node-id", tpUrl.split("/")[6]);
+                        if (localTP != null && remoteTP != null) {
+                            // give local tp
+                            String tpUrl = localTP.build().toString();
+                            String localNodeId = tpUrl.split("/")[4];
+                            tpInfo.put("local-access-node-id", localNodeId);
 
-                        String[] networkRefRemote = intfRemote.getNetworkRef().split("/");
+                            logger.info("Get info for local TP :" + localNodeId);
+                            Optional<Pnf> optLocalPnf = client.get(Pnf.class,
+                                    AAIUriFactory.createResourceUri(AAIObjectType.PNF, localNodeId));
 
-                        if (networkRefRemote.length == 6) {
-                            tpInfo.put("remote-access-provider-id", networkRefRemote[1]);
-                            tpInfo.put("remote-access-client-id", networkRefRemote[3]);
-                            tpInfo.put("remote-access-topology-id", networkRefRemote[5]);
+                            if (optLocalPnf.isPresent()) {
+                                Pnf localPnf = optLocalPnf.get();
+
+                                for (Relationship rel : localPnf.getRelationshipList().getRelationship()) {
+                                    if (rel.getRelatedTo().equalsIgnoreCase("network-resource")) {
+                                        String[] networkRef = rel.getRelatedLink()
+                                                .substring(rel.getRelatedLink().lastIndexOf("/") + 1).split("-");
+                                        if (networkRef.length == 6) {
+                                            tpInfo.put("local-access-provider-id", networkRef[1]);
+                                            tpInfo.put("local-access-client-id", networkRef[3]);
+                                            tpInfo.put("local-access-topology-id", networkRef[5]);
+                                        }
+                                    }
+                                }
+                            }
+                            String ltpIdStr = tpUrl.substring(tpUrl.lastIndexOf("/") + 1);
+                            if (ltpIdStr.contains("-")) {
+                                tpInfo.put("local-access-ltp-id", ltpIdStr.substring(ltpIdStr.lastIndexOf("-") + 1));
+                            }
+
+                            // give remote tp
+                            tpUrl = remoteTP.build().toString();
+                            PInterface intfRemote = client.get(PInterface.class, remoteTP).get();
+
+                            String remoteNodeId = tpUrl.split("/")[4];
+                            tpInfo.put("remote-access-node-id", remoteNodeId);
+
+                            logger.info("Get info for remote TP:" + remoteNodeId);
+
+                            String[] networkRefRemote = intfRemote.getNetworkRef().split("-");
+                            Optional<Pnf> optRemotePnf = client.get(Pnf.class,
+                                    AAIUriFactory.createResourceUri(AAIObjectType.PNF, remoteNodeId));
+
+                            if (optRemotePnf.isPresent()) {
+                                Pnf remotePnf = optRemotePnf.get();
+
+                                for (Relationship rel : remotePnf.getRelationshipList().getRelationship()) {
+                                    if (rel.getRelatedTo().equalsIgnoreCase("network-resource")) {
+                                        String[] networkRef = rel.getRelatedLink()
+                                                .substring(rel.getRelatedLink().lastIndexOf("/") + 1).split("-");
+                                        if (networkRef.length == 6) {
+                                            tpInfo.put("remote-access-provider-id", networkRefRemote[1]);
+                                            tpInfo.put("remote-access-client-id", networkRefRemote[3]);
+                                            tpInfo.put("remote-access-topology-id", networkRefRemote[5]);
+                                        }
+                                    }
+                                }
+                            }
+
+                            String ltpIdStrR = tpUrl.substring(tpUrl.lastIndexOf("/") + 1);
+                            if (ltpIdStrR.contains("-")) {
+                                tpInfo.put("remote-access-ltp-id", ltpIdStrR.substring(ltpIdStr.lastIndexOf("-") + 1));
+                            }
                         }
-                        String ltpIdStrR = tpUrl.substring(tpUrl.lastIndexOf("/") + 1);
-                        if (ltpIdStrR.contains("-")) {
-                            tpInfo.put("remote-access-ltp-id", ltpIdStrR.substring(ltpIdStr.lastIndexOf("-") + 1));
-                        }
-                        return tpInfo;
                     }
                 }
             }
@@ -811,5 +918,4 @@
             }
         }
     }
-
 }
diff --git a/bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/workflow/service/ServicePluginFactoryTest.java b/bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/workflow/service/ServicePluginFactoryTest.java
index 1a75f12..6b31077 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/workflow/service/ServicePluginFactoryTest.java
+++ b/bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/workflow/service/ServicePluginFactoryTest.java
@@ -110,7 +110,7 @@
 
     @Test
     public void doTPResourcesAllocation_Success() {
-        doReturn(null).when(servicePluginFactory).getTPsfromAAI();
+        doReturn(null).when(servicePluginFactory).getTPsfromAAI("test");
         String result = servicePluginFactory.doTPResourcesAllocation(null, uuiRequest);
         Assert.assertNotEquals(result, uuiRequest);
     }
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/DeActivateSDNCNetworkResource.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/DeActivateSDNCNetworkResource.bpmn
index cfcd259..082860d 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/DeActivateSDNCNetworkResource.bpmn
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/DeActivateSDNCNetworkResource.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="2.0.0">
+<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="3.1.0">
   <bpmn:process id="DeActivateSDNCNetworkResource" name="DeActivateSDNCNetworkResource" isExecutable="true">
     <bpmn:startEvent id="deleteNetworkResource_StartEvent_deactivate" name="deleteNetworkResource_StartEvent">
       <bpmn:outgoing>SequenceFlow_1qo2pln</bpmn:outgoing>
@@ -14,9 +14,9 @@
 dcsi.prepareSDNCRequest(execution)</bpmn:script>
     </bpmn:scriptTask>
     <bpmn:endEvent id="EndEvent_1x6k78c_deactivate" name="delete SDNC call end">
-      <bpmn:incoming>SequenceFlow_15wux6a</bpmn:incoming>
+      <bpmn:incoming>SequenceFlow_0ow44q0</bpmn:incoming>
     </bpmn:endEvent>
-    <bpmn:sequenceFlow id="SequenceFlow_0ow44q0" sourceRef="Task_023hred_deactivate" targetRef="ScriptTask_1emjxm2_deactivate" />
+    <bpmn:sequenceFlow id="SequenceFlow_0ow44q0" sourceRef="Task_023hred_deactivate" targetRef="EndEvent_1x6k78c_deactivate" />
     <bpmn:scriptTask id="Task_023hred_deactivate" name="post SDNC deactivate call">
       <bpmn:incoming>SequenceFlow_13gl3wv</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0ow44q0</bpmn:outgoing>
@@ -39,14 +39,6 @@
 def dcsi = new DeActivateSDNCNetworkResource()
 dcsi.prepareUpdateAfterDeActivateSDNCResource(execution)</bpmn:script>
     </bpmn:scriptTask>
-    <bpmn:scriptTask id="ScriptTask_1emjxm2_deactivate" name="Send Sync Ack Response" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_0ow44q0</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_15wux6a</bpmn:outgoing>
-      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
-def csi = new  DeActivateSDNCNetworkResource()
-csi.sendSyncResponse(execution)</bpmn:script>
-    </bpmn:scriptTask>
-    <bpmn:sequenceFlow id="SequenceFlow_15wux6a" sourceRef="ScriptTask_1emjxm2_deactivate" targetRef="EndEvent_1x6k78c_deactivate" />
     <bpmn:sequenceFlow id="SequenceFlow_1fjtgq7" sourceRef="PreprocessIncomingRequest_deactivate" targetRef="Task_0n0lj30_deactivate" />
     <bpmn:callActivity id="Task_0n0lj30_deactivate" name="Call SDNC &#10; Adapter V1" calledElement="SDNCAdapterRestV1">
       <bpmn:incoming>SequenceFlow_1fjtgq7</bpmn:incoming>
@@ -98,85 +90,75 @@
   <bpmndi:BPMNDiagram id="BPMNDiagram_1">
     <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DeActivateSDNCNetworkResource">
       <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="deleteNetworkResource_StartEvent_deactivate">
-        <dc:Bounds x="-111" y="111" width="36" height="36" />
+        <dc:Bounds x="180" y="111" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="-135" y="147" width="88" height="40" />
+          <dc:Bounds x="156" y="147" width="88" height="40" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1qo2pln_di" bpmnElement="SequenceFlow_1qo2pln">
-        <di:waypoint x="-75" y="129" />
-        <di:waypoint x="5" y="129" />
+        <di:waypoint x="216" y="129" />
+        <di:waypoint x="296" y="129" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="-87.5" y="108" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_03j6ogo_di" bpmnElement="PreprocessIncomingRequest_deactivate">
-        <dc:Bounds x="178" y="89" width="100" height="80" />
+        <dc:Bounds x="469" y="89" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="EndEvent_15pcuuc_di" bpmnElement="EndEvent_1x6k78c_deactivate">
-        <dc:Bounds x="964" y="327" width="36" height="36" />
+        <dc:Bounds x="1255" y="327" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="928" y="369" width="84" height="27" />
+          <dc:Bounds x="1219" y="369" width="84" height="27" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0ow44q0_di" bpmnElement="SequenceFlow_0ow44q0">
-        <di:waypoint x="735" y="345" />
-        <di:waypoint x="795" y="345" />
+        <di:waypoint x="1026" y="345" />
+        <di:waypoint x="1255" y="345" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="719" y="314" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_0gyej62_di" bpmnElement="Task_023hred_deactivate">
-        <dc:Bounds x="635" y="305" width="100" height="80" />
+        <dc:Bounds x="926" y="305" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_18l3crb_di" bpmnElement="SequenceFlow_18l3crb">
-        <di:waypoint x="105" y="129" />
-        <di:waypoint x="178" y="129" />
+        <di:waypoint x="396" y="129" />
+        <di:waypoint x="469" y="129" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="235.5" y="108" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_14l9mlv_di" bpmnElement="Task_13sx2bp_deactivate">
-        <dc:Bounds x="5" y="89" width="100" height="80" />
+        <dc:Bounds x="296" y="89" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_1kqf4ge_di" bpmnElement="Task_0tezqd4_deactivate">
-        <dc:Bounds x="333" y="305" width="100" height="80" />
+        <dc:Bounds x="624" y="305" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_1emjxm2_di" bpmnElement="ScriptTask_1emjxm2_deactivate">
-        <dc:Bounds x="795" y="305" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_15wux6a_di" bpmnElement="SequenceFlow_15wux6a">
-        <di:waypoint x="895" y="345" />
-        <di:waypoint x="964" y="345" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="930" y="313" width="0" height="14" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1fjtgq7_di" bpmnElement="SequenceFlow_1fjtgq7">
         <di:waypoint x="278" y="129" />
         <di:waypoint x="333" y="129" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1pzm7qx_di" bpmnElement="SequenceFlow_1pzm7qx">
-        <di:waypoint x="433" y="345" />
-        <di:waypoint x="487" y="345" />
+        <di:waypoint x="724" y="345" />
+        <di:waypoint x="778" y="345" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ServiceTask_0k4fp1d_di" bpmnElement="Task_1a6f0p9_deactivate">
-        <dc:Bounds x="487" y="305" width="100" height="80" />
+        <dc:Bounds x="778" y="305" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_13gl3wv_di" bpmnElement="SequenceFlow_13gl3wv">
-        <di:waypoint x="587" y="345" />
-        <di:waypoint x="635" y="345" />
+        <di:waypoint x="878" y="345" />
+        <di:waypoint x="926" y="345" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="CallActivity_0a0txik_di" bpmnElement="CallActivity_0a0txik_DeActivate">
-        <dc:Bounds x="333" y="89" width="100" height="80" />
+        <dc:Bounds x="624" y="89" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0rn8vky_di" bpmnElement="SequenceFlow_0rn8vky">
-        <di:waypoint x="383" y="169" />
-        <di:waypoint x="383" y="305" />
+        <di:waypoint x="674" y="169" />
+        <di:waypoint x="674" y="305" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0nmt8ph_di" bpmnElement="SequenceFlow_0nmt8ph">
-        <di:waypoint x="278" y="129" />
-        <di:waypoint x="333" y="129" />
+        <di:waypoint x="569" y="129" />
+        <di:waypoint x="624" y="129" />
       </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/listeners/MultiStageSkipListener.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/listeners/MultiStageSkipListener.java
index 376a27e..4cde9c1 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/listeners/MultiStageSkipListener.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/listeners/MultiStageSkipListener.java
@@ -22,6 +22,7 @@
 
 import java.util.Collections;
 import java.util.List;
+import java.util.Optional;
 import org.onap.so.bpmn.common.BBConstants;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
 import org.onap.so.bpmn.common.listener.db.PostCompletionRequestsDbListener;
@@ -55,7 +56,7 @@
     @Override
     public boolean shouldRunFor(BuildingBlockExecution execution) {
 
-        return (boolean) execution.getVariable(G_MULTI_STAGE_DESIGN);
+        return (boolean) Optional.ofNullable(execution.getVariable(G_MULTI_STAGE_DESIGN)).orElse(false);
     }
 
     @Override
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/VnfAdapterVfModuleResources.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/VnfAdapterVfModuleResources.java
index 0a825b8..62d6a11 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/VnfAdapterVfModuleResources.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/VnfAdapterVfModuleResources.java
@@ -39,12 +39,33 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+/**
+ * This class is used for creating and deleting the request for VfModule.
+ *
+ */
 @Component
 public class VnfAdapterVfModuleResources {
 
     @Autowired
     private VnfAdapterVfModuleObjectMapper vnfAdapterVfModuleObjectMapper;
 
+    /**
+     * This method is used for creating the request for the VfModule.
+     *
+     * This method take these parameter and call the VnfAdapterVfModuleObjectMapper to create the request.
+     *
+     * @param requestContext
+     * @param cloudRegion
+     * @param orchestrationContext
+     * @param serviceInstance
+     * @param genericVnf
+     * @param vfModule
+     * @param volumeGroup
+     * @param sdncVnfQueryResponse
+     * @param sdncVfModuleQueryResponse
+     * @throws IOException & MissingValueTagException
+     * @return
+     */
     public CreateVfModuleRequest createVfModuleRequest(RequestContext requestContext, CloudRegion cloudRegion,
             OrchestrationContext orchestrationContext, ServiceInstance serviceInstance, GenericVnf genericVnf,
             VfModule vfModule, VolumeGroup volumeGroup, String sdncVnfQueryResponse, String sdncVfModuleQueryResponse)
@@ -54,6 +75,19 @@
                 sdncVfModuleQueryResponse);
     }
 
+    /**
+     * This method is used for delete the request for the VfModule.
+     *
+     * This method take these parameter and call the VnfAdapterVfModuleObjectMapper to delete the request.
+     *
+     * @param requestContext
+     * @param cloudRegion
+     * @param serviceInstance
+     * @param genericVnf
+     * @param vfModule
+     * @throws IOException
+     * @return
+     */
     public DeleteVfModuleRequest deleteVfModuleRequest(RequestContext requestContext, CloudRegion cloudRegion,
             ServiceInstance serviceInstance, GenericVnf genericVnf, VfModule vfModule) throws IOException {
         return vnfAdapterVfModuleObjectMapper.deleteVfModuleRequestMapper(requestContext, cloudRegion, serviceInstance,
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sdnc/mapper/VnfTopologyOperationRequestMapper.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sdnc/mapper/VnfTopologyOperationRequestMapper.java
index bef4ec3..fd0af3a 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sdnc/mapper/VnfTopologyOperationRequestMapper.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sdnc/mapper/VnfTopologyOperationRequestMapper.java
@@ -55,6 +55,22 @@
     @Autowired
     private GeneralTopologyObjectMapper generalTopologyObjectMapper;
 
+    /**
+     * This method is used for creating the vnf request.
+     *
+     * By these parameter it will get he detailas and prepare the request.
+     *
+     * @param svcOperation
+     * @param svcAction
+     * @param requestAction
+     * @param vnf
+     * @param serviceInstance
+     * @param customer
+     * @param cloudRegion
+     * @param requestContext
+     * @param homing
+     * @return request
+     */
     public GenericResourceApiVnfOperationInformation reqMapper(SDNCSvcOperation svcOperation, SDNCSvcAction svcAction,
             GenericResourceApiRequestActionEnumeration requestAction, GenericVnf vnf, ServiceInstance serviceInstance,
             Customer customer, CloudRegion cloudRegion, RequestContext requestContext, boolean homing,
diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/listeners/MultiStageSkipListenerTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/listeners/MultiStageSkipListenerTest.java
index 9e2eac4..82d610f 100644
--- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/listeners/MultiStageSkipListenerTest.java
+++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/listeners/MultiStageSkipListenerTest.java
@@ -77,6 +77,8 @@
         execution.setVariable("multiStageDesign", false);
         assertFalse("should not be triggered", multiStageSkipListener.shouldRunFor(execution));
 
+        execution.setVariable("multiStageDesign", null);
+        assertFalse("should not be triggered", multiStageSkipListener.shouldRunFor(execution));
 
     }
 
diff --git a/docs/Developer_Info.rst b/docs/Developer_Info.rst
deleted file mode 100644
index 46c114f..0000000
--- a/docs/Developer_Info.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. This work is licensed under a Creative Commons Attribution 4.0 International License.
-.. http://creativecommons.org/licenses/by/4.0
-.. Copyright 2018 Huawei Technologies Co., Ltd.
-
-Developer Information
-======================
-
-.. toctree::
-   :maxdepth: 1
-
-   Install_Configure_SO.rst
-   architecture.rst
-
-   
\ No newline at end of file
diff --git a/docs/bak/Developer_Info.rst b/docs/bak/Developer_Info.rst
new file mode 100644
index 0000000..9d9c46c
--- /dev/null
+++ b/docs/bak/Developer_Info.rst
@@ -0,0 +1,14 @@
+\installconfigure.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+.. Copyright 2018 Huawei Technologies Co., Ltd.
+
+Developer Information
+======================
+
+.. toctree::
+   :maxdepth: 1
+
+   ../installconfigure/Install_Configure_SO.rst
+   ../architecture/architecture.rst
+
+   
\ No newline at end of file
diff --git a/docs/installation.rst b/docs/bak/installation.rst
similarity index 100%
rename from docs/installation.rst
rename to docs/bak/installation.rst
diff --git a/docs/developer_info/developer_information.rst b/docs/developer_info/developer_information.rst
index bae1e2e..ac1a15b 100644
--- a/docs/developer_info/developer_information.rst
+++ b/docs/developer_info/developer_information.rst
@@ -13,8 +13,9 @@
    Working_with_SO_Docker.rst
    Camunda_Cockpit_Community_Edition.rst
    Camunda_Cockpit_Enterprise_Edition.rst
+   Camunda_Modeler
+   BPMN_Project_Structure.rst
+   BPMN_Main_Process_Flows.rst
+   BPMN_Subprocess_Process_Flows.rst
+   BPMN_Project_Deployment_Strategy.rst
    FAQs.rst
-.. developer_info_Project_Structure.rst
-.. developer_info_Main_Process_Flows.rst
-.. developer_info_Subprocess_Process_Flows.rst
-.. developer_info_Project_Deployment_Strategy.rst
\ No newline at end of file
diff --git a/docs/installconfigure/Configure_git_and_gerrit.rst b/docs/installconfigure/Configure_git_and_gerrit.rst
index c4598fa..76a4d75 100644
--- a/docs/installconfigure/Configure_git_and_gerrit.rst
+++ b/docs/installconfigure/Configure_git_and_gerrit.rst
@@ -25,14 +25,14 @@
 - Log in
 - Open the menu next to your name (under the green search button)
 
-.. image:: images/Configure_git_1.png
+.. image:: ../images/Configure_git_1.png
 
 - Select "Settings"
 - In the "Settings" sidebar, click "SSH Public Keys"`
 - Click "Add Key..."
 - Paste the entire contents of $HOME/.ssh/id_rsa.pub into the text area and click "Add".
 
-.. image:: images/Configure_git_2.png
+.. image:: ../images/Configure_git_2.png
 
 Install the git-review package.
 
@@ -90,4 +90,4 @@
 
   ssh -p 29418 gerrit.onap.org
 
-.. image:: images/Configure_git_3.png
+.. image:: ../images/Configure_git_3.png
diff --git a/docs/installconfigure/Install_Docker.rst b/docs/installconfigure/Install_Docker.rst
index 91e40ca..d20c2b1 100644
--- a/docs/installconfigure/Install_Docker.rst
+++ b/docs/installconfigure/Install_Docker.rst
@@ -3,7 +3,7 @@
 .. Copyright 2018 Huawei Technologies Co., Ltd.
 
 Install Docker
-===============
+==============
 
 Make sure curl is installed on the Ubuntu VM:
 
@@ -58,7 +58,7 @@
     Restart docker:
 
 .. code-block:: bash
-	
+
         sudo systemctl daemon-reload
         sudo systemctl restart docker
 
@@ -82,4 +82,4 @@
 
     docker run hello-world
 	
-.. image:: images/Docker_install_1.png
\ No newline at end of file
+.. image:: ../images/Docker_install_1.png
\ No newline at end of file
diff --git a/readme.md b/readme.md
index 4497434..862ca1e 100644
--- a/readme.md
+++ b/readme.md
@@ -1,79 +1,102 @@
-# ONAP MSO
+# ONAP SO
 
 ----
 ----
 
 # Introduction
 
-ONAP MSO is delivered with **2 Docker containers**, 1 hosting the **database** (MariaDB) and 1 hosting the **JBoss** application server running all ONAP MSO code.
+SO (Service Orchestrator) project is mostly composed of java & groovy code along with camunda BPMN code flow.
 
-Both containers runs on the same machine and can be started with **`docker-compose`**.
+SO consists of following sub-components:
+ - API Handler (*/mso-api-handlers*) set of REST services for incoming requests (northbound clients)
+ - BPMN Execution Engine (*/bpmn*) contains all business logic of service order execution  and interact with AAI, SDNC, requestdb, catalogdb etc. Exposes rest interface for Api Handler
+ - Set of adapters (*/adapters*) adapters that interact with ONAP components (SDNC, VFC, Request DB, Catalog DB) or external components (VNFM, Openstack)
+ - Data Stores: Catalog DB (configuration is here */mso-catalog-db*) to store service and resource models, recipes and workflows
+ - SDC Client and Controller (*/asdc-controller) to receive updated models from SDC and populate Catalog DB
+ - SO Monitoring (*/so-monitoring) service to monitor BPMN workflow execution status
 
-# Compiling MSO
+# Compiling SO
 
-MSO can be compiled with `mvn clean install`. Integration tests are started with the following profile
-`-P with-integration-tests`
+SO can be compiled with `mvn clean install`. By default it executes:
+ - the standard unit tests
+ - the Spring integration tests
+ - javadoc and doclint creation
+ - BUT *does not build the docker images*
 
-**to be edited for rrelease**
-Docker containers are build with the following profile
-`-P docker -Ddocker.buildArg.chef_repo_branch_name=bugfix/external_adress -Ddocker.buildArg.chef_repo_git_username=git -Ddocker.buildArg.chef_repo_address=23.253.149.175/mso -Ddocker.buildArg.chef_repo_git_name=chef-repo`
+Integration tests are started with the following profile `-P with-integration-tests`
+
+You can disable the integration tests by executing: `mvn clean install -DskipTests=true -Dmaven.test.skip=true`
+
+You can disable the javadoc or doclint creation by executing `mvn clean install -Dmaven.javadoc.skip=true -Dadditionalparam=-Xdoclint:none`
+
+# Code Formatting
+
+Your build may fail if you don't follow Code Guidelines. In order to format files run `mvn process-sources -P format`
+
+# Building Docker images
+
+You can build docker images by executing profile "docker": `mvn clean install -P docker`
+
+If you want to build docker images with out executing test and javadoc, then run the below command `mvn clean install -U -DskipTests=true -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Dadditionalparam=-Xdoclint:none -P docker`
 
 # Getting the containers
 
-ONAP MSO containers are stored on [here](https://nexus3.onap.org:10002) for the releases, and [here](https://nexus3.onap.org:10003) for the snapshots
+ONAP SO containers are stored on [here](https://nexus3.onap.org:10002) for the releases, and [here](https://nexus3.onap.org:10003) for the snapshots
 
-The following Docker images are the actual deployment images used for running MSO
+The following Docker images are the actual deployment images used for running SO
 
 | Name            | Tag     | Description                                                                                                                   |
 |-----------------|---------|-------------------------------------------------------------------------------------------------------------------------------|
-| onap/mso   | 1.0.0   | Contains **JBoss** + **OpenJDK** + **MSO** components (BPMN engine and MSO API handlers and adapters)                         |
-| library/mariadb | 10.1.11 | **MariaDB** image from Docker.io, this image hosts the database and is preloaded with MSO schema and configuration at startup |
+| onap/so/api-handler-infra | 1.4.4 | MSO Api handler for SO REST service entry point |
+| onap/so/bpmn-infra | 1.4.4 | BPMN-Infra contains business logic of execution flow |
+| onap/so/catalog-db-adapter | 1.4.4 | CatalogDB to interact with mariaDB catalogdb schema |
+| onap/so/openstack-adapter | 1.4.4 | Adapter to interact with Openstack as a VIM |
+| onap/so/request-db-adapter | 1.4.4 | RequestDB to interact with mariaDB requestdb schema |
+| onap/so/sdc-controller | 1.4.4 | SDC-controller to interact with SDC module |
+| onap/so/sdnc-adapter | 1.4.4 | SDNC Adapter to interacts with SDNC module |
+| onap/so/so-monitoring | 1.4.4 | SO Monitoring for monitoring the SO workflows |
+| onap/so/vfc-adapter | 1.4.4 | Adapter to interact with VFC module |
+| onap/so/vnfm-adapter | 1.4.4 | Adapter to interact with external VNFMs through SOL003 interface |
+| library/mariadb | 10.1.11 | MariaDB image from Docker.io, this image hosts the database and is preloaded with SO schema and configuration at startup |
 
-# Starting MSO
+# Starting SO
 
 ### docker-compose
 
-You can use `docker-compose` to start MSO.
-The file is as the root of the directory.
-See `Getting the containers` to pull the images
+You can use docker-compose to start SO. For running docker-compose, you need to checkout docker-config project.
+
+docker-config code is located in a single git repository named *so/docker-config*
+
+To start SO:
+ - `cd docker-config`
+ - set up DOCKER_HOST env variable with your specific host+port i.e. `export DOCKER_HOST=tcp://127.0.0.1:2375`
+ - run helper script `./deploy.sh` (OR `docker-compose up -d`)
+
+You can also run / restart independent docker, like to run bpmn-infra docker, use command `docker-compose up -d bpmn-infra`
+
+**NOTE**: container *onap/so/vnfm-adapter* is not started via docker-compose script
 
 ### Heat template
 
-A heat template that can be used on RackSpace to spin up the MSO Host VM and run docker-compose is currently being built by the Demo Team.
+A heat template that can be used on RackSpace to spin up the SO Host VM and run docker-compose is currently being built by the Demo Team.
 
-# Accessing MSO
+# Accessing SO
 
-MSO UIs are not really used for operating MSO, but they provide information on what is currently happening and get an insight on the components.
+SO UIs are not really used for operating SO, but they provide information on what is currently happening and get an insight on the components.
 
-### MSO JBoss console
+### Spring Boot Actuator Endpoints
 
-JBoss Wildly provides administrative functions through the application [server console](https://docs.jboss.org/author/display/WFLY10/Admin+Guide#AdminGuide-Accessingthewebconsole].
+Some of SO components (Api Handler, SO monitoring) use Embedded Tomcat from Spring boot to run application. 
+To monitor the app, Actuator endpoint can be used:
 
-Said console can be used to have a look at the status of MSO. It is providing details on deployed artifacts and gives a remote access to the main server log file
+ - /manage/health - Shows application health information
+ - /manage/info - Displays arbitrary application info
 
-The UI can be accessed trough http://containerHostName:9990/
+### SO Camunda Cockpit console
 
-The configuration preloads a default user (admin) with the standard `placeholder` password.
+SO orchestration processes can be monitored with the [Camunda Engine cockpit UI](https://camunda.org/features/cockpit/). It gives an insight about the available processes, allows to trigger them manually and provides monitoring of the currently running processes
 
-The configuration of JBoss should not be touched. But it is possible to look at the two following sections for insights on the MSO health :
-
-![deployments or runtime](http://img11.hostingpics.net/pics/332403image2016112412225.png)
-
-Deployments shows what is deployed and running on the application server, you should see the following once MSO is up and running (Actual names of the War files may differ but their numbers and general format should be the same)
-
-***to be upload when rrelease***
-
-Runtime can be used to have a look a the main server log files, see JVM status and parameters, environment settings etc,...
-
-![runtime monitor](http://img11.hostingpics.net/pics/244948image20161124123216.png)
-
-See the logging section below for more details about other logfiles (EELF framework)
-
-### MSO Camunda Cockpit console
-
-MSO orchestration processes can be monitored with the [Camunda Engine cockpit UI](https://camunda.org/features/cockpit/). It gives an insight about the available processes, allows to trigger them manually and provides monitoring of the currently running processes
-
-**IMPORTANT NOTE** : since ONAP MSO only uses Camunda Community version it is not possible to see history of running process as this is an Enterprise feature only.
+**IMPORTANT NOTE** : since ONAP SO only uses Camunda Community version, which don't show history of running processes - SO-Monitoring component was developed for that purpose.
 
 #### Accessing the Cockpit
 
@@ -86,15 +109,15 @@
 
 ***screenshots to be uploaded when rrelease***
 
-### MSO APIs
+### SO APIs
 
-Most of the MSO features within ONAP MSO are triggered by using **RESTful interfaces**. MSO supports both **HTTP** and **HTTPS**, but is configured on this release with HTTP only using Basic Authentification.
+Most of the SO features within ONAP SO are triggered by using **RESTful interfaces**. SO supports both **HTTP** and **HTTPS**, but is configured on this release with HTTP only using Basic Authentification.
 
-The MSO APIs are configured to accept requests having a **basic auth. header** set with various **username and password** depending on which API is being triggered.
+The SO APIs are configured to accept requests having a **basic auth. header** set with various **username and password** depending on which API is being triggered.
 
-All API endpoints are exposed on port **8080**, it is possible to reach all MSO subsystems directly with the proper query (see more information below on how to test MSO functions)
+All API endpoints are exposed on port **8080**, it is possible to reach all SO subsystems directly with the proper query (see more information below on how to test SO functions)
 
-##### Main API endpoints in the first open source release
+##### Main API endpoints
 
 - ***to be completed*** APIHandler health checks
 - ***to be completed*** VID API
@@ -103,15 +126,15 @@
 
 The typical easy way to trigger these endpoints is to use a RESTful client or automation framework.
 
-# Configuration of MSO
+# Configuration of SO
 
-It is important to understand that the Docker containers are using a configuration file (JSON) in order to provision MSO basic configuration, in the above Jenkins Job, Jenkins pulls that JSON file from the MSO repository, any other mean to provide that JSON file (for specific environments) would also work.
+It is important to understand that the Docker containers are using a configuration file (JSON) in order to provision SO basic configuration, in the above Jenkins Job, Jenkins pulls that JSON file from the SO repository, any other mean to provide that JSON file (for specific environments) would also work.
 
-Once the deployment of the docker images is done, you will need to configure your installation to be able to interact with all the components that MSO needs.
+Once the deployment of the docker images is done, you will need to configure your installation to be able to interact with all the components that SO needs.
 
 Change the environment file located here : **/shared/mso-docker.json** then run the following command `chef-solo -c /var/berks-cookbooks/chef-repo/solo.rb -o recipe[mso-config::apih],recipe[mso-config::bpmn],recipe[mso-config::jra]`
 
-**Important note:** The host mso is mapped automatically to c1.vm1.mso.simpledemo.onap.org in /etc/host of the docker image so you can keep mso:8080 when you want to mention the APIH, JRA or Camunda host.
+**Important note:** The host SO is mapped automatically to c1.vm1.mso.simpledemo.onap.org in /etc/host of the docker image so you can keep mso:8080 when you want to mention the APIH, JRA or Camunda host.
 
 Here are the main parameters you could change:
 
@@ -126,29 +149,22 @@
 
 The credentials are defined in 2 places:
 
-- JBoss users credentials are defined in /opt/jboss/standalone/configuration/application-users.properties and are associated to the corresponding role in application-roles.properties (you should not change this file except if you add a new user)
-- In the environment. Replace the authorisation key in the file /shared/mso-docker.json and run the command to apply the configuration as explained above.
+- In the application.yaml in projects
+- application.yaml can be overriden in two places: in *so/docker-config* repository and directories *so/docker-config/volumes/so/config/so-monitoring/onapheat/override.yaml*
+- In *oom* repository (if intstallation is done via oom)
 
-You can encrypt the JBoss user with the following command `echo -n 'LOGIN:ApplicationRealm:PASSWORD' |openssl dgst -md5` and replace the line corresponding to this user in /opt/jboss/standalone/configuration/application-users.properties
+You can find default users there for specific so component.
+**Note** that these default users should be changed.
 
 You can replace the authentication in the environment by the value returned by the following API `GET on http://c1.vm1.mso.simpledemo.onap.org:8080/asdc/properties/encrypt/{value}/{cryptKey}` where {value} is the string login:password and cryptKey (also defined in the environment) is the key to use to encrypt the credentials
 
-Exemple of credentials you could change:
-- BPELClient: if you change this credentials, you have to change it in JBoss users AND environment file (+ apply the new config) and be careful to set the same password. In the environment it is the parameter "adaptersPoAuth" under the section "mso-bpmn-urn-config". The cryptKey to use is 07a7159d3bf51a0e53be7a8f89699be7
-- BPMNClient: if you change this credentials, you have to change it in JBoss users AND environment file (+ apply the new config) and be careful to set the same password. In the environment it is the parameter "camundaAuth" under the sections "mso-api-handler-config" AND "mso-api-handler-infra-config". The cryptKey to use is
-aa3871669d893c7fb8abbcda31b88b4f
-
 # Logging
 
-### JBoss
-
-MSO log files are located the [JBoss log](https://docs.jboss.org/author/display/WFLY8/Logging+Configuration) folder in the container.
-
 ### EELF
 
-EELF framework is used for **specific logs** (audit, metric and error logs). They are tracking inter component logs (request and response) and allow to follow a complete flow through the MSO subsystem
+EELF framework is used for **specific logs** (audit, metric and error logs). They are tracking inter component logs (request and response) and allow to follow a complete flow through the SO subsystem
 
-EELF logs are located at the following location on the MSO JBoss container :
+Logs are located at the following locations in SO containers :
 
 - /var/log/ecomp/MSO (each module has its own folder)
 
@@ -156,27 +172,20 @@
 
 It can be enabled with a GET on the following APIs:
 - Camunda (no authentication): http://c1.vm1.mso.simpledemo.onap.org:8080/mso/logging/debug
-- APIH Infra (use any jboss user with role InfraPortal-Client for authentication): http://c1.vm1.mso.simpledemo.onap.org:8080/ecomp/mso/infra/logging/debug
+- APIH Infra (use any user with role InfraPortal-Client for authentication): http://c1.vm1.mso.simpledemo.onap.org:8080/ecomp/mso/infra/logging/debug
 - ASDC (no authentication): http://c1.vm1.mso.simpledemo.onap.org:8080/asdc/logging/debug
 - DBAdapter (no authentication): http://c1.vm1.mso.simpledemo.onap.org:8080/dbadapters/logging/debug
 - Network adapter (no authentication): http://c1.vm1.mso.simpledemo.onap.org:8080/networks/rest/logging/debug
-- SDNC adapter (use any jboss user with role MSO-Client for authentication): http://c1.vm1.mso.simpledemo.onap.org:8080/adapters/rest/logging/debug
+- SDNC adapter (use any user with role MSO-Client for authentication): http://c1.vm1.mso.simpledemo.onap.org:8080/adapters/rest/logging/debug
 - VNF adapter (no authentication): http://c1.vm1.mso.simpledemo.onap.org:8080/vnfs/rest/logging/debug
 - Tenant adapter (no authentication): http://c1.vm1.mso.simpledemo.onap.org:8080/tenants/rest/logging/debug
 - APPC adapter (no authentication): http://c1.vm1.mso.simpledemo.onap.org:8080/appc/rest/logging/debug
 
-Default JBoss users:
-- with role CSI-Client: CSIClient/password1$
-- with role CSI-Client: InfraPortalClient/password1$
-- with role CSI-Client: MSOClient/password1$
+# Testing SO Functionalities
 
-Note that these default users should be changed.
+For this first release of SO, the queries to start the various VNFs should come first through API Handler.
 
-# Testing MSO Functionalities
-
-For this first release of MSO, the queries to start the various VNFs should come first through API Handler.
-
-To help with the testing we are providing here a sample [SoapUI](https://www.soapui.org/) project [file](add link when rrealease) with the main queries that VID should send to MSO
+To help with the testing we are providing here a sample [SoapUI](https://www.soapui.org/) project [file](add link when rrealease) with the main queries that VID should send to SO
 
 ### To simulate Loading of Artifacts & models (bypass ASDC)i
 
@@ -184,11 +193,11 @@
 
 Simply use the load ability embedded to run the 'preload SQL' script for vFirewall or vDNS
 
-### Once the HEAT artifacts are loaded into MSO
+### Once the HEAT artifacts are loaded into SO
 
-It is also possible to simulate queries to the PO (platform orchestrator) adapter of MSO (thus bypassing BPMN flows and API handler) to verify MSO interaction with Rackspace and verify the behavior of the Adapter (so that it loads HEAT and connect to Rackspace and instantiate elements)
+It is also possible to simulate queries to the PO (platform orchestrator) adapter of SO (thus bypassing BPMN flows and API handler) to verify SO interaction with Rackspace and verify the behavior of the Adapter (so that it loads HEAT and connect to Rackspace and instantiate elements)
 
-Below is a query used from FireFox RESTClient plugin to trigger MSO adapter directly (replace values accordingly)
+Below is a query used from FireFox RESTClient plugin to trigger SO adapter directly (replace values accordingly)
 
 ```
  POST http://<containername>:8080/vnfs/rest/v1/vnfs/5259ba4a-cf0d-4791-9c60-9117faa5cdea/vf-modules
@@ -201,11 +210,5 @@
 
 # Getting Help
 
-*** to be completed on rrelease ***
-
-mso@lists.onap.org
-
-MSO Javadoc and Maven site
-
-*** to be completed on rrelease ***
+Subscribe and post messages with SO tag in onap-discuss group at https://lists.onap.org/g/onap-discuss
 
