diff --git a/adapters/mso-adapter-utils/src/main/java/org/onap/so/audit/beans/AuditInventory.java b/adapters/mso-adapter-utils/src/main/java/org/onap/so/audit/beans/AuditInventory.java
index 7e612b3..eff32cf 100644
--- a/adapters/mso-adapter-utils/src/main/java/org/onap/so/audit/beans/AuditInventory.java
+++ b/adapters/mso-adapter-utils/src/main/java/org/onap/so/audit/beans/AuditInventory.java
@@ -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.
@@ -25,18 +25,24 @@
 public class AuditInventory implements Serializable {
 
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 4937350343452380760L;
 
+    private String msoRequestId;
+
     private String cloudRegion;
 
     private String cloudOwner;
 
     private String tenantId;
 
+    private String vfModuleId;
+
     private String heatStackName;
 
+    private String genericVnfId;
+
     public String getCloudRegion() {
         return cloudRegion;
     }
@@ -69,6 +75,30 @@
         this.heatStackName = heatStackName;
     }
 
+    public String getGenericVnfId() {
+        return genericVnfId;
+    }
+
+    public void setGenericVnfId(String genericVnfId) {
+        this.genericVnfId = genericVnfId;
+    }
+
+    public String getVfModuleId() {
+        return vfModuleId;
+    }
+
+    public void setVfModuleId(String vfModuleId) {
+        this.vfModuleId = vfModuleId;
+    }
+
+    public String getMsoRequestId() {
+        return msoRequestId;
+    }
+
+    public void setMsoRequestId(String msoRequestId) {
+        this.msoRequestId = msoRequestId;
+    }
+
 
 
 }
diff --git a/adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoHeatEnvironmentEntry.java b/adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoHeatEnvironmentEntry.java
index 723bed1..8cacf85 100644
--- a/adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoHeatEnvironmentEntry.java
+++ b/adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoHeatEnvironmentEntry.java
@@ -58,9 +58,12 @@
                 return;
             byte[] b = this.rawEntry.toString().getBytes();
             MsoYamlEditorWithEnvt yaml = new MsoYamlEditorWithEnvt(b);
-            this.parameters = yaml.getParameterListFromEnvt();
-            // this.resources = yaml.getResourceListFromEnvt();
-            StringBuilder sb = this.getResourceRegistryRawEntry();
+            StringBuilder sb = null;
+            if (yaml != null) {
+                this.parameters = yaml.getParameterListFromEnvt();
+                // this.resources = yaml.getResourceListFromEnvt();
+                sb = this.getResourceRegistryRawEntry();
+            }
             if (sb == null) {
                 this.resourceRegistryEntryRaw = new StringBuilder("");
             } else {
diff --git a/adapters/mso-adapter-utils/src/main/resources/application-local.yaml b/adapters/mso-adapter-utils/src/main/resources/application-local.yaml
deleted file mode 100644
index 5fc2144..0000000
--- a/adapters/mso-adapter-utils/src/main/resources/application-local.yaml
+++ /dev/null
@@ -1,64 +0,0 @@
-# will be used as entry in DB to say SITE OFF/ON for healthcheck
-# MSO Properties go here
-mso:
-  catalog:
-    db:
-      spring:
-        endpoint: "http://localhost:8080"
-  db:
-    auth: Basic YnBlbDptc28tZGItMTUwNyE=
-cloud_config:
-  identity_services:
-    MT_KEYSTONE:
-      identity_url: "http://localhost:5000/v2.0"
-      mso_id: "john"
-      mso_pass: "313DECE408AF7759D442D7B06DD9A6AA"
-      admin_tenant: "admin"
-      member_role: "_member_"
-      tenant_metadata: false
-      identity_server_type: "KEYSTONE"
-      identity_authentication_type: "USERNAME_PASSWORD"
-    DAN_KEYSTONE:
-      identity_url: "http://192.168.170.21:5000/v2.0"
-      mso_id: "jc1348"
-      mso_pass: "313DECE408AF7759D442D7B06DD9A6AA"
-      admin_tenant: "service"
-      member_role: "_member_"
-      tenant_metadata: false
-      identity_server_type: "KEYSTONE"
-      identity_authentication_type: "USERNAME_PASSWORD"
-  cloud_sites:
-    regionOne:
-      region_id: "regionOne"
-      clli: "MT2"
-      aic_version: "2.5"
-      identity_service_id: "MT_KEYSTONE"
-    DAN:
-      region_id: "RegionOne"
-      clli: "MT"
-      aic_version: "2.5"
-      identity_service_id: "DAN_KEYSTONE"
-    DEFAULT:
-      region_id: ""
-      clli: "MTN6"
-      aic_version: "3.0"
-      identity_service_id: "ORDM3"
-adapters:
-  po:
-    retryCodes: "504"
-    retryDelay: "5"
-    retryCount: "3"
-  tenant:
-    tenant_description: "ECOMP Tenant"
-    region_type: "single"
-    user_role: "admin"
-    success_status_string: "Success"
-    no_regions_status_string: "no regions"
-    orm_request_path: "/v1/orm/customers/"
-    x_aic_orm_client_string: "ECOMP-MSO"
-    keystone_url_version: "/v2.0"
-    keystone_reg_ex: "/[vV][0-9]"
-    orm_url_replace_this: "8080"
-    orm_url_replace_with_this: "7080"
-    quota_value: "10"
-    set_default_quota: "false"
diff --git a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryGroups.java b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryGroups.java
index facdd2f..ed2526f 100644
--- a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryGroups.java
+++ b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryGroups.java
@@ -3,6 +3,8 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2019 Huawei Intellectual Property. All rights reserved.
+ *
+ * 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.
@@ -21,7 +23,6 @@
 package org.onap.so.adapters.catalogdb.catalogrest;
 
 import org.onap.so.db.catalog.beans.InstanceGroup;
-import org.onap.so.db.catalog.beans.VFCInstanceGroup;
 import org.onap.so.db.catalog.beans.VnfcInstanceGroupCustomization;
 import javax.xml.bind.annotation.XmlRootElement;
 import java.util.ArrayList;
diff --git a/adapters/mso-catalog-db-adapter/src/main/resources/application-local.yaml b/adapters/mso-catalog-db-adapter/src/main/resources/application-local.yaml
deleted file mode 100644
index d7c13ea..0000000
--- a/adapters/mso-catalog-db-adapter/src/main/resources/application-local.yaml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-catalog:
-  db:
-    endpoint: http://localhost:8090
-
-ssl-enable: false 
-mso:
-  site-name: localDevEnv
-  logPath: logs
-  catalog:
-    db:
-      spring:
-        endpoint: http://localhost:8090
-  db:
-    auth: Basic YnBlbDptc28tZGItMTUwNyE=
-spring:
-  security:
-    usercredentials:
-    -  
-      username: test
-      password: '$2a$12$Zi3AuYcZoZO/gBQyUtST2.F5N6HqcTtaNci2Et.ufsQhski56srIu'
-      role: BPEL-Client
-    -
-      username: bpel
-      password: '$2a$12$1xyutEZNfjGewIZRfKaE8eZE99f5sYFUmmM80BobI65KNjmcK0JuO'
-      role: BPEL-Client
-    -  
-      username: mso_admin
-      password: '$2a$12$tidKuu.h88E2nuL95pTVY.ZOYMN/1dp29A9b1o.0GFDsVVSYlMkHa'
-      role: ACTUATOR  
-  
-server:
-    port: 8090
-
-
diff --git a/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/R__WorkflowDesignerData.sql b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/R__WorkflowDesignerData.sql
index 3f76334..137f73c 100644
--- a/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/R__WorkflowDesignerData.sql
+++ b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/R__WorkflowDesignerData.sql
@@ -201,5 +201,5 @@
 INSERT INTO `workflow` (`ARTIFACT_UUID`,`ARTIFACT_NAME`,`NAME`,`OPERATION_NAME`,`VERSION`,`DESCRIPTION`,`RESOURCE_TARGET`,`SOURCE`)
 VALUES
 ('9d45cd30-1a89-4993-87c1-6dd09c1696cf','VFModule-ScaleOut','VNF Scale Out','ScaleOut',1.0,'native static workflow to support ScaleOut','vfModule','native'),
-('da6478e4-ea33-3346-ac12-ab121284a333','VnfInPlaceUpdate.bpmn','VNF In Place Software Update','inPlaceSoftwareUpdate',1.0,'native static workflow to support inPlaceSoftwareUpdate','vnf','native'),
-('fdb3ac48-70f9-4584-bd92-253bdbdec1e1','VnfConfigUpdate.bpmn','VNF Config Update','applyConfigModify',1.0,'native static workflow to support applyConfigModify','vnf','native');
\ No newline at end of file
+('da6478e4-ea33-3346-ac12-ab121284a333','VnfInPlaceUpdate.bpmn','VnfInPlaceUpdate','inPlaceSoftwareUpdate',1.0,'native static workflow to support inPlaceSoftwareUpdate','vnf','native'),
+('fdb3ac48-70f9-4584-bd92-253bdbdec1e1','VnfConfigUpdate.bpmn','VnfConfigUpdate','applyConfigModify',1.0,'native static workflow to support applyConfigModify','vnf','native');
diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AbstractAuditService.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AbstractAuditService.java
index 5060e55..8edce12 100644
--- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AbstractAuditService.java
+++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AbstractAuditService.java
@@ -43,6 +43,8 @@
     protected static final String UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI =
             "Unable to find all VServers and L-Interaces in A&AI";
 
+    protected static final String UNABLE_TO_FIND_V_SERVERS_IN_OPENSTACK = "Unable to find VServers in Openstack";
+
     @Autowired
     public Environment env;
 
@@ -68,12 +70,12 @@
      * @param auditList
      * @return
      */
-    protected boolean didDeleteAuditFail(Optional<AAIObjectAuditList> auditList) {
-        if (auditList.get().getAuditList() != null && !auditList.get().getAuditList().isEmpty()) {
+    protected boolean didDeleteAuditFail(AAIObjectAuditList auditList) {
+        if (auditList.getAuditList() != null && !auditList.getAuditList().isEmpty()) {
             if (logger.isInfoEnabled()) {
-                logger.info("Audit Results: {}", auditList.get().toString());
+                logger.info("Audit Results: {}", auditList.toString());
             }
-            return auditList.get().getAuditList().stream().filter(AAIObjectAudit::isDoesObjectExist).findFirst()
+            return auditList.getAuditList().stream().filter(AAIObjectAudit::isDoesObjectExist).findFirst()
                     .map(v -> true).orElse(false);
         } else {
             return false;
@@ -85,9 +87,12 @@
     }
 
     protected void setupMDC(ExternalTask externalTask) {
+        logger.info(ONAPLogConstants.Markers.ENTRY, "Entering");
         String msoRequestId = externalTask.getVariable("mso-request-id");
-        if (msoRequestId != null && !msoRequestId.isEmpty())
+        if (msoRequestId != null && !msoRequestId.isEmpty()) {
             MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, msoRequestId);
+        }
+        MDC.put(ONAPLogConstants.MDCs.SERVICE_NAME, externalTask.getTopicName());
     }
 
     protected long calculateRetryDelay(int currentRetries) {
diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditCreateStackService.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditCreateStackService.java
index 7722991..1e5b6de 100644
--- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditCreateStackService.java
+++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditCreateStackService.java
@@ -27,6 +27,7 @@
 import java.util.Optional;
 import org.camunda.bpm.client.task.ExternalTask;
 import org.camunda.bpm.client.task.ExternalTaskService;
+import org.onap.logging.ref.slf4j.ONAPLogConstants;
 import org.onap.so.audit.beans.AuditInventory;
 import org.onap.so.client.graphinventory.GraphInventoryCommonObjectMapperProvider;
 import org.onap.so.objects.audit.AAIObjectAuditList;
@@ -48,9 +49,9 @@
     public Environment environment;
 
     protected void executeExternalTask(ExternalTask externalTask, ExternalTaskService externalTaskService) {
+        setupMDC(externalTask);
         AuditInventory auditInventory = externalTask.getVariable("auditInventory");
         Map<String, Object> variables = new HashMap<>();
-        setupMDC(externalTask);
         boolean success = false;
         try {
             logger.info("Executing External Task Audit Inventory, Retry Number: {} \n {}", auditInventory,
@@ -71,6 +72,7 @@
         if (success) {
             externalTaskService.complete(externalTask, variables);
             logger.debug("The External Task Id: {}  Successful", externalTask.getId());
+            logger.info(ONAPLogConstants.Markers.EXIT, "Exiting");
         } else {
             if (externalTask.getRetries() == null) {
                 logger.debug("The External Task Id: {}  Failed, Setting Retries to Default Start Value: {}",
@@ -80,6 +82,7 @@
             } else if (externalTask.getRetries() != null && externalTask.getRetries() - 1 == 0) {
                 logger.debug("The External Task Id: {}  Failed, All Retries Exhausted", externalTask.getId());
                 externalTaskService.complete(externalTask, variables);
+                logger.info(ONAPLogConstants.Markers.EXIT, "Exiting");
             } else {
                 logger.debug("The External Task Id: {}  Failed, Decrementing Retries: {} , Retry Delay: ",
                         externalTask.getId(), externalTask.getRetries() - 1,
diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditDataService.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditDataService.java
new file mode 100644
index 0000000..1c707fe
--- /dev/null
+++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditDataService.java
@@ -0,0 +1,77 @@
+package org.onap.so.adapters.audit;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Optional;
+import org.onap.so.audit.beans.AuditInventory;
+import org.onap.so.client.graphinventory.GraphInventoryCommonObjectMapperProvider;
+import org.onap.so.db.request.beans.RequestProcessingData;
+import org.onap.so.db.request.client.RequestsDbClient;
+import org.onap.so.objects.audit.AAIObjectAuditList;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+
+@Component
+public class AuditDataService {
+
+    @Autowired
+    private RequestsDbClient requestsDbClient;
+
+    /**
+     * Checks to see if an entry already exist for the given heat stack and writes audit stack data to the request
+     * database if it doesn't.
+     *
+     * @throws JsonProcessingException
+     */
+    public void writeStackDataToRequestDb(AuditInventory auditInventory, AAIObjectAuditList auditList)
+            throws JsonProcessingException {
+        List<RequestProcessingData> requestProcessingDataList =
+                requestsDbClient.getRequestProcessingDataByGroupingIdAndNameAndTag(auditInventory.getVfModuleId(),
+                        auditInventory.getHeatStackName(), "AuditStackData");
+        if (requestProcessingDataList.isEmpty()) {
+            GraphInventoryCommonObjectMapperProvider objectMapper = new GraphInventoryCommonObjectMapperProvider();
+            String auditListString = objectMapper.getMapper().writeValueAsString(auditList);;
+
+            RequestProcessingData requestProcessingData = new RequestProcessingData();
+            requestProcessingData.setSoRequestId(auditInventory.getMsoRequestId());
+            requestProcessingData.setGroupingId(auditInventory.getVfModuleId());
+            requestProcessingData.setName(auditInventory.getHeatStackName());
+            requestProcessingData.setTag("AuditStackData");
+            requestProcessingData.setValue(auditListString);
+
+            requestsDbClient.saveRequestProcessingData(requestProcessingData);
+        }
+    }
+
+    /**
+     * Retrieves audit stack data from the request database.
+     *
+     * @throws IOException
+     * @throws JsonMappingException
+     * @throws JsonParseException
+     */
+    public Optional<AAIObjectAuditList> getStackDataFromRequestDb(AuditInventory auditInventory)
+            throws JsonParseException, JsonMappingException, IOException {
+
+        List<RequestProcessingData> requestProcessingDataList =
+                requestsDbClient.getRequestProcessingDataByGroupingIdAndNameAndTag(auditInventory.getVfModuleId(),
+                        auditInventory.getHeatStackName(), "AuditStackData");
+        if (!requestProcessingDataList.isEmpty()) {
+            RequestProcessingData requestProcessingData = requestProcessingDataList.get(0);
+            String auditListString = requestProcessingData.getValue();
+
+            GraphInventoryCommonObjectMapperProvider objectMapper = new GraphInventoryCommonObjectMapperProvider();
+            AAIObjectAuditList auditList =
+                    objectMapper.getMapper().readValue(auditListString, AAIObjectAuditList.class);
+
+            return Optional.of(auditList);
+        } else {
+            return Optional.empty();
+        }
+    }
+
+
+}
diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditDeleteStackService.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditDeleteStackService.java
index 9b245ba..0aa4f9b 100644
--- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditDeleteStackService.java
+++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditDeleteStackService.java
@@ -25,6 +25,7 @@
 import java.util.Optional;
 import org.camunda.bpm.client.task.ExternalTask;
 import org.camunda.bpm.client.task.ExternalTaskService;
+import org.onap.logging.ref.slf4j.ONAPLogConstants;
 import org.onap.so.audit.beans.AuditInventory;
 import org.onap.so.client.graphinventory.GraphInventoryCommonObjectMapperProvider;
 import org.onap.so.objects.audit.AAIObjectAuditList;
@@ -40,28 +41,38 @@
     private static final Logger logger = LoggerFactory.getLogger(AuditDeleteStackService.class);
 
     @Autowired
-    public HeatStackAudit heatStackAudit;
+    protected HeatStackAudit heatStackAudit;
 
     @Autowired
-    public Environment environment;
+    protected AuditVServer auditVservers;
+
+    @Autowired
+    protected AuditDataService auditDataService;
+
+    @Autowired
+    protected Environment env;
 
     protected void executeExternalTask(ExternalTask externalTask, ExternalTaskService externalTaskService) {
+        setupMDC(externalTask);
         AuditInventory auditInventory = externalTask.getVariable("auditInventory");
         Map<String, Object> variables = new HashMap<>();
-        setupMDC(externalTask);
         boolean success = false;
         try {
-            logger.info("Executing External Task Audit Inventory, Retry Number: {} \n {}", auditInventory,
-                    externalTask.getRetries());
-            Optional<AAIObjectAuditList> auditListOpt = heatStackAudit.auditHeatStack(auditInventory.getCloudRegion(),
-                    auditInventory.getCloudOwner(), auditInventory.getTenantId(), auditInventory.getHeatStackName());
+            logger.info("Executing External Task Delete Audit Inventory. Retry Number: {}", externalTask.getRetries());
+            Optional<AAIObjectAuditList> auditListOpt = auditDataService.getStackDataFromRequestDb(auditInventory);
             if (auditListOpt.isPresent()) {
-                auditListOpt.get().setAuditType("delete");
-                auditListOpt.get().setHeatStackName(auditInventory.getHeatStackName());
-                GraphInventoryCommonObjectMapperProvider objectMapper = new GraphInventoryCommonObjectMapperProvider();
-                variables.put("auditInventoryResult", objectMapper.getMapper().writeValueAsString(auditListOpt.get()));
-                success = !didDeleteAuditFail(auditListOpt);
+                auditVservers.auditVservers(auditListOpt.get());
+            } else {
+                logger.debug("Auditing Vservers based on vf module relationships");
+                auditListOpt = auditVservers.auditVserversThroughRelationships(auditInventory.getGenericVnfId(),
+                        auditInventory.getHeatStackName());
             }
+            auditListOpt.get().setHeatStackName(auditInventory.getHeatStackName());
+            auditListOpt.get().setAuditType("delete");
+            GraphInventoryCommonObjectMapperProvider objectMapper = new GraphInventoryCommonObjectMapperProvider();
+            variables.put("auditInventoryResult", objectMapper.getMapper().writeValueAsString(auditListOpt.get()));
+            success = !didDeleteAuditFail(auditListOpt.get());
+
         } catch (Exception e) {
             logger.error("Error during audit of stack", e);
         }
@@ -69,6 +80,7 @@
         if (success) {
             externalTaskService.complete(externalTask, variables);
             logger.debug("The External Task Id: {}  Successful", externalTask.getId());
+            logger.info(ONAPLogConstants.Markers.EXIT, "Exiting");
         } else {
             if (externalTask.getRetries() == null) {
                 logger.debug("The External Task Id: {}  Failed, Setting Retries to Default Start Value: {}",
@@ -78,6 +90,7 @@
             } else if (externalTask.getRetries() != null && externalTask.getRetries() - 1 == 0) {
                 logger.debug("The External Task Id: {}  Failed, All Retries Exhausted", externalTask.getId());
                 externalTaskService.complete(externalTask, variables);
+                logger.info(ONAPLogConstants.Markers.EXIT, "Exiting");
             } else {
                 logger.debug("The External Task Id: {}  Failed, Decrementing Retries: {} , Retry Delay: ",
                         externalTask.getId(), externalTask.getRetries() - 1,
diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditQueryStackService.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditQueryStackService.java
new file mode 100644
index 0000000..2ef7d5b
--- /dev/null
+++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditQueryStackService.java
@@ -0,0 +1,71 @@
+package org.onap.so.adapters.audit;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+import org.camunda.bpm.client.task.ExternalTask;
+import org.camunda.bpm.client.task.ExternalTaskService;
+import org.onap.logging.ref.slf4j.ONAPLogConstants;
+import org.onap.so.audit.beans.AuditInventory;
+import org.onap.so.objects.audit.AAIObjectAuditList;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class AuditQueryStackService extends AbstractAuditService {
+
+    private static final Logger logger = LoggerFactory.getLogger(AuditQueryStackService.class);
+
+    @Autowired
+    protected HeatStackAudit heatStackAudit;
+
+    @Autowired
+    protected AuditDataService auditDataService;
+
+    protected void executeExternalTask(ExternalTask externalTask, ExternalTaskService externalTaskService) {
+        setupMDC(externalTask);
+        AuditInventory auditInventory = externalTask.getVariable("auditInventory");
+        boolean success = false;
+        Map<String, Object> variables = new HashMap<>();
+        try {
+            logger.info("Executing External Task Query Audit Inventory. Audit Inventory: {} \n Retry Number: {}",
+                    auditInventory.toString(), externalTask.getRetries());
+
+            Optional<AAIObjectAuditList> auditList = heatStackAudit.queryHeatStack(auditInventory.getCloudOwner(),
+                    auditInventory.getCloudRegion(), auditInventory.getTenantId(), auditInventory.getHeatStackName());
+
+            if (auditList.isPresent()) {
+                success = true;
+                auditDataService.writeStackDataToRequestDb(auditInventory, auditList.get());
+            }
+            if (success) {
+                externalTaskService.complete(externalTask, variables);
+                logger.debug("The External Task {}  was Successful", externalTask.getId());
+                logger.info(ONAPLogConstants.Markers.EXIT, "Exiting");
+            } else {
+                if (externalTask.getRetries() == null) {
+                    logger.debug("The External Task {} Failed. Setting Retries to Default Start Value: {}",
+                            externalTask.getId(), getRetrySequence().length);
+                    externalTaskService.handleFailure(externalTask, UNABLE_TO_FIND_V_SERVERS_IN_OPENSTACK,
+                            UNABLE_TO_FIND_V_SERVERS_IN_OPENSTACK, getRetrySequence().length, 10000);
+                } else if (externalTask.getRetries() != null && externalTask.getRetries() - 1 == 0) {
+                    logger.debug("The External Task {} Failed. All Retries Exhausted", externalTask.getId());
+                    externalTaskService.complete(externalTask, variables);
+                    logger.info(ONAPLogConstants.Markers.EXIT, "Exiting");
+                } else {
+                    logger.debug("The External Task {} Failed. Decrementing Retries to {} , Retry Delay: ",
+                            externalTask.getId(), externalTask.getRetries() - 1,
+                            calculateRetryDelay(externalTask.getRetries()));
+                    externalTaskService.handleFailure(externalTask, UNABLE_TO_FIND_V_SERVERS_IN_OPENSTACK,
+                            UNABLE_TO_FIND_V_SERVERS_IN_OPENSTACK, externalTask.getRetries() - 1,
+                            calculateRetryDelay(externalTask.getRetries()));
+                }
+                logger.debug("The External Task {} Failed", externalTask.getId());
+            }
+        } catch (Exception e) {
+            logger.error("Error during audit query of stack", e);
+        }
+    }
+}
diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditStackService.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditStackService.java
index 576acb1..999d273 100644
--- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditStackService.java
+++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditStackService.java
@@ -49,6 +49,9 @@
     @Autowired
     private AuditDeleteStackService auditDeleteStack;
 
+    @Autowired
+    private AuditQueryStackService auditQueryStack;
+
     @PostConstruct
     public void auditAddAAIInventory() throws Exception {
         for (int i = 0; i < getMaxClients(); i++) {
@@ -69,6 +72,16 @@
         }
     }
 
+    @PostConstruct
+    public void auditQueryInventory() throws Exception {
+        for (int i = 0; i < getMaxClients(); i++) {
+            ExternalTaskClient client = createExternalTaskClient();
+            client.subscribe("InventoryQueryAudit")
+                    .lockDuration(Long.parseLong(env.getProperty("mso.audit.lock-time", "60000")))
+                    .handler(auditQueryStack::executeExternalTask).open();
+        }
+    }
+
     protected ExternalTaskClient createExternalTaskClient() throws Exception {
         ClientRequestInterceptor interceptor = createClientRequestInterceptor();
         ExternalTaskClient client = ExternalTaskClient.create()
diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditVServer.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditVServer.java
index e009c0e..89e0320 100644
--- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditVServer.java
+++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditVServer.java
@@ -20,10 +20,12 @@
 
 package org.onap.so.adapters.audit;
 
+import java.util.List;
 import java.util.Optional;
 import java.util.Set;
 import org.onap.aai.domain.yang.LInterface;
 import org.onap.aai.domain.yang.Vserver;
+import org.onap.so.client.aai.AAIObjectPlurals;
 import org.onap.so.client.aai.AAIObjectType;
 import org.onap.so.client.aai.entities.uri.AAIResourceUri;
 import org.onap.so.client.aai.entities.uri.AAIUriFactory;
@@ -40,6 +42,38 @@
 public class AuditVServer extends AbstractAudit {
     private static final Logger logger = LoggerFactory.getLogger(AuditVServer.class);
 
+    public void auditVservers(AAIObjectAuditList aaiObjectAuditList) {
+
+        aaiObjectAuditList.getAuditList().forEach(aaiObjectAudit -> {
+            boolean vserverExist = getAaiClient().exists(AAIUriFactory
+                    .createResourceFromExistingURI(AAIObjectType.VSERVER, aaiObjectAudit.getResourceURI()));
+            aaiObjectAudit.setDoesObjectExist(vserverExist);
+        });
+    }
+
+    public Optional<AAIObjectAuditList> auditVserversThroughRelationships(String genericVnfId, String vfModuleName) {
+        AAIObjectAuditList auditList = new AAIObjectAuditList();
+        AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.VF_MODULE, genericVnfId)
+                .queryParam("vf-module-name", vfModuleName);
+        if (getAaiClient().get(uri).getRelationships().isPresent()) {
+            List<AAIResourceUri> relatedVservers =
+                    getAaiClient().get(uri).getRelationships().get().getRelatedUris(AAIObjectType.VSERVER);
+            if (!relatedVservers.isEmpty()) {
+                relatedVservers.forEach(vserverUri -> {
+                    Optional<Vserver> vserver = getAaiClient().get(vserverUri).asBean(Vserver.class);
+                    Vserver vServerShallow = new Vserver();
+                    BeanUtils.copyProperties(vserver, vServerShallow);
+                    AAIObjectAudit vServerAudit = new AAIObjectAudit();
+                    vServerAudit.setAaiObject(vServerShallow);
+                    vServerAudit.setAaiObjectType(AAIObjectType.VSERVER.typeName());
+                    vServerAudit.setDoesObjectExist(true);
+                    auditList.getAuditList().add(vServerAudit);
+                });
+            }
+        }
+        return Optional.of(auditList);
+    }
+
     public Optional<AAIObjectAuditList> auditVservers(Set<Vserver> vServersToAudit, String tenantId, String cloudOwner,
             String cloudRegion) {
         if (vServersToAudit == null || vServersToAudit.isEmpty()) {
diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/HeatStackAudit.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/HeatStackAudit.java
index 2be87ff..06fff19 100644
--- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/HeatStackAudit.java
+++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/HeatStackAudit.java
@@ -35,11 +35,16 @@
 import org.onap.aai.domain.yang.Vlan;
 import org.onap.aai.domain.yang.Vlans;
 import org.onap.aai.domain.yang.Vserver;
+import org.onap.so.client.aai.AAIObjectType;
+import org.onap.so.client.aai.entities.uri.AAIResourceUri;
+import org.onap.so.client.aai.entities.uri.AAIUriFactory;
+import org.onap.so.objects.audit.AAIObjectAudit;
 import org.onap.so.objects.audit.AAIObjectAuditList;
 import org.onap.so.openstack.utils.MsoHeatUtils;
 import org.onap.so.openstack.utils.MsoNeutronUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import com.woorea.openstack.heat.model.Link;
@@ -66,6 +71,28 @@
     @Autowired
     protected AuditVServer auditVservers;
 
+    public Optional<AAIObjectAuditList> queryHeatStack(String cloudOwner, String cloudRegion, String tenantId,
+            String heatStackName) {
+        try {
+            logger.debug("Fetching Top Level Stack Information");
+            Resources resources = heat.queryStackResources(cloudRegion, tenantId, heatStackName, 3);
+            List<Resource> novaResources = resources.getList().stream()
+                    .filter(p -> "OS::Nova::Server".equals(p.getType())).collect(Collectors.toList());
+            if (novaResources.isEmpty())
+                return Optional.of(new AAIObjectAuditList());
+            else {
+                Set<Vserver> vserversToAudit = createVserverSet(novaResources);
+                AAIObjectAuditList aaiObjectAuditList = new AAIObjectAuditList();
+                vserversToAudit.stream().forEach(vServer -> aaiObjectAuditList.getAuditList()
+                        .add(createAAIObjectAudit(cloudOwner, cloudRegion, tenantId, vServer)));
+                return Optional.of(aaiObjectAuditList);
+            }
+        } catch (Exception e) {
+            logger.error("Error during query stack resources", e);
+            return Optional.of(new AAIObjectAuditList());
+        }
+    }
+
     public Optional<AAIObjectAuditList> auditHeatStack(String cloudRegion, String cloudOwner, String tenantId,
             String heatStackName) {
         try {
@@ -215,6 +242,31 @@
         return vserversToAudit;
     }
 
+    protected Set<Vserver> createVserverSet(List<Resource> novaResources) {
+        Set<Vserver> vserversToAudit = new HashSet<>();
+        for (Resource novaResource : novaResources) {
+            Vserver auditVserver = new Vserver();
+            auditVserver.setLInterfaces(new LInterfaces());
+            auditVserver.setVserverId(novaResource.getPhysicalResourceId());
+            vserversToAudit.add(auditVserver);
+        }
+        return vserversToAudit;
+    }
+
+    protected AAIObjectAudit createAAIObjectAudit(String cloudOwner, String cloudRegion, String tenantId,
+            Vserver vServer) {
+        AAIObjectAudit aaiObjectAudit = new AAIObjectAudit();
+        Vserver vServerShallow = new Vserver();
+        BeanUtils.copyProperties(vServer, vServerShallow);
+        aaiObjectAudit.setAaiObject(vServerShallow);
+        aaiObjectAudit.setAaiObjectType(AAIObjectType.VSERVER.typeName());
+        aaiObjectAudit.setResourceURI(AAIUriFactory
+                .createResourceUri(AAIObjectType.VSERVER, cloudOwner, cloudRegion, tenantId, vServer.getVserverId())
+                .build());
+
+        return aaiObjectAudit;
+    }
+
     /**
      * @param novaResource Single openstack resource that is of type Nova
      * @param neutronPorts List of Neutron ports created within the stack
diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/inventory/create/CreateInventoryTask.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/inventory/create/CreateInventoryTask.java
index 74cf7c3..a6c6170 100644
--- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/inventory/create/CreateInventoryTask.java
+++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/inventory/create/CreateInventoryTask.java
@@ -3,6 +3,8 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
@@ -39,6 +41,8 @@
 
     private static final Logger logger = LoggerFactory.getLogger(CreateInventoryTask.class);
 
+    private static final String AAI_INVENTORY_FAILURE = "AAIInventoryFailure";
+
     @Autowired
     CreateAAIInventory createInventory;
 
@@ -73,9 +77,10 @@
             if (success) {
                 externalTaskService.complete(externalTask);
                 logger.debug("The External Task Id: {}  Successful", externalTask.getId());
+                logger.info(ONAPLogConstants.Markers.EXIT, "Exiting");
             } else if (inventoryException) {
                 logger.debug("The External Task Id: {}  Failed, Retry not needed", externalTask.getId());
-                externalTaskService.handleBpmnError(externalTask, "AAIInventoryFailure");
+                externalTaskService.handleBpmnError(externalTask, AAI_INVENTORY_FAILURE);
             } else {
                 if (externalTask.getRetries() == null) {
                     logger.debug("The External Task Id: {}  Failed, Setting Retries to Default Start Value: {}",
@@ -84,7 +89,8 @@
                             UNABLE_TO_WRITE_ALL_INVENTORY_TO_A_AI, getRetrySequence().length, 10000);
                 } else if (externalTask.getRetries() != null && externalTask.getRetries() - 1 == 0) {
                     logger.debug("The External Task Id: {}  Failed, All Retries Exhausted", externalTask.getId());
-                    externalTaskService.handleBpmnError(externalTask, "AAIInventoryFailure");
+                    externalTaskService.handleBpmnError(externalTask, AAI_INVENTORY_FAILURE);
+                    logger.info(ONAPLogConstants.Markers.EXIT, "Exiting");
                 } else {
                     logger.debug("The External Task Id: {}  Failed, Decrementing Retries: {} , Retry Delay: ",
                             externalTask.getId(), externalTask.getRetries() - 1,
@@ -97,13 +103,15 @@
             }
         } else {
             logger.debug("The External Task Id: {}  Failed, No Audit Results Written", externalTask.getId());
-            externalTaskService.handleBpmnError(externalTask, "AAIInventoryFailure");
+            externalTaskService.handleBpmnError(externalTask, AAI_INVENTORY_FAILURE);
         }
     }
 
     private void setupMDC(ExternalTask externalTask) {
         try {
-            String msoRequestId = (String) externalTask.getVariable("mso-request-id");
+            logger.info(ONAPLogConstants.Markers.ENTRY, "Entering");
+            MDC.put(ONAPLogConstants.MDCs.SERVICE_NAME, externalTask.getTopicName());
+            String msoRequestId = externalTask.getVariable("mso-request-id");
             if (msoRequestId != null && !msoRequestId.isEmpty())
                 MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, msoRequestId);
         } catch (Exception e) {
diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterImpl.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterImpl.java
index d2c0d9c..d9f47f5 100644
--- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterImpl.java
+++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterImpl.java
@@ -962,7 +962,7 @@
             if (netInfo != null) {
                 // Found. Populate the output elements
                 networkExists.value = Boolean.TRUE;
-                if ("HEAT".equals(mode)) {
+                if ("HEAT".equals(mode) && heatStack != null) {
                     networkId.value = heatStack.getCanonicalName();
                 } else {
                     networkId.value = netInfo.getId();
@@ -1294,15 +1294,23 @@
         // Resource Property
         List<ContrailPolicyRef> prlist = new ArrayList<>();
         int index = 1;
-        for (String pf : pFqdns) {
-            if (!commonUtils.isNullOrEmpty(pf)) {
-                ContrailPolicyRef pr = new ContrailPolicyRef();
-                ContrailPolicyRefSeq refSeq = new ContrailPolicyRefSeq(String.valueOf(index), "0");
-                pr.setSeq(refSeq);
-                index++;
-                logger.debug("Contrail PolicyRefs Data:{}", pr);
-                prlist.add(pr);
+
+        if (pFqdns != null) {
+            for (String pf : pFqdns) {
+                if (!commonUtils.isNullOrEmpty(pf)) {
+                    ContrailPolicyRef pr = new ContrailPolicyRef();
+                    ContrailPolicyRefSeq refSeq = new ContrailPolicyRefSeq(String.valueOf(index), "0");
+                    pr.setSeq(refSeq);
+                    index++;
+                    logger.debug("Contrail PolicyRefs Data:{}", pr);
+                    prlist.add(pr);
+                }
             }
+        } else {
+            String error = "Null pFqdns at start of mergePolicyRefs";
+            logger.error(LoggingAnchor.THREE, MessageEnum.RA_MARSHING_ERROR, ErrorCode.BusinessProcesssError.getValue(),
+                    error);
+            throw new MsoAdapterException(error);
         }
 
         JsonNode node = null;
diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapterImpl.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapterImpl.java
index a141f59..1d73bf2 100644
--- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapterImpl.java
+++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapterImpl.java
@@ -843,8 +843,10 @@
             // Add version check
             // First - see if it's in the VnfResource record
             // if we have a vf Module - then we have to query to get the VnfResource record.
-            if (!oldWay && vf.getVnfResources() != null) {
-                vnfResource = vf.getVnfResources();
+            if (!oldWay) {
+                if (vf != null) {
+                    vnfResource = vf.getVnfResources();
+                }
                 if (vnfResource == null) {
                     logger.debug("Unable to find vnfResource will not error for now...");
                 }
diff --git a/adapters/mso-openstack-adapters/src/main/resources/application-local.yaml b/adapters/mso-openstack-adapters/src/main/resources/application-local.yaml
deleted file mode 100644
index 66d63d4..0000000
--- a/adapters/mso-openstack-adapters/src/main/resources/application-local.yaml
+++ /dev/null
@@ -1,105 +0,0 @@
-# will be used as entry in DB to say SITE OFF/ON for healthcheck
-# MSO Properties go here
-org:
-  onap:
-    so:
-      adapters:
-        default_keystone_url_version: /v2.0
-        default_keystone_reg_ex: "/[vV][0-9]"
-        vnf:
-          bpelauth: 1DDAD7A55A230BB446AA2125053EFB46455F43E48B60155E1C53236E175DFC722A6BE120F6DB390C60034C7564AEB653EA
-          checkRequiredParameters: true
-          addGetFilesOnVolumeReq: false
-          sockettimeout: 30
-          connecttimeout: 30
-          retrycount: 5
-          retryinterval: -15
-          retrylist: 408,429,500,502,503,504,900
-        network:
-          bpelauth: 1DDAD7A55A230BB446AA2125053EFB46455F43E48B60155E1C53236E175DFC722A6BE120F6DB390C60034C7564AEB653EA
-          sockettimeout: 5
-          connecttimeout: 5
-          retrycount: 5
-          retryinterval: -15
-          retrylist: 408,429,500,502,503,504,900
-          encryptionKey: aa3871669d893c7fb8abbcda31b88b4f
-        tenant: 
-          default_x_aic_orm_client_string: ECOMP-MSO
-          default_keystone_url_version: /v2.0
-          default_keystone_reg_ex: "/[vV][0-9]"
-          default_tenant_description: ECOMP Tenant
-          default_region_type: single
-          default_user_role: admin
-          default_success_status_string: Success
-          default_no_regions_status_string: no regions
-          default_orm_request_path: /v1/orm/customers/
-          default_orm_url_replace_this: 8080
-          default_orm_url_replace_with_this: 7080
-          default_quota_value: 10
-          set_default_quota: false
-        po:
-          retryCodes: 504
-          retryDelay: 5
-          retryCount: 3
-          pollTimeout: 7500
-          pollInterval: 15
-      
-server-port: 8080
-ssl-enable: false
-tomcat:
-  max-threads: 50
-mso:
-  msoKey: 07a7159d3bf51a0e53be7a8f89699be7
-  auth: 6B466C603A260F3655DBF91E53CE54667041C01406D10E8CAF9CC24D8FA5388D06F90BFE4C852052B436
-  audit:
-    lock-time: 240000
-  logPath: logs
-  msb-ip: localhost
-  msb-port: ${wiremock.server.port}
-  workflow:
-    endpoint: http://bpmn-infra:8081/sobpmnengine
-    topics:
-      retryMultiplier: 1000
-  config:
-    cadi:
-      aafId: test
-  catalog:
-    db:
-      spring:
-        endpoint: "http://localhost:8080"
-  db:
-    auth: Basic YnBlbDptc28tZGItMTUwNyE=
-  site-name: localDevEnv
-  async:
-    core-pool-size: 50
-    max-pool-size: 50
-    queue-capacity: 500
-
-spring:
-  security:
-    usercredentials:
-    -  
-      username: sdnc
-      password: '$2a$12$mukkC6IvLikKGBdwqGnev.H0ccvV6K13TFeLvyNhJoCuNkRjWhqi6'
-      role: SDNC-Client
-    -  
-      username: sitecontrol
-      password: '$2a$12$VBUF.qBmeK1FNyO2MqTpD.P2M1tvlesZlhCkAjjHvF9hmYNVdMDmu'
-      role: SiteControl-Client 
-    -  
-      username: bpel
-      password: '$2a$12$/GW0/AVAUooTag.7GDc9a.jW7XH3nq/.QsJJJFZJ0N24iXB2W9ksO'
-      role: BPEL-Client        
-    -  
-      username: sniro
-      password: '$2a$12$lbOQWS1iDmdQPxW2Mb6OiuTzGaPUrkrvoKVn2zwpFWb6n5Y86Lf1y'
-      role: SNIRO-Client  
-    -  
-      username: apih
-      password: '$2a$12$e1BGJ7qknMN/b7bqsQvU2OT9iGunt9IlfQclKlCs6n240oHBfcO5y'
-      role: MSO-Client
-    -  
-      username: mso_admin
-      password: '$2a$12$tidKuu.h88E2nuL95pTVY.ZOYMN/1dp29A9b1o.0GFDsVVSYlMkHa'
-      role: ACTUATOR
-
diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/AuditDataServiceTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/AuditDataServiceTest.java
new file mode 100644
index 0000000..d3380a6
--- /dev/null
+++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/AuditDataServiceTest.java
@@ -0,0 +1,101 @@
+package org.onap.so.adapters.audit;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
+import java.util.ArrayList;
+import java.util.List;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.onap.aai.domain.yang.Vserver;
+import org.onap.so.audit.beans.AuditInventory;
+import org.onap.so.client.graphinventory.GraphInventoryCommonObjectMapperProvider;
+import org.onap.so.db.request.beans.RequestProcessingData;
+import org.onap.so.db.request.client.RequestsDbClient;
+import org.onap.so.objects.audit.AAIObjectAudit;
+import org.onap.so.objects.audit.AAIObjectAuditList;
+import com.fasterxml.jackson.core.JsonProcessingException;
+
+@RunWith(MockitoJUnitRunner.Silent.class)
+public class AuditDataServiceTest {
+
+    @InjectMocks
+    AuditDataService auditDataService = new AuditDataService();
+
+    @Mock
+    protected RequestsDbClient requestsDbClient;
+
+    AuditInventory auditInventory = new AuditInventory();
+
+    @Before
+    public void before() throws JsonProcessingException {
+        auditInventory.setCloudOwner("testCloudOwner");
+        auditInventory.setCloudRegion("testLcpCloudRegionId");
+        auditInventory.setHeatStackName("testVfModuleName1");
+        auditInventory.setVfModuleId("testVnfModuleId");
+        auditInventory.setTenantId("testTenantId");
+        auditInventory.setGenericVnfId("testVnfId1");
+    }
+
+    @Test
+    public void testWriteStackDataToRequestDb() throws Exception {
+        Mockito.doReturn(new ArrayList<RequestProcessingData>()).when(requestsDbClient)
+                .getRequestProcessingDataByGroupingIdAndNameAndTag(Mockito.any(), Mockito.any(), Mockito.any());
+        Mockito.doNothing().when(requestsDbClient).saveRequestProcessingData(Mockito.any());
+
+        AAIObjectAuditList auditList = new AAIObjectAuditList();
+        auditList.setHeatStackName("testHeatStackName");
+        AAIObjectAudit audit = new AAIObjectAudit();
+        Vserver vserver = new Vserver();
+        vserver.setVserverId("testVserverId");
+        audit.setAaiObject(vserver);
+        auditList.getAuditList().add(audit);
+
+        GraphInventoryCommonObjectMapperProvider objectMapper = new GraphInventoryCommonObjectMapperProvider();
+        String auditListString = objectMapper.getMapper().writeValueAsString(auditList);;
+
+        RequestProcessingData requestProcessingData = new RequestProcessingData();
+        requestProcessingData.setSoRequestId(auditInventory.getMsoRequestId());
+        requestProcessingData.setGroupingId(auditInventory.getVfModuleId());
+        requestProcessingData.setName(auditInventory.getHeatStackName());
+        requestProcessingData.setTag("AuditStackData");
+        requestProcessingData.setValue(auditListString);
+
+        auditDataService.writeStackDataToRequestDb(auditInventory, auditList);
+        Mockito.verify(requestsDbClient, Mockito.times(1)).saveRequestProcessingData(requestProcessingData);
+    }
+
+    @Test
+    public void testGetStackDataToRequestDb() throws Exception {
+        AAIObjectAuditList auditList = new AAIObjectAuditList();
+        auditList.setHeatStackName("testHeatStackName");
+        AAIObjectAudit audit = new AAIObjectAudit();
+        Vserver vserver = new Vserver();
+        vserver.setVserverId("testVserverId");
+        audit.setAaiObject(vserver);
+        auditList.getAuditList().add(audit);
+        GraphInventoryCommonObjectMapperProvider objectMapper = new GraphInventoryCommonObjectMapperProvider();
+        String auditListString = objectMapper.getMapper().writeValueAsString(audit);
+
+        List<RequestProcessingData> list = new ArrayList();
+        RequestProcessingData requestProcessingData = new RequestProcessingData();
+        requestProcessingData.setId(234321432);
+        requestProcessingData.setGroupingId("testVfModuleId");
+        requestProcessingData.setName("heatStackName");
+        requestProcessingData.setTag("AuditStackData");
+        requestProcessingData.setValue(auditListString);
+        list.add(requestProcessingData);
+
+        Mockito.doReturn(list).when(requestsDbClient).getRequestProcessingDataByGroupingIdAndNameAndTag(Mockito.any(),
+                Mockito.any(), Mockito.any());
+        auditDataService.getStackDataFromRequestDb(auditInventory);
+        Mockito.verify(requestsDbClient, Mockito.times(1)).getRequestProcessingDataByGroupingIdAndNameAndTag(
+                "testVnfModuleId", "testVfModuleName1", "AuditStackData");
+    }
+
+}
diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/AuditStackServiceDataTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/AuditStackServiceDataTest.java
index f23486c..3432e4a 100644
--- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/AuditStackServiceDataTest.java
+++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/AuditStackServiceDataTest.java
@@ -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.
@@ -40,6 +40,7 @@
 import org.onap.so.objects.audit.AAIObjectAuditList;
 import org.springframework.core.env.Environment;
 import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JsonMappingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
@@ -48,6 +49,9 @@
     @InjectMocks
     private AuditCreateStackService auditStackService = new AuditCreateStackService();
 
+    @InjectMocks
+    private AuditQueryStackService auditQueryStackService = new AuditQueryStackService();
+
     @Mock
     private HeatStackAudit heatStackAuditMock;
 
@@ -60,6 +64,9 @@
     @Mock
     private ExternalTaskService mockExternalTaskService;
 
+    @Mock
+    private AuditDataService auditDataService;
+
     private ObjectMapper objectMapper = new ObjectMapper();
 
     private AuditInventory auditInventory = new AuditInventory();
@@ -112,6 +119,20 @@
     }
 
     @Test
+    public void executeExternalTaskQueryAuditTest() throws JsonProcessingException {
+        doReturn(auditListOptSuccess).when(heatStackAuditMock).queryHeatStack("cloudOwner", "cloudRegion", "tenantId",
+                "stackName");
+        Mockito.doNothing().when(auditDataService).writeStackDataToRequestDb(Mockito.any(AuditInventory.class),
+                Mockito.any(AAIObjectAuditList.class));
+        auditQueryStackService.executeExternalTask(mockExternalTask, mockExternalTaskService);
+        ArgumentCaptor<Map> captor = ArgumentCaptor.forClass(Map.class);
+        ArgumentCaptor<ExternalTask> taskCaptor = ArgumentCaptor.forClass(ExternalTask.class);
+        Mockito.verify(mockExternalTaskService).complete(taskCaptor.capture(), captor.capture());
+        Mockito.verify(auditDataService).writeStackDataToRequestDb(Mockito.any(AuditInventory.class),
+                Mockito.any(AAIObjectAuditList.class));
+    }
+
+    @Test
     public void execute_external_task_audit_first_failure_Test() {
         doReturn(auditListOptFailure).when(heatStackAuditMock).auditHeatStack("cloudRegion", "cloudOwner", "tenantId",
                 "stackName");
diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/AuditVServerTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/AuditVServerTest.java
index 2075557..3d9a128 100644
--- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/AuditVServerTest.java
+++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/AuditVServerTest.java
@@ -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,14 +33,19 @@
 import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Stream;
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
+import org.mockito.Mockito;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.onap.aai.domain.yang.LInterface;
 import org.onap.aai.domain.yang.LInterfaces;
+import org.onap.aai.domain.yang.Relationship;
+import org.onap.aai.domain.yang.RelationshipList;
+import org.onap.aai.domain.yang.VfModule;
 import org.onap.aai.domain.yang.Vserver;
 import org.onap.so.client.aai.AAIObjectPlurals;
 import org.onap.so.client.aai.AAIObjectType;
@@ -48,6 +53,7 @@
 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.objects.audit.AAIObjectAudit;
 import org.onap.so.objects.audit.AAIObjectAuditList;
 import org.skyscreamer.jsonassert.JSONAssert;
 import com.fasterxml.jackson.annotation.JsonInclude.Include;
@@ -362,6 +368,69 @@
         JSONAssert.assertEquals(expected, actualString, false);
     }
 
+    @Test
+    public void testAuditVserversWithList() {
+
+        AAIObjectAuditList auditList = new AAIObjectAuditList();
+        AAIObjectAudit obj1 = new AAIObjectAudit();
+        Vserver vserver = new Vserver();
+        vserver.setVserverId("testVserverId");
+        obj1.setAaiObject(vserver);
+        obj1.setResourceURI(AAIUriFactory
+                .createResourceUri(AAIObjectType.VSERVER, cloudOwner, cloudRegion, tenantId, "testVserverId").build());
+        auditList.getAuditList().add(obj1);
+
+        doReturn(false).when(aaiResourcesMock).exists(AAIUriFactory.createResourceUri(AAIObjectType.VSERVER, cloudOwner,
+                cloudRegion, tenantId, "testVserverId"));
+
+        auditNova.auditVservers(auditList);
+
+        Mockito.verify(aaiResourcesMock).exists(AAIUriFactory.createResourceUri(AAIObjectType.VSERVER, cloudOwner,
+                cloudRegion, tenantId, "testVserverId"));
+
+        Assert.assertEquals(false, auditList.getAuditList().get(0).isDoesObjectExist());
+    }
+
+    @Test
+    public void testAuditVserversThroughRelationships() {
+
+        VfModule vfModule = new VfModule();
+        vfModule.setVfModuleId("id");
+
+        AAIResultWrapper wrapper = new AAIResultWrapper(vfModule);
+
+        doReturn(wrapper).when(aaiResourcesMock)
+                .get(AAIUriFactory.createResourceUri(AAIObjectPlurals.VF_MODULE, "genericVnfId")
+                        .queryParam("vf-module-name", "vfModuleName"));
+
+        Optional<AAIObjectAuditList> auditList =
+                auditNova.auditVserversThroughRelationships("genericVnfId", "vfModuleName");
+
+        Assert.assertTrue(auditList.get().getAuditList().isEmpty());
+    }
+
+    @Test
+    public void testAuditVserversThroughRelationships_exists() throws IOException {
+
+        String vfModule = getJson("vfModule.json");
+
+        AAIResultWrapper wrapper = new AAIResultWrapper(vfModule);
+        AAIResultWrapper vserverWrapper = new AAIResultWrapper(new Vserver());
+
+        doReturn(wrapper).when(aaiResourcesMock)
+                .get(AAIUriFactory.createResourceUri(AAIObjectPlurals.VF_MODULE, "genericVnfId")
+                        .queryParam("vf-module-name", "vfModuleName"));
+
+        doReturn(vserverWrapper).when(aaiResourcesMock).get(AAIUriFactory.createResourceUri(AAIObjectType.VSERVER,
+                "cloud-owner", "cloud-region-id", "tenant-id", "VUSCHGA1"));
+
+        Optional<AAIObjectAuditList> auditList =
+                auditNova.auditVserversThroughRelationships("genericVnfId", "vfModuleName");
+
+        Assert.assertFalse(auditList.get().getAuditList().isEmpty());
+    }
+
+
     private String getJson(String filename) throws IOException {
         return new String(Files.readAllBytes(Paths.get("src/test/resources/" + filename)));
     }
diff --git a/adapters/mso-openstack-adapters/src/test/resources/vfModule.json b/adapters/mso-openstack-adapters/src/test/resources/vfModule.json
new file mode 100644
index 0000000..bfdca2c
--- /dev/null
+++ b/adapters/mso-openstack-adapters/src/test/resources/vfModule.json
@@ -0,0 +1,38 @@
+{
+                "vf-module-id": "a62d14f0-421e-4e64-980a-a368722819db",
+                "vf-module-name": "vig30001vm001vig001_migrated.base.module-0",
+                "is-base-vf-module": false,
+                "resource-version": "1494001780539",
+                "relationship-list": {
+                    "relationship": [
+                        {
+                            "related-to": "vserver",
+                            "related-link": "/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/cloud-owner/cloud-region-id/tenants/tenant/tenant-id/vservers/vserver/VUSCHGA1",
+                            "relationship-data": [
+                                {
+                                    "relationship-key": "cloud-region.cloud-owner",
+                                    "relationship-value": "cloud-owner"
+                                },
+                                {
+                                    "relationship-key": "cloud-region.cloud-region-id",
+                                    "relationship-value": "cloud-region-id"
+                                },
+                                {
+                                    "relationship-key": "tenant.tenant-id",
+                                    "relationship-value": "tenant-id"
+                                },
+                                {
+                                    "relationship-key": "vserver.vserver-id",
+                                    "relationship-value": "VUSCHGA1"
+                                }
+                            ],
+                            "related-to-property": [
+                                {
+                                    "property-key": "vserver.vserver-name",
+                                    "property-value": "VUSCHGA1"
+                                }
+                            ]
+                        }
+                    ]
+                }
+            }
diff --git a/adapters/mso-requests-db-adapter/src/main/java/org/onap/so/adapters/requestsdb/RequestDbRepositoryConfiguration.java b/adapters/mso-requests-db-adapter/src/main/java/org/onap/so/adapters/requestsdb/RequestDbRepositoryConfiguration.java
new file mode 100644
index 0000000..c32525a
--- /dev/null
+++ b/adapters/mso-requests-db-adapter/src/main/java/org/onap/so/adapters/requestsdb/RequestDbRepositoryConfiguration.java
@@ -0,0 +1,23 @@
+package org.onap.so.adapters.requestsdb;
+
+import java.util.stream.Collectors;
+import javax.persistence.EntityManager;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
+import org.springframework.data.rest.webmvc.config.RepositoryRestConfigurerAdapter;
+
+@Configuration
+public class RequestDbRepositoryConfiguration extends RepositoryRestConfigurerAdapter {
+
+    @Autowired
+    private EntityManager entityManager;
+
+    @Override
+    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
+        config.exposeIdsFor(entityManager.getMetamodel().getEntities().stream().map(e -> e.getJavaType())
+                .collect(Collectors.toList()).toArray(new Class[0]));
+    }
+
+
+}
diff --git a/adapters/mso-requests-db-adapter/src/main/resources/application-local.yaml b/adapters/mso-requests-db-adapter/src/main/resources/application-local.yaml
deleted file mode 100644
index 5d3a837..0000000
--- a/adapters/mso-requests-db-adapter/src/main/resources/application-local.yaml
+++ /dev/null
@@ -1,51 +0,0 @@
-# will be used as entry in DB to say SITE OFF/ON for healthcheck
-
-server:
-    port: 8090
-    tomcat:
-        max-threads: 50
-ssl-enable: false
-mso:
-  adapters:
-    requestDb:
-      auth: Basic YnBlbDptc28tZGItMTUwNyE=
-      endpoint: http://localhost:8081
-  logPath: logs
-  site-name: localSite
-  infra-requests:
-    archived:
-      period: 180
-spring:
-  datasource:
-    url: jdbc:mariadb://localhost:3306/requestdb
-    username: catalog
-    password: catalog123
-    driver-class-name: org.mariadb.jdbc.Driver
-    initialize: true
-    initialization-mode: never
-  jpa:
-    generate-ddl: false
-    show-sql: false
-    hibernate:
-      ddl-auto: validate
-      naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy
-      enable-lazy-load-no-trans: true
-    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
-  security:
-    usercredentials:
-    -
-      username: bpel
-      password: '$2a$12$1xyutEZNfjGewIZRfKaE8eZE99f5sYFUmmM80BobI65KNjmcK0JuO'
-      role: BPEL-Client
-    -  
-      username: mso_admin
-      password: '$2a$12$tidKuu.h88E2nuL95pTVY.ZOYMN/1dp29A9b1o.0GFDsVVSYlMkHa'
-      role: ACTUATOR
-
-
-flyway:
-  baseline-on-migrate: false
-  url: jdbc:mariadb://localhost:3306/requestdb
-  user: catalog
-  password: catalog123
-      
\ No newline at end of file
diff --git a/adapters/mso-requests-db-adapter/src/main/resources/db/migration/V6.2__Expand_Column_Size_Infra_Active_Requests_Request_Status.sql b/adapters/mso-requests-db-adapter/src/main/resources/db/migration/V6.2__Expand_Column_Size_Infra_Active_Requests_Request_Status.sql
new file mode 100644
index 0000000..427eb0b
--- /dev/null
+++ b/adapters/mso-requests-db-adapter/src/main/resources/db/migration/V6.2__Expand_Column_Size_Infra_Active_Requests_Request_Status.sql
@@ -0,0 +1,3 @@
+use requestdb;
+
+ALTER TABLE infra_active_requests MODIFY COLUMN REQUEST_STATUS varchar(25) NULL;
\ No newline at end of file
diff --git a/adapters/mso-requests-db-adapter/src/main/resources/db/migration/V6.3__Expand_Column_Size_Archived_Infra_Active_Requests_Request_Status.sql b/adapters/mso-requests-db-adapter/src/main/resources/db/migration/V6.3__Expand_Column_Size_Archived_Infra_Active_Requests_Request_Status.sql
new file mode 100644
index 0000000..0780a61
--- /dev/null
+++ b/adapters/mso-requests-db-adapter/src/main/resources/db/migration/V6.3__Expand_Column_Size_Archived_Infra_Active_Requests_Request_Status.sql
@@ -0,0 +1,3 @@
+use requestdb;
+
+ALTER TABLE archived_infra_requests MODIFY COLUMN REQUEST_STATUS varchar(25) NULL;
\ No newline at end of file
diff --git a/adapters/mso-sdnc-adapter/src/main/java/org/onap/so/adapters/sdnc/SDNCAdapterApplication.java b/adapters/mso-sdnc-adapter/src/main/java/org/onap/so/adapters/sdnc/SDNCAdapterApplication.java
index a38d057..5502308 100644
--- a/adapters/mso-sdnc-adapter/src/main/java/org/onap/so/adapters/sdnc/SDNCAdapterApplication.java
+++ b/adapters/mso-sdnc-adapter/src/main/java/org/onap/so/adapters/sdnc/SDNCAdapterApplication.java
@@ -3,6 +3,8 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
@@ -22,11 +24,9 @@
 
 import java.util.concurrent.Executor;
 import org.onap.so.logging.jaxrs.filter.MDCTaskDecorator;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.context.annotation.Bean;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 
diff --git a/adapters/mso-sdnc-adapter/src/main/resources/application-local.yaml b/adapters/mso-sdnc-adapter/src/main/resources/application-local.yaml
deleted file mode 100644
index 4141548..0000000
--- a/adapters/mso-sdnc-adapter/src/main/resources/application-local.yaml
+++ /dev/null
@@ -1,133 +0,0 @@
-management:
-    context-path: /manage
-mso:
-    async:
-        core-pool-size: 50
-        max-pool-size: 50
-        queue-capacity: 500
-    logPath: /app/logs/sdnc
-    catalog:
-      db:
-        spring:
-          endpoint: "http://localhost:8080"
-    db:
-      auth: Basic YnBlbDptc28tZGItMTUwNyE=
-    site-name: local
-org:
-    onap:
-        so:
-            adapters:
-                sdnc:
-                    '.':
-                        put: PUT|60000|sdncurl5|
-                        query: GET|60000|sdncurl2|
-                        restdelete: DELETE|60000|sdncurl5|
-                    '':
-                        contrail-route-topology-operation:
-                            activate: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                            assign: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                            create: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                            deactivate: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                            delete: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                            unassign: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource                      
-                        network-topology-operation:
-                            activate: POST|270000|sdncurl6|sdnc-request-header|org:onap:sdnctl:vnf
-                            assign: POST|270000|sdncurl6|sdnc-request-header|org:onap:sdnctl:vnf
-                            changeassign: POST|270000|sdncurl6|sdnc-request-header|org:onap:sdnctl:vnf
-                            changedelete: POST|270000|sdncurl6|sdnc-request-header|org:onap:sdnctl:vnf
-                            delete: POST|270000|sdncurl6|sdnc-request-header|org:onap:sdnctl:vnf
-                            reserve: POST|270000|sdncurl6|sdnc-request-header|org:onap:sdnctl:vnf
-                            rollback: POST|270000|sdncurl6|sdnc-request-header|org:onap:sdnctl:vnf
-                        security-zone-topology-operation:
-                            activate: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                            assign: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                            create: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                            deactivate: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                            delete: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                            unassign: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource                      
-                        service-topology-operation:
-                            assign: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                            deactivate: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                            delete: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                            rollback: POST|270000|sdncur10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource                       
-                        vnf-topology-operation:
-                            activate: POST|270000|sdncurl6|sdnc-request-header|org:onap:sdnctl:vnf
-                            assign: POST|270000|sdncurl6|sdnc-request-header|org:onap:sdnctl:vnf
-                            changeassign: POST|270000|sdncurl6|sdnc-request-header|org:onap:sdnctl:vnf
-                            changedelete: POST|270000|sdncurl6|sdnc-request-header|org:onap:sdnctl:vnf
-                            delete: POST|270000|sdncurl6|sdnc-request-header|org:onap:sdnctl:vnf
-                            rollback: POST|270000|sdncurl6|sdnc-request-header|org:onap:sdnctl:vnf
-                    bpelauth: BBD450258299BD2FEF7E3EBA3CD2B58AD417355332319856D761654AA876830A9839820D33DE8426A81E5D48649A4BE6FE7021F5
-                    bpelurl: http://localhost:8080/mso/SDNCAdapterCallbackService                    
-                    generic-resource:
-                        network-topology-operation:
-                            activate: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                            assign: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                            deactivate: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                            unassign: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                        vf-module-topology-operation:
-                            activate: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                            assign: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                            changeassign: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                            changedelete: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                            deactivate: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                            delete: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                            rollback: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                            unassign: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                        vnf-topology-operation:
-                            activate: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                            assign: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                            changeassign: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                            changedelete: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                            deactivate: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                            delete: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                            rollback: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                            unassign: POST|270000|sdncurl10|sdnc-request-header|org:onap:sdnc:northbound:generic-resource
-                    infra:
-                        '':
-                            query: GET|60000|sdncurl5|
-                    mobility:
-                        '':
-                            query: GET|60000|sdncurl5|
-                    myurl: http://localhost:8080/adapters/rest/SDNCNotify
-                    rest:
-                        bpelurl: http://localhost:8080/mso/WorkflowMessage
-                    sdncauth: 1C2DC9B30545C5F673B3C33904608E942476F0C969B3CF7A2509459AB83C9062EFAAE89E91D6DB
-                    sdncconnecttime: 5000                
-                    sdncurl10: 'https://localhost:8443/restconf/operations/GENERIC-RESOURCE-API:'                   
-                    sdncurl12: https://localhost:8443/                 
-                    sdncurl5: https://localhost:8443/restconf/config
-                    sdncurl6: 'https://localhost:8443/restconf/operations/VNF-API:'  
-                    vfmodule:
-                        '':
-                            query: GET|60000|sdncurl12|
-                network:
-                  encryptionKey: aa3871669d893c7fb8abbcda31b88b4f
-spring:  
-  security:
-    usercredentials:
-    -  
-      username: sdnc
-      password: '$2a$12$mukkC6IvLikKGBdwqGnev.H0ccvV6K13TFeLvyNhJoCuNkRjWhqi6'
-      role: SDNC-Client
-    -  
-      username: sitecontrol
-      password: '$2a$12$VBUF.qBmeK1FNyO2MqTpD.P2M1tvlesZlhCkAjjHvF9hmYNVdMDmu'
-      role: SiteControl-Client
-    -  
-      username: bpel
-      password: '$2a$12$/GW0/AVAUooTag.7GDc9a.jW7XH3nq/.QsJJJFZJ0N24iXB2W9ksO'
-      role: BPEL-Client
-    -  
-      username: sniro
-      password: '$2a$12$lbOQWS1iDmdQPxW2Mb6OiuTzGaPUrkrvoKVn2zwpFWb6n5Y86Lf1y'
-      role: SNIRO-Client
-    -  
-      username: apih
-      password: '$2a$12$e1BGJ7qknMN/b7bqsQvU2OT9iGunt9IlfQclKlCs6n240oHBfcO5y'
-      role: MSO-Client
-    -  
-      username: mso_admin
-      password: '$2a$12$tidKuu.h88E2nuL95pTVY.ZOYMN/1dp29A9b1o.0GFDsVVSYlMkHa'
-      role: ACTUATOR
-ssl-enable: false
diff --git a/adapters/mso-vfc-adapter/src/main/resources/application-local.yaml b/adapters/mso-vfc-adapter/src/main/resources/application-local.yaml
deleted file mode 100644
index 414dabb..0000000
--- a/adapters/mso-vfc-adapter/src/main/resources/application-local.yaml
+++ /dev/null
@@ -1,34 +0,0 @@
-server:
-    port: 8091
-    tomcat:
-        max-threads: 50
-ssl-enable: false
-mso:
-  logPath: logs
-  site-name: localSite
-spring:
-  datasource:
-    jdbc-url: jdbc:mariadb://localhost:3306/requestdb
-    username: mso
-    password: mso123
-    driver-class-name: org.mariadb.jdbc.Driver
-    initialize: true
-    initialization-mode: never
-  jpa:
-    generate-ddl: false
-    show-sql: false
-    hibernate:
-      ddl-auto: validate
-      naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy
-      enable-lazy-load-no-trans: true
-    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
-  security:
-    usercredentials:
-    -
-      username: bpel
-      password: '$2a$12$1xyutEZNfjGewIZRfKaE8eZE99f5sYFUmmM80BobI65KNjmcK0JuO'
-      role: BPEL-Client
-    -
-      username: mso_admin
-      password: '$2a$12$tidKuu.h88E2nuL95pTVY.ZOYMN/1dp29A9b1o.0GFDsVVSYlMkHa'
-      role: ACTUATOR
diff --git a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/pom.xml b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/pom.xml
index 09c28f9..e2dd64d 100644
--- a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/pom.xml
+++ b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/pom.xml
@@ -58,6 +58,24 @@
         </configuration>
       </plugin>
     </plugins>
+    <resources>
+      <resource>
+        <directory>src/main/resources</directory>
+        <filtering>true</filtering>
+        <excludes>
+          <exclude>**/*.p12</exclude>
+          <exclude>**/*.jks</exclude>
+        </excludes>
+      </resource>
+      <resource>
+        <directory>src/main/resources</directory>
+        <filtering>false</filtering>
+        <includes>
+          <include>**/*.p12</include>
+          <include>**/*.jks</include>
+        </includes>
+      </resource>
+    </resources>
   </build>
   <dependencies>
     <dependency>
diff --git a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/SdcPackageProvider.java b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/SdcPackageProvider.java
index 57d6615..735e1f9 100644
--- a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/SdcPackageProvider.java
+++ b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/SdcPackageProvider.java
@@ -49,6 +49,7 @@
 import java.util.Set;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
+import javax.net.ssl.SSLContext;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.http.HttpEntity;
 import org.apache.http.client.methods.CloseableHttpResponse;
@@ -133,7 +134,7 @@
 
     private byte[] getPackage(final String csarId) {
         final String SERVICE_NAME = "vnfm-adapter";
-        try (CloseableHttpClient client = HttpClients.createDefault()) {
+        try (CloseableHttpClient client = HttpClients.custom().setSSLContext(SSLContext.getDefault()).build()) {
             final HttpGet httpget = new HttpGet(format(GET_PACKAGE_URL, baseUrl, csarId));
             httpget.setHeader(ACCEPT, APPLICATION_OCTET_STREAM_VALUE);
             httpget.setHeader("X-ECOMP-InstanceID", SERVICE_NAME);
diff --git a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/aai/AaiServiceProviderImpl.java b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/aai/AaiServiceProviderImpl.java
index 1fa62ef..019a08a 100644
--- a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/aai/AaiServiceProviderImpl.java
+++ b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/aai/AaiServiceProviderImpl.java
@@ -28,6 +28,7 @@
 import org.onap.aai.domain.yang.Vserver;
 import org.onap.so.client.aai.AAIObjectType;
 import org.onap.so.client.aai.entities.uri.AAIUriFactory;
+import org.onap.so.client.graphinventory.entities.uri.Depth;
 import org.onap.vnfmadapter.v1.model.Tenant;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -58,8 +59,8 @@
     @Override
     public GenericVnfs invokeQueryGenericVnf(final String selfLink) {
         return aaiClientProvider.getAaiClient()
-                .get(GenericVnfs.class, AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNFS)
-                        .queryParam("selflink", selfLink.replaceAll("https", "http")))
+                .get(GenericVnfs.class,
+                        AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNFS).queryParam("selflink", selfLink))
                 .orElseGet(() -> {
                     logger.debug("No vnf found in AAI with selflink: {}", selfLink);
                     return null;
@@ -78,7 +79,8 @@
     @Override
     public EsrVnfm invokeGetVnfm(final String vnfmId) {
         return aaiClientProvider.getAaiClient()
-                .get(EsrVnfm.class, AAIUriFactory.createResourceUri(AAIObjectType.VNFM, vnfmId)).orElseGet(() -> {
+                .get(EsrVnfm.class, AAIUriFactory.createResourceUri(AAIObjectType.VNFM, vnfmId).depth(Depth.ONE))
+                .orElseGet(() -> {
                     logger.debug("VNFM not found in AAI");
                     return null;
                 });
diff --git a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/vnfm/VnfmServiceProviderConfiguration.java b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/vnfm/VnfmServiceProviderConfiguration.java
index 2aee1c0..3342e0d 100644
--- a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/vnfm/VnfmServiceProviderConfiguration.java
+++ b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/vnfm/VnfmServiceProviderConfiguration.java
@@ -22,16 +22,34 @@
 
 import static org.onap.so.client.RestTemplateConfig.CONFIGURABLE_REST_TEMPLATE;
 import com.google.gson.Gson;
+import java.io.IOException;
+import java.security.KeyManagementException;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.CertificateException;
 import java.util.Iterator;
+import java.util.ListIterator;
+import javax.net.ssl.SSLContext;
+import org.apache.http.client.HttpClient;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.ssl.SSLContextBuilder;
 import org.onap.so.adapters.vnfmadapter.extclients.vnfm.lcn.JSON;
 import org.onap.so.configuration.rest.BasicHttpHeadersProvider;
 import org.onap.so.configuration.rest.HttpHeadersProvider;
+import org.onap.so.logging.jaxrs.filter.SpringClientFilter;
 import org.onap.so.rest.service.HttpRestServiceProvider;
 import org.onap.so.rest.service.HttpRestServiceProviderImpl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.Resource;
+import org.springframework.http.client.ClientHttpRequestInterceptor;
+import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
 import org.springframework.http.converter.HttpMessageConverter;
 import org.springframework.http.converter.json.GsonHttpMessageConverter;
 import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
@@ -43,6 +61,13 @@
 @Configuration
 public class VnfmServiceProviderConfiguration {
 
+    private static final Logger logger = LoggerFactory.getLogger(VnfmServiceProviderConfiguration.class);
+
+    @Value("${http.client.ssl.trust-store}")
+    private Resource keyStore;
+    @Value("${http.client.ssl.trust-store-password}")
+    private String keyStorePassword;
+
     @Bean(name = "vnfmServiceProvider")
     public HttpRestServiceProvider httpRestServiceProvider(
             @Qualifier(CONFIGURABLE_REST_TEMPLATE) @Autowired final RestTemplate restTemplate) {
@@ -52,6 +77,8 @@
     private HttpRestServiceProvider getHttpRestServiceProvider(final RestTemplate restTemplate,
             final HttpHeadersProvider httpHeadersProvider) {
         setGsonMessageConverter(restTemplate);
+        setTrustStore(restTemplate);
+        removeSpringClientFilter(restTemplate);
         return new HttpRestServiceProviderImpl(restTemplate, httpHeadersProvider);
     }
 
@@ -66,4 +93,30 @@
         restTemplate.getMessageConverters().add(new GsonHttpMessageConverter(gson));
     }
 
+    private void setTrustStore(final RestTemplate restTemplate) {
+        SSLContext sslContext;
+        try {
+            sslContext = new SSLContextBuilder().loadTrustMaterial(keyStore.getURL(), keyStorePassword.toCharArray())
+                    .build();
+            logger.info("Setting truststore: {}", keyStore.getURL());
+            final SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslContext);
+            final HttpClient httpClient = HttpClients.custom().setSSLSocketFactory(socketFactory).build();
+            final HttpComponentsClientHttpRequestFactory factory =
+                    new HttpComponentsClientHttpRequestFactory(httpClient);
+            restTemplate.setRequestFactory(factory);
+        } catch (KeyManagementException | NoSuchAlgorithmException | KeyStoreException | CertificateException
+                | IOException exception) {
+            logger.error("Error reading truststore, TLS connection to VNFM will fail.", exception);
+        }
+    }
+
+    private void removeSpringClientFilter(final RestTemplate restTemplate) {
+        ListIterator<ClientHttpRequestInterceptor> interceptorIterator = restTemplate.getInterceptors().listIterator();
+        while (interceptorIterator.hasNext()) {
+            if (interceptorIterator.next() instanceof SpringClientFilter) {
+                interceptorIterator.remove();
+            }
+        }
+    }
+
 }
diff --git a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/vnfm/VnfmServiceProviderImpl.java b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/vnfm/VnfmServiceProviderImpl.java
index 0b5b09a..c470008 100644
--- a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/vnfm/VnfmServiceProviderImpl.java
+++ b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/vnfm/VnfmServiceProviderImpl.java
@@ -54,7 +54,7 @@
 
     @Override
     public Optional<InlineResponse201> getVnf(final String vnfSelfLink) {
-        return httpServiceProvider.get(vnfSelfLink.replaceAll("https", "http"), InlineResponse201.class);
+        return httpServiceProvider.get(vnfSelfLink, InlineResponse201.class);
     }
 
     @Override
diff --git a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/lifecycle/LifecycleManager.java b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/lifecycle/LifecycleManager.java
index a4f7d32..fa2fa30 100644
--- a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/lifecycle/LifecycleManager.java
+++ b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/lifecycle/LifecycleManager.java
@@ -114,7 +114,7 @@
     private String getSelfLink(final InlineResponse201 vnfmResponse, final EsrVnfm vnfm) {
         if (vnfmResponse.getLinks() != null && vnfmResponse.getLinks().getSelf() != null
                 && vnfmResponse.getLinks().getSelf().getHref() != null) {
-            return vnfmResponse.getLinks().getSelf().getHref().replaceAll("https", "http");
+            return vnfmResponse.getLinks().getSelf().getHref();
         }
         return vnfm.getEsrSystemInfoList().getEsrSystemInfo().iterator().next().getServiceUrl() + "/vnf_instances/"
                 + vnfmResponse.getId();
diff --git a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/resources/application.yaml b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/resources/application.yaml
index 951d4a3..0bd63df 100644
--- a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/resources/application.yaml
+++ b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/resources/application.yaml
@@ -23,6 +23,12 @@
   http:
     converters:
     preferred-json-mapper: gson
+    
+http:
+  client:
+    ssl:
+      trust-store: classpath:org.onap.so.trust.jks
+      trust-store-password: ',sx#.C*W)]wVgJC6ccFHI#:H'
         
 server:
   port: 9092
diff --git a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/resources/org.onap.so.trust.jks b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/resources/org.onap.so.trust.jks
new file mode 100644
index 0000000..1f0d8a5
--- /dev/null
+++ b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/resources/org.onap.so.trust.jks
Binary files differ
diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/ASDCControllerSingleton.java b/asdc-controller/src/main/java/org/onap/so/asdc/ASDCControllerSingleton.java
index a5e3340..e00bb1e 100644
--- a/asdc-controller/src/main/java/org/onap/so/asdc/ASDCControllerSingleton.java
+++ b/asdc-controller/src/main/java/org/onap/so/asdc/ASDCControllerSingleton.java
@@ -38,21 +38,26 @@
 @Profile("!test")
 public class ASDCControllerSingleton {
 
+    private static final Logger logger = LoggerFactory.getLogger(ASDCControllerSingleton.class);
+    private final ASDCController asdcController;
 
     @Autowired
-    private ASDCController asdcController;
-    private static Logger logger = LoggerFactory.getLogger(ASDCControllerSingleton.class);
-
-
+    public ASDCControllerSingleton(final ASDCController asdcController) {
+        this.asdcController = asdcController;
+    }
 
     @Scheduled(fixedRate = 50000)
     public void periodicControllerTask() {
         try {
-            int randomNumber = new SecureRandom().nextInt(Integer.MAX_VALUE);
+            final int randomNumber = new SecureRandom().nextInt(Integer.MAX_VALUE);
             asdcController.setControllerName("mso-controller" + randomNumber);
-            asdcController.initASDC();
-        } catch (ASDCControllerException e) {
-            logger.error("Exception occurred", e);
+            if (asdcController.isStopped()) {
+                logger.info("{} not running will try to initialize it, currrent status: {}",
+                        asdcController.getClass().getName(), asdcController.getControllerStatus());
+                asdcController.initASDC();
+            }
+        } catch (final ASDCControllerException controllerException) {
+            logger.error("Exception occurred", controllerException);
         }
     }
 
@@ -60,8 +65,8 @@
     private void terminate() {
         try {
             asdcController.closeASDC();
-        } catch (ASDCControllerException e) {
-            logger.error("Exception occurred", e);
+        } catch (final ASDCControllerException controllerException) {
+            logger.error("Exception occurred", controllerException);
         }
     }
 
diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/Application.java b/asdc-controller/src/main/java/org/onap/so/asdc/Application.java
index eb2957c..2c83472 100644
--- a/asdc-controller/src/main/java/org/onap/so/asdc/Application.java
+++ b/asdc-controller/src/main/java/org/onap/so/asdc/Application.java
@@ -35,7 +35,6 @@
 @EnableJpaRepositories("org.onap.so.db.catalog.data.repository")
 public class Application {
     private static final Logger logger = LoggerFactory.getLogger(Application.class);
-    private static final String MSO_CONFIG_PATH = "mso.config.path";
     private static final String LOGS_DIR = "logs_dir";
 
     @Autowired
@@ -47,11 +46,6 @@
         }
     }
 
-    private static void setConfigPath() {
-        if (System.getProperty(MSO_CONFIG_PATH) == null)
-            System.getProperties().setProperty(MSO_CONFIG_PATH, ".");
-    }
-
     @PostConstruct
     private void deployActivities() {
         try {
diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/JerseyConfiguration.java b/asdc-controller/src/main/java/org/onap/so/asdc/JerseyConfiguration.java
index 9025069..22265a0 100644
--- a/asdc-controller/src/main/java/org/onap/so/asdc/JerseyConfiguration.java
+++ b/asdc-controller/src/main/java/org/onap/so/asdc/JerseyConfiguration.java
@@ -24,7 +24,9 @@
 import javax.ws.rs.ApplicationPath;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.onap.so.asdc.client.test.rest.ASDCRestInterface;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
 import io.swagger.jaxrs.config.BeanConfig;
 import io.swagger.jaxrs.listing.ApiListingResource;
 import io.swagger.jaxrs.listing.SwaggerSerializers;
@@ -33,6 +35,12 @@
 @ApplicationPath("/test")
 public class JerseyConfiguration extends ResourceConfig {
 
+    private Environment environment;
+
+    @Autowired
+    public JerseyConfiguration(final Environment environment) {
+        this.environment = environment;
+    }
 
     @PostConstruct
     public void setUp() {
@@ -40,10 +48,10 @@
         register(ApiListingResource.class);
         register(SwaggerSerializers.class);
 
-        BeanConfig beanConfig = new BeanConfig();
+        final BeanConfig beanConfig = new BeanConfig();
         beanConfig.setVersion("1.0.2");
         beanConfig.setSchemes(new String[] {"http"});
-        beanConfig.setHost("localhost:8080");
+        beanConfig.setHost("localhost:" + environment.getProperty("server.port"));
         beanConfig.setBasePath("/mso");
         beanConfig.setResourcePackage("org.onap.so.apihandlerinfra");
         beanConfig.setPrettyPrint(true);
diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/client/ASDCController.java b/asdc-controller/src/main/java/org/onap/so/asdc/client/ASDCController.java
index 563291c..3b9406a 100644
--- a/asdc-controller/src/main/java/org/onap/so/asdc/client/ASDCController.java
+++ b/asdc-controller/src/main/java/org/onap/so/asdc/client/ASDCController.java
@@ -196,11 +196,9 @@
      * @throws IOException In case of issues when trying to load the key file
      */
     public void initASDC() throws ASDCControllerException {
-        String event = "Initialize the ASDC Controller";
-        logger.debug(event);
-        if (this.getControllerStatus() != ASDCControllerStatus.STOPPED) {
-            String endEvent = "The controller is already initialized, call the closeASDC method first";
-            throw new ASDCControllerException(endEvent);
+        logger.debug("Initialize the ASDC Controller");
+        if (!isStopped()) {
+            throw new ASDCControllerException("The controller is already initialized, call the closeASDC method first");
         }
 
         if (asdcConfig != null) {
@@ -238,6 +236,13 @@
     }
 
     /**
+     * @return true if controller is stopped
+     */
+    public boolean isStopped() {
+        return this.getControllerStatus() == ASDCControllerStatus.STOPPED;
+    }
+
+    /**
      * This method closes the ASDC Controller and the ASDC Client.
      *
      * @throws ASDCControllerException It throws an exception if the ASDC Client cannot be closed because it's currently
@@ -245,7 +250,7 @@
      */
     public void closeASDC() throws ASDCControllerException {
 
-        if (this.getControllerStatus() == ASDCControllerStatus.BUSY) {
+        if (isBusy()) {
             throw new ASDCControllerException("Cannot close the ASDC controller as it's currently in BUSY state");
         }
         if (this.distributionClient != null) {
@@ -261,6 +266,13 @@
         this.changeControllerStatus(ASDCControllerStatus.STOPPED);
     }
 
+    /**
+     * @return true if controller is currently processing notification
+     */
+    public boolean isBusy() {
+        return this.getControllerStatus() == ASDCControllerStatus.BUSY;
+    }
+
     protected boolean checkResourceAlreadyDeployed(ResourceStructure resource, boolean serviceDeployed)
             throws ArtifactInstallerException {
 
@@ -713,12 +725,6 @@
 
         try {
             this.processCsarServiceArtifacts(iNotif, toscaResourceStructure);
-            IArtifactInfo iArtifact = toscaResourceStructure.getToscaArtifact();
-            String filePath =
-                    msoConfigPath + "/ASDC/" + iArtifact.getArtifactVersion() + "/" + iArtifact.getArtifactName();
-            File csarFile = new File(filePath);
-
-
             if (isCsarAlreadyDeployed(iNotif, toscaResourceStructure)) {
                 return;
             }
diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/ArtifactInfoImpl.java b/asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/ArtifactInfoImpl.java
index f4cfb13..93e4aee 100644
--- a/asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/ArtifactInfoImpl.java
+++ b/asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/ArtifactInfoImpl.java
@@ -4,6 +4,8 @@
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ================================================================================
  * 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
@@ -59,7 +61,7 @@
     }
 
     public static List<ArtifactInfoImpl> convertToArtifactInfoImpl(List<IArtifactInfo> list) {
-        List<ArtifactInfoImpl> ret = new ArrayList<ArtifactInfoImpl>();
+        List<ArtifactInfoImpl> ret = new ArrayList<>();
         if (list != null) {
             for (IArtifactInfo artifactInfo : list) {
                 ret.add(new ArtifactInfoImpl(artifactInfo));
@@ -159,7 +161,7 @@
 
     @Override
     public List<IArtifactInfo> getRelatedArtifacts() {
-        List<IArtifactInfo> temp = new ArrayList<IArtifactInfo>();
+        List<IArtifactInfo> temp = new ArrayList<>();
         if (relatedArtifactsInfo != null) {
             temp.addAll(relatedArtifactsImpl);
         }
diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/client/test/rest/ASDCRestInterface.java b/asdc-controller/src/main/java/org/onap/so/asdc/client/test/rest/ASDCRestInterface.java
index 56690a8..24e1887 100644
--- a/asdc-controller/src/main/java/org/onap/so/asdc/client/test/rest/ASDCRestInterface.java
+++ b/asdc-controller/src/main/java/org/onap/so/asdc/client/test/rest/ASDCRestInterface.java
@@ -23,7 +23,6 @@
 package org.onap.so.asdc.client.test.rest;
 
 
-import java.io.IOException;
 import javax.transaction.Transactional;
 import javax.ws.rs.HeaderParam;
 import javax.ws.rs.POST;
@@ -31,15 +30,14 @@
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
-import org.onap.so.logger.LoggingAnchor;
+import javax.ws.rs.core.Response.Status;
 import org.onap.so.asdc.client.ASDCController;
-import org.onap.so.asdc.client.exceptions.ASDCControllerException;
-import org.onap.so.asdc.client.exceptions.ASDCParametersException;
 import org.onap.so.asdc.client.test.emulators.DistributionClientEmulator;
-import org.onap.so.asdc.client.test.emulators.NotificationDataImpl;
 import org.onap.so.asdc.client.test.emulators.JsonStatusData;
+import org.onap.so.asdc.client.test.emulators.NotificationDataImpl;
 import org.onap.so.asdc.installer.heat.ToscaResourceInstaller;
 import org.onap.so.logger.ErrorCode;
+import org.onap.so.logger.LoggingAnchor;
 import org.onap.so.logger.MessageEnum;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -48,13 +46,15 @@
 import org.springframework.stereotype.Component;
 
 /**
- * This is a TEST only rest interface. It is not used in production, it is used to aid in testing the ASDC service on
- * jboss without the need to be connected to the ASDC service broker. It starts the test at the treatNotification step
- * and simulates both the notification step as well as the artifact download step.
+ * This is a TEST only rest interface. It is not used in production, it is used to aid in testing the ASDC service
+ * without the need to be connected to the ASDC service broker. It starts the test at the treatNotification step and
+ * simulates both the notification step as well as the artifact download step.
  * <p>
- * i.e. http://localhost:8080/asdc/treatNotification/v1
+ * i.e. http://localhost:8085/test/treatNotification/v1
  * <p>
- * i.e. http://localhost:8080/asdc/statusData/v1
+ * i.e. http://localhost:8085/test/statusData/v1
+ * 
+ * This interface is also used in CSIT to simulate a distribution of a service, without using SDC
  *
  * @author jm5423
  */
@@ -66,48 +66,75 @@
 
     private static final Logger logger = LoggerFactory.getLogger(ASDCRestInterface.class);
 
-    @Autowired
-    private ASDCController asdcController;
+    private final ASDCController asdcController;
+
+    private final ToscaResourceInstaller toscaInstaller;
 
     @Autowired
-    private ToscaResourceInstaller toscaInstaller;
+    public ASDCRestInterface(final ASDCController asdcController, final ToscaResourceInstaller toscaInstaller) {
+        this.asdcController = asdcController;
+        this.toscaInstaller = toscaInstaller;
+    }
 
     @POST
     @Path("/treatNotification/v1")
     @Produces(MediaType.APPLICATION_JSON)
     @Transactional
-    public Response invokeASDCService(NotificationDataImpl request,
-            @HeaderParam("resource-location") String resourceLocation)
-            throws ASDCControllerException, ASDCParametersException, IOException {
-        DistributionClientEmulator distributionClientEmulator = new DistributionClientEmulator(resourceLocation);
+    public Response invokeASDCService(final NotificationDataImpl request,
+            @HeaderParam("resource-location") final String resourceLocation) {
 
-        asdcController.setControllerName("asdc-controller1");
-        asdcController.setDistributionClient(distributionClientEmulator);
-        asdcController.initASDC();
-        asdcController.treatNotification(request);
-        asdcController.closeASDC();
-        return Response.status(200).build();
+        try {
+            logger.info("Received message : {}", request);
+            logger.info("resource-location : {}", resourceLocation);
+            final DistributionClientEmulator distributionClientEmulator =
+                    getDistributionClientEmulator(resourceLocation);
+
+            asdcController.setControllerName("asdc-controller1");
+            asdcController.setDistributionClient(distributionClientEmulator);
+
+            if (asdcController.isStopped()) {
+                logger.info("{} not running will try to initialize it, currrent status: {}",
+                        asdcController.getClass().getName(), asdcController.getControllerStatus());
+                asdcController.initASDC();
+            }
+
+            asdcController.treatNotification(request);
+
+            if (!asdcController.isBusy()) {
+                asdcController.closeASDC();
+            }
+
+            return Response.status(Status.OK).build();
+        } catch (final Exception exception) {
+            logger.error("Unable to process notification request", exception);
+            return Response.status(Status.INTERNAL_SERVER_ERROR).build();
+        }
+
+    }
+
+    private DistributionClientEmulator getDistributionClientEmulator(final String resourceLocation) {
+        return new DistributionClientEmulator(resourceLocation);
     }
 
     @POST
     @Path("/statusData/v1")
     @Produces(MediaType.APPLICATION_JSON)
     @Transactional
-    public Response invokeASDCStatusData(String request) {
+    public Response invokeASDCStatusData(final String request) {
 
         try {
-            DistributionClientEmulator distributionClientEmulator =
-                    new DistributionClientEmulator("resource-examples/");
-            JsonStatusData statusData = JsonStatusData.instantiateNotifFromJsonFile("resource-examples/");
+            final DistributionClientEmulator distributionClientEmulator =
+                    getDistributionClientEmulator("resource-examples/");
+            final JsonStatusData statusData = JsonStatusData.instantiateNotifFromJsonFile("resource-examples/");
 
-            ASDCController controller = new ASDCController("asdc-controller1", distributionClientEmulator);
-            controller.initASDC();
+            asdcController.setDistributionClient(distributionClientEmulator);
+            asdcController.initASDC();
             toscaInstaller.installTheComponentStatus(statusData);
-            controller.closeASDC();
+            asdcController.closeASDC();
 
             logger.info(LoggingAnchor.FOUR, MessageEnum.ASDC_ARTIFACT_DEPLOY_SUC.toString(),
                     statusData.getDistributionID(), "ASDC", "ASDC Updates Are Complete");
-        } catch (Exception e) {
+        } catch (final Exception e) {
             logger.info("Error caught " + e.getMessage());
             logger.error(LoggingAnchor.SIX, MessageEnum.ASDC_GENERAL_EXCEPTION.toString(),
                     "Exception caught during ASDCRestInterface", "ASDC", "invokeASDCService",
diff --git a/asdc-controller/src/main/resources/application-local.yaml b/asdc-controller/src/main/resources/application-local.yaml
deleted file mode 100644
index 1b21d8b..0000000
--- a/asdc-controller/src/main/resources/application-local.yaml
+++ /dev/null
@@ -1,95 +0,0 @@
-# will be used as entry in DB to say SITE OFF/ON for healthcheck
-
-server-port: 8080
-ssl-enable: false
-
-
-
-# H2
-spring:
-  datasource:
-    jdbc-url: jdbc:mariadb://localhost:3306/catalogdb
-    username: root
-    password: password
-    driver-class-name: org.mariadb.jdbc.Driver
-    initialize: true
-
-  jpa:
-      show-sql: true
-      hibernate:
-        ddl-auto: validate
-        naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy
-        enable-lazy-load-no-trans: true
-      database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
-  security:
-    usercredentials:
-    -  
-      username: asdc
-      password: '$2a$12$4R2QhxH7elzoZYoC.HJKTOHYDoaC9LbJD44Q9/tm4t/UzPF9Cgifi'
-      role: Asdc-Client 
-    -  
-      username: mso_admin
-      password: '$2a$12$tidKuu.h88E2nuL95pTVY.ZOYMN/1dp29A9b1o.0GFDsVVSYlMkHa'
-      role: ACTUATOR        
-request:
-  datasource:
-    jdbc-url: jdbc:mariadb://localhost:3306/requestdb
-    username: root
-    password: password
-    driver-class-name: org.mariadb.jdbc.Driver
-    initialize: true
-    initialization-mode: never
-
-#Actuator
-management:
-  endpoints:
-    web:
-      base-path: /manage
-  server:
-    servlet:
-      context-path: /manage
-  metrics:
-    se-global-registry: false
-    export:
-      prometheus:
-        enabled: true # Whether exporting of metrics to Prometheus is enabled.
-        step: 1m # Step size (i.e. reporting frequency) to use.  
-
-
-mso:
-  logPath: logs
-  catalog:
-    db:
-      spring:
-        endpoint: "http://localhost:8090"
-  db:
-    auth: Basic YnBlbDptc28tZGItMTUwNyE=
-  site-name: siteName
-  aai:  
-    endpoint: https://localhost:8443
-  asdc-connections:
-    asdc-controller1:
-      user: msopreist
-      consumerGroup: msoasdc-id-local
-      consumerId: msoasdc-id-local
-      environmentName: Pre-IST
-      asdcAddress: localhost:8443
-      password: CB655C3C236F1F0370A347E3A0E0E133BE10ADCF4D16377E7378D3FE46A4BF60C27DF1FFB4
-      pollingInterval: 30
-      pollingTimeout: 30
-      relevantArtifactTypes: HEAT,HEAT_ENV,HEAT_VOL
-      useHttpsWithDmaap: true
-      activateServerTLSAuth: false
-      keyStorePassword:  
-      keyStorePath:
-      watchDogTimeout: 1
-      isFitlerInEmptyResources: true
-      messageBusAddress: localhost,localhost,localhost
-  asdc:
-    config:
-      key: 566B754875657232314F5548556D3665
-      components:
-        count: 3,
-        componentNames: SO,AAI,SDNC
-  scheduling:
-    enabled: false
diff --git a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/ExceptionUtil.groovy b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/ExceptionUtil.groovy
index d95dbe2..c231503 100644
--- a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/ExceptionUtil.groovy
+++ b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/ExceptionUtil.groovy
@@ -34,6 +34,7 @@
 import org.camunda.bpm.engine.delegate.DelegateExecution
 import org.onap.so.bpmn.core.WorkflowException
 import org.onap.so.logger.MessageEnum
+import org.onap.so.utils.TargetEntities
 import org.slf4j.Logger
 import org.slf4j.LoggerFactory
 
@@ -283,6 +284,16 @@
 		execution.setVariable("WorkflowException", exception);
 		logger.debug("Outgoing WorkflowException is " + exception)
 	}
+	
+	public void buildWorkflowException(DelegateExecution execution, int errorCode, String errorMessage, TargetEntities extSystemErrorSource) {
+		MsoUtils utils = new MsoUtils()
+		String processKey = getProcessKey(execution);
+		logger.debug("Building a WorkflowException for " + processKey)
+
+		WorkflowException exception = new WorkflowException(processKey, errorCode, errorMessage, extSystemErrorSource);
+		execution.setVariable("WorkflowException", exception);
+		logger.debug("Outgoing WorkflowException is " + exception)
+	}
 
 	/**
 	 * This error handling method builds a WorkflowException Object and throws a
diff --git a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/VnfAdapterRestV1.groovy b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/VnfAdapterRestV1.groovy
index a769eca..866229f 100644
--- a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/VnfAdapterRestV1.groovy
+++ b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/VnfAdapterRestV1.groovy
@@ -40,7 +40,6 @@
 
 
 
-
 class VnfAdapterRestV1 extends AbstractServiceTaskProcessor {
     private static final Logger logger = LoggerFactory.getLogger( VnfAdapterRestV1.class);
 
@@ -81,7 +80,7 @@
 				String msg = getProcessKey(execution) + ': no messageId in ' + requestType
 				logger.error(LoggingAnchor.FOUR, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), msg, "BPMN",
 						ErrorCode.UnknownError.getValue());
-				exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg)
+				exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg, TargetEntity.SO)
 			}
 
 			execution.setVariable('VNFAResponse_CORRELATOR', messageId)
@@ -95,7 +94,7 @@
 				String msg = getProcessKey(execution) + ': no notificationUrl in ' + requestType
 				logger.error(LoggingAnchor.FOUR, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), msg, "BPMN",
 						ErrorCode.UnknownError.getValue());
-				exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg)
+				exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg, TargetEntity.SO)
 			}
 
 			execution.setVariable(prefix + 'notificationUrl', notificationUrl)
@@ -109,7 +108,7 @@
 				String msg = getProcessKey(execution) + ': mso:adapters:vnf:rest:endpoint URN mapping is not defined'
 				logger.error(LoggingAnchor.FOUR, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), msg, "BPMN",
 						ErrorCode.UnknownError.getValue());
-				exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg)
+				exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg, TargetEntity.SO)
 			}
 
 			while (vnfAdapterEndpoint.endsWith('/')) {
@@ -127,7 +126,7 @@
 					String msg = getProcessKey(execution) + ': no vnfId in ' + requestType
 					logger.error(LoggingAnchor.FOUR, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), msg, "BPMN",
 							ErrorCode.UnknownError.getValue());
-					exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg)
+					exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg, TargetEntity.SO)
 				}
 
 				vnfAdapterMethod = 'POST'
@@ -140,7 +139,7 @@
 					String msg = getProcessKey(execution) + ': no vnfId in ' + requestType
 					logger.error(LoggingAnchor.FOUR, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), msg, "BPMN",
 							ErrorCode.UnknownError.getValue());
-					exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg)
+					exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg, TargetEntity.SO)
 				}
 
 				String vfModuleId = getChildText(root, 'vfModuleId')
@@ -149,7 +148,7 @@
 					String msg = getProcessKey(execution) + ': no vfModuleId in ' + requestType
 					logger.error(LoggingAnchor.FOUR, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), msg, "BPMN",
 							ErrorCode.UnknownError.getValue());
-					exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg)
+					exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg, TargetEntity.SO)
 				}
 
 				vnfAdapterMethod = 'PUT'
@@ -163,7 +162,7 @@
 					String msg = getProcessKey(execution) + ': no vnfId in ' + requestType
 					logger.error(LoggingAnchor.FOUR, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), msg, "BPMN",
 							ErrorCode.UnknownError.getValue());
-					exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg)
+					exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg, TargetEntity.SO)
 				}
 
 				String vfModuleId = getChildText(root, 'vfModuleId')
@@ -172,7 +171,7 @@
 					String msg = getProcessKey(execution) + ': no vfModuleId in ' + requestType
 					logger.error(LoggingAnchor.FOUR, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), msg, "BPMN",
 							ErrorCode.UnknownError.getValue());
-					exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg)
+					exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg, TargetEntity.SO)
 				}
 
 				vnfAdapterMethod = 'DELETE'
@@ -186,7 +185,7 @@
 					String msg = getProcessKey(execution) + ': no vfModuleRollback in ' + requestType
 					logger.error(LoggingAnchor.FOUR, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), msg, "BPMN",
 							ErrorCode.UnknownError.getValue());
-					exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg)
+					exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg, TargetEntity.SO)
 				}
 
 				String vnfId = getChildText(vfModuleRollbackNode, 'vnfId')
@@ -195,7 +194,7 @@
 					String msg = getProcessKey(execution) + ': no vnfId in ' + requestType
 					logger.error(LoggingAnchor.FOUR, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), msg, "BPMN",
 							ErrorCode.UnknownError.getValue());
-					exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg)
+					exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg, TargetEntity.SO)
 				}
 
 				String vfModuleId = getChildText(vfModuleRollbackNode, 'vfModuleId')
@@ -204,7 +203,7 @@
 					String msg = getProcessKey(execution) + ': no vfModuleId in ' + requestType
 					logger.error(LoggingAnchor.FOUR, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), msg, "BPMN",
 							ErrorCode.UnknownError.getValue());
-					exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg)
+					exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg, TargetEntity.SO)
 				}
 
 				vnfAdapterMethod = 'DELETE'
@@ -225,7 +224,7 @@
 					String msg = getProcessKey(execution) + ': no volumeGroupId in ' + requestType
 					logger.error(LoggingAnchor.FOUR, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), msg, "BPMN",
 							ErrorCode.UnknownError.getValue());
-					exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg)
+					exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg, TargetEntity.SO)
 				}
 
 				vnfAdapterMethod = 'PUT'
@@ -241,7 +240,7 @@
 					String msg = getProcessKey(execution) + ': no volumeGroupId in ' + requestType
 					logger.error(LoggingAnchor.FOUR, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), msg, "BPMN",
 							ErrorCode.UnknownError.getValue());
-					exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg)
+					exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg, TargetEntity.SO)
 				}
 
 				vnfAdapterMethod = 'DELETE'
@@ -257,7 +256,7 @@
 					String msg = getProcessKey(execution) + ': no volumeGroupId in ' + requestType
 					logger.error(LoggingAnchor.FOUR, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), msg, "BPMN",
 							ErrorCode.UnknownError.getValue());
-					exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg)
+					exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg, TargetEntity.SO)
 				}
 
 				vnfAdapterMethod = 'DELETE'
@@ -270,7 +269,7 @@
 				String msg = getProcessKey(execution) + ': Unsupported request type: ' + requestType
 				logger.error(LoggingAnchor.FOUR, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), msg, "BPMN",
 						ErrorCode.UnknownError.getValue());
-				exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg)
+				exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg, TargetEntity.SO)
 			}
 
 			execution.setVariable(prefix + 'vnfAdapterMethod', vnfAdapterMethod)
@@ -307,7 +306,7 @@
 			logger.error(LoggingAnchor.FOUR, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), msg, "BPMN",
 					ErrorCode.UnknownError.getValue());
 			logger.debug(msg)
-			exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg)
+			exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg, TargetEntity.SO)
 		}
 	}
 
@@ -358,7 +357,7 @@
 				String msg = 'Unsupported HTTP method "' + vnfAdapterMethod + '" in ' + method + ": " + e
 				logger.error(LoggingAnchor.FOUR, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), msg, "BPMN",
 						ErrorCode.UnknownError.getValue());
-				exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg)
+				exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg, TargetEntity.SO)
 			}
 
 			execution.setVariable(prefix + "vnfAdapterStatusCode", response.getStatus())
@@ -371,7 +370,7 @@
 			String msg = 'Caught exception in ' + method + ": " + e
 			logger.error(LoggingAnchor.FOUR, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), msg, "BPMN",
 					ErrorCode.UnknownError.getValue());
-			exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg)
+			exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg, TargetEntity.SO)
 		}
 	}
 
@@ -400,7 +399,7 @@
 			}
 		} catch (Exception e) {
 			logger.debug("Error encountered within VnfAdapterRest ProcessCallback method: {}", e.getMessage(), e)
-			exceptionUtil.buildAndThrowWorkflowException(execution, 7020, "Error encountered within VnfAdapterRest ProcessCallback method")
+			exceptionUtil.buildAndThrowWorkflowException(execution, 7020, "Error encountered within VnfAdapterRest ProcessCallback method", TargetEntity.SO)
 		}
 	}
 
@@ -419,10 +418,10 @@
 			String rolledBack = getChildText(root, "rolledBack")
 			rolledBack = rolledBack == null || rolledBack.isEmpty() ? "" : " rolledBack='" + rolledBack + "'"
 			exceptionUtil.buildWorkflowException(execution, 7020, "Received " + root.name() +
-				" from VnfAdapter:" + category + message + rolledBack);
+				" from VnfAdapter:" + category + message + rolledBack, TargetEntity.OPENSTACK);
 		} catch (Exception e) {
 			response = response == null || String.valueOf(response).isEmpty() ? "NONE" : response
-			exceptionUtil.buildWorkflowException(execution, 7020, "Received error from VnfAdapter: " + response)
+			exceptionUtil.buildWorkflowException(execution, 7020, "Received error from VnfAdapter: " + response, TargetEntity.OPENSTACK)
 		}
 	}
 
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupUtils.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupUtils.java
index 8ac5f6e..f8d5402 100644
--- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupUtils.java
+++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupUtils.java
@@ -23,6 +23,9 @@
 package org.onap.so.bpmn.servicedecomposition.tasks;
 
 import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
@@ -42,6 +45,7 @@
 import org.onap.aai.domain.yang.VpnBinding;
 import org.onap.so.bpmn.common.InjectionHelper;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
+import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
 import org.onap.so.bpmn.servicedecomposition.tasks.exceptions.MultipleObjectsFoundException;
 import org.onap.so.bpmn.servicedecomposition.tasks.exceptions.NoServiceInstanceFoundException;
 import org.onap.so.client.aai.AAIObjectPlurals;
@@ -59,6 +63,7 @@
 import org.onap.so.db.catalog.beans.VnfcInstanceGroupCustomization;
 import org.onap.so.db.catalog.client.CatalogDbClient;
 import org.onap.so.db.request.beans.InfraActiveRequests;
+import org.onap.so.db.request.beans.RequestProcessingData;
 import org.onap.so.db.request.client.RequestsDbClient;
 import org.onap.so.serviceinstancebeans.CloudConfiguration;
 import org.onap.so.serviceinstancebeans.ModelType;
@@ -69,7 +74,10 @@
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.JsonMappingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
 
@@ -79,6 +87,9 @@
     private static final Logger logger = LoggerFactory.getLogger(BBInputSetupUtils.class);
     private ObjectMapper objectMapper = new ObjectMapper();
     private static final String REQUEST_ERROR = "Could not find request.";
+    private static final String DATA_LOAD_ERROR = "Could not process loading data from database";
+    private static final String DATA_PARSE_ERROR = "Could not parse data";
+    private static final String PROCESSING_DATA_NAME_EXECUTION_FLOWS = "flowExecutionPath";
 
     @Autowired
     protected CatalogDbClient catalogDbClient;
@@ -139,6 +150,66 @@
         }
     }
 
+    public void persistFlowExecutionPath(String requestId, List<ExecuteBuildingBlock> flowsToExecute) {
+
+        if (requestId != null) {
+            List<String> flows = new ArrayList<>();
+            ObjectMapper om = new ObjectMapper();
+            try {
+                for (ExecuteBuildingBlock ebb : flowsToExecute) {
+                    flows.add(om.writeValueAsString(ebb));
+                }
+            } catch (JsonProcessingException e) {
+                logger.error(DATA_PARSE_ERROR, e);
+            }
+
+            this.requestsDbClient.persistProcessingData(flows.toString(), requestId);
+        } else {
+            logger.debug(REQUEST_ERROR);
+        }
+    }
+
+    public InfraActiveRequests loadInfraActiveRequestById(String requestId) {
+
+        return this.requestsDbClient.getInfraActiveRequestbyRequestId(requestId);
+    }
+
+    public InfraActiveRequests loadOriginalInfraActiveRequestById(String requestId) {
+
+        return this.requestsDbClient.getInfraActiveRequestbyRequestId(
+                this.requestsDbClient.getInfraActiveRequestbyRequestId(requestId).getOriginalRequestId());
+    }
+
+    public List<ExecuteBuildingBlock> loadOriginalFlowExecutionPath(String requestId) {
+
+        List<ExecuteBuildingBlock> asList = null;
+        if (requestId != null) {
+
+            InfraActiveRequests request = loadInfraActiveRequestById(requestId);
+
+            if (request.getOriginalRequestId() != null) {
+
+                RequestProcessingData requestProcessingData =
+                        this.requestsDbClient.getRequestProcessingDataBySoRequestIdAndName(
+                                request.getOriginalRequestId(), PROCESSING_DATA_NAME_EXECUTION_FLOWS);
+
+                ObjectMapper om = new ObjectMapper();
+                try {
+                    ExecuteBuildingBlock[] asArray =
+                            om.readValue(requestProcessingData.getValue(), ExecuteBuildingBlock[].class);
+                    asList = Arrays.asList(asArray);
+                } catch (Exception e) {
+                    logger.error(DATA_LOAD_ERROR, e);
+                }
+            }
+
+        } else {
+            logger.debug(REQUEST_ERROR);
+        }
+
+        return asList;
+    }
+
     public Service getCatalogServiceByModelUUID(String modelUUID) {
         return catalogDbClient.getServiceByID(modelUUID);
     }
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/ExecuteBuildingBlockRainyDay.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/ExecuteBuildingBlockRainyDay.java
index 122e718..fd2054c 100644
--- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/ExecuteBuildingBlockRainyDay.java
+++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/ExecuteBuildingBlockRainyDay.java
@@ -30,10 +30,13 @@
 import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
 import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock;
 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
+import org.onap.so.constants.Status;
 import org.onap.so.db.catalog.beans.macro.RainyDayHandlerStatus;
 import org.onap.so.db.catalog.client.CatalogDbClient;
 import org.onap.so.db.request.beans.InfraActiveRequests;
 import org.onap.so.db.request.client.RequestsDbClient;
+import org.onap.so.utils.TargetEntities;
+import org.onap.so.utils.TargetEntity;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -45,6 +48,7 @@
 
     private static final Logger logger = LoggerFactory.getLogger(ExecuteBuildingBlockRainyDay.class);
     public static final String HANDLING_CODE = "handlingCode";
+    public static final String ROLLBACK_TARGET_STATE = "rollbackTargetState";
 
     @Autowired
     private CatalogDbClient catalogDbClient;
@@ -165,6 +169,18 @@
                 if (handlingCode.equals("RollbackToAssigned") && !aLaCarte) {
                     handlingCode = "Rollback";
                 }
+                if (handlingCode.startsWith("Rollback")) {
+                    String targetState = "";
+                    if (handlingCode.equalsIgnoreCase("RollbackToAssigned")) {
+                        targetState = Status.ROLLED_BACK_TO_ASSIGNED.toString();
+                    } else if (handlingCode.equalsIgnoreCase("RollbackToCreated")) {
+                        targetState = Status.ROLLED_BACK_TO_CREATED.toString();
+                    } else {
+                        targetState = Status.ROLLED_BACK.toString();
+                    }
+                    execution.setVariable(ROLLBACK_TARGET_STATE, targetState);
+                    logger.debug("Rollback target state is: {}", targetState);
+                }
             }
             logger.debug("RainyDayHandler Status Code is: {}", handlingCode);
             execution.setVariable(HANDLING_CODE, handlingCode);
@@ -185,4 +201,44 @@
     public void setHandlingStatusSuccess(DelegateExecution execution) {
         execution.setVariable(HANDLING_CODE, "Success");
     }
+
+    public void updateExtSystemErrorSource(DelegateExecution execution) {
+        try {
+            String requestId = (String) execution.getVariable("mso-request-id");
+            WorkflowException exception = (WorkflowException) execution.getVariable("WorkflowException");
+            TargetEntities extSystemErrorSource = exception.getExtSystemErrorSource();
+            InfraActiveRequests request = requestDbclient.getInfraActiveRequestbyRequestId(requestId);
+            Boolean isRollbackFailure = (Boolean) execution.getVariable("isRollback");
+            if (isRollbackFailure == null) {
+                isRollbackFailure = false;
+            }
+
+            if (extSystemErrorSource != null) {
+                String extSystemErrorSourceString = extSystemErrorSource.toString();
+                if (isRollbackFailure) {
+                    logger.debug("Updating extSystemErrorSource for isRollbackFailure to {} for request: {}",
+                            extSystemErrorSourceString, requestId);
+                    request.setRollbackExtSystemErrorSource(extSystemErrorSourceString);
+                } else {
+                    logger.debug("Updating extSystemErrorSource to {} for request: {}", extSystemErrorSourceString,
+                            requestId);
+                    request.setExtSystemErrorSource(extSystemErrorSourceString);
+                }
+            } else if (isRollbackFailure) {
+                logger.debug(
+                        "rollbackExtSystemErrorSource is null for isRollbackFailure. Setting rollbackExtSystemErrorSource to UNKNOWN");
+                request.setRollbackExtSystemErrorSource(TargetEntity.UNKNOWN.toString());
+            } else {
+                logger.debug("extSystemErrorSource is null. Setting extSystemErrorSource to UNKNOWN");
+                request.setExtSystemErrorSource(TargetEntity.UNKNOWN.toString());
+            }
+
+            request.setLastModifiedBy("CamundaBPMN");
+            requestDbclient.updateInfraActiveRequests(request);
+        } catch (Exception e) {
+            logger.error("Failed to update Request db with extSystemErrorSource or rollbackExtSystemErrorSource: "
+                    + e.getMessage());
+        }
+    }
+
 }
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/ExtractPojosForBB.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/ExtractPojosForBB.java
index b76316b..b2dbd97 100644
--- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/ExtractPojosForBB.java
+++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/ExtractPojosForBB.java
@@ -60,7 +60,7 @@
                     if (gBBInput.getCustomer().getServiceSubscription() == null
                             && gBBInput.getServiceInstance() != null) {
                         result = Optional.of((T) gBBInput.getServiceInstance());
-                    } else {
+                    } else if (gBBInput.getCustomer().getServiceSubscription() != null) {
                         result = lookupObjectInList(
                                 gBBInput.getCustomer().getServiceSubscription().getServiceInstances(), value);
                     }
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/exception/ExceptionBuilder.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/exception/ExceptionBuilder.java
index d656314..100887d 100644
--- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/exception/ExceptionBuilder.java
+++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/exception/ExceptionBuilder.java
@@ -43,6 +43,8 @@
 import org.onap.so.logger.MessageEnum;
 import org.onap.so.objects.audit.AAIObjectAudit;
 import org.onap.so.objects.audit.AAIObjectAuditList;
+import org.onap.so.utils.TargetEntities;
+import org.onap.so.utils.TargetEntity;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
@@ -89,6 +91,39 @@
         buildAndThrowWorkflowException(execution, errorCode, msg);
     }
 
+    public void buildAndThrowWorkflowException(BuildingBlockExecution execution, int errorCode, Exception exception,
+            TargetEntities extSystemErrorSource) {
+        String msg = "Exception in %s.%s ";
+        try {
+            logger.error("Exception occurred", exception);
+
+            String errorVariable = "Error%s%s";
+
+            StackTraceElement[] trace = Thread.currentThread().getStackTrace();
+            for (StackTraceElement traceElement : trace) {
+                if (!traceElement.getClassName().equals(this.getClass().getName())
+                        && !traceElement.getClassName().equals(Thread.class.getName())) {
+                    msg = String.format(msg, traceElement.getClassName(), traceElement.getMethodName());
+                    String shortClassName =
+                            traceElement.getClassName().substring(traceElement.getClassName().lastIndexOf(".") + 1);
+                    errorVariable = String.format(errorVariable, shortClassName, traceElement.getMethodName());
+                    break;
+                }
+            }
+
+            logger.error("{} {} {} {} {}", MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), msg, "BPMN",
+                    ErrorCode.UnknownError.getValue(), msg.toString());
+            execution.setVariable(errorVariable, exception.getMessage());
+        } catch (Exception ex) {
+            // log trace, allow process to complete gracefully
+            logger.error("Exception occurred", ex);
+        }
+
+        if (exception.getMessage() != null)
+            msg = msg.concat(exception.getMessage());
+        buildAndThrowWorkflowException(execution, errorCode, msg, extSystemErrorSource);
+    }
+
     public void buildAndThrowWorkflowException(DelegateExecution execution, int errorCode, Exception exception) {
         String msg = "Exception in %s.%s ";
         try {
@@ -120,6 +155,38 @@
         buildAndThrowWorkflowException(execution, errorCode, msg);
     }
 
+    public void buildAndThrowWorkflowException(DelegateExecution execution, int errorCode, Exception exception,
+            TargetEntities extSystemErrorSource) {
+        String msg = "Exception in %s.%s ";
+        try {
+            logger.error("Exception occurred", exception);
+
+            String errorVariable = "Error%s%s";
+
+            StackTraceElement[] trace = Thread.currentThread().getStackTrace();
+            for (StackTraceElement traceElement : trace) {
+                if (!traceElement.getClassName().equals(this.getClass().getName())
+                        && !traceElement.getClassName().equals(Thread.class.getName())) {
+                    msg = String.format(msg, traceElement.getClassName(), traceElement.getMethodName());
+                    String shortClassName =
+                            traceElement.getClassName().substring(traceElement.getClassName().lastIndexOf(".") + 1);
+                    errorVariable = String.format(errorVariable, shortClassName, traceElement.getMethodName());
+                    break;
+                }
+            }
+            logger.error("{} {} {} {} {}", MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), msg, "BPMN",
+                    ErrorCode.UnknownError.getValue(), msg.toString());
+            execution.setVariable(errorVariable, exception.getMessage());
+        } catch (Exception ex) {
+            // log trace, allow process to complete gracefully
+            logger.error("Exception occurred", ex);
+        }
+
+        if (exception.getMessage() != null)
+            msg = msg.concat(exception.getMessage());
+        buildAndThrowWorkflowException(execution, errorCode, msg, extSystemErrorSource);
+    }
+
     public void buildAndThrowWorkflowException(BuildingBlockExecution execution, int errorCode, String errorMessage) {
         if (execution instanceof DelegateExecutionImpl) {
             buildAndThrowWorkflowException(((DelegateExecutionImpl) execution).getDelegateExecution(), errorCode,
@@ -127,6 +194,14 @@
         }
     }
 
+    public void buildAndThrowWorkflowException(BuildingBlockExecution execution, int errorCode, String errorMessage,
+            TargetEntities extSystemErrorSource) {
+        if (execution instanceof DelegateExecutionImpl) {
+            buildAndThrowWorkflowException(((DelegateExecutionImpl) execution).getDelegateExecution(), errorCode,
+                    errorMessage, extSystemErrorSource);
+        }
+    }
+
     public void buildAndThrowWorkflowException(DelegateExecution execution, int errorCode, String errorMessage) {
         String processKey = getProcessKey(execution);
         logger.info("Building a WorkflowException for Subflow");
@@ -139,6 +214,19 @@
         throw new BpmnError("MSOWorkflowException");
     }
 
+    public void buildAndThrowWorkflowException(DelegateExecution execution, int errorCode, String errorMessage,
+            TargetEntities extSystemErrorSource) {
+        String processKey = getProcessKey(execution);
+        logger.info("Building a WorkflowException for Subflow");
+
+        WorkflowException exception = new WorkflowException(processKey, errorCode, errorMessage, extSystemErrorSource);
+        execution.setVariable("WorkflowException", exception);
+        execution.setVariable("WorkflowExceptionErrorMessage", errorMessage);
+        logger.info("Outgoing WorkflowException is {}", exception);
+        logger.info("Throwing MSOWorkflowException");
+        throw new BpmnError("MSOWorkflowException");
+    }
+
     public void buildAndThrowWorkflowException(DelegateExecution execution, String errorCode, String errorMessage) {
         execution.setVariable("WorkflowExceptionErrorMessage", errorMessage);
         throw new BpmnError(errorCode, errorMessage);
@@ -204,7 +292,8 @@
             if (flowShouldContinue) {
                 execution.setVariable("StatusMessage", errorMessage.toString());
             } else {
-                WorkflowException exception = new WorkflowException(processKey, 400, errorMessage.toString());
+                WorkflowException exception =
+                        new WorkflowException(processKey, 400, errorMessage.toString(), TargetEntity.SO);
                 execution.setVariable("WorkflowException", exception);
                 execution.setVariable("WorkflowExceptionErrorMessage", errorMessage.toString());
                 logger.info("Outgoing WorkflowException is {}", exception);
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupUtilsTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupUtilsTest.java
index 25135a0..1899475 100644
--- a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupUtilsTest.java
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupUtilsTest.java
@@ -25,6 +25,7 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.ArgumentMatchers.isA;
 import static org.mockito.Mockito.doReturn;
@@ -57,6 +58,7 @@
 import org.onap.so.bpmn.common.InjectionHelper;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceSubscription;
+import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
 import org.onap.so.bpmn.servicedecomposition.tasks.exceptions.MultipleObjectsFoundException;
 import org.onap.so.bpmn.servicedecomposition.tasks.exceptions.NoServiceInstanceFoundException;
 import org.onap.so.client.aai.AAIObjectPlurals;
@@ -70,6 +72,7 @@
 import org.onap.so.db.catalog.beans.VnfcInstanceGroupCustomization;
 import org.onap.so.db.catalog.client.CatalogDbClient;
 import org.onap.so.db.request.beans.InfraActiveRequests;
+import org.onap.so.db.request.beans.RequestProcessingData;
 import org.onap.so.db.request.client.RequestsDbClient;
 import org.onap.so.serviceinstancebeans.CloudConfiguration;
 import org.onap.so.serviceinstancebeans.ModelInfo;
@@ -832,4 +835,34 @@
 
         assertEquals(actualVolumeGroup, Optional.empty());
     }
+
+    @Test
+    public void loadOriginalFlowExecutionPathTest() throws Exception {
+
+        String requestId = "123";
+        String flowsToExecuteString =
+                "[{\"buildingBlock\":{\"mso-id\":\"2f9ddc4b-4dcf-4129-a35f-be1625ae0176\",\"bpmn-flow-name\":\"DeactivateFabricConfigurationBB\",\"key\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"is-virtual-link\":false,\"virtual-link-key\":null},\"requestId\":\"9c944122-d161-4280-8594-48c06a9d96d5\",\"apiVersion\":\"7\",\"resourceId\":\"d1d35800-783d-42d3-82f6-d654c5054a6e\",\"requestAction\":\"deleteInstance\",\"vnfType\":\"\",\"aLaCarte\":true,\"homing\":false,\"workflowResourceIds\":{\"serviceInstanceId\":\"ff9dae72-05bb-4277-ad2b-1b082467c138\",\"vnfId\":\"84a29830-e533-4f20-a838-910c740bf24c\",\"networkId\":\"\",\"volumeGroupId\":\"\",\"vfModuleId\":\"d1d35800-783d-42d3-82f6-d654c5054a6e\",\"networkCollectionId\":null,\"configurationId\":\"10f8a3a3-91bf-4821-9515-c01b2864dff0\",\"instanceGroupId\":\"\"},\"requestDetails\":{\"modelInfo\":{\"modelCustomizationName\":\"McmrNcUpVnf20191..cr_mccm_fc_base..module-0\",\"modelInvariantId\":\"8028fcc0-96dc-427d-a4de-4536245943da\",\"modelType\":\"vfModule\",\"modelId\":\"00d15ebb-c80e-43c1-80f0-90c40dde70b0\",\"modelName\":\"McmrNcUpVnf20191..cr_mccm_fc_base..module-0\",\"modelVersion\":\"1\",\"modelCustomizationUuid\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"modelVersionId\":\"00d15ebb-c80e-43c1-80f0-90c40dde70b0\",\"modelCustomizationId\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"modelUuid\":\"00d15ebb-c80e-43c1-80f0-90c40dde70b0\",\"modelInvariantUuid\":\"8028fcc0-96dc-427d-a4de-4536245943da\",\"modelInstanceName\":\"McmrNcUpVnf20191..cr_mccm_fc_base..module-0\"},\"requestInfo\":{\"source\":\"VID\",\"suppressRollback\":false,\"requestorId\":\"pj8646\"},\"cloudConfiguration\":{\"tenantId\":\"e2a6af59d1cb43b2874e943bbbf8470a\",\"cloudOwner\":\"att-nc\",\"lcpCloudRegionId\":\"auk51b\"},\"requestParameters\":{\"testApi\":\"GR_API\"}},\"configurationResourceKeys\":{\"vfModuleCustomizationUUID\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"vnfResourceCustomizationUUID\":\"a80f05b8-d651-44af-b999-8ed78fb4582f\",\"cvnfcCustomizationUUID\":\"69cce457-9ffd-4359-962b-0596a1e83ad1\",\"vnfcName\":\"zauk51bmcmr01mcm001\"}},{\"buildingBlock\":{\"mso-id\":\"1ca5584e-38a9-4c3f-a4b4-99b0d42089ba\",\"bpmn-flow-name\":\"UnassignFabricConfigurationBB\",\"key\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"is-virtual-link\":false,\"virtual-link-key\":null},\"requestId\":\"9c944122-d161-4280-8594-48c06a9d96d5\",\"apiVersion\":\"7\",\"resourceId\":\"d1d35800-783d-42d3-82f6-d654c5054a6e\",\"requestAction\":\"deleteInstance\",\"vnfType\":\"\",\"aLaCarte\":true,\"homing\":false,\"workflowResourceIds\":{\"serviceInstanceId\":\"ff9dae72-05bb-4277-ad2b-1b082467c138\",\"vnfId\":\"84a29830-e533-4f20-a838-910c740bf24c\",\"networkId\":\"\",\"volumeGroupId\":\"\",\"vfModuleId\":\"d1d35800-783d-42d3-82f6-d654c5054a6e\",\"networkCollectionId\":null,\"configurationId\":\"10f8a3a3-91bf-4821-9515-c01b2864dff0\",\"instanceGroupId\":\"\"},\"requestDetails\":{\"modelInfo\":{\"modelCustomizationName\":\"McmrNcUpVnf20191..cr_mccm_fc_base..module-0\",\"modelInvariantId\":\"8028fcc0-96dc-427d-a4de-4536245943da\",\"modelType\":\"vfModule\",\"modelId\":\"00d15ebb-c80e-43c1-80f0-90c40dde70b0\",\"modelName\":\"McmrNcUpVnf20191..cr_mccm_fc_base..module-0\",\"modelVersion\":\"1\",\"modelCustomizationUuid\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"modelVersionId\":\"00d15ebb-c80e-43c1-80f0-90c40dde70b0\",\"modelCustomizationId\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"modelUuid\":\"00d15ebb-c80e-43c1-80f0-90c40dde70b0\",\"modelInvariantUuid\":\"8028fcc0-96dc-427d-a4de-4536245943da\",\"modelInstanceName\":\"McmrNcUpVnf20191..cr_mccm_fc_base..module-0\"},\"requestInfo\":{\"source\":\"VID\",\"suppressRollback\":false,\"requestorId\":\"pj8646\"},\"cloudConfiguration\":{\"tenantId\":\"e2a6af59d1cb43b2874e943bbbf8470a\",\"cloudOwner\":\"att-nc\",\"lcpCloudRegionId\":\"auk51b\"},\"requestParameters\":{\"testApi\":\"GR_API\"}},\"configurationResourceKeys\":{\"vfModuleCustomizationUUID\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"vnfResourceCustomizationUUID\":\"a80f05b8-d651-44af-b999-8ed78fb4582f\",\"cvnfcCustomizationUUID\":\"69cce457-9ffd-4359-962b-0596a1e83ad1\",\"vnfcName\":\"zauk51bmcmr01mcm001\"}},{\"buildingBlock\":{\"mso-id\":\"68d16097-4810-477d-803b-8322106106ef\",\"bpmn-flow-name\":\"DeactivateVfModuleBB\",\"key\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"is-virtual-link\":false,\"virtual-link-key\":null},\"requestId\":\"9c944122-d161-4280-8594-48c06a9d96d5\",\"apiVersion\":\"7\",\"resourceId\":\"d1d35800-783d-42d3-82f6-d654c5054a6e\",\"requestAction\":\"deleteInstance\",\"vnfType\":\"\",\"aLaCarte\":true,\"homing\":false,\"workflowResourceIds\":{\"serviceInstanceId\":\"ff9dae72-05bb-4277-ad2b-1b082467c138\",\"vnfId\":\"84a29830-e533-4f20-a838-910c740bf24c\",\"networkId\":\"\",\"volumeGroupId\":\"\",\"vfModuleId\":\"d1d35800-783d-42d3-82f6-d654c5054a6e\",\"networkCollectionId\":null,\"configurationId\":\"10f8a3a3-91bf-4821-9515-c01b2864dff0\",\"instanceGroupId\":\"\"},\"requestDetails\":{\"modelInfo\":{\"modelCustomizationName\":\"McmrNcUpVnf20191..cr_mccm_fc_base..module-0\",\"modelInvariantId\":\"8028fcc0-96dc-427d-a4de-4536245943da\",\"modelType\":\"vfModule\",\"modelId\":\"00d15ebb-c80e-43c1-80f0-90c40dde70b0\",\"modelName\":\"McmrNcUpVnf20191..cr_mccm_fc_base..module-0\",\"modelVersion\":\"1\",\"modelCustomizationUuid\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"modelVersionId\":\"00d15ebb-c80e-43c1-80f0-90c40dde70b0\",\"modelCustomizationId\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"modelUuid\":\"00d15ebb-c80e-43c1-80f0-90c40dde70b0\",\"modelInvariantUuid\":\"8028fcc0-96dc-427d-a4de-4536245943da\",\"modelInstanceName\":\"McmrNcUpVnf20191..cr_mccm_fc_base..module-0\"},\"requestInfo\":{\"source\":\"VID\",\"suppressRollback\":false,\"requestorId\":\"pj8646\"},\"cloudConfiguration\":{\"tenantId\":\"e2a6af59d1cb43b2874e943bbbf8470a\",\"cloudOwner\":\"att-nc\",\"lcpCloudRegionId\":\"auk51b\"},\"requestParameters\":{\"testApi\":\"GR_API\"}},\"configurationResourceKeys\":null},{\"buildingBlock\":{\"mso-id\":\"0b02eb09-bc23-4329-b19e-716dcca4e4a6\",\"bpmn-flow-name\":\"DeleteVfModuleBB\",\"key\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"is-virtual-link\":false,\"virtual-link-key\":null},\"requestId\":\"9c944122-d161-4280-8594-48c06a9d96d5\",\"apiVersion\":\"7\",\"resourceId\":\"d1d35800-783d-42d3-82f6-d654c5054a6e\",\"requestAction\":\"deleteInstance\",\"vnfType\":\"\",\"aLaCarte\":true,\"homing\":false,\"workflowResourceIds\":{\"serviceInstanceId\":\"ff9dae72-05bb-4277-ad2b-1b082467c138\",\"vnfId\":\"84a29830-e533-4f20-a838-910c740bf24c\",\"networkId\":\"\",\"volumeGroupId\":\"\",\"vfModuleId\":\"d1d35800-783d-42d3-82f6-d654c5054a6e\",\"networkCollectionId\":null,\"configurationId\":\"10f8a3a3-91bf-4821-9515-c01b2864dff0\",\"instanceGroupId\":\"\"},\"requestDetails\":{\"modelInfo\":{\"modelCustomizationName\":\"McmrNcUpVnf20191..cr_mccm_fc_base..module-0\",\"modelInvariantId\":\"8028fcc0-96dc-427d-a4de-4536245943da\",\"modelType\":\"vfModule\",\"modelId\":\"00d15ebb-c80e-43c1-80f0-90c40dde70b0\",\"modelName\":\"McmrNcUpVnf20191..cr_mccm_fc_base..module-0\",\"modelVersion\":\"1\",\"modelCustomizationUuid\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"modelVersionId\":\"00d15ebb-c80e-43c1-80f0-90c40dde70b0\",\"modelCustomizationId\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"modelUuid\":\"00d15ebb-c80e-43c1-80f0-90c40dde70b0\",\"modelInvariantUuid\":\"8028fcc0-96dc-427d-a4de-4536245943da\",\"modelInstanceName\":\"McmrNcUpVnf20191..cr_mccm_fc_base..module-0\"},\"requestInfo\":{\"source\":\"VID\",\"suppressRollback\":false,\"requestorId\":\"pj8646\"},\"cloudConfiguration\":{\"tenantId\":\"e2a6af59d1cb43b2874e943bbbf8470a\",\"cloudOwner\":\"att-nc\",\"lcpCloudRegionId\":\"auk51b\"},\"requestParameters\":{\"testApi\":\"GR_API\"}},\"configurationResourceKeys\":null},{\"buildingBlock\":{\"mso-id\":\"bcf95d05-0782-44ff-920d-d5100525c275\",\"bpmn-flow-name\":\"UnassignVfModuleBB\",\"key\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"is-virtual-link\":false,\"virtual-link-key\":null},\"requestId\":\"9c944122-d161-4280-8594-48c06a9d96d5\",\"apiVersion\":\"7\",\"resourceId\":\"d1d35800-783d-42d3-82f6-d654c5054a6e\",\"requestAction\":\"deleteInstance\",\"vnfType\":\"\",\"aLaCarte\":true,\"homing\":false,\"workflowResourceIds\":{\"serviceInstanceId\":\"ff9dae72-05bb-4277-ad2b-1b082467c138\",\"vnfId\":\"84a29830-e533-4f20-a838-910c740bf24c\",\"networkId\":\"\",\"volumeGroupId\":\"\",\"vfModuleId\":\"d1d35800-783d-42d3-82f6-d654c5054a6e\",\"networkCollectionId\":null,\"configurationId\":\"10f8a3a3-91bf-4821-9515-c01b2864dff0\",\"instanceGroupId\":\"\"},\"requestDetails\":{\"modelInfo\":{\"modelCustomizationName\":\"McmrNcUpVnf20191..cr_mccm_fc_base..module-0\",\"modelInvariantId\":\"8028fcc0-96dc-427d-a4de-4536245943da\",\"modelType\":\"vfModule\",\"modelId\":\"00d15ebb-c80e-43c1-80f0-90c40dde70b0\",\"modelName\":\"McmrNcUpVnf20191..cr_mccm_fc_base..module-0\",\"modelVersion\":\"1\",\"modelCustomizationUuid\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"modelVersionId\":\"00d15ebb-c80e-43c1-80f0-90c40dde70b0\",\"modelCustomizationId\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"modelUuid\":\"00d15ebb-c80e-43c1-80f0-90c40dde70b0\",\"modelInvariantUuid\":\"8028fcc0-96dc-427d-a4de-4536245943da\",\"modelInstanceName\":\"McmrNcUpVnf20191..cr_mccm_fc_base..module-0\"},\"requestInfo\":{\"source\":\"VID\",\"suppressRollback\":false,\"requestorId\":\"pj8646\"},\"cloudConfiguration\":{\"tenantId\":\"e2a6af59d1cb43b2874e943bbbf8470a\",\"cloudOwner\":\"att-nc\",\"lcpCloudRegionId\":\"auk51b\"},\"requestParameters\":{\"testApi\":\"GR_API\"}},\"configurationResourceKeys\":null}]";
+        ObjectMapper om = new ObjectMapper();
+        List<ExecuteBuildingBlock> expectedFlowsToExecute = null;
+        try {
+            ExecuteBuildingBlock[] asArray = om.readValue(flowsToExecuteString, ExecuteBuildingBlock[].class);
+            expectedFlowsToExecute = Arrays.asList(asArray);
+        } catch (Exception e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+
+        InfraActiveRequests request = new InfraActiveRequests();
+        request.setRequestId("requestId");
+        request.setOriginalRequestId("originalRequestId");
+        doReturn(request).when(MOCK_requestsDbClient).getInfraActiveRequestbyRequestId(anyString());
+        RequestProcessingData rpd = new RequestProcessingData();
+        rpd.setValue(flowsToExecuteString);
+        doReturn(rpd).when(MOCK_requestsDbClient).getRequestProcessingDataBySoRequestIdAndName(anyString(),
+                anyString());
+
+        List<ExecuteBuildingBlock> flowsToExecute = bbInputSetupUtils.loadOriginalFlowExecutionPath(requestId);
+        assertEquals(expectedFlowsToExecute.size(), flowsToExecute.size());
+    }
+
 }
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/ExecuteBuildingBlockRainyDayUnitTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/ExecuteBuildingBlockRainyDayUnitTest.java
new file mode 100644
index 0000000..6a48558
--- /dev/null
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/ExecuteBuildingBlockRainyDayUnitTest.java
@@ -0,0 +1,129 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2019 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.servicedecomposition.tasks;
+
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.verify;
+import org.camunda.bpm.engine.delegate.DelegateExecution;
+import org.camunda.bpm.extension.mockito.delegate.DelegateExecutionFake;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.onap.so.bpmn.core.WorkflowException;
+import org.onap.so.db.request.beans.InfraActiveRequests;
+import org.onap.so.db.request.client.RequestsDbClient;
+import org.onap.so.utils.TargetEntity;
+
+@RunWith(MockitoJUnitRunner.class)
+public class ExecuteBuildingBlockRainyDayUnitTest {
+
+    @Mock
+    private RequestsDbClient requestsDbClient;
+
+    @InjectMocks
+    @Spy
+    private ExecuteBuildingBlockRainyDay executeBuildingBlockRainyDay;
+
+    private DelegateExecution execution;
+    private DelegateExecution executionNullisRollback;
+    private String msoRequestId = "ef7c004b-829f-4773-a7d8-4de29feef5b1";
+    private InfraActiveRequests request = new InfraActiveRequests();
+    private WorkflowException exception;
+    private WorkflowException noExtSystemErrorSourceException;
+
+    @Before
+    public void setup() {
+        exception = new WorkflowException("Test exception", 7000, "", "", TargetEntity.SDNC);
+        noExtSystemErrorSourceException =
+                new WorkflowException("Test exception without extsystemErrorSource", 7000, "", "");
+
+        execution = new DelegateExecutionFake();
+        execution.setVariable("mso-request-id", "ef7c004b-829f-4773-a7d8-4de29feef5b1");
+
+        executionNullisRollback = new DelegateExecutionFake();
+        executionNullisRollback.setVariable("mso-request-id", "ef7c004b-829f-4773-a7d8-4de29feef5b1");
+    }
+
+    @Test
+    public void updateExtSystemErrorSourceTest() {
+        doReturn(request).when(requestsDbClient).getInfraActiveRequestbyRequestId(msoRequestId);
+        doNothing().when(requestsDbClient).updateInfraActiveRequests(request);
+        execution.setVariable("isRollback", false);
+        execution.setVariable("WorkflowException", exception);
+        executeBuildingBlockRainyDay.updateExtSystemErrorSource(execution);
+        request.setExtSystemErrorSource(TargetEntity.SDNC.toString());
+
+        verify(requestsDbClient, Mockito.times(1)).updateInfraActiveRequests(request);
+    }
+
+    @Test
+    public void updateExtSystemErrorSourceisRollbackTest() {
+        doReturn(request).when(requestsDbClient).getInfraActiveRequestbyRequestId(msoRequestId);
+        doNothing().when(requestsDbClient).updateInfraActiveRequests(request);
+        execution.setVariable("isRollback", true);
+        execution.setVariable("WorkflowException", exception);
+        executeBuildingBlockRainyDay.updateExtSystemErrorSource(execution);
+        request.setExtSystemErrorSource(TargetEntity.SDNC.toString());
+
+        verify(requestsDbClient, Mockito.times(1)).updateInfraActiveRequests(request);
+    }
+
+    @Test
+    public void updateExtSystemErrorSourceisRollbackTargetEntityNullTest() {
+        doReturn(request).when(requestsDbClient).getInfraActiveRequestbyRequestId(msoRequestId);
+        doNothing().when(requestsDbClient).updateInfraActiveRequests(request);
+        execution.setVariable("isRollback", true);
+        execution.setVariable("WorkflowException", noExtSystemErrorSourceException);
+        executeBuildingBlockRainyDay.updateExtSystemErrorSource(execution);
+        request.setExtSystemErrorSource(TargetEntity.UNKNOWN.toString());
+
+        verify(requestsDbClient, Mockito.times(1)).updateInfraActiveRequests(request);
+    }
+
+    @Test
+    public void updateExtSystemErrorSourceTargetEntityNullTest() {
+        doReturn(request).when(requestsDbClient).getInfraActiveRequestbyRequestId(msoRequestId);
+        doNothing().when(requestsDbClient).updateInfraActiveRequests(request);
+        execution.setVariable("isRollback", false);
+        execution.setVariable("WorkflowException", noExtSystemErrorSourceException);
+        executeBuildingBlockRainyDay.updateExtSystemErrorSource(execution);
+        request.setExtSystemErrorSource(TargetEntity.UNKNOWN.toString());
+
+        verify(requestsDbClient, Mockito.times(1)).updateInfraActiveRequests(request);
+    }
+
+    @Test
+    public void updateExtSystemErrorSourceTargetEntityisRollbackNullTest() {
+        doReturn(request).when(requestsDbClient).getInfraActiveRequestbyRequestId(msoRequestId);
+        doNothing().when(requestsDbClient).updateInfraActiveRequests(request);
+        executionNullisRollback.setVariable("WorkflowException", exception);
+        executeBuildingBlockRainyDay.updateExtSystemErrorSource(executionNullisRollback);
+        request.setExtSystemErrorSource(TargetEntity.SDNC.toString());
+
+        verify(requestsDbClient, Mockito.times(1)).updateInfraActiveRequests(request);
+    }
+}
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/ExecuteBuildlingBlockRainyDayTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/ExecuteBuildlingBlockRainyDayTest.java
index c5da3cb..80373eb 100644
--- a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/ExecuteBuildlingBlockRainyDayTest.java
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/ExecuteBuildlingBlockRainyDayTest.java
@@ -38,6 +38,7 @@
 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
 import org.onap.so.bpmn.servicedecomposition.entities.BuildingBlock;
 import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
+import org.onap.so.constants.Status;
 import org.onap.so.db.catalog.beans.macro.RainyDayHandlerStatus;
 import org.springframework.beans.factory.annotation.Autowired;
 
@@ -207,6 +208,7 @@
         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
 
         assertEquals("Rollback", delegateExecution.getVariable("handlingCode"));
+        assertEquals(Status.ROLLED_BACK.toString(), delegateExecution.getVariable("rollbackTargetState"));
     }
 
     @Test
@@ -232,9 +234,37 @@
         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
 
         assertEquals("RollbackToAssigned", delegateExecution.getVariable("handlingCode"));
+        assertEquals(Status.ROLLED_BACK_TO_ASSIGNED.toString(), delegateExecution.getVariable("rollbackTargetState"));
     }
 
     @Test
+    public void queryRainyDayTableRollbackToCreated() throws Exception {
+        customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
+        serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
+        vnf.setVnfType("vnft1");
+        delegateExecution.setVariable("aLaCarte", true);
+        delegateExecution.setVariable("suppressRollback", false);
+        delegateExecution.setVariable("WorkflowExceptionCode", "7000");
+        RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
+        rainyDayHandlerStatus.setErrorCode("7000");
+        rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
+        rainyDayHandlerStatus.setServiceType("st1");
+        rainyDayHandlerStatus.setVnfType("vnft1");
+        rainyDayHandlerStatus.setPolicy("RollbackToCreated");
+        rainyDayHandlerStatus.setWorkStep(ASTERISK);
+        rainyDayHandlerStatus.setSecondaryPolicy("Abort");
+
+        doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
+                "st1", "vnft1", "7000", "*", "errorMessage");
+
+        executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
+
+        assertEquals("RollbackToCreated", delegateExecution.getVariable("handlingCode"));
+        assertEquals(Status.ROLLED_BACK_TO_CREATED.toString(), delegateExecution.getVariable("rollbackTargetState"));
+    }
+
+
+    @Test
     public void suppressRollbackTest() throws Exception {
         delegateExecution.setVariable("suppressRollback", true);
         delegateExecution.setVariable("aLaCarte", true);
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/exception/ExceptionBuilderTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/exception/ExceptionBuilderTest.java
index 5f9aef6..aae6244 100644
--- a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/exception/ExceptionBuilderTest.java
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/exception/ExceptionBuilderTest.java
@@ -55,6 +55,7 @@
     @Mock
     protected ExtractPojosForBB extractPojosForBB;
 
+
     @Spy
     @InjectMocks
     private ExceptionBuilder exceptionBuilder = new ExceptionBuilder();
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/exception/ExceptionBuilderUnitTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/exception/ExceptionBuilderUnitTest.java
new file mode 100644
index 0000000..b109ae2
--- /dev/null
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/exception/ExceptionBuilderUnitTest.java
@@ -0,0 +1,98 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ================================================================================
+ * 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.client.exception;
+
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.delegate.DelegateExecution;
+import org.camunda.bpm.extension.mockito.delegate.DelegateExecutionFake;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+import org.onap.so.utils.TargetEntity;
+
+@RunWith(MockitoJUnitRunner.class)
+public class ExceptionBuilderUnitTest {
+    @Mock
+    private BuildingBlockExecution buildingBlockExecution;
+
+    @InjectMocks
+    @Spy
+    private ExceptionBuilder exceptionBuilder;
+
+    @Rule
+    public ExpectedException thrown = ExpectedException.none();
+
+    private Exception e = new Exception("failure message");
+    private DelegateExecution execution;
+
+    @Before
+    public void setup() {
+        execution = new DelegateExecutionFake();
+    }
+
+
+    @Test
+    public void buildAndThrowWorkflowExceptionTest() {
+        String expectedErrorMessage =
+                "Exception in org.onap.so.client.exception.ExceptionBuilder.buildAndThrowWorkflowException failure message";
+        doNothing().when(exceptionBuilder).buildAndThrowWorkflowException(execution, 7000, expectedErrorMessage,
+                TargetEntity.SDNC);
+
+        exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, e, TargetEntity.SDNC);
+
+        verify(exceptionBuilder, times(1)).buildAndThrowWorkflowException(execution, 7000, expectedErrorMessage,
+                TargetEntity.SDNC);
+    }
+
+    @Test
+    public void buildAndThrowWorkflowExceptionBuildingBlockExecutionTest() {
+        String expectedErrorMessage =
+                "Exception in org.onap.so.client.exception.ExceptionBuilder.buildAndThrowWorkflowException failure message";
+        doNothing().when(exceptionBuilder).buildAndThrowWorkflowException(buildingBlockExecution, 7000,
+                expectedErrorMessage, TargetEntity.SDNC);
+
+        exceptionBuilder.buildAndThrowWorkflowException(buildingBlockExecution, 7000, e, TargetEntity.SDNC);
+
+        verify(exceptionBuilder, times(1)).buildAndThrowWorkflowException(buildingBlockExecution, 7000,
+                expectedErrorMessage, TargetEntity.SDNC);
+    }
+
+    @Test
+    public void buildAndThrowWorkflowExceptionWithErrorMessageTest() {
+        doReturn("Process key").when(exceptionBuilder).getProcessKey(execution);
+
+        thrown.expect(BpmnError.class);
+        exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, e.getMessage(), TargetEntity.SDNC);
+    }
+}
diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/WorkflowException.java b/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/WorkflowException.java
index 1692045..7d5bb0d 100644
--- a/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/WorkflowException.java
+++ b/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/WorkflowException.java
@@ -21,6 +21,7 @@
 package org.onap.so.bpmn.core;
 
 import java.io.Serializable;
+import org.onap.so.utils.TargetEntities;
 
 /**
  * An object that represents a workflow exception.
@@ -32,6 +33,7 @@
     private final int errorCode;
     private final String errorMessage;
     private final String workStep;
+    private TargetEntities extSystemErrorSource;
 
     /**
      * Constructor
@@ -47,6 +49,15 @@
         workStep = "*";
     }
 
+    public WorkflowException(String processKey, int errorCode, String errorMessage,
+            TargetEntities extSystemErrorSource) {
+        this.processKey = processKey;
+        this.errorCode = errorCode;
+        this.errorMessage = errorMessage;
+        workStep = "*";
+        this.extSystemErrorSource = extSystemErrorSource;
+    }
+
     public WorkflowException(String processKey, int errorCode, String errorMessage, String workStep) {
         this.processKey = processKey;
         this.errorCode = errorCode;
@@ -54,6 +65,15 @@
         this.workStep = workStep;
     }
 
+    public WorkflowException(String processKey, int errorCode, String errorMessage, String workStep,
+            TargetEntities extSystemErrorSource) {
+        this.processKey = processKey;
+        this.errorCode = errorCode;
+        this.errorMessage = errorMessage;
+        this.workStep = workStep;
+        this.extSystemErrorSource = extSystemErrorSource;
+    }
+
     /**
      * Returns the process key.
      */
@@ -82,12 +102,17 @@
         return workStep;
     }
 
+    public TargetEntities getExtSystemErrorSource() {
+        return extSystemErrorSource;
+    }
+
     /**
      * Returns a string representation of this object.
      */
     @Override
     public String toString() {
         return getClass().getSimpleName() + "[processKey=" + getProcessKey() + ",errorCode=" + getErrorCode()
-                + ",errorMessage=" + getErrorMessage() + ",workStep=" + getWorkStep() + "]";
+                + ",errorMessage=" + getErrorMessage() + ",workStep=" + getWorkStep() + ",extSystemErrorSource="
+                + extSystemErrorSource + "]";
     }
 }
diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/domain/RollbackData.java b/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/domain/RollbackData.java
index 633736a..11b717c 100644
--- a/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/domain/RollbackData.java
+++ b/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/domain/RollbackData.java
@@ -29,7 +29,7 @@
     private static final long serialVersionUID = -4811571658272937718L;
 
     private String requestId;
-    private Map<String, String> additionalData = new HashMap<String, String>();
+    private Map<String, String> additionalData = new HashMap<>();
 
 
     public String getRequestId() {
diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/xml/XmlToolTest.java b/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/xml/XmlToolTest.java
index d099cbe..b6bccdb 100644
--- a/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/xml/XmlToolTest.java
+++ b/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/xml/XmlToolTest.java
@@ -28,7 +28,7 @@
     private String encodeResponseNamespace =
             "<Response xmlns:ns2=\"http://ecomp.att.com/mso/request/types/v1\">good</Response>";
     private String attribute = "<Response>good&\"bad\"</Response>";
-    private String updatedAttribute = "&lt;Response&gt;good&amp;&quot;bad&quot;&lt;/Response&gt;";
+    // private String updatedAttribute = "&lt;Response&gt;good&amp;&quot;bad&quot;&lt;/Response&gt;";
 
     private String content = "<dummy><configuration-event>" + "<event-type>test</event-type>"
             + "<event-correlator-type>test</event-correlator-type>" + "<event-correlator>123</event-correlator>"
diff --git a/bpmn/mso-infrastructure-bpmn/src/main/java/org/onap/so/bpmn/common/workflow/service/WorkflowProcessor.java b/bpmn/mso-infrastructure-bpmn/src/main/java/org/onap/so/bpmn/common/workflow/service/WorkflowProcessor.java
index 4e9e9fd..d33e7ae 100644
--- a/bpmn/mso-infrastructure-bpmn/src/main/java/org/onap/so/bpmn/common/workflow/service/WorkflowProcessor.java
+++ b/bpmn/mso-infrastructure-bpmn/src/main/java/org/onap/so/bpmn/common/workflow/service/WorkflowProcessor.java
@@ -45,8 +45,7 @@
     @Async
     public void startProcess(String processKey, VariableMapImpl variableMap) {
 
-        long startTime = System.currentTimeMillis();
-        Map<String, Object> inputVariables = null;
+        Map<String, Object> inputVariables;
         String processInstanceId = null;
         try {
             inputVariables = getInputVariables(variableMap);
diff --git a/bpmn/mso-infrastructure-bpmn/src/main/java/org/onap/so/bpmn/infrastructure/CXFConfiguration.java b/bpmn/mso-infrastructure-bpmn/src/main/java/org/onap/so/bpmn/infrastructure/CXFConfiguration.java
index 6572bea..a049f81 100644
--- a/bpmn/mso-infrastructure-bpmn/src/main/java/org/onap/so/bpmn/infrastructure/CXFConfiguration.java
+++ b/bpmn/mso-infrastructure-bpmn/src/main/java/org/onap/so/bpmn/infrastructure/CXFConfiguration.java
@@ -52,8 +52,6 @@
 @Configuration
 public class CXFConfiguration {
 
-    private static final Logger logger = LoggerFactory.getLogger(CXFConfiguration.class);
-
     @Autowired
     private Bus bus;
 
diff --git a/bpmn/mso-infrastructure-bpmn/src/test/java/org/onap/so/bpmn/common/BPMNUtil.java b/bpmn/mso-infrastructure-bpmn/src/test/java/org/onap/so/bpmn/common/BPMNUtil.java
index f417a55..a94713e 100644
--- a/bpmn/mso-infrastructure-bpmn/src/test/java/org/onap/so/bpmn/common/BPMNUtil.java
+++ b/bpmn/mso-infrastructure-bpmn/src/test/java/org/onap/so/bpmn/common/BPMNUtil.java
@@ -317,7 +317,8 @@
      */
     static class ProcessThread extends Thread {
 
-        public WorkflowResponse workflowResponse = null;
+        public WorkflowResponse workflowResponse;
+        // public WorkflowResponse workflowResponse = null;
         public String processKey;
         public boolean started;
         public ProcessEngineServices processEngineServices;
diff --git a/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/DeleteVfModuleBB.bpmn b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/DeleteVfModuleBB.bpmn
index 33335ab..ca0f845 100644
--- a/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/DeleteVfModuleBB.bpmn
+++ b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/DeleteVfModuleBB.bpmn
@@ -2,13 +2,12 @@
 <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:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.10.0">
   <bpmn:process id="DeleteVfModuleBB" name="DeleteVfModuleBB" isExecutable="true">
     <bpmn:startEvent id="DeleteVfModuleBB_Start">
-      <bpmn:outgoing>SequenceFlow_1537yw5</bpmn:outgoing>
+      <bpmn:outgoing>SequenceFlow_1oeootm</bpmn:outgoing>
     </bpmn:startEvent>
-    <bpmn:serviceTask id="DeleteVfModuleVnfAdapter" name="Delete Vf Module VnfAdapter" camunda:expression="${VnfAdapterDeleteTasks.deleteVfModule(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
-      <bpmn:incoming>SequenceFlow_1n8gab5</bpmn:incoming>
+    <bpmn:serviceTask id="DeleteVfModuleVnfAdapter" name="Prepare Request" camunda:expression="${VnfAdapterDeleteTasks.deleteVfModule(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+      <bpmn:incoming>SequenceFlow_028rmiu</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_08tvhtf</bpmn:outgoing>
     </bpmn:serviceTask>
-    <bpmn:sequenceFlow id="SequenceFlow_1537yw5" sourceRef="DeleteVfModuleBB_Start" targetRef="ExclusiveGateway_0xrgzm7" />
     <bpmn:serviceTask id="UpdateVfModuleDeleteStatus" name="&#10;AAI &#10;Update&#10;(vf module)&#10;" camunda:expression="${AAIUpdateTasks.updateOrchestrationStatusDeleteVfModule(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
       <bpmn:incoming>SequenceFlow_01vfwtp</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_09l7pcg</bpmn:outgoing>
@@ -70,44 +69,22 @@
       <bpmn:incoming>SequenceFlow_0khqfnc</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0yuz21z</bpmn:outgoing>
     </bpmn:serviceTask>
-    <bpmn:sequenceFlow id="SequenceFlow_1n8gab5" sourceRef="ExclusiveGateway_0xrgzm7" targetRef="DeleteVfModuleVnfAdapter" />
-    <bpmn:parallelGateway id="ExclusiveGateway_0xrgzm7">
-      <bpmn:incoming>SequenceFlow_1537yw5</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_1n8gab5</bpmn:outgoing>
-      <bpmn:outgoing>SequenceFlow_1v3jgqe</bpmn:outgoing>
-    </bpmn:parallelGateway>
-    <bpmn:sequenceFlow id="SequenceFlow_032jv5j" name="Yes&#10;" sourceRef="ExclusiveGateway_1h2ystu" targetRef="Setup_Audit_Variable">
+    <bpmn:sequenceFlow id="SequenceFlow_032jv5j" name="Yes&#10;" sourceRef="auditEnabledCheck" targetRef="Setup_Audit_Variable">
       <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("auditInventoryNeeded") == true}]]></bpmn:conditionExpression>
     </bpmn:sequenceFlow>
-    <bpmn:sequenceFlow id="SequenceFlow_0qfmmgt" sourceRef="Audit_Inventory" targetRef="auditSuccessfulCheck" />
     <bpmn:sequenceFlow id="SequenceFlow_14bu4ys" sourceRef="ExclusiveGateway_1yvh16a" targetRef="aaiThrow" />
-    <bpmn:sequenceFlow id="SequenceFlow_1mgunf3" name="No" sourceRef="ExclusiveGateway_1h2ystu" targetRef="ExclusiveGateway_1pydilb" />
     <bpmn:serviceTask id="Check_Audit" name="Check Audit Variable" camunda:expression="${AuditTasks.isDeleteAuditNeeded(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
-      <bpmn:incoming>SequenceFlow_1v3jgqe</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_1odt2wt</bpmn:outgoing>
+      <bpmn:incoming>SequenceFlow_1oeootm</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_10af0fk</bpmn:outgoing>
     </bpmn:serviceTask>
-    <bpmn:sequenceFlow id="SequenceFlow_1v3jgqe" sourceRef="ExclusiveGateway_0xrgzm7" targetRef="Check_Audit" />
-    <bpmn:sequenceFlow id="SequenceFlow_1odt2wt" sourceRef="Check_Audit" targetRef="ExclusiveGateway_1h2ystu" />
-    <bpmn:sequenceFlow id="SequenceFlow_1swistn" sourceRef="Setup_Audit_Variable" targetRef="Audit_Inventory" />
-    <bpmn:serviceTask id="Audit_Inventory" name="Audit Inventory For Delete in AAI" camunda:type="external" camunda:topic="InventoryDeleteAudit">
-      <bpmn:incoming>SequenceFlow_1swistn</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_0qfmmgt</bpmn:outgoing>
+    <bpmn:serviceTask id="Audit_Inventory" name="&#10;AAI&#10;Audit&#10;(vservers)&#10;" camunda:type="external" camunda:topic="InventoryDeleteAudit">
+      <bpmn:incoming>SequenceFlow_0f5ljoh</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0hpj2mm</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:serviceTask id="Setup_Audit_Variable" name="Setup Audit Variable" camunda:expression="${AuditTasks.setupAuditVariable(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
       <bpmn:incoming>SequenceFlow_032jv5j</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_1swistn</bpmn:outgoing>
+      <bpmn:outgoing>SequenceFlow_1iulltd</bpmn:outgoing>
     </bpmn:serviceTask>
-    <bpmn:sequenceFlow id="SequenceFlow_1ut7n32" sourceRef="ExclusiveGateway_1pydilb" targetRef="ExclusiveGateway_1yvh16a" />
-    <bpmn:exclusiveGateway id="ExclusiveGateway_1h2ystu" name="Audit&#10; Enabled?" default="SequenceFlow_1mgunf3">
-      <bpmn:incoming>SequenceFlow_1odt2wt</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_032jv5j</bpmn:outgoing>
-      <bpmn:outgoing>SequenceFlow_1mgunf3</bpmn:outgoing>
-    </bpmn:exclusiveGateway>
-    <bpmn:exclusiveGateway id="ExclusiveGateway_1pydilb">
-      <bpmn:incoming>SequenceFlow_1mgunf3</bpmn:incoming>
-      <bpmn:incoming>SequenceFlow_17cd9e2</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_1ut7n32</bpmn:outgoing>
-    </bpmn:exclusiveGateway>
     <bpmn:subProcess id="SubProcess_0grvkj2" name="Audit Exception Sub Process" triggeredByEvent="true">
       <bpmn:endEvent id="EndEvent_1gzq57j">
         <bpmn:incoming>SequenceFlow_1fhst92</bpmn:incoming>
@@ -120,7 +97,7 @@
       <bpmn:sequenceFlow id="SequenceFlow_1fhst92" sourceRef="ServiceTask_1isbxvo" targetRef="EndEvent_1gzq57j" />
       <bpmn:startEvent id="StartEvent_1euiddy" isInterrupting="false">
         <bpmn:outgoing>SequenceFlow_0xuodpy</bpmn:outgoing>
-        <bpmn:escalationEventDefinition escalationRef="Escalation_130je8j" camunda:escalationCodeVariable="test" />
+        <bpmn:escalationEventDefinition escalationRef="Escalation_130je8j" camunda:escalationCodeVariable="auditCode" />
       </bpmn:startEvent>
     </bpmn:subProcess>
     <bpmn:sequenceFlow id="SequenceFlow_179btn2" sourceRef="aaiCatch" targetRef="DeleteNetworkPolicies" />
@@ -132,19 +109,14 @@
       <bpmn:outgoing>SequenceFlow_179btn2</bpmn:outgoing>
       <bpmn:linkEventDefinition name="AAI" />
     </bpmn:intermediateCatchEvent>
-    <bpmn:sequenceFlow id="SequenceFlow_17cd9e2" name="Yes/No" sourceRef="auditSuccessfulCheck" targetRef="ExclusiveGateway_1pydilb">
+    <bpmn:sequenceFlow id="SequenceFlow_17cd9e2" name="Yes/No" sourceRef="auditSuccessfulCheck" targetRef="ExclusiveGateway_01wvywu">
       <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("auditIsSuccessful") == false || execution.getVariable("auditIsSuccessful") == true}]]></bpmn:conditionExpression>
     </bpmn:sequenceFlow>
     <bpmn:sequenceFlow id="SequenceFlow_1gdyk9j" name="No" sourceRef="auditSuccessfulCheck" targetRef="EndEvent_0b0ocu0">
       <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("auditIsSuccessful") == false}]]></bpmn:conditionExpression>
     </bpmn:sequenceFlow>
-    <bpmn:inclusiveGateway id="ExclusiveGateway_1yvh16a">
-      <bpmn:incoming>SequenceFlow_02lpx87</bpmn:incoming>
-      <bpmn:incoming>SequenceFlow_1ut7n32</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_14bu4ys</bpmn:outgoing>
-    </bpmn:inclusiveGateway>
     <bpmn:inclusiveGateway id="auditSuccessfulCheck" name="Audit&#10; Successful?">
-      <bpmn:incoming>SequenceFlow_0qfmmgt</bpmn:incoming>
+      <bpmn:incoming>SequenceFlow_0hpj2mm</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_17cd9e2</bpmn:outgoing>
       <bpmn:outgoing>SequenceFlow_1gdyk9j</bpmn:outgoing>
     </bpmn:inclusiveGateway>
@@ -152,6 +124,54 @@
       <bpmn:incoming>SequenceFlow_1gdyk9j</bpmn:incoming>
       <bpmn:escalationEventDefinition escalationRef="Escalation_130je8j" />
     </bpmn:endEvent>
+    <bpmn:exclusiveGateway id="auditEnabledCheck" name="Audit&#10; Enabled?" default="SequenceFlow_1bt1p2u">
+      <bpmn:incoming>SequenceFlow_10af0fk</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_032jv5j</bpmn:outgoing>
+      <bpmn:outgoing>SequenceFlow_1bt1p2u</bpmn:outgoing>
+    </bpmn:exclusiveGateway>
+    <bpmn:exclusiveGateway id="ExclusiveGateway_1t9q2jl">
+      <bpmn:incoming>SequenceFlow_1bt1p2u</bpmn:incoming>
+      <bpmn:incoming>SequenceFlow_0dzf7hz</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_1bq9g02</bpmn:outgoing>
+    </bpmn:exclusiveGateway>
+    <bpmn:sequenceFlow id="SequenceFlow_1bt1p2u" name="No" sourceRef="auditEnabledCheck" targetRef="ExclusiveGateway_1t9q2jl" />
+    <bpmn:sequenceFlow id="SequenceFlow_1oeootm" sourceRef="DeleteVfModuleBB_Start" targetRef="Check_Audit" />
+    <bpmn:sequenceFlow id="SequenceFlow_10af0fk" sourceRef="Check_Audit" targetRef="auditEnabledCheck" />
+    <bpmn:serviceTask id="aicQueryStack" name="&#10;AIC&#10;Query&#10;(stack)&#10;" camunda:type="external" camunda:topic="InventoryQueryAudit">
+      <bpmn:incoming>SequenceFlow_1iulltd</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0dzf7hz</bpmn:outgoing>
+    </bpmn:serviceTask>
+    <bpmn:sequenceFlow id="SequenceFlow_1iulltd" sourceRef="Setup_Audit_Variable" targetRef="aicQueryStack" />
+    <bpmn:sequenceFlow id="SequenceFlow_0dzf7hz" sourceRef="aicQueryStack" targetRef="ExclusiveGateway_1t9q2jl" />
+    <bpmn:sequenceFlow id="SequenceFlow_1bq9g02" sourceRef="ExclusiveGateway_1t9q2jl" targetRef="ExclusiveGateway_1naduhl" />
+    <bpmn:sequenceFlow id="SequenceFlow_0mtzl4z" sourceRef="ExclusiveGateway_1naduhl" targetRef="ExclusiveGateway_13fhmpf" />
+    <bpmn:sequenceFlow id="SequenceFlow_028rmiu" sourceRef="ExclusiveGateway_1naduhl" targetRef="DeleteVfModuleVnfAdapter" />
+    <bpmn:parallelGateway id="ExclusiveGateway_1naduhl">
+      <bpmn:incoming>SequenceFlow_1bq9g02</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0mtzl4z</bpmn:outgoing>
+      <bpmn:outgoing>SequenceFlow_028rmiu</bpmn:outgoing>
+    </bpmn:parallelGateway>
+    <bpmn:inclusiveGateway id="ExclusiveGateway_1yvh16a">
+      <bpmn:incoming>SequenceFlow_02lpx87</bpmn:incoming>
+      <bpmn:incoming>SequenceFlow_13mlz57</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_14bu4ys</bpmn:outgoing>
+    </bpmn:inclusiveGateway>
+    <bpmn:sequenceFlow id="SequenceFlow_0hpj2mm" sourceRef="Audit_Inventory" targetRef="auditSuccessfulCheck" />
+    <bpmn:exclusiveGateway id="ExclusiveGateway_13fhmpf" name="Audit&#10; Enabled?" default="SequenceFlow_1gjwivp">
+      <bpmn:incoming>SequenceFlow_0mtzl4z</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0f5ljoh</bpmn:outgoing>
+      <bpmn:outgoing>SequenceFlow_1gjwivp</bpmn:outgoing>
+    </bpmn:exclusiveGateway>
+    <bpmn:sequenceFlow id="SequenceFlow_0f5ljoh" name="Yes" sourceRef="ExclusiveGateway_13fhmpf" targetRef="Audit_Inventory">
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("auditInventoryNeeded") == true}]]></bpmn:conditionExpression>
+    </bpmn:sequenceFlow>
+    <bpmn:exclusiveGateway id="ExclusiveGateway_01wvywu">
+      <bpmn:incoming>SequenceFlow_17cd9e2</bpmn:incoming>
+      <bpmn:incoming>SequenceFlow_1gjwivp</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_13mlz57</bpmn:outgoing>
+    </bpmn:exclusiveGateway>
+    <bpmn:sequenceFlow id="SequenceFlow_1gjwivp" name="No" sourceRef="ExclusiveGateway_13fhmpf" targetRef="ExclusiveGateway_01wvywu" />
+    <bpmn:sequenceFlow id="SequenceFlow_13mlz57" sourceRef="ExclusiveGateway_01wvywu" targetRef="ExclusiveGateway_1yvh16a" />
   </bpmn:process>
   <bpmn:error id="Error_0jjnve8" name="Error_3k24na6" errorCode="AAIInventoryFailure" />
   <bpmn:escalation id="Escalation_130je8j" name="audit" escalationCode="audit1" />
@@ -164,40 +184,33 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ServiceTask_16798zf_di" bpmnElement="DeleteVfModuleVnfAdapter">
-        <dc:Bounds x="382" y="303" width="100" height="80" />
+        <dc:Bounds x="888" y="312" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1537yw5_di" bpmnElement="SequenceFlow_1537yw5">
-        <di:waypoint xsi:type="dc:Point" x="195" y="284" />
-        <di:waypoint xsi:type="dc:Point" x="282" y="284" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="194" y="263" width="90" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ServiceTask_0pbhsub_di" bpmnElement="UpdateVfModuleDeleteStatus">
         <dc:Bounds x="907" y="468" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_08tvhtf_di" bpmnElement="SequenceFlow_08tvhtf">
-        <di:waypoint xsi:type="dc:Point" x="482" y="343" />
-        <di:waypoint xsi:type="dc:Point" x="511" y="343" />
+        <di:waypoint xsi:type="dc:Point" x="988" y="352" />
+        <di:waypoint xsi:type="dc:Point" x="1020" y="352" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="452" y="322" width="90" height="12" />
+          <dc:Bounds x="959" y="331" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="EndEvent_1rn6yvh_di" bpmnElement="DeleteVfModuleBB_End">
-        <dc:Bounds x="1136" y="490" width="36" height="36" />
+        <dc:Bounds x="1268" y="490" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1109" y="530" width="90" height="0" />
+          <dc:Bounds x="1241" y="530" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="CallActivity_0whogn3_di" bpmnElement="VnfAdapter">
-        <dc:Bounds x="511" y="303" width="100" height="80" />
+        <dc:Bounds x="1020" y="312" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_02lpx87_di" bpmnElement="SequenceFlow_02lpx87">
-        <di:waypoint xsi:type="dc:Point" x="611" y="343" />
-        <di:waypoint xsi:type="dc:Point" x="925" y="343" />
-        <di:waypoint xsi:type="dc:Point" x="925" y="309" />
+        <di:waypoint xsi:type="dc:Point" x="1120" y="352" />
+        <di:waypoint xsi:type="dc:Point" x="1203" y="352" />
+        <di:waypoint xsi:type="dc:Point" x="1203" y="309" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="723" y="328" width="90" height="0" />
+          <dc:Bounds x="1116.5" y="337" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="SubProcess_11p7mrh_di" bpmnElement="SubProcess_11p7mrh" isExpanded="true">
@@ -234,9 +247,9 @@
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_09l7pcg_di" bpmnElement="SequenceFlow_09l7pcg">
         <di:waypoint xsi:type="dc:Point" x="1007" y="508" />
-        <di:waypoint xsi:type="dc:Point" x="1136" y="508" />
+        <di:waypoint xsi:type="dc:Point" x="1268" y="508" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1027" y="493" width="90" height="0" />
+          <dc:Bounds x="1092.5" y="493" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0xyu3pk_di" bpmnElement="SequenceFlow_0xyu3pk">
@@ -279,101 +292,29 @@
       <bpmndi:BPMNShape id="ServiceTask_0v8naz9_di" bpmnElement="UpdateVfModuleContrailServiceInstanceFqdn">
         <dc:Bounds x="654" y="468" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1n8gab5_di" bpmnElement="SequenceFlow_1n8gab5">
-        <di:waypoint xsi:type="dc:Point" x="307" y="309" />
-        <di:waypoint xsi:type="dc:Point" x="307" y="343" />
-        <di:waypoint xsi:type="dc:Point" x="382" y="343" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="277" y="320" width="90" height="13" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ParallelGateway_18x6mx2_di" bpmnElement="ExclusiveGateway_0xrgzm7">
-        <dc:Bounds x="282" y="259" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="262" y="312" width="90" height="13" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_032jv5j_di" bpmnElement="SequenceFlow_032jv5j">
-        <di:waypoint xsi:type="dc:Point" x="492" y="174" />
-        <di:waypoint xsi:type="dc:Point" x="492" y="133" />
-        <di:waypoint xsi:type="dc:Point" x="531" y="133" />
+        <di:waypoint xsi:type="dc:Point" x="397" y="259" />
+        <di:waypoint xsi:type="dc:Point" x="397" y="214" />
+        <di:waypoint xsi:type="dc:Point" x="444" y="214" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="499" y="139" width="19" height="24" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0qfmmgt_di" bpmnElement="SequenceFlow_0qfmmgt">
-        <di:waypoint xsi:type="dc:Point" x="754" y="133" />
-        <di:waypoint xsi:type="dc:Point" x="780" y="133" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="722" y="111.5" width="90" height="13" />
+          <dc:Bounds x="405.5348837209302" y="217.95121951219514" width="19" height="24" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_14bu4ys_di" bpmnElement="SequenceFlow_14bu4ys">
-        <di:waypoint xsi:type="dc:Point" x="950" y="284" />
-        <di:waypoint xsi:type="dc:Point" x="1100" y="283" />
+        <di:waypoint xsi:type="dc:Point" x="1228" y="284" />
+        <di:waypoint xsi:type="dc:Point" x="1323" y="284" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="980" y="262" width="90" height="13" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1mgunf3_di" bpmnElement="SequenceFlow_1mgunf3">
-        <di:waypoint xsi:type="dc:Point" x="492" y="224" />
-        <di:waypoint xsi:type="dc:Point" x="492" y="257" />
-        <di:waypoint xsi:type="dc:Point" x="868" y="257" />
-        <di:waypoint xsi:type="dc:Point" x="868" y="224" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="503.9261744966443" y="237" width="14" height="12" />
+          <dc:Bounds x="1230.5" y="262.5" width="90" height="13" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ServiceTask_1vmz3zo_di" bpmnElement="Check_Audit">
-        <dc:Bounds x="339" y="159" width="100" height="80" />
+        <dc:Bounds x="244" y="244" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1v3jgqe_di" bpmnElement="SequenceFlow_1v3jgqe">
-        <di:waypoint xsi:type="dc:Point" x="307" y="259" />
-        <di:waypoint xsi:type="dc:Point" x="307" y="199" />
-        <di:waypoint xsi:type="dc:Point" x="339" y="199" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="277" y="223" width="90" height="13" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1odt2wt_di" bpmnElement="SequenceFlow_1odt2wt">
-        <di:waypoint xsi:type="dc:Point" x="439" y="199" />
-        <di:waypoint xsi:type="dc:Point" x="467" y="199" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="408" y="178" width="90" height="13" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1swistn_di" bpmnElement="SequenceFlow_1swistn">
-        <di:waypoint xsi:type="dc:Point" x="631" y="133" />
-        <di:waypoint xsi:type="dc:Point" x="654" y="133" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="598" y="112" width="90" height="13" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ServiceTask_1l8r2a6_di" bpmnElement="Audit_Inventory">
-        <dc:Bounds x="654" y="93" width="100" height="80" />
+        <dc:Bounds x="930" y="117" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ServiceTask_1gttdjr_di" bpmnElement="Setup_Audit_Variable">
-        <dc:Bounds x="531" y="93" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1ut7n32_di" bpmnElement="SequenceFlow_1ut7n32">
-        <di:waypoint xsi:type="dc:Point" x="893" y="199" />
-        <di:waypoint xsi:type="dc:Point" x="925" y="199" />
-        <di:waypoint xsi:type="dc:Point" x="925" y="259" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="864" y="177.5" width="90" height="13" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ExclusiveGateway_1olwkdn_di" bpmnElement="ExclusiveGateway_1h2ystu" isMarkerVisible="true">
-        <dc:Bounds x="467" y="174" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="519" y="187" width="45" height="24" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ExclusiveGateway_1d1pmqz_di" bpmnElement="ExclusiveGateway_1pydilb" isMarkerVisible="true">
-        <dc:Bounds x="843" y="174" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="733" y="227" width="90" height="13" />
-        </bpmndi:BPMNLabel>
+        <dc:Bounds x="444" y="174" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="SubProcess_0grvkj2_di" bpmnElement="SubProcess_0grvkj2" isExpanded="true">
         <dc:Bounds x="231" y="642" width="350" height="200" />
@@ -409,9 +350,9 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="IntermediateThrowEvent_1sftyjz_di" bpmnElement="aaiThrow">
-        <dc:Bounds x="1100" y="266" width="36" height="36" />
+        <dc:Bounds x="1323" y="266" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1092" y="305" width="55" height="12" />
+          <dc:Bounds x="1315" y="305" width="55" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="IntermediateCatchEvent_13y483m_di" bpmnElement="aaiCatch">
@@ -421,30 +362,26 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_17cd9e2_di" bpmnElement="SequenceFlow_17cd9e2">
-        <di:waypoint xsi:type="dc:Point" x="830" y="133" />
-        <di:waypoint xsi:type="dc:Point" x="868" y="133" />
-        <di:waypoint xsi:type="dc:Point" x="868" y="174" />
+        <di:waypoint xsi:type="dc:Point" x="1108" y="157" />
+        <di:waypoint xsi:type="dc:Point" x="1156" y="157" />
+        <di:waypoint xsi:type="dc:Point" x="1156" y="189" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="830" y="114" width="36" height="12" />
+          <dc:Bounds x="1111.0434782608695" y="137" width="36" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1gdyk9j_di" bpmnElement="SequenceFlow_1gdyk9j">
-        <di:waypoint xsi:type="dc:Point" x="805" y="108" />
-        <di:waypoint xsi:type="dc:Point" x="805" y="56" />
+        <di:waypoint xsi:type="dc:Point" x="1083" y="132" />
+        <di:waypoint xsi:type="dc:Point" x="1083" y="109" />
+        <di:waypoint xsi:type="dc:Point" x="1083" y="109" />
+        <di:waypoint xsi:type="dc:Point" x="1083" y="84" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="812" y="77" width="14" height="12" />
+          <dc:Bounds x="1083" y="110.74468085106383" width="14" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="InclusiveGateway_0cjvlht_di" bpmnElement="ExclusiveGateway_1yvh16a">
-        <dc:Bounds x="900" y="259" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="879" y="312" width="0" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="InclusiveGateway_0i6rdd1_di" bpmnElement="auditSuccessfulCheck">
-        <dc:Bounds x="780" y="108" width="50" height="50" />
+        <dc:Bounds x="1058" y="132" width="50" height="50" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="775" y="162" width="60" height="24" />
+          <dc:Bounds x="1053" y="186" width="60" height="24" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="StartEvent_04qhoba_di" bpmnElement="StartEvent_1euiddy">
@@ -454,11 +391,143 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="EndEvent_1onxfk1_di" bpmnElement="EndEvent_0b0ocu0">
-        <dc:Bounds x="787" y="20" width="36" height="36" />
+        <dc:Bounds x="1065" y="48" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="760" y="59" width="0" height="12" />
+          <dc:Bounds x="1024" y="87" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ExclusiveGateway_05scr6c_di" bpmnElement="auditEnabledCheck" isMarkerVisible="true">
+        <dc:Bounds x="371.6051332675222" y="259" width="50" height="50" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="421" y="272" width="45" height="24" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ExclusiveGateway_1t9q2jl_di" bpmnElement="ExclusiveGateway_1t9q2jl" isMarkerVisible="true">
+        <dc:Bounds x="697" y="259" width="50" height="50" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="677" y="313" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_1bt1p2u_di" bpmnElement="SequenceFlow_1bt1p2u">
+        <di:waypoint xsi:type="dc:Point" x="397" y="309" />
+        <di:waypoint xsi:type="dc:Point" x="397" y="352" />
+        <di:waypoint xsi:type="dc:Point" x="722" y="352" />
+        <di:waypoint xsi:type="dc:Point" x="722" y="309" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="407" y="326" width="14" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1oeootm_di" bpmnElement="SequenceFlow_1oeootm">
+        <di:waypoint xsi:type="dc:Point" x="195" y="284" />
+        <di:waypoint xsi:type="dc:Point" x="244" y="284" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="219.5" y="263" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_10af0fk_di" bpmnElement="SequenceFlow_10af0fk">
+        <di:waypoint xsi:type="dc:Point" x="344" y="284" />
+        <di:waypoint xsi:type="dc:Point" x="372" y="284" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="358" y="263" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ServiceTask_1l7z1c0_di" bpmnElement="aicQueryStack">
+        <dc:Bounds x="571" y="174" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_1iulltd_di" bpmnElement="SequenceFlow_1iulltd">
+        <di:waypoint xsi:type="dc:Point" x="544" y="214" />
+        <di:waypoint xsi:type="dc:Point" x="571" y="214" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="557.5" y="193" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0dzf7hz_di" bpmnElement="SequenceFlow_0dzf7hz">
+        <di:waypoint xsi:type="dc:Point" x="671" y="214" />
+        <di:waypoint xsi:type="dc:Point" x="722" y="214" />
+        <di:waypoint xsi:type="dc:Point" x="722" y="259" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="651.5" y="193" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1bq9g02_di" bpmnElement="SequenceFlow_1bq9g02">
+        <di:waypoint xsi:type="dc:Point" x="747" y="284" />
+        <di:waypoint xsi:type="dc:Point" x="796" y="284" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="726.5" y="263" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0mtzl4z_di" bpmnElement="SequenceFlow_0mtzl4z">
+        <di:waypoint xsi:type="dc:Point" x="821" y="259" />
+        <di:waypoint xsi:type="dc:Point" x="821" y="214" />
+        <di:waypoint xsi:type="dc:Point" x="846" y="214" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="791" y="231" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_028rmiu_di" bpmnElement="SequenceFlow_028rmiu">
+        <di:waypoint xsi:type="dc:Point" x="821" y="309" />
+        <di:waypoint xsi:type="dc:Point" x="821" y="352" />
+        <di:waypoint xsi:type="dc:Point" x="888" y="352" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="791" y="324.5" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ParallelGateway_1we1ooj_di" bpmnElement="ExclusiveGateway_1naduhl">
+        <dc:Bounds x="796" y="259" width="50" height="50" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="775" y="313" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="InclusiveGateway_07wvmp4_di" bpmnElement="ExclusiveGateway_1yvh16a">
+        <dc:Bounds x="1178" y="259" width="50" height="50" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1067" y="312" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0hpj2mm_di" bpmnElement="SequenceFlow_0hpj2mm">
+        <di:waypoint xsi:type="dc:Point" x="1030" y="157" />
+        <di:waypoint xsi:type="dc:Point" x="1058" y="157" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="999" y="136" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ExclusiveGateway_13fhmpf_di" bpmnElement="ExclusiveGateway_13fhmpf" isMarkerVisible="true">
+        <dc:Bounds x="846" y="189" width="50" height="50" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="898" y="202" width="45" height="24" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0f5ljoh_di" bpmnElement="SequenceFlow_0f5ljoh">
+        <di:waypoint xsi:type="dc:Point" x="871" y="189" />
+        <di:waypoint xsi:type="dc:Point" x="871" y="157" />
+        <di:waypoint xsi:type="dc:Point" x="930" y="157" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="877.601615925754" y="162.89580806038546" width="19" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ExclusiveGateway_01wvywu_di" bpmnElement="ExclusiveGateway_01wvywu" isMarkerVisible="true">
+        <dc:Bounds x="1131" y="189" width="50" height="50" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1111" y="243" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_1gjwivp_di" bpmnElement="SequenceFlow_1gjwivp">
+        <di:waypoint xsi:type="dc:Point" x="871" y="239" />
+        <di:waypoint xsi:type="dc:Point" x="871" y="266" />
+        <di:waypoint xsi:type="dc:Point" x="1156" y="266" />
+        <di:waypoint xsi:type="dc:Point" x="1156" y="239" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="879" y="244" width="14" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_13mlz57_di" bpmnElement="SequenceFlow_13mlz57">
+        <di:waypoint xsi:type="dc:Point" x="1181" y="214" />
+        <di:waypoint xsi:type="dc:Point" x="1203" y="214" />
+        <di:waypoint xsi:type="dc:Point" x="1203" y="259" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1147" y="193" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
 </bpmn:definitions>
diff --git a/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/ExecuteBuildingBlock.bpmn b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/ExecuteBuildingBlock.bpmn
index 0a6a773..e64c44e 100644
--- a/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/ExecuteBuildingBlock.bpmn
+++ b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/ExecuteBuildingBlock.bpmn
@@ -11,6 +11,7 @@
         <camunda:in source="mso-request-id" target="mso-request-id" />
         <camunda:out source="WorkflowExceptionErrorMessage" target="WorkflowExceptionErrorMessage" />
         <camunda:out source="StatusMessage" target="StatusMessage" />
+        <camunda:in source="isRollback" target="isRollback" />
       </bpmn:extensionElements>
       <bpmn:incoming>SequenceFlow_19wuics</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_01h9qmz</bpmn:outgoing>
@@ -37,13 +38,8 @@
     </bpmn:exclusiveGateway>
     <bpmn:sequenceFlow id="SequenceFlow_0je0y25" sourceRef="StatusPolicy" targetRef="CheckOrchestrationStatusValidationResults" />
     <bpmn:subProcess id="SubProcess_0tv8zda" name="Error Handling&#10;&#10;" triggeredByEvent="true">
-      <bpmn:startEvent id="StartEvent_0tmcs9g">
-        <bpmn:outgoing>SequenceFlow_09synl9</bpmn:outgoing>
-        <bpmn:errorEventDefinition camunda:errorCodeVariable="WorkflowExceptionCode" camunda:errorMessageVariable="WorkflowExceptionMessage" />
-      </bpmn:startEvent>
-      <bpmn:sequenceFlow id="SequenceFlow_09synl9" sourceRef="StartEvent_0tmcs9g" targetRef="Task_QueryRainyDayTable" />
       <bpmn:serviceTask id="Task_QueryRainyDayTable" name="QueryRainyDayTable" camunda:expression="${ExecuteBuildingBlockRainyDay.queryRainyDayTable(execution,true)}">
-        <bpmn:incoming>SequenceFlow_09synl9</bpmn:incoming>
+        <bpmn:incoming>SequenceFlow_0vdeqxv</bpmn:incoming>
         <bpmn:outgoing>SequenceFlow_0a62t4c</bpmn:outgoing>
       </bpmn:serviceTask>
       <bpmn:exclusiveGateway id="ExclusiveGateway_1aonzik" name="Check HandlingCode" default="SequenceFlow_0h8v45y">
@@ -93,6 +89,16 @@
         <bpmn:incoming>SequenceFlow_0541bid</bpmn:incoming>
         <bpmn:outgoing>SequenceFlow_12ps9at</bpmn:outgoing>
       </bpmn:serviceTask>
+      <bpmn:sequenceFlow id="SequenceFlow_0vdeqxv" sourceRef="Task_UpdateExtErrorSource" targetRef="Task_QueryRainyDayTable" />
+      <bpmn:sequenceFlow id="SequenceFlow_09synl9" sourceRef="StartEvent_0tmcs9g" targetRef="Task_UpdateExtErrorSource" />
+      <bpmn:startEvent id="StartEvent_0tmcs9g">
+        <bpmn:outgoing>SequenceFlow_09synl9</bpmn:outgoing>
+        <bpmn:errorEventDefinition camunda:errorCodeVariable="WorkflowExceptionCode" camunda:errorMessageVariable="WorkflowExceptionMessage" />
+      </bpmn:startEvent>
+      <bpmn:serviceTask id="Task_UpdateExtErrorSource" name="Update ExtErrorSource" camunda:expression="${ExecuteBuildingBlockRainyDay.updateExtSystemErrorSource(execution)}">
+        <bpmn:incoming>SequenceFlow_09synl9</bpmn:incoming>
+        <bpmn:outgoing>SequenceFlow_0vdeqxv</bpmn:outgoing>
+      </bpmn:serviceTask>
     </bpmn:subProcess>
     <bpmn:sequenceFlow id="SequenceFlow_16lmcxp" sourceRef="Task_setHandlingCodeSuccess" targetRef="End_ExecuteBuildingBlock" />
     <bpmn:sequenceFlow id="SequenceFlow_1j0vskt" name="Silent Success" sourceRef="CheckOrchestrationStatusValidationResults" targetRef="Task_setHandlingCodeSuccess">
@@ -163,63 +169,63 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ExclusiveGateway_0ey4zpt_di" bpmnElement="ExclusiveGateway_0ey4zpt" isMarkerVisible="true">
-        <dc:Bounds x="721" y="385" width="50" height="50" />
+        <dc:Bounds x="692" y="389" width="50" height="50" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="716" y="360" width="63" height="13" />
+          <dc:Bounds x="686" y="364" width="65" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="IntermediateCatchEvent_0qjyidb_di" bpmnElement="IntermediateCatchEvent_RetryTimer">
-        <dc:Bounds x="965" y="392" width="36" height="36" />
+        <dc:Bounds x="936" y="396" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="956" y="367" width="55" height="13" />
+          <dc:Bounds x="927" y="371" width="56" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ExclusiveGateway_1aonzik_di" bpmnElement="ExclusiveGateway_1aonzik" isMarkerVisible="true">
-        <dc:Bounds x="568" y="385" width="50" height="50" />
+        <dc:Bounds x="539" y="389" width="50" height="50" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="558" y="347" width="70" height="25" />
+          <dc:Bounds x="528" y="351" width="72" height="24" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1wbevp0_di" bpmnElement="SequenceFlow_1wbevp0">
-        <di:waypoint xsi:type="dc:Point" x="771" y="410" />
-        <di:waypoint xsi:type="dc:Point" x="836" y="410" />
+        <di:waypoint xsi:type="dc:Point" x="742" y="414" />
+        <di:waypoint xsi:type="dc:Point" x="807" y="414" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="788" y="385" width="18" height="13" />
+          <dc:Bounds x="759" y="389" width="19" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0fwsjva_di" bpmnElement="SequenceFlow_0fwsjva">
-        <di:waypoint xsi:type="dc:Point" x="618" y="410" />
-        <di:waypoint xsi:type="dc:Point" x="721" y="410" />
+        <di:waypoint xsi:type="dc:Point" x="589" y="414" />
+        <di:waypoint xsi:type="dc:Point" x="692" y="414" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="656" y="418" width="27" height="13" />
+          <dc:Bounds x="627" y="422" width="28" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0h8v45y_di" bpmnElement="SequenceFlow_0h8v45y">
-        <di:waypoint xsi:type="dc:Point" x="593" y="435" />
-        <di:waypoint xsi:type="dc:Point" x="593" y="491" />
+        <di:waypoint xsi:type="dc:Point" x="564" y="439" />
+        <di:waypoint xsi:type="dc:Point" x="564" y="495" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="600" y="456" width="85" height="13" />
+          <dc:Bounds x="570" y="460" width="88" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ServiceTask_1tifgqh_di" bpmnElement="Task_QueryRainyDayTable">
-        <dc:Bounds x="425" y="370" width="100" height="80" />
+        <dc:Bounds x="396" y="374" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0ndt8ft_di" bpmnElement="SequenceFlow_0ndt8ft">
-        <di:waypoint xsi:type="dc:Point" x="936" y="410" />
-        <di:waypoint xsi:type="dc:Point" x="965" y="410" />
+        <di:waypoint xsi:type="dc:Point" x="907" y="414" />
+        <di:waypoint xsi:type="dc:Point" x="936" y="414" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="906" y="389" width="90" height="12" />
+          <dc:Bounds x="877" y="393" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_07a1ytc_di" bpmnElement="SequenceFlow_07a1ytc">
-        <di:waypoint xsi:type="dc:Point" x="1001" y="410" />
-        <di:waypoint xsi:type="dc:Point" x="1039" y="410" />
+        <di:waypoint xsi:type="dc:Point" x="972" y="414" />
+        <di:waypoint xsi:type="dc:Point" x="1010" y="414" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="975" y="389" width="90" height="12" />
+          <dc:Bounds x="946" y="393" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ServiceTask_1obvxht_di" bpmnElement="Task_SetRetryTimer">
-        <dc:Bounds x="836" y="370" width="100" height="80" />
+        <dc:Bounds x="807" y="374" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0kdjsnx_di" bpmnElement="Continue">
         <di:waypoint xsi:type="dc:Point" x="508" y="180" />
@@ -245,38 +251,25 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0a62t4c_di" bpmnElement="SequenceFlow_0a62t4c">
-        <di:waypoint xsi:type="dc:Point" x="525" y="410" />
-        <di:waypoint xsi:type="dc:Point" x="568" y="410" />
+        <di:waypoint xsi:type="dc:Point" x="496" y="414" />
+        <di:waypoint xsi:type="dc:Point" x="539" y="414" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="502" y="389" width="90" height="13" />
+          <dc:Bounds x="473" y="393" width="90" height="13" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="SubProcess_0tv8zda_di" bpmnElement="SubProcess_0tv8zda" isExpanded="true">
-        <dc:Bounds x="320" y="294" width="802" height="290" />
+        <dc:Bounds x="171" y="298" width="922" height="295" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="StartEvent_0tmcs9g_di" bpmnElement="StartEvent_0tmcs9g">
-        <dc:Bounds x="340" y="392" width="36" height="36" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="223" y="428" width="90" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_09synl9_di" bpmnElement="SequenceFlow_09synl9">
-        <di:waypoint xsi:type="dc:Point" x="376" y="410" />
-        <di:waypoint xsi:type="dc:Point" x="425" y="410" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="356" y="389" width="90" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="EndEvent_0mvmk3i_di" bpmnElement="EndEvent_0mvmk3i">
-        <dc:Bounds x="575" y="491" width="36" height="36" />
+        <dc:Bounds x="546" y="495" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="548" y="531" width="90" height="12" />
+          <dc:Bounds x="519" y="535" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="EndEvent_1aww7yx_di" bpmnElement="EndEvent_1sez2lh">
-        <dc:Bounds x="1039" y="392" width="36" height="36" />
+        <dc:Bounds x="1010" y="396" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1049" y="432" width="19" height="13" />
+          <dc:Bounds x="1020" y="436" width="20" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_16lmcxp_di" bpmnElement="SequenceFlow_16lmcxp">
@@ -319,27 +312,50 @@
         <dc:Bounds x="906" y="140" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0541bid_di" bpmnElement="SequenceFlow_0541bid">
-        <di:waypoint xsi:type="dc:Point" x="746" y="435" />
-        <di:waypoint xsi:type="dc:Point" x="746" y="459" />
+        <di:waypoint xsi:type="dc:Point" x="717" y="439" />
+        <di:waypoint xsi:type="dc:Point" x="717" y="463" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="757" y="436" width="13" height="13" />
+          <dc:Bounds x="728" y="440" width="13" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_12ps9at_di" bpmnElement="SequenceFlow_12ps9at">
-        <di:waypoint xsi:type="dc:Point" x="796" y="499" />
-        <di:waypoint xsi:type="dc:Point" x="868" y="499" />
+        <di:waypoint xsi:type="dc:Point" x="767" y="503" />
+        <di:waypoint xsi:type="dc:Point" x="839" y="503" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="787" y="478" width="90" height="12" />
+          <dc:Bounds x="758" y="482" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="EndEvent_05vw85n_di" bpmnElement="EndEvent_0ex9298">
-        <dc:Bounds x="868" y="481" width="36" height="36" />
+        <dc:Bounds x="839" y="485" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="877" y="521" width="19" height="13" />
+          <dc:Bounds x="848" y="525" width="20" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ServiceTask_11f2c91_di" bpmnElement="Task_QuerySecondaryPolicy">
-        <dc:Bounds x="696" y="459" width="100" height="80" />
+        <dc:Bounds x="667" y="463" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0vdeqxv_di" bpmnElement="SequenceFlow_0vdeqxv">
+        <di:waypoint xsi:type="dc:Point" x="361" y="414" />
+        <di:waypoint xsi:type="dc:Point" x="396" y="414" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="378.5" y="393" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="StartEvent_0tmcs9g_di" bpmnElement="StartEvent_0tmcs9g">
+        <dc:Bounds x="196" y="396" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="79" y="432" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_09synl9_di" bpmnElement="SequenceFlow_09synl9">
+        <di:waypoint xsi:type="dc:Point" x="232" y="414" />
+        <di:waypoint xsi:type="dc:Point" x="261" y="414" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="201.5" y="393" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ServiceTask_10v49qn_di" bpmnElement="Task_UpdateExtErrorSource">
+        <dc:Bounds x="261" y="374" width="100" height="80" />
       </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
diff --git a/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/HomingBB.bpmn b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/HomingBB.bpmn
index b66ecfa..11227ed 100644
--- a/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/HomingBB.bpmn
+++ b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/HomingBB.bpmn
@@ -50,6 +50,7 @@
         <camunda:in source="asyncCorrelator" target="RCVWFMSG_correlator" />
         <camunda:in source="asyncTimeout" target="RCVWFMSG_timeout" />
         <camunda:out source="WorkflowResponse" target="asyncResponse" />
+        <camunda:in source="mso-request-id" target="mso-request-id" />
       </bpmn2:extensionElements>
       <bpmn2:incoming>SequenceFlow_0qrwjzu</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_03cy5y5</bpmn2:outgoing>
diff --git a/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/WorkflowActionBB.bpmn b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/WorkflowActionBB.bpmn
index 35b77d9..efdee86 100644
--- a/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/WorkflowActionBB.bpmn
+++ b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/WorkflowActionBB.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:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.7.2">
+<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:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="2.0.3">
   <bpmn:process id="WorkflowActionBB" name="WorkflowActionBB" isExecutable="true">
     <bpmn:startEvent id="Start_WorkflowActionBB" name="start">
       <bpmn:outgoing>SequenceFlow_15s0okp</bpmn:outgoing>
@@ -23,6 +23,9 @@
         <camunda:out source="RetryDuration" target="RetryDuration" />
         <camunda:in source="suppressRollback" target="suppressRollback" />
         <camunda:out source="StatusMessage" target="StatusMessage" />
+        <camunda:in source="isRollback" target="isRollback" />
+        <camunda:in source="rollbackTargetState" target="rollbackTargetState" />
+        <camunda:out source="rollbackTargetState" target="rollbackTargetState" />
       </bpmn:extensionElements>
       <bpmn:incoming>SequenceFlow_0mew9im</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_1hsqed1</bpmn:outgoing>
@@ -43,7 +46,7 @@
       <bpmn:outgoing>SequenceFlow_0l7kaba</bpmn:outgoing>
     </bpmn:exclusiveGateway>
     <bpmn:sequenceFlow id="SequenceFlow_1m2eezj" name="Completed = true" sourceRef="ExclusiveGateway_Finished" targetRef="ExclusiveGateway_isTopLevelFlowC">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("completed")==true&&execution.getVariable("isRollback")==false&&execution.getVariable("handlingCode")=="Success"}]]></bpmn:conditionExpression>
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("completed")==true&amp;&amp;execution.getVariable("isRollback")==false&amp;&amp;execution.getVariable("handlingCode")=="Success"}</bpmn:conditionExpression>
     </bpmn:sequenceFlow>
     <bpmn:serviceTask id="Task_RetrieveBBExectuionList" name="Retrieve BB Execution List" camunda:expression="${WorkflowAction.selectExecutionList(execution)}">
       <bpmn:incoming>SequenceFlow_15s0okp</bpmn:incoming>
@@ -80,7 +83,7 @@
       </bpmn:exclusiveGateway>
       <bpmn:sequenceFlow id="SequenceFlow_024g0d1" name="no" sourceRef="ExclusiveGateway_10q79b6" targetRef="Task_UpdateDb" />
       <bpmn:sequenceFlow id="SequenceFlow_0vi883o" name="yes" sourceRef="ExclusiveGateway_10q79b6" targetRef="Task_SendSyncAckError">
-        <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("isTopLevelFlow")==true&&execution.getVariable("sentSyncResponse")==false}]]></bpmn:conditionExpression>
+        <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("isTopLevelFlow")==true&amp;&amp;execution.getVariable("sentSyncResponse")==false}</bpmn:conditionExpression>
       </bpmn:sequenceFlow>
       <bpmn:sequenceFlow id="SequenceFlow_0eana0l" sourceRef="Task_SendSyncAckError" targetRef="Task_UpdateDb" />
       <bpmn:serviceTask id="Task_SendSyncAckError" name="Send Sync Ack API Handler" camunda:asyncAfter="true" camunda:expression="${WorkflowActionBBTasks.sendSyncAck(execution)}">
@@ -89,10 +92,10 @@
       </bpmn:serviceTask>
     </bpmn:subProcess>
     <bpmn:sequenceFlow id="SequenceFlow_0v588sm" name="Rollback = true" sourceRef="ExclusiveGateway_Finished" targetRef="Task_RollbackExecutionPath">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("handlingCode")=="Rollback"||execution.getVariable("handlingCode")=="RollbackToAssigned"||execution.getVariable("handlingCode")=="RollbackToCreated"}]]></bpmn:conditionExpression>
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("handlingCode")=="Rollback"||execution.getVariable("handlingCode")=="RollbackToAssigned"||execution.getVariable("handlingCode")=="RollbackToCreated"}</bpmn:conditionExpression>
     </bpmn:sequenceFlow>
     <bpmn:sequenceFlow id="SequenceFlow_1atzsgn" sourceRef="Task_RollbackExecutionPath" targetRef="Task_SelectBB">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("isRollbackNeeded")==true}]]></bpmn:conditionExpression>
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("isRollbackNeeded")==true}</bpmn:conditionExpression>
     </bpmn:sequenceFlow>
     <bpmn:serviceTask id="Task_RollbackExecutionPath" name="Rollback Execution Path" camunda:expression="${WorkflowActionBBTasks.rollbackExecutionPath(execution)}">
       <bpmn:incoming>SequenceFlow_0v588sm</bpmn:incoming>
@@ -101,7 +104,7 @@
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_0vc9go9" sourceRef="Task_RetrieveBBExectuionList" targetRef="ExclusiveGateway_isTopLevelFlow" />
     <bpmn:sequenceFlow id="SequenceFlow_11530ei" name="Abort = true" sourceRef="ExclusiveGateway_Finished" targetRef="ExclusiveGateway_isTopLevelFlowAbort">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("handlingCode")=="Abort"}]]></bpmn:conditionExpression>
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("handlingCode")=="Abort"}</bpmn:conditionExpression>
     </bpmn:sequenceFlow>
     <bpmn:serviceTask id="Task_AbortAndCallErrorHandling" name="Update Request To Failed" camunda:expression="${WorkflowActionBBFailure.updateRequestStatusToFailed(execution)}">
       <bpmn:incoming>SequenceFlow_02ksbt0</bpmn:incoming>
@@ -125,7 +128,7 @@
     </bpmn:exclusiveGateway>
     <bpmn:sequenceFlow id="SequenceFlow_0sckerv" name="yes" sourceRef="ExclusiveGateway_isTopLevelFlow" targetRef="Task_SendSync" />
     <bpmn:sequenceFlow id="SequenceFlow_0unbew4" name="no" sourceRef="ExclusiveGateway_isTopLevelFlow" targetRef="Task_PreValidateWorkflow">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("isTopLevelFlow")==false}]]></bpmn:conditionExpression>
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("isTopLevelFlow")==false}</bpmn:conditionExpression>
     </bpmn:sequenceFlow>
     <bpmn:exclusiveGateway id="ExclusiveGateway_isTopLevelFlowAbort" name="Is Top-Level Flow?" default="SequenceFlow_02ksbt0">
       <bpmn:incoming>SequenceFlow_11530ei</bpmn:incoming>
@@ -134,7 +137,7 @@
     </bpmn:exclusiveGateway>
     <bpmn:sequenceFlow id="SequenceFlow_02ksbt0" name="yes" sourceRef="ExclusiveGateway_isTopLevelFlowAbort" targetRef="Task_AbortAndCallErrorHandling" />
     <bpmn:sequenceFlow id="SequenceFlow_1r570x3" name="no" sourceRef="ExclusiveGateway_isTopLevelFlowAbort" targetRef="EndEvent_0lzz1ya">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("isTopLevelFlow")==false}]]></bpmn:conditionExpression>
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("isTopLevelFlow")==false}</bpmn:conditionExpression>
     </bpmn:sequenceFlow>
     <bpmn:exclusiveGateway id="ExclusiveGateway_isTopLevelFlowC" name="Is Top-Level Flow?" default="SequenceFlow_0kf5sen">
       <bpmn:incoming>SequenceFlow_1m2eezj</bpmn:incoming>
@@ -142,13 +145,13 @@
       <bpmn:outgoing>SequenceFlow_0kf5sen</bpmn:outgoing>
     </bpmn:exclusiveGateway>
     <bpmn:sequenceFlow id="SequenceFlow_0x4urgp" name="no" sourceRef="ExclusiveGateway_isTopLevelFlowC" targetRef="End_WorkflowActionBB">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("isTopLevelFlow")==false}]]></bpmn:conditionExpression>
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("isTopLevelFlow")==false}</bpmn:conditionExpression>
     </bpmn:sequenceFlow>
     <bpmn:endEvent id="End_RollbackFailed" name="end">
       <bpmn:incoming>SequenceFlow_1ui67mc</bpmn:incoming>
     </bpmn:endEvent>
     <bpmn:sequenceFlow id="SequenceFlow_11dlyzt" name="Rollback Not Needed" sourceRef="Task_RollbackExecutionPath" targetRef="Task_UpdateRequestToFailed">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("isRollbackNeeded")==false}]]></bpmn:conditionExpression>
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("isRollbackNeeded")==false}</bpmn:conditionExpression>
     </bpmn:sequenceFlow>
     <bpmn:serviceTask id="Task_UpdateRequestToFailed" name="Update Request To Failed" camunda:expression="${WorkflowActionBBFailure.updateRequestStatusToFailedWithRollback(execution)}">
       <bpmn:incoming>SequenceFlow_11dlyzt</bpmn:incoming>
@@ -156,7 +159,7 @@
       <bpmn:outgoing>SequenceFlow_1ui67mc</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_0l7kaba" name="Rollback Completed" sourceRef="ExclusiveGateway_Finished" targetRef="Task_UpdateRequestToFailed">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("completed")==true&&execution.getVariable("isRollback")==true&&execution.getVariable("handlingCode")=="Success"}]]></bpmn:conditionExpression>
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("completed")==true&amp;&amp;execution.getVariable("isRollback")==true&amp;&amp;execution.getVariable("handlingCode")=="Success"}</bpmn:conditionExpression>
     </bpmn:sequenceFlow>
     <bpmn:sequenceFlow id="SequenceFlow_1ui67mc" sourceRef="Task_UpdateRequestToFailed" targetRef="End_RollbackFailed" />
     <bpmn:subProcess id="SubProcess_0fuugr9" name="Java Exception Handling Sub Process" triggeredByEvent="true">
@@ -210,8 +213,8 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_15s0okp_di" bpmnElement="SequenceFlow_15s0okp">
-        <di:waypoint xsi:type="dc:Point" x="-398" y="120" />
-        <di:waypoint xsi:type="dc:Point" x="-365" y="120" />
+        <di:waypoint x="-398" y="120" />
+        <di:waypoint x="-365" y="120" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="-381" y="99" width="0" height="0" />
         </bpmndi:BPMNLabel>
@@ -220,8 +223,8 @@
         <dc:Bounds x="560" y="80" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0mqrkxv_di" bpmnElement="SequenceFlow_0mqrkxv">
-        <di:waypoint xsi:type="dc:Point" x="339" y="120" />
-        <di:waypoint xsi:type="dc:Point" x="400" y="120" />
+        <di:waypoint x="339" y="120" />
+        <di:waypoint x="400" y="120" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="324.5" y="105" width="90" height="0" />
         </bpmndi:BPMNLabel>
@@ -236,9 +239,9 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1m2eezj_di" bpmnElement="SequenceFlow_1m2eezj">
-        <di:waypoint xsi:type="dc:Point" x="949" y="132" />
-        <di:waypoint xsi:type="dc:Point" x="980" y="165" />
-        <di:waypoint xsi:type="dc:Point" x="1060" y="165" />
+        <di:waypoint x="949" y="132" />
+        <di:waypoint x="980" y="165" />
+        <di:waypoint x="1060" y="165" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="968" y="168" width="83" height="12" />
         </bpmndi:BPMNLabel>
@@ -253,9 +256,9 @@
         <dc:Bounds x="1161" y="206" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1pz6edz_di" bpmnElement="SequenceFlow_1pz6edz">
-        <di:waypoint xsi:type="dc:Point" x="1261" y="246" />
-        <di:waypoint xsi:type="dc:Point" x="1322" y="246" />
-        <di:waypoint xsi:type="dc:Point" x="1322" y="183" />
+        <di:waypoint x="1261" y="246" />
+        <di:waypoint x="1322" y="246" />
+        <di:waypoint x="1322" y="183" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1247" y="231" width="90" height="0" />
         </bpmndi:BPMNLabel>
@@ -276,16 +279,16 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0v588sm_di" bpmnElement="SequenceFlow_0v588sm">
-        <di:waypoint xsi:type="dc:Point" x="936" y="145" />
-        <di:waypoint xsi:type="dc:Point" x="936" y="262" />
-        <di:waypoint xsi:type="dc:Point" x="339" y="262" />
+        <di:waypoint x="936" y="145" />
+        <di:waypoint x="936" y="262" />
+        <di:waypoint x="339" y="262" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="769.202380952381" y="272" width="73" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1atzsgn_di" bpmnElement="SequenceFlow_1atzsgn">
-        <di:waypoint xsi:type="dc:Point" x="289" y="222" />
-        <di:waypoint xsi:type="dc:Point" x="289" y="160" />
+        <di:waypoint x="289" y="222" />
+        <di:waypoint x="289" y="160" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="259" y="191" width="90" height="0" />
         </bpmndi:BPMNLabel>
@@ -294,16 +297,16 @@
         <dc:Bounds x="239" y="222" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0vc9go9_di" bpmnElement="SequenceFlow_0vc9go9">
-        <di:waypoint xsi:type="dc:Point" x="-265" y="120" />
-        <di:waypoint xsi:type="dc:Point" x="-228" y="120" />
+        <di:waypoint x="-265" y="120" />
+        <di:waypoint x="-228" y="120" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="-246" y="105" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_11530ei_di" bpmnElement="SequenceFlow_11530ei">
-        <di:waypoint xsi:type="dc:Point" x="946" y="105" />
-        <di:waypoint xsi:type="dc:Point" x="983" y="44" />
-        <di:waypoint xsi:type="dc:Point" x="1060" y="45" />
+        <di:waypoint x="946" y="105" />
+        <di:waypoint x="983" y="44" />
+        <di:waypoint x="1060" y="45" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="975" y="17" width="58" height="12" />
         </bpmndi:BPMNLabel>
@@ -318,28 +321,28 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1p8yxu6_di" bpmnElement="SequenceFlow_1p8yxu6">
-        <di:waypoint xsi:type="dc:Point" x="1276" y="-36" />
-        <di:waypoint xsi:type="dc:Point" x="1359" y="-36" />
-        <di:waypoint xsi:type="dc:Point" x="1359" y="45" />
-        <di:waypoint xsi:type="dc:Point" x="1386" y="45" />
+        <di:waypoint x="1276" y="-36" />
+        <di:waypoint x="1359" y="-36" />
+        <di:waypoint x="1359" y="45" />
+        <di:waypoint x="1386" y="45" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1329" y="5" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1wb59ic_di" bpmnElement="SequenceFlow_1wb59ic">
-        <di:waypoint xsi:type="dc:Point" x="-32" y="34" />
-        <di:waypoint xsi:type="dc:Point" x="32" y="34" />
-        <di:waypoint xsi:type="dc:Point" x="32" y="120" />
-        <di:waypoint xsi:type="dc:Point" x="80" y="120" />
+        <di:waypoint x="-32" y="34" />
+        <di:waypoint x="32" y="34" />
+        <di:waypoint x="32" y="120" />
+        <di:waypoint x="80" y="120" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="47" y="77" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_01j184u_di" bpmnElement="SequenceFlow_01j184u">
-        <di:waypoint xsi:type="dc:Point" x="936" y="95" />
-        <di:waypoint xsi:type="dc:Point" x="936" y="55" />
-        <di:waypoint xsi:type="dc:Point" x="936" y="55" />
-        <di:waypoint xsi:type="dc:Point" x="936" y="4" />
+        <di:waypoint x="936" y="95" />
+        <di:waypoint x="936" y="55" />
+        <di:waypoint x="936" y="55" />
+        <di:waypoint x="936" y="4" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="906" y="49" width="90" height="0" />
         </bpmndi:BPMNLabel>
@@ -354,16 +357,16 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0sckerv_di" bpmnElement="SequenceFlow_0sckerv">
-        <di:waypoint xsi:type="dc:Point" x="-202" y="96" />
-        <di:waypoint xsi:type="dc:Point" x="-202" y="34" />
-        <di:waypoint xsi:type="dc:Point" x="-132" y="34" />
+        <di:waypoint x="-202" y="96" />
+        <di:waypoint x="-202" y="34" />
+        <di:waypoint x="-132" y="34" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="-195" y="55.55555555555556" width="18" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0unbew4_di" bpmnElement="SequenceFlow_0unbew4">
-        <di:waypoint xsi:type="dc:Point" x="-178" y="120" />
-        <di:waypoint xsi:type="dc:Point" x="80" y="120" />
+        <di:waypoint x="-178" y="120" />
+        <di:waypoint x="80" y="120" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="-87" y="99.95468180757382" width="12" height="12" />
         </bpmndi:BPMNLabel>
@@ -375,16 +378,16 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_02ksbt0_di" bpmnElement="SequenceFlow_02ksbt0">
-        <di:waypoint xsi:type="dc:Point" x="1085" y="20" />
-        <di:waypoint xsi:type="dc:Point" x="1085" y="-37" />
-        <di:waypoint xsi:type="dc:Point" x="1176" y="-37" />
+        <di:waypoint x="1085" y="20" />
+        <di:waypoint x="1085" y="-37" />
+        <di:waypoint x="1176" y="-37" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1091" y="-8" width="19" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1r570x3_di" bpmnElement="SequenceFlow_1r570x3">
-        <di:waypoint xsi:type="dc:Point" x="1110" y="45" />
-        <di:waypoint xsi:type="dc:Point" x="1386" y="45" />
+        <di:waypoint x="1110" y="45" />
+        <di:waypoint x="1386" y="45" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1242" y="20" width="12" height="12" />
         </bpmndi:BPMNLabel>
@@ -396,10 +399,10 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0x4urgp_di" bpmnElement="SequenceFlow_0x4urgp">
-        <di:waypoint xsi:type="dc:Point" x="1110" y="165" />
-        <di:waypoint xsi:type="dc:Point" x="1220" y="165" />
-        <di:waypoint xsi:type="dc:Point" x="1220" y="165" />
-        <di:waypoint xsi:type="dc:Point" x="1304" y="165" />
+        <di:waypoint x="1110" y="165" />
+        <di:waypoint x="1220" y="165" />
+        <di:waypoint x="1220" y="165" />
+        <di:waypoint x="1304" y="165" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1256" y="140" width="12" height="12" />
         </bpmndi:BPMNLabel>
@@ -411,9 +414,9 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_11dlyzt_di" bpmnElement="SequenceFlow_11dlyzt">
-        <di:waypoint xsi:type="dc:Point" x="289" y="302" />
-        <di:waypoint xsi:type="dc:Point" x="289" y="368" />
-        <di:waypoint xsi:type="dc:Point" x="960" y="368" />
+        <di:waypoint x="289" y="302" />
+        <di:waypoint x="289" y="368" />
+        <di:waypoint x="960" y="368" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="381.45685840707966" y="325" width="63" height="24" />
         </bpmndi:BPMNLabel>
@@ -425,33 +428,33 @@
         <dc:Bounds x="960" y="325" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0l7kaba_di" bpmnElement="SequenceFlow_0l7kaba">
-        <di:waypoint xsi:type="dc:Point" x="942" y="139" />
-        <di:waypoint xsi:type="dc:Point" x="976" y="252" />
-        <di:waypoint xsi:type="dc:Point" x="1016" y="252" />
-        <di:waypoint xsi:type="dc:Point" x="1016" y="325" />
+        <di:waypoint x="942" y="139" />
+        <di:waypoint x="976" y="252" />
+        <di:waypoint x="1016" y="252" />
+        <di:waypoint x="1016" y="325" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="959" y="255" width="52" height="24" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1edjl5x_di" bpmnElement="SequenceFlow_1edjl5x">
-        <di:waypoint xsi:type="dc:Point" x="556" y="657" />
-        <di:waypoint xsi:type="dc:Point" x="602" y="657" />
+        <di:waypoint x="556" y="657" />
+        <di:waypoint x="602" y="657" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="534" y="636" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0wvzfgf_di" bpmnElement="SequenceFlow_0wvzfgf">
-        <di:waypoint xsi:type="dc:Point" x="813" y="657" />
-        <di:waypoint xsi:type="dc:Point" x="880" y="657" />
+        <di:waypoint x="813" y="657" />
+        <di:waypoint x="880" y="657" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="801.5" y="636" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1ui67mc_di" bpmnElement="SequenceFlow_1ui67mc">
-        <di:waypoint xsi:type="dc:Point" x="1060" y="365" />
-        <di:waypoint xsi:type="dc:Point" x="1134" y="365" />
-        <di:waypoint xsi:type="dc:Point" x="1134" y="365" />
-        <di:waypoint xsi:type="dc:Point" x="1159" y="365" />
+        <di:waypoint x="1060" y="365" />
+        <di:waypoint x="1134" y="365" />
+        <di:waypoint x="1134" y="365" />
+        <di:waypoint x="1159" y="365" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1104" y="359" width="90" height="13" />
         </bpmndi:BPMNLabel>
@@ -463,25 +466,25 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_024g0d1_di" bpmnElement="SequenceFlow_024g0d1">
-        <di:waypoint xsi:type="dc:Point" x="652" y="657" />
-        <di:waypoint xsi:type="dc:Point" x="683" y="657" />
-        <di:waypoint xsi:type="dc:Point" x="683" y="657" />
-        <di:waypoint xsi:type="dc:Point" x="713" y="657" />
+        <di:waypoint x="652" y="657" />
+        <di:waypoint x="683" y="657" />
+        <di:waypoint x="683" y="657" />
+        <di:waypoint x="713" y="657" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="677" y="634" width="12" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0vi883o_di" bpmnElement="SequenceFlow_0vi883o">
-        <di:waypoint xsi:type="dc:Point" x="627" y="632" />
-        <di:waypoint xsi:type="dc:Point" x="627" y="548" />
-        <di:waypoint xsi:type="dc:Point" x="713" y="548" />
+        <di:waypoint x="627" y="632" />
+        <di:waypoint x="627" y="548" />
+        <di:waypoint x="713" y="548" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="633" y="584" width="18" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0eana0l_di" bpmnElement="SequenceFlow_0eana0l">
-        <di:waypoint xsi:type="dc:Point" x="763" y="588" />
-        <di:waypoint xsi:type="dc:Point" x="763" y="617" />
+        <di:waypoint x="763" y="588" />
+        <di:waypoint x="763" y="617" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="778" y="596.5" width="0" height="12" />
         </bpmndi:BPMNLabel>
@@ -508,15 +511,15 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_11d126w_di" bpmnElement="SequenceFlow_11d126w">
-        <di:waypoint xsi:type="dc:Point" x="606" y="875" />
-        <di:waypoint xsi:type="dc:Point" x="690" y="875" />
+        <di:waypoint x="606" y="875" />
+        <di:waypoint x="690" y="875" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="603" y="854" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0w4sx88_di" bpmnElement="SequenceFlow_0w4sx88">
-        <di:waypoint xsi:type="dc:Point" x="790" y="875" />
-        <di:waypoint xsi:type="dc:Point" x="856" y="875" />
+        <di:waypoint x="790" y="875" />
+        <di:waypoint x="856" y="875" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="778" y="854" width="0" height="12" />
         </bpmndi:BPMNLabel>
@@ -525,25 +528,25 @@
         <dc:Bounds x="400" y="80" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0mew9im_di" bpmnElement="SequenceFlow_0mew9im">
-        <di:waypoint xsi:type="dc:Point" x="500" y="120" />
-        <di:waypoint xsi:type="dc:Point" x="560" y="120" />
+        <di:waypoint x="500" y="120" />
+        <di:waypoint x="560" y="120" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="530" y="99" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0kf5sen_di" bpmnElement="SequenceFlow_0kf5sen">
-        <di:waypoint xsi:type="dc:Point" x="1085" y="190" />
-        <di:waypoint xsi:type="dc:Point" x="1085" y="246" />
-        <di:waypoint xsi:type="dc:Point" x="1161" y="246" />
+        <di:waypoint x="1085" y="190" />
+        <di:waypoint x="1085" y="246" />
+        <di:waypoint x="1161" y="246" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1091" y="218" width="19" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1tfizxf_di" bpmnElement="SequenceFlow_1tfizxf">
-        <di:waypoint xsi:type="dc:Point" x="180" y="120" />
-        <di:waypoint xsi:type="dc:Point" x="211" y="120" />
-        <di:waypoint xsi:type="dc:Point" x="211" y="120" />
-        <di:waypoint xsi:type="dc:Point" x="239" y="120" />
+        <di:waypoint x="180" y="120" />
+        <di:waypoint x="211" y="120" />
+        <di:waypoint x="211" y="120" />
+        <di:waypoint x="239" y="120" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="226" y="120" width="0" height="0" />
         </bpmndi:BPMNLabel>
@@ -555,23 +558,23 @@
         <dc:Bounds x="735" y="80" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1hsqed1_di" bpmnElement="SequenceFlow_1hsqed1">
-        <di:waypoint xsi:type="dc:Point" x="660" y="120" />
-        <di:waypoint xsi:type="dc:Point" x="735" y="120" />
+        <di:waypoint x="660" y="120" />
+        <di:waypoint x="735" y="120" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="697.5" y="99" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1fftixk_di" bpmnElement="SequenceFlow_1fftixk">
-        <di:waypoint xsi:type="dc:Point" x="835" y="120" />
-        <di:waypoint xsi:type="dc:Point" x="911" y="120" />
+        <di:waypoint x="835" y="120" />
+        <di:waypoint x="911" y="120" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="873" y="99" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1pnkpim_di" bpmnElement="SequenceFlow_1pnkpim">
-        <di:waypoint xsi:type="dc:Point" x="886" y="-36" />
-        <di:waypoint xsi:type="dc:Point" x="289" y="-36" />
-        <di:waypoint xsi:type="dc:Point" x="289" y="80" />
+        <di:waypoint x="886" y="-36" />
+        <di:waypoint x="289" y="-36" />
+        <di:waypoint x="289" y="80" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="587.5" y="-57" width="0" height="12" />
         </bpmndi:BPMNLabel>
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/process/WorkflowActionBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/process/WorkflowActionBBTest.java
index 051f373..bd29e55 100644
--- a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/process/WorkflowActionBBTest.java
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/process/WorkflowActionBBTest.java
@@ -4,6 +4,8 @@
  * ================================================================================
  * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ================================================================================
  * 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
@@ -93,8 +95,7 @@
         Map<String, String> map = new HashMap<>();
         map.put("handlingCode", "Abort");
 
-        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(workflowActionBBFailure)
-                .abortCallErrorHandling(any(DelegateExecution.class));
+        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(workflowActionBBFailure).abortCallErrorHandling();
         mockSubprocess("ExecuteBuildingBlock", "Mocked ExecuteBuildingBlock", "GenericStub", map);
 
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("WorkflowActionBB", variables);
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeleteVfModuleBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeleteVfModuleBBTest.java
index d9166c9..47d0ad9 100644
--- a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeleteVfModuleBBTest.java
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeleteVfModuleBBTest.java
@@ -46,18 +46,20 @@
         mockSubprocess("VnfAdapter", "Mocked VnfAdapter", "GenericStub");
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("DeleteVfModuleBB", variables);
         List<LockedExternalTask> tasks = externalTaskService.fetchAndLock(100, "externalWorkerId")
-                .topic("InventoryDeleteAudit", 60L * 1000L).execute();
+                .topic("InventoryDeleteAudit", 60L * 1000L).topic("InventoryQueryAudit", 60L * 1000L).execute();
         while (!tasks.isEmpty()) {
             for (LockedExternalTask task : tasks) {
                 externalTaskService.complete(task.getId(), "externalWorkerId");
             }
             tasks = externalTaskService.fetchAndLock(100, "externalWorkerId").topic("InventoryDeleteAudit", 60L * 1000L)
-                    .execute();
+                    .topic("InventoryQueryAudit", 60L * 1000L).execute();
         }
         assertThat(pi).isNotNull();
-        assertThat(pi).isStarted().hasPassed("DeleteVfModuleBB_Start", "ExclusiveGateway_0xrgzm7",
-                "ExclusiveGateway_1yvh16a", "Check_Audit", "Setup_Audit_Variable", "Audit_Inventory",
-                "DeleteVfModuleVnfAdapter", "VnfAdapter", "DeleteNetworkPolicies", "UpdateVnfIpv4OamAddress",
+        assertThat(pi).isStarted().hasPassed("DeleteVfModuleBB_Start", "Check_Audit", "auditEnabledCheck",
+                "Setup_Audit_Variable", "Setup_Audit_Variable", "aicQueryStack", "ExclusiveGateway_1t9q2jl",
+                "ExclusiveGateway_1naduhl", "ExclusiveGateway_13fhmpf", "DeleteVfModuleVnfAdapter", "VnfAdapter",
+                "Audit_Inventory", "ExclusiveGateway_1yvh16a", "auditSuccessfulCheck", "ExclusiveGateway_01wvywu",
+                "ExclusiveGateway_1yvh16a", "DeleteNetworkPolicies", "UpdateVnfIpv4OamAddress",
                 "UpdateVnfManagementV6Address", "UpdateVfModuleContrailServiceInstanceFqdn",
                 "UpdateVfModuleHeatStackId", "UpdateVfModuleDeleteStatus", "DeleteVfModuleBB_End");
         assertThat(pi).isEnded();
@@ -68,19 +70,22 @@
         doThrow(BpmnError.class).when(vnfAdapterDeleteTasks).deleteVfModule(any(BuildingBlockExecution.class));
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("DeleteVfModuleBB", variables);
         List<LockedExternalTask> tasks = externalTaskService.fetchAndLock(100, "externalWorkerId")
-                .topic("InventoryDeleteAudit", 60L * 1000L).execute();
+                .topic("InventoryDeleteAudit", 60L * 1000L).topic("InventoryQueryAudit", 60L * 1000L).execute();
         while (!tasks.isEmpty()) {
             for (LockedExternalTask task : tasks) {
                 externalTaskService.complete(task.getId(), "externalWorkerId");
             }
             tasks = externalTaskService.fetchAndLock(100, "externalWorkerId").topic("InventoryDeleteAudit", 60L * 1000L)
-                    .execute();
+                    .topic("InventoryQueryAudit", 60L * 1000L).execute();
         }
         assertThat(pi).isNotNull();
-        assertThat(pi).isStarted().hasPassed("DeleteVfModuleBB_Start", "DeleteVfModuleVnfAdapter").hasNotPassed(
-                "VnfAdapter", "DeleteNetworkPolicies", "UpdateVnfIpv4OamAddress", "UpdateVnfManagementV6Address",
-                "UpdateVfModuleContrailServiceInstanceFqdn", "UpdateVfModuleHeatStackId", "UpdateVfModuleDeleteStatus",
-                "DeleteVfModuleBB_End");
+        assertThat(pi).isStarted()
+                .hasPassed("DeleteVfModuleBB_Start", "Check_Audit", "auditEnabledCheck", "Setup_Audit_Variable",
+                        "Setup_Audit_Variable", "aicQueryStack", "ExclusiveGateway_1t9q2jl", "ExclusiveGateway_1naduhl",
+                        "ExclusiveGateway_13fhmpf")
+                .hasNotPassed("VnfAdapter", "DeleteNetworkPolicies", "UpdateVnfIpv4OamAddress",
+                        "UpdateVnfManagementV6Address", "UpdateVfModuleContrailServiceInstanceFqdn",
+                        "UpdateVfModuleHeatStackId", "UpdateVfModuleDeleteStatus", "DeleteVfModuleBB_End");
         assertThat(pi).isEnded();
     }
 }
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/vfcmodel/NsParameters.java b/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/vfcmodel/NsParameters.java
index ad388fe..c7c12bf 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/vfcmodel/NsParameters.java
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/vfcmodel/NsParameters.java
@@ -37,7 +37,7 @@
 
     private List<LocationConstraint> locationConstraints;
 
-    private Map<String, Object> additionalParamForNs = new HashMap<String, Object>();
+    private Map<String, Object> additionalParamForNs = new HashMap<>();
 
     /**
      * @return Returns the locationConstraints.
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 22c4f95..9319353 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
@@ -26,6 +26,7 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
 import java.io.IOException;
+import java.io.InputStream;
 import java.net.SocketTimeoutException;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -34,6 +35,7 @@
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Optional;
+import java.util.Properties;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.http.HttpResponse;
 import org.apache.http.ParseException;
@@ -73,13 +75,9 @@
 
 public class ServicePluginFactory {
 
-    // SOTN calculate route
-    public static final String OOF_DEFAULT_ENDPOINT = "http://192.168.1.223:8443/oof/sotncalc";
-
-    public static final String THIRD_SP_DEFAULT_ENDPOINT = "http://192.168.1.223:8443/sp/resourcemgr/querytps";
-
-    public static final String INVENTORY_OSS_DEFAULT_ENDPOINT = "http://192.168.1.199:8443/oss/inventory";
-
+    private static String OOF_DEFAULT_ENDPOINT;
+    private static String THIRD_SP_DEFAULT_ENDPOINT;
+    private static String INVENTORY_OSS_DEFAULT_ENDPOINT;
     private static final int DEFAULT_TIME_OUT = 60000;
 
     static JsonUtils jsonUtil = new JsonUtils();
@@ -88,6 +86,17 @@
 
     private static ServicePluginFactory instance;
 
+    static {
+        try (InputStream is = ClassLoader.class.getResourceAsStream("/application.properties")) {
+            Properties prop = new Properties();
+            prop.load(is);
+            OOF_DEFAULT_ENDPOINT = prop.getProperty("oof.default.endpoint");
+            THIRD_SP_DEFAULT_ENDPOINT = prop.getProperty("third.sp.default.endpoint");
+            INVENTORY_OSS_DEFAULT_ENDPOINT = prop.getProperty("inventory.oss.default.endpoint");
+        } catch (IOException e) {
+            logger.error("Failed to load property file!");
+        }
+    }
 
     public static synchronized ServicePluginFactory getInstance() {
         if (null == instance) {
@@ -802,4 +811,5 @@
             }
         }
     }
+
 }
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/resources/application.properties b/bpmn/so-bpmn-infrastructure-common/src/main/resources/application.properties
new file mode 100644
index 0000000..87af451
--- /dev/null
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/resources/application.properties
@@ -0,0 +1,3 @@
+oof.default.endpoint=http://192.168.1.223:8443/oof/sotncalc
+third.sp.default.endpoint=http://192.168.1.223:8443/sp/resourcemgr/querytps
+inventory.oss.default.endpoint=http://192.168.1.199:8443/oss/inventory
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 0b4050b..1a75f12 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
@@ -20,6 +20,7 @@
 package org.onap.so.bpmn.infrastructure.workflow.service;
 
 import static org.mockito.Mockito.doReturn;
+import org.apache.commons.lang.reflect.FieldUtils;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -154,4 +155,21 @@
         String result = servicePluginFactory.doServiceHoming(null, invalidJsonWithOnlyNeededValues);
         Assert.assertEquals(result, invalidJsonWithOnlyNeededValues);
     }
+
+    @Test
+    public void verifyExternalConfigurationLoading() throws IllegalAccessException {
+
+        ServicePluginFactory servicePluginFactory = ServicePluginFactory.getInstance();
+
+        String oofDefaultEndpoint = (String) FieldUtils.readField(servicePluginFactory, "OOF_DEFAULT_ENDPOINT", true);
+        Assert.assertNotNull(oofDefaultEndpoint);
+
+        String thirdSpDefaultEndpoint =
+                (String) FieldUtils.readField(servicePluginFactory, "THIRD_SP_DEFAULT_ENDPOINT", true);
+        Assert.assertNotNull(thirdSpDefaultEndpoint);
+
+        String inventoryOssDefaultEndpoint =
+                (String) FieldUtils.readField(servicePluginFactory, "INVENTORY_OSS_DEFAULT_ENDPOINT", true);
+        Assert.assertNotNull(inventoryOssDefaultEndpoint);
+    }
 }
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/buildingblock/SniroHomingV2.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/buildingblock/SniroHomingV2.java
index e5df3d3..f1fd23f 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/buildingblock/SniroHomingV2.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/buildingblock/SniroHomingV2.java
@@ -65,6 +65,7 @@
 import org.onap.so.client.sniro.beans.SniroManagerRequest;
 import org.onap.so.client.sniro.beans.SubscriberInfo;
 import org.onap.so.db.catalog.beans.OrchestrationStatus;
+import org.onap.so.utils.TargetEntity;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -160,14 +161,15 @@
             logger.trace("Completed Sniro Homing Call Sniro");
         } catch (BpmnError e) {
             logger.error(EXCEPTION_OCCURRED, e);
-            exceptionUtil.buildAndThrowWorkflowException(execution, Integer.parseInt(e.getErrorCode()), e.getMessage());
+            exceptionUtil.buildAndThrowWorkflowException(execution, Integer.parseInt(e.getErrorCode()), e.getMessage(),
+                    TargetEntity.SNIRO);
         } catch (BadResponseException e) {
             logger.error(EXCEPTION_OCCURRED, e);
-            exceptionUtil.buildAndThrowWorkflowException(execution, 400, e.getMessage());
+            exceptionUtil.buildAndThrowWorkflowException(execution, 400, e.getMessage(), TargetEntity.SNIRO);
         } catch (Exception e) {
             logger.error(EXCEPTION_OCCURRED, e);
             exceptionUtil.buildAndThrowWorkflowException(execution, INTERNAL,
-                    "Internal Error - occurred while preparing sniro request: " + e.getMessage());
+                    "Internal Error - occurred while preparing sniro request: " + e.getMessage(), TargetEntity.SO);
         }
     }
 
@@ -211,14 +213,16 @@
             logger.trace("Completed Sniro Homing Process Solution");
         } catch (BpmnError e) {
             logger.error(EXCEPTION_OCCURRED, e);
-            exceptionUtil.buildAndThrowWorkflowException(execution, Integer.parseInt(e.getErrorCode()), e.getMessage());
+            exceptionUtil.buildAndThrowWorkflowException(execution, Integer.parseInt(e.getErrorCode()), e.getMessage(),
+                    TargetEntity.SNIRO);
         } catch (BadResponseException e) {
             logger.error(EXCEPTION_OCCURRED, e);
-            exceptionUtil.buildAndThrowWorkflowException(execution, 400, e.getMessage());
+            exceptionUtil.buildAndThrowWorkflowException(execution, 400, e.getMessage(), TargetEntity.SNIRO);
         } catch (Exception e) {
             logger.error(EXCEPTION_OCCURRED, e);
             exceptionUtil.buildAndThrowWorkflowException(execution, INTERNAL,
-                    "Internal Error - occurred while processing sniro asynchronous response: " + e.getMessage());
+                    "Internal Error - occurred while processing sniro asynchronous response: " + e.getMessage(),
+                    TargetEntity.SO);
         }
     }
 
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasks.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasks.java
index e3540ec..583e3e1 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasks.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasks.java
@@ -77,7 +77,6 @@
 
     private static final Logger logger = LoggerFactory.getLogger(AAICreateTasks.class);
     private static final String networkTypeProvider = "PROVIDER";
-    private static final String A_LA_CARTE = "aLaCarte";
     private static String NETWORK_COLLECTION_NAME = "networkCollectionName";
     private static String CONTRAIL_NETWORK_POLICY_FQDN_LIST = "contrailNetworkPolicyFqdnList";
     private static String HEAT_STACK_ID = "heatStackId";
@@ -107,12 +106,8 @@
 
     public void createServiceInstance(BuildingBlockExecution execution) {
         try {
-            Boolean alaCarte = execution.getVariable(A_LA_CARTE);
             ServiceInstance serviceInstance =
                     extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID);
-            if (Boolean.TRUE.equals(alaCarte) && aaiSIResources.checkInstanceServiceNameInUse(serviceInstance)) {
-                throw new DuplicateNameException("service-instance", serviceInstance.getServiceInstanceName());
-            }
             Customer customer = execution.getGeneralBuildingBlock().getCustomer();
             aaiSIResources.createServiceInstance(serviceInstance, customer);
         } catch (Exception ex) {
@@ -199,11 +194,7 @@
 
     public void createVnf(BuildingBlockExecution execution) {
         try {
-            Boolean alaCarte = execution.getVariable(A_LA_CARTE);
             GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
-            if (Boolean.TRUE.equals(alaCarte) && aaiVnfResources.checkNameInUse(vnf.getVnfName())) {
-                throw new DuplicateNameException("generic-vnf", vnf.getVnfName());
-            }
             ServiceInstance serviceInstance =
                     extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID);
             execution.setVariable("homing", Boolean.TRUE.equals(vnf.isCallHoming()));
@@ -262,10 +253,6 @@
             GenericVnf genericVnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
             VolumeGroup volumeGroup = extractPojosForBB.extractByKey(execution, ResourceKey.VOLUME_GROUP_ID);
             CloudRegion cloudRegion = gBBInput.getCloudRegion();
-            Boolean alaCarte = execution.getVariable(A_LA_CARTE);
-            if (Boolean.TRUE.equals(alaCarte) && aaiVolumeGroupResources.checkNameInUse(volumeGroup)) {
-                throw new DuplicateNameException("volume-group", volumeGroup.getVolumeGroupName());
-            }
             aaiVolumeGroupResources.createVolumeGroup(volumeGroup, cloudRegion);
             aaiVolumeGroupResources.connectVolumeGroupToVnf(genericVnf, volumeGroup, cloudRegion);
             aaiVolumeGroupResources.connectVolumeGroupToTenant(volumeGroup, cloudRegion);
@@ -278,10 +265,6 @@
         try {
             GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
             VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID);
-            Boolean alaCarte = execution.getVariable(A_LA_CARTE);
-            if (Boolean.TRUE.equals(alaCarte) && aaiVfModuleResources.checkNameInUse(vfModule)) {
-                throw new DuplicateNameException("vf-module", vfModule.getVfModuleName());
-            }
             int moduleIndex = 0;
             if (vfModule.getModelInfoVfModule() != null
                     && !Boolean.TRUE.equals(vfModule.getModelInfoVfModule().getIsBaseBoolean())) {
@@ -327,14 +310,9 @@
      */
     public void createNetwork(BuildingBlockExecution execution) {
         try {
-            Boolean alaCarte = execution.getVariable(A_LA_CARTE);
             ServiceInstance serviceInstance =
                     extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID);
             L3Network l3network = extractPojosForBB.extractByKey(execution, ResourceKey.NETWORK_ID);
-            if (Boolean.TRUE.equals(alaCarte)
-                    && aaiNetworkResources.checkNetworkNameInUse(l3network.getNetworkName())) {
-                throw new DuplicateNameException("l3Network", l3network.getNetworkName());
-            }
             // set default to false. ToBe updated by SDNC
             l3network.setIsBoundToVpn(false);
             // define is bound to vpn flag as true if NEUTRON_NETWORK_TYPE is PROVIDER
@@ -385,16 +363,11 @@
      */
     public void createNetworkCollectionInstanceGroup(BuildingBlockExecution execution) {
         try {
-            Boolean alaCarte = execution.getVariable(A_LA_CARTE);
             ServiceInstance serviceInstance =
                     extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID);
             InstanceGroup instanceGroup = serviceInstance.getCollection().getInstanceGroup();
             // set name generated for NetworkCollection/NetworkCollectionInstanceGroup in previous step of the BB flow
             instanceGroup.setInstanceGroupName(execution.getVariable(NETWORK_COLLECTION_NAME));
-            if (Boolean.TRUE.equals(alaCarte)
-                    && aaiInstanceGroupResources.checkInstanceGroupNameInUse(instanceGroup.getInstanceGroupName())) {
-                throw new DuplicateNameException("instance-group", instanceGroup.getInstanceGroupName());
-            }
             // put shell in AAI
             aaiNetworkResources.createNetworkInstanceGroup(instanceGroup);
         } catch (Exception ex) {
@@ -511,12 +484,7 @@
 
     public void createConfiguration(BuildingBlockExecution execution) {
         try {
-            Boolean alaCarte = execution.getVariable(A_LA_CARTE);
             Configuration configuration = extractPojosForBB.extractByKey(execution, ResourceKey.CONFIGURATION_ID);
-            if (Boolean.TRUE.equals(alaCarte)
-                    && aaiConfigurationResources.checkConfigurationNameInUse(configuration.getConfigurationName())) {
-                throw new DuplicateNameException("configuration", configuration.getConfigurationName());
-            }
             aaiConfigurationResources.createConfiguration(configuration);
         } catch (Exception ex) {
             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
@@ -525,14 +493,9 @@
 
     public void createInstanceGroupVnf(BuildingBlockExecution execution) {
         try {
-            Boolean alaCarte = execution.getVariable(A_LA_CARTE);
             ServiceInstance serviceInstance =
                     extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID);
             InstanceGroup instanceGroup = extractPojosForBB.extractByKey(execution, ResourceKey.INSTANCE_GROUP_ID);
-            if (Boolean.TRUE.equals(alaCarte)
-                    && aaiInstanceGroupResources.checkInstanceGroupNameInUse(instanceGroup.getInstanceGroupName())) {
-                throw new DuplicateNameException("instance-group", instanceGroup.getInstanceGroupName());
-            }
             aaiInstanceGroupResources.createInstanceGroupandConnectServiceInstance(instanceGroup, serviceInstance);
         } catch (Exception ex) {
             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIFlagTasks.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIFlagTasks.java
index 12aade7..1add5e6 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIFlagTasks.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIFlagTasks.java
@@ -35,7 +35,6 @@
 
 @Component
 public class AAIFlagTasks {
-    private static final Logger logger = LoggerFactory.getLogger(AAIFlagTasks.class);
 
     @Autowired
     private AAIVnfResources aaiVnfResources;
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/network/tasks/NetworkAdapterRestV1.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/network/tasks/NetworkAdapterRestV1.java
index 859db11..e9d33f4 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/network/tasks/NetworkAdapterRestV1.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/network/tasks/NetworkAdapterRestV1.java
@@ -38,6 +38,7 @@
 import org.onap.so.adapters.nwrest.UpdateNetworkResponse;
 import org.onap.so.client.exception.ExceptionBuilder;
 import org.onap.so.client.orchestration.NetworkAdapterResources;
+import org.onap.so.utils.TargetEntity;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -93,7 +94,7 @@
                 throw new Exception("No Network Request was created. networkAdapterRequest was null.");
             }
         } catch (Exception ex) {
-            exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, ex);
+            exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, ex, TargetEntity.SO);
         }
     }
 
@@ -138,7 +139,7 @@
             }
         } catch (Exception e) {
             logger.error("Error in Openstack Adapter callback", e);
-            exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, e.getMessage());
+            exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, e.getMessage(), TargetEntity.OPENSTACK);
         }
     }
 
@@ -151,7 +152,7 @@
 
     public void handleTimeOutException(DelegateExecution execution) {
         exceptionBuilder.buildAndThrowWorkflowException(execution, 7000,
-                "Error timed out waiting on Openstack Async-Response");
+                "Error timed out waiting on Openstack Async-Response", TargetEntity.SO);
     }
 
     public void handleSyncError(DelegateExecution execution) {
@@ -159,6 +160,6 @@
         String responseString = (String) execution.getVariable(NETWORK_SYNC_RESPONSE);
         String errorMessage = "Error with Openstack Adapter Sync Request: StatusCode = " + statusCode + " Response = "
                 + responseString;
-        exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, errorMessage);
+        exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, errorMessage, TargetEntity.OPENSTACK);
     }
 }
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/audit/AuditTasks.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/audit/AuditTasks.java
index 62878fd..922b721 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/audit/AuditTasks.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/audit/AuditTasks.java
@@ -21,15 +21,21 @@
 package org.onap.so.bpmn.infrastructure.audit;
 
 
+import java.util.List;
 import org.onap.so.audit.beans.AuditInventory;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
 import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock;
 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
 import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB;
 import org.onap.so.client.exception.BBObjectNotFoundException;
 import org.onap.so.client.exception.ExceptionBuilder;
+import org.onap.so.client.graphinventory.GraphInventoryCommonObjectMapperProvider;
+import org.onap.so.db.request.beans.RequestProcessingData;
+import org.onap.so.db.request.client.RequestsDbClient;
+import org.onap.so.objects.audit.AAIObjectAuditList;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -83,12 +89,17 @@
 
         GeneralBuildingBlock gBBInput = execution.getGeneralBuildingBlock();
         VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID);
+        GenericVnf genericVnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
         CloudRegion cloudRegion = gBBInput.getCloudRegion();
 
+        auditInventory.setMsoRequestId(gBBInput.getRequestContext().getMsoRequestId());
         auditInventory.setCloudOwner(cloudRegion.getCloudOwner());
         auditInventory.setCloudRegion(cloudRegion.getLcpCloudRegionId());
         auditInventory.setTenantId(cloudRegion.getTenantId());
+        auditInventory.setVfModuleId(vfModule.getVfModuleId());
         auditInventory.setHeatStackName(vfModule.getVfModuleName());
+        auditInventory.setGenericVnfId(genericVnf.getVnfId());
         return auditInventory;
     }
+
 }
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/namingservice/tasks/NamingServiceCreateTasks.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/namingservice/tasks/NamingServiceCreateTasks.java
index 155455e..ea0b408 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/namingservice/tasks/NamingServiceCreateTasks.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/namingservice/tasks/NamingServiceCreateTasks.java
@@ -108,7 +108,7 @@
         namingRequestObject.setNamingTypeValue(NamingServiceConstants.NAMING_TYPE_SERVICE);
         namingRequestObject.setServiceModelNameValue(serviceInstance.getModelInfoServiceInstance().getModelName());
         namingRequestObject.setModelVersionValue(serviceInstance.getModelInfoServiceInstance().getModelVersion());
-        namingRequestObject.setNetworkNameValue(execution.getVariable(network.getNetworkName()));
+        namingRequestObject.setNetworkNameValue(network.getNetworkName());
         namingRequestObject.setVpnNameValue(vpnBinding.getVpnName());
         namingRequestObject.setResourceNameValue(NamingServiceConstants.RESOURCE_NAME_SERVICE_INSTANCE_NAME);
 
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/sdnc/tasks/SDNCQueryTasks.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/sdnc/tasks/SDNCQueryTasks.java
index fcc67d0..9bbe94a 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/sdnc/tasks/SDNCQueryTasks.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/sdnc/tasks/SDNCQueryTasks.java
@@ -29,8 +29,10 @@
 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
 import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB;
 import org.onap.so.client.exception.BBObjectNotFoundException;
+import org.onap.so.client.exception.BadResponseException;
 import org.onap.so.client.exception.ExceptionBuilder;
 import org.onap.so.client.orchestration.SDNCVnfResources;
+import org.onap.so.utils.TargetEntity;
 import org.onap.so.client.orchestration.SDNCVfModuleResources;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -39,7 +41,8 @@
 
 @Component
 public class SDNCQueryTasks {
-
+    private static final Logger logger = LoggerFactory.getLogger(SDNCQueryTasks.class);
+    private static final String NO_RESPONSE_FROM_SDNC = "Error did not receive a response from SDNC.";
     public static final String SDNCQUERY_RESPONSE = "SDNCQueryResponse_";
     @Autowired
     private SDNCVnfResources sdncVnfResources;
@@ -63,8 +66,14 @@
             }
             String response = sdncVnfResources.queryVnf(genericVnf);
             execution.setVariable(SDNCQUERY_RESPONSE + genericVnf.getVnfId(), response);
+        } catch (BadResponseException ex) {
+            if (!ex.getMessage().equals(NO_RESPONSE_FROM_SDNC)) {
+                exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex, TargetEntity.SDNC);
+            } else {
+                exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex, TargetEntity.SO);
+            }
         } catch (Exception ex) {
-            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex, TargetEntity.SO);
         }
     }
 
@@ -88,6 +97,12 @@
                 throw new Exception("Vf Module " + vfModule.getVfModuleId()
                         + " exists in gBuildingBlock but does not have a selflink value");
             }
+        } catch (BadResponseException ex) {
+            if (!ex.getMessage().equals(NO_RESPONSE_FROM_SDNC)) {
+                exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex, TargetEntity.SDNC);
+            } else {
+                exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex, TargetEntity.SO);
+            }
         } catch (Exception ex) {
             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
         }
@@ -109,10 +124,16 @@
             // If we see a bb object not found exception for something that is not a vf module id, then we should throw
             // the error as normal
             if (!ResourceKey.VF_MODULE_ID.equals(bbException.getResourceKey())) {
-                exceptionUtil.buildAndThrowWorkflowException(execution, 7000, bbException);
+                exceptionUtil.buildAndThrowWorkflowException(execution, 7000, bbException, TargetEntity.SO);
+            }
+        } catch (BadResponseException ex) {
+            if (!ex.getMessage().equals(NO_RESPONSE_FROM_SDNC)) {
+                exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex, TargetEntity.SDNC);
+            } else {
+                exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex, TargetEntity.SO);
             }
         } catch (Exception ex) {
-            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex, TargetEntity.SO);
         }
     }
 }
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/sdnc/tasks/SDNCRequestTasks.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/sdnc/tasks/SDNCRequestTasks.java
index cb761f4..03714db 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/sdnc/tasks/SDNCRequestTasks.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/sdnc/tasks/SDNCRequestTasks.java
@@ -37,6 +37,7 @@
 import org.onap.so.client.exception.MapperException;
 import org.onap.so.client.sdnc.SDNCClient;
 import org.onap.so.client.sdnc.beans.SDNCRequest;
+import org.onap.so.utils.TargetEntity;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -79,17 +80,19 @@
         } catch (PathNotFoundException e) {
             logger.error("Error Parsing SDNC Response. Could not find read final ack indicator from JSON.", e);
             exceptionBuilder.buildAndThrowWorkflowException(execution, 7000,
-                    "Recieved invalid response from SDNC, unable to read message content.");
+                    "Recieved invalid response from SDNC, unable to read message content.", TargetEntity.SO);
         } catch (MapperException e) {
             logger.error("Failed to map SDNC object to JSON prior to POST.", e);
             exceptionBuilder.buildAndThrowWorkflowException(execution, 7000,
-                    "Failed to map SDNC object to JSON prior to POST.");
+                    "Failed to map SDNC object to JSON prior to POST.", TargetEntity.SO);
         } catch (BadResponseException e) {
             logger.error("Did not receive a successful response from SDNC.", e);
-            exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, e.getLocalizedMessage());
+            exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, e.getLocalizedMessage(),
+                    TargetEntity.SDNC);
         } catch (HttpClientErrorException e) {
             logger.error("HttpClientErrorException: 404 Not Found, Failed to contact SDNC", e);
-            exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, "SDNC cannot be contacted.");
+            exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, "SDNC cannot be contacted.",
+                    TargetEntity.SO);
         }
     }
 
@@ -120,16 +123,17 @@
             }
         } catch (SDNCErrorResponseException e) {
             logger.error("SDNC error response - " + e.getMessage());
-            exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, e.getMessage());
+            exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, e.getMessage(), TargetEntity.SDNC);
         } catch (Exception e) {
-            logger.error("Error procesing SDNC callback", e);
-            exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, "Error procesing SDNC callback");
+            logger.error("Error processing SDNC callback", e);
+            exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, "Error processing SDNC callback",
+                    TargetEntity.SO);
         }
     }
 
     public void handleTimeOutException(DelegateExecution execution) {
         exceptionBuilder.buildAndThrowWorkflowException(execution, 7000,
-                "Error timed out waiting on SDNC Async-Response");
+                "Error timed out waiting on SDNC Async-Response", TargetEntity.SO);
     }
 
     protected boolean convertIndicatorToBoolean(String finalMessageIndicator) {
@@ -149,5 +153,4 @@
         }
         return result;
     }
-
 }
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/sdnc/tasks/SDNCUnassignTasks.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/sdnc/tasks/SDNCUnassignTasks.java
index 7d5591a..4721bf5 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/sdnc/tasks/SDNCUnassignTasks.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/sdnc/tasks/SDNCUnassignTasks.java
@@ -91,16 +91,18 @@
 
     public void unassignVfModule(BuildingBlockExecution execution) {
         try {
+            GeneralBuildingBlock gBBInput = execution.getGeneralBuildingBlock();
             ServiceInstance serviceInstance =
                     extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID);
             GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
+            RequestContext requestContext = gBBInput.getRequestContext();
             VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID);
             SDNCRequest sdncRequest = new SDNCRequest();
             UriBuilder builder = UriBuilder.fromPath(env.getRequiredProperty("mso.workflow.message.endpoint"))
                     .path(sdncRequest.getCorrelationName()).path(sdncRequest.getCorrelationValue());
             URI uri = builder.build();
             GenericResourceApiVfModuleOperationInformation req =
-                    sdncVfModuleResources.unassignVfModule(vfModule, vnf, serviceInstance, uri);
+                    sdncVfModuleResources.unassignVfModule(vfModule, vnf, serviceInstance, requestContext, uri);
             sdncRequest.setSDNCPayload(req);
             sdncRequest.setTopology(SDNCTopology.VFMODULE);
             execution.setVariable(SDNC_REQUEST, sdncRequest);
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java
index 0553afb..89030d5 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java
@@ -62,10 +62,8 @@
 import org.onap.so.db.catalog.beans.CollectionNetworkResourceCustomization;
 import org.onap.so.db.catalog.beans.CollectionResourceCustomization;
 import org.onap.so.db.catalog.beans.CollectionResourceInstanceGroupCustomization;
-import org.onap.so.db.catalog.beans.ConfigurationResourceCustomization;
 import org.onap.so.db.catalog.beans.CvnfcConfigurationCustomization;
 import org.onap.so.db.catalog.beans.CvnfcCustomization;
-import org.onap.so.db.catalog.beans.ServiceProxyResourceCustomization;
 import org.onap.so.db.catalog.beans.VfModuleCustomization;
 import org.onap.so.db.catalog.beans.macro.NorthBoundRequest;
 import org.onap.so.db.catalog.beans.macro.OrchestrationFlow;
@@ -74,7 +72,6 @@
 import org.onap.so.serviceinstancebeans.ModelType;
 import org.onap.so.serviceinstancebeans.Networks;
 import org.onap.so.serviceinstancebeans.RelatedInstance;
-import org.onap.so.serviceinstancebeans.RelatedInstanceList;
 import org.onap.so.serviceinstancebeans.RequestDetails;
 import org.onap.so.serviceinstancebeans.Service;
 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
@@ -149,7 +146,7 @@
         final String bpmnRequest = (String) execution.getVariable(BBConstants.G_BPMN_REQUEST);
         final boolean aLaCarte = (boolean) execution.getVariable(BBConstants.G_ALACARTE);
         final String apiVersion = (String) execution.getVariable(BBConstants.G_APIVERSION);
-        final String uri = (String) execution.getVariable(BBConstants.G_URI);
+        String uri = (String) execution.getVariable(BBConstants.G_URI);
         final String vnfType = (String) execution.getVariable(VNF_TYPE);
         String serviceInstanceId = (String) execution.getVariable("serviceInstanceId");
         final String serviceType =
@@ -183,6 +180,11 @@
                 suppressRollback = false;
             }
             execution.setVariable("suppressRollback", suppressRollback);
+            if (isUriResume(uri)) {
+                logger.debug("replacing URI {}", uri);
+                uri = bbInputSetupUtils.loadOriginalInfraActiveRequestById(requestId).getRequestUrl();
+                logger.debug("for RESUME with original value {}", uri);
+            }
             Resource resource = extractResourceIdAndTypeFromUri(uri);
             WorkflowType resourceType = resource.getResourceType();
             execution.setVariable("resourceName", resourceType.toString());
@@ -200,140 +202,147 @@
             execution.setVariable("resourceId", resourceId);
             execution.setVariable("resourceType", resourceType);
 
-            if (aLaCarte) {
-                if (orchFlows == null || orchFlows.isEmpty()) {
-                    orchFlows = queryNorthBoundRequestCatalogDb(execution, requestAction, resourceType, aLaCarte,
-                            cloudOwner, serviceType);
-                }
-                String key = "";
-                ModelInfo modelInfo = sIRequest.getRequestDetails().getModelInfo();
-                if (modelInfo != null) {
-                    if (modelInfo.getModelType().equals(ModelType.service)) {
-                        key = modelInfo.getModelVersionId();
-                    } else {
-                        key = modelInfo.getModelCustomizationId();
-                    }
-                }
-                boolean isConfiguration = isConfiguration(orchFlows);
-                Resource resourceKey = new Resource(resourceType, key, aLaCarte);
-                if (isConfiguration && !requestAction.equalsIgnoreCase(CREATEINSTANCE)) {
-                    List<ExecuteBuildingBlock> configBuildingBlocks = getConfigBuildingBlocks(
-                            new ConfigBuildingBlocksDataObject().setsIRequest(sIRequest).setOrchFlows(orchFlows)
-                                    .setRequestId(requestId).setResourceKey(resourceKey).setApiVersion(apiVersion)
-                                    .setResourceId(resourceId).setRequestAction(requestAction).setaLaCarte(aLaCarte)
-                                    .setVnfType(vnfType).setWorkflowResourceIds(workflowResourceIds)
-                                    .setRequestDetails(requestDetails).setExecution(execution));
-
-                    flowsToExecute.addAll(configBuildingBlocks);
-                }
-                orchFlows = orchFlows.stream().filter(item -> !item.getFlowName().contains(FABRIC_CONFIGURATION))
-                        .collect(Collectors.toList());
-                for (OrchestrationFlow orchFlow : orchFlows) {
-                    ExecuteBuildingBlock ebb = buildExecuteBuildingBlock(orchFlow, requestId, resourceKey, apiVersion,
-                            resourceId, requestAction, aLaCarte, vnfType, workflowResourceIds, requestDetails, false,
-                            null, false);
-                    flowsToExecute.add(ebb);
+            if (isRequestMacroServiceResume(aLaCarte, resourceType, requestAction, serviceInstanceId)) {
+                flowsToExecute = bbInputSetupUtils.loadOriginalFlowExecutionPath(requestId);
+                if (flowsToExecute == null) {
+                    buildAndThrowException(execution, "Could not resume Macro flow. Error loading execution path.");
                 }
             } else {
-                boolean foundRelated = false;
-                boolean containsService = false;
-                if (resourceType == WorkflowType.SERVICE && requestAction.equalsIgnoreCase(ASSIGNINSTANCE)) {
-                    // SERVICE-MACRO-ASSIGN will always get user params with a
-                    // service.
-                    if (sIRequest.getRequestDetails().getRequestParameters().getUserParams() != null) {
-                        List<Map<String, Object>> userParams =
-                                sIRequest.getRequestDetails().getRequestParameters().getUserParams();
-                        for (Map<String, Object> params : userParams) {
-                            if (params.containsKey(USERPARAMSERVICE)) {
-                                containsService = true;
+                if (aLaCarte) {
+                    if (orchFlows == null || orchFlows.isEmpty()) {
+                        orchFlows = queryNorthBoundRequestCatalogDb(execution, requestAction, resourceType, aLaCarte,
+                                cloudOwner, serviceType);
+                    }
+                    String key = "";
+                    ModelInfo modelInfo = sIRequest.getRequestDetails().getModelInfo();
+                    if (modelInfo != null) {
+                        if (modelInfo.getModelType().equals(ModelType.service)) {
+                            key = modelInfo.getModelVersionId();
+                        } else {
+                            key = modelInfo.getModelCustomizationId();
+                        }
+                    }
+                    boolean isConfiguration = isConfiguration(orchFlows);
+                    Resource resourceKey = new Resource(resourceType, key, aLaCarte);
+                    if (isConfiguration && !requestAction.equalsIgnoreCase(CREATEINSTANCE)) {
+                        List<ExecuteBuildingBlock> configBuildingBlocks = getConfigBuildingBlocks(
+                                new ConfigBuildingBlocksDataObject().setsIRequest(sIRequest).setOrchFlows(orchFlows)
+                                        .setRequestId(requestId).setResourceKey(resourceKey).setApiVersion(apiVersion)
+                                        .setResourceId(resourceId).setRequestAction(requestAction).setaLaCarte(aLaCarte)
+                                        .setVnfType(vnfType).setWorkflowResourceIds(workflowResourceIds)
+                                        .setRequestDetails(requestDetails).setExecution(execution));
+
+                        flowsToExecute.addAll(configBuildingBlocks);
+                    }
+                    orchFlows = orchFlows.stream().filter(item -> !item.getFlowName().contains(FABRIC_CONFIGURATION))
+                            .collect(Collectors.toList());
+                    for (OrchestrationFlow orchFlow : orchFlows) {
+                        ExecuteBuildingBlock ebb = buildExecuteBuildingBlock(orchFlow, requestId, resourceKey,
+                                apiVersion, resourceId, requestAction, aLaCarte, vnfType, workflowResourceIds,
+                                requestDetails, false, null, false);
+                        flowsToExecute.add(ebb);
+                    }
+                } else {
+                    boolean foundRelated = false;
+                    boolean containsService = false;
+                    if (resourceType == WorkflowType.SERVICE && requestAction.equalsIgnoreCase(ASSIGNINSTANCE)) {
+                        // SERVICE-MACRO-ASSIGN will always get user params with a
+                        // service.
+                        if (sIRequest.getRequestDetails().getRequestParameters().getUserParams() != null) {
+                            List<Map<String, Object>> userParams =
+                                    sIRequest.getRequestDetails().getRequestParameters().getUserParams();
+                            for (Map<String, Object> params : userParams) {
+                                if (params.containsKey(USERPARAMSERVICE)) {
+                                    containsService = true;
+                                }
+                            }
+                            if (containsService) {
+                                traverseUserParamsService(execution, resourceCounter, sIRequest, requestAction);
+                            }
+                        } else {
+                            buildAndThrowException(execution,
+                                    "Service-Macro-Assign request details must contain user params with a service");
+                        }
+                    } else if (resourceType == WorkflowType.SERVICE && requestAction.equalsIgnoreCase(CREATEINSTANCE)) {
+                        // SERVICE-MACRO-CREATE will get user params with a service,
+                        // a service with a network, a service with a
+                        // networkcollection, OR an empty service.
+                        // If user params is just a service or null and macro
+                        // queries the SI and finds a VNF, macro fails.
+
+                        if (sIRequest.getRequestDetails().getRequestParameters().getUserParams() != null) {
+                            List<Map<String, Object>> userParams =
+                                    sIRequest.getRequestDetails().getRequestParameters().getUserParams();
+                            for (Map<String, Object> params : userParams) {
+                                if (params.containsKey(USERPARAMSERVICE)) {
+                                    containsService = true;
+                                }
                             }
                         }
                         if (containsService) {
-                            traverseUserParamsService(execution, resourceCounter, sIRequest, requestAction);
+                            foundRelated =
+                                    traverseUserParamsService(execution, resourceCounter, sIRequest, requestAction);
                         }
+                        if (!foundRelated) {
+                            traverseCatalogDbService(execution, sIRequest, resourceCounter, aaiResourceIds);
+                        }
+                    } else if (resourceType == WorkflowType.SERVICE
+                            && (requestAction.equalsIgnoreCase("activateInstance")
+                                    || requestAction.equalsIgnoreCase("unassignInstance")
+                                    || requestAction.equalsIgnoreCase("deleteInstance")
+                                    || requestAction.equalsIgnoreCase("activate" + FABRIC_CONFIGURATION))) {
+                        // SERVICE-MACRO-ACTIVATE, SERVICE-MACRO-UNASSIGN, and
+                        // SERVICE-MACRO-DELETE
+                        // Will never get user params with service, macro will have
+                        // to query the SI in AAI to find related instances.
+                        traverseAAIService(execution, resourceCounter, resourceId, aaiResourceIds);
+                    } else if (resourceType == WorkflowType.SERVICE
+                            && requestAction.equalsIgnoreCase("deactivateInstance")) {
+                        resourceCounter.add(new Resource(WorkflowType.SERVICE, "", false));
+                    } else if (resourceType == WorkflowType.VNF && (requestAction.equalsIgnoreCase("replaceInstance")
+                            || (requestAction.equalsIgnoreCase("recreateInstance")))) {
+                        traverseAAIVnf(execution, resourceCounter, workflowResourceIds.getServiceInstanceId(),
+                                workflowResourceIds.getVnfId(), aaiResourceIds);
                     } else {
-                        buildAndThrowException(execution,
-                                "Service-Macro-Assign request details must contain user params with a service");
+                        buildAndThrowException(execution, "Current Macro Request is not supported");
                     }
-                } else if (resourceType == WorkflowType.SERVICE && requestAction.equalsIgnoreCase(CREATEINSTANCE)) {
-                    // SERVICE-MACRO-CREATE will get user params with a service,
-                    // a service with a network, a service with a
-                    // networkcollection, OR an empty service.
-                    // If user params is just a service or null and macro
-                    // queries the SI and finds a VNF, macro fails.
+                    String foundObjects = "";
+                    for (WorkflowType type : WorkflowType.values()) {
+                        foundObjects = foundObjects + type + " - " + resourceCounter.stream()
+                                .filter(x -> type.equals(x.getResourceType())).collect(Collectors.toList()).size()
+                                + "    ";
+                    }
+                    logger.info("Found {}", foundObjects);
 
-                    if (sIRequest.getRequestDetails().getRequestParameters().getUserParams() != null) {
-                        List<Map<String, Object>> userParams =
-                                sIRequest.getRequestDetails().getRequestParameters().getUserParams();
-                        for (Map<String, Object> params : userParams) {
-                            if (params.containsKey(USERPARAMSERVICE)) {
-                                containsService = true;
-                            }
-                        }
+                    if (orchFlows == null || orchFlows.isEmpty()) {
+                        orchFlows = queryNorthBoundRequestCatalogDb(execution, requestAction, resourceType, aLaCarte,
+                                cloudOwner, serviceType);
                     }
-                    if (containsService) {
-                        foundRelated = traverseUserParamsService(execution, resourceCounter, sIRequest, requestAction);
+                    flowsToExecute = buildExecuteBuildingBlockList(orchFlows, resourceCounter, requestId, apiVersion,
+                            resourceId, requestAction, aLaCarte, vnfType, workflowResourceIds, requestDetails);
+                    if (!resourceCounter.stream().filter(x -> WorkflowType.NETWORKCOLLECTION == x.getResourceType())
+                            .collect(Collectors.toList()).isEmpty()) {
+                        logger.info("Sorting for Vlan Tagging");
+                        flowsToExecute = sortExecutionPathByObjectForVlanTagging(flowsToExecute, requestAction);
                     }
-                    if (!foundRelated) {
-                        traverseCatalogDbService(execution, sIRequest, resourceCounter, aaiResourceIds);
+                    // By default, enable homing at VNF level for CREATEINSTANCE and ASSIGNINSTANCE
+                    if (resourceType == WorkflowType.SERVICE
+                            && (requestAction.equals(CREATEINSTANCE) || requestAction.equals(ASSIGNINSTANCE))
+                            && !resourceCounter.stream().filter(x -> WorkflowType.VNF.equals(x.getResourceType()))
+                                    .collect(Collectors.toList()).isEmpty()) {
+                        execution.setVariable("homing", true);
+                        execution.setVariable("calledHoming", false);
                     }
-                } else if (resourceType == WorkflowType.SERVICE && (requestAction.equalsIgnoreCase("activateInstance")
-                        || requestAction.equalsIgnoreCase("unassignInstance")
-                        || requestAction.equalsIgnoreCase("deleteInstance")
-                        || requestAction.equalsIgnoreCase("activate" + FABRIC_CONFIGURATION))) {
-                    // SERVICE-MACRO-ACTIVATE, SERVICE-MACRO-UNASSIGN, and
-                    // SERVICE-MACRO-DELETE
-                    // Will never get user params with service, macro will have
-                    // to query the SI in AAI to find related instances.
-                    traverseAAIService(execution, resourceCounter, resourceId, aaiResourceIds);
-                } else if (resourceType == WorkflowType.SERVICE
-                        && requestAction.equalsIgnoreCase("deactivateInstance")) {
-                    resourceCounter.add(new Resource(WorkflowType.SERVICE, "", false));
-                } else if (resourceType == WorkflowType.VNF && (requestAction.equalsIgnoreCase("replaceInstance")
-                        || (requestAction.equalsIgnoreCase("recreateInstance")))) {
-                    traverseAAIVnf(execution, resourceCounter, workflowResourceIds.getServiceInstanceId(),
-                            workflowResourceIds.getVnfId(), aaiResourceIds);
-                } else {
-                    buildAndThrowException(execution, "Current Macro Request is not supported");
-                }
-                String foundObjects = "";
-                for (WorkflowType type : WorkflowType.values()) {
-                    foundObjects = foundObjects + type + " - " + resourceCounter.stream()
-                            .filter(x -> type.equals(x.getResourceType())).collect(Collectors.toList()).size() + "    ";
-                }
-                logger.info("Found {}", foundObjects);
-
-                if (orchFlows == null || orchFlows.isEmpty()) {
-                    orchFlows = queryNorthBoundRequestCatalogDb(execution, requestAction, resourceType, aLaCarte,
-                            cloudOwner, serviceType);
-                }
-                flowsToExecute =
-                        buildExecuteBuildingBlockList(orchFlows, resourceCounter, requestId, apiVersion, resourceId,
-                                resourceType, requestAction, aLaCarte, vnfType, workflowResourceIds, requestDetails);
-                if (!resourceCounter.stream().filter(x -> WorkflowType.NETWORKCOLLECTION == x.getResourceType())
-                        .collect(Collectors.toList()).isEmpty()) {
-                    logger.info("Sorting for Vlan Tagging");
-                    flowsToExecute = sortExecutionPathByObjectForVlanTagging(flowsToExecute, requestAction);
-                }
-                // By default, enable homing at VNF level for CREATEINSTANCE and ASSIGNINSTANCE
-                if (resourceType == WorkflowType.SERVICE
-                        && (requestAction.equals(CREATEINSTANCE) || requestAction.equals(ASSIGNINSTANCE))
-                        && !resourceCounter.stream().filter(x -> WorkflowType.VNF.equals(x.getResourceType()))
-                                .collect(Collectors.toList()).isEmpty()) {
-                    execution.setVariable("homing", true);
-                    execution.setVariable("calledHoming", false);
-                }
-                if (resourceType == WorkflowType.SERVICE && (requestAction.equalsIgnoreCase(ASSIGNINSTANCE)
-                        || requestAction.equalsIgnoreCase(CREATEINSTANCE))) {
-                    generateResourceIds(flowsToExecute, resourceCounter, serviceInstanceId);
-                } else {
-                    updateResourceIdsFromAAITraversal(flowsToExecute, resourceCounter, aaiResourceIds,
-                            serviceInstanceId);
+                    if (resourceType == WorkflowType.SERVICE && (requestAction.equalsIgnoreCase(ASSIGNINSTANCE)
+                            || requestAction.equalsIgnoreCase(CREATEINSTANCE))) {
+                        generateResourceIds(flowsToExecute, resourceCounter, serviceInstanceId);
+                    } else {
+                        updateResourceIdsFromAAITraversal(flowsToExecute, resourceCounter, aaiResourceIds,
+                                serviceInstanceId);
+                    }
                 }
             }
-
-            // If the user set "Homing_Solution" to "none", disable homing, else if "Homing_Solution" is
-            // specified,
+            // If the user set "Homing_Solution" to "none", disable homing, else if "Homing_Solution" is specified,
             // enable it.
             if (sIRequest.getRequestDetails().getRequestParameters() != null
                     && sIRequest.getRequestDetails().getRequestParameters().getUserParams() != null) {
@@ -359,6 +368,10 @@
                 logger.info(ebb.getBuildingBlock().getBpmnFlowName());
                 flowNames.add(ebb.getBuildingBlock().getBpmnFlowName());
             }
+
+            if (!aLaCarte) {
+                bbInputSetupUtils.persistFlowExecutionPath(requestId, flowsToExecute);
+            }
             execution.setVariable("flowNames", flowNames);
             execution.setVariable(BBConstants.G_CURRENT_SEQUENCE, 0);
             execution.setVariable("retryCount", 0);
@@ -431,9 +444,8 @@
     protected List<ExecuteBuildingBlock> getConfigBuildingBlocks(ConfigBuildingBlocksDataObject dataObj) {
 
         List<ExecuteBuildingBlock> flowsToExecuteConfigs = new ArrayList<>();
-        List<OrchestrationFlow> result = new ArrayList<>(dataObj.getOrchFlows());
-        result = dataObj.getOrchFlows().stream().filter(item -> item.getFlowName().contains(FABRIC_CONFIGURATION))
-                .collect(Collectors.toList());
+        List<OrchestrationFlow> result = dataObj.getOrchFlows().stream()
+                .filter(item -> item.getFlowName().contains(FABRIC_CONFIGURATION)).collect(Collectors.toList());
         String vnfId = dataObj.getWorkflowResourceIds().getVnfId();
         String vfModuleId = dataObj.getWorkflowResourceIds().getVfModuleId();
 
@@ -633,7 +645,7 @@
             RelatedInstance relatedLocalNetwork =
                     bbInputSetupUtils.getRelatedInstanceByType(sIRequest.getRequestDetails(), ModelType.network);
             if (relatedVpnBinding != null && relatedLocalNetwork != null) {
-                traverseVrfConfiguration(execution, aaiResourceIds, resourceCounter, service, relatedVpnBinding,
+                traverseVrfConfiguration(aaiResourceIds, resourceCounter, service, relatedVpnBinding,
                         relatedLocalNetwork);
             } else {
                 traverseNetworkCollection(execution, resourceCounter, service);
@@ -641,10 +653,10 @@
         }
     }
 
-    protected void traverseVrfConfiguration(DelegateExecution execution,
-            List<Pair<WorkflowType, String>> aaiResourceIds, List<Resource> resourceCounter,
-            org.onap.so.db.catalog.beans.Service service, RelatedInstance relatedVpnBinding,
-            RelatedInstance relatedLocalNetwork) throws VrfBondingServiceException, JsonProcessingException {
+    protected void traverseVrfConfiguration(List<Pair<WorkflowType, String>> aaiResourceIds,
+            List<Resource> resourceCounter, org.onap.so.db.catalog.beans.Service service,
+            RelatedInstance relatedVpnBinding, RelatedInstance relatedLocalNetwork)
+            throws VrfBondingServiceException, JsonProcessingException {
         org.onap.aai.domain.yang.L3Network aaiLocalNetwork =
                 bbInputSetupUtils.getAAIL3Network(relatedLocalNetwork.getInstanceId());
         vrfValidation.vrfServiceValidation(service);
@@ -1263,8 +1275,8 @@
 
     protected List<ExecuteBuildingBlock> buildExecuteBuildingBlockList(List<OrchestrationFlow> orchFlows,
             List<Resource> resourceCounter, String requestId, String apiVersion, String resourceId,
-            WorkflowType resourceType, String requestAction, boolean aLaCarte, String vnfType,
-            WorkflowResourceIds workflowResourceIds, RequestDetails requestDetails) {
+            String requestAction, boolean aLaCarte, String vnfType, WorkflowResourceIds workflowResourceIds,
+            RequestDetails requestDetails) {
         List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
         for (OrchestrationFlow orchFlow : orchFlows) {
             if (orchFlow.getFlowName().contains(SERVICE)) {
@@ -1477,4 +1489,17 @@
         }
         exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, runtimeErrorMessage);
     }
+
+    protected boolean isUriResume(String uri) {
+        return uri.endsWith("/resume");
+    }
+
+    protected boolean isRequestMacroServiceResume(boolean aLaCarte, WorkflowType resourceType, String requestAction,
+            String serviceInstanceId) {
+        return (!aLaCarte && resourceType == WorkflowType.SERVICE
+                && (requestAction.equalsIgnoreCase(ASSIGNINSTANCE) || requestAction.equalsIgnoreCase(CREATEINSTANCE))
+                && (serviceInstanceId != null && serviceInstanceId.trim().length() > 1)
+                && (bbInputSetupUtils.getAAIServiceInstanceById(serviceInstanceId) != null));
+    }
 }
+
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBFailure.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBFailure.java
index 4d2f9fd..be3e06c 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBFailure.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBFailure.java
@@ -4,6 +4,8 @@
  * ================================================================================
  * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ================================================================================
  * 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
@@ -26,6 +28,7 @@
 import org.camunda.bpm.engine.delegate.DelegateExecution;
 import org.onap.so.bpmn.core.WorkflowException;
 import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
+import org.onap.so.constants.Status;
 import org.onap.so.db.request.beans.InfraActiveRequests;
 import org.onap.so.db.request.client.RequestsDbClient;
 import org.slf4j.Logger;
@@ -37,6 +40,7 @@
 public class WorkflowActionBBFailure {
 
     private static final Logger logger = LoggerFactory.getLogger(WorkflowActionBBFailure.class);
+    public static final String ROLLBACK_TARGET_STATE = "rollbackTargetState";
     @Autowired
     private RequestsDbClient requestDbclient;
     @Autowired
@@ -53,7 +57,12 @@
             } else {
                 errorMsg = "Failed to determine error message";
             }
-            request.setStatusMessage(errorMsg);
+            Boolean isRollback = (Boolean) execution.getVariable("isRollback");
+            if (!Boolean.TRUE.equals(isRollback)) {
+                request.setStatusMessage(errorMsg);
+            } else {
+                request.setRollbackStatusMessage(errorMsg);
+            }
             request.setProgress(Long.valueOf(100));
             request.setLastModifiedBy("CamundaBPMN");
             request.setEndTime(new Timestamp(System.currentTimeMillis()));
@@ -84,6 +93,8 @@
                 rollbackErrorMsg = "Rollback has been completed successfully.";
                 request.setRollbackStatusMessage(rollbackErrorMsg);
                 execution.setVariable("RollbackErrorMessage", rollbackErrorMsg);
+                String rollbackTargetState = (String) execution.getVariable(ROLLBACK_TARGET_STATE);
+                request.setRequestStatus(rollbackTargetState);
             } else if (isRollbackFailure) {
                 Optional<String> rollbackErrorMsgOp = retrieveErrorMessage(execution);
                 if (rollbackErrorMsgOp.isPresent()) {
@@ -93,6 +104,7 @@
                 }
                 request.setRollbackStatusMessage(rollbackErrorMsg);
                 execution.setVariable("RollbackErrorMessage", rollbackErrorMsg);
+                request.setRequestStatus(Status.FAILED.toString());
             } else {
                 Optional<String> errorMsgOp = retrieveErrorMessage(execution);
                 if (errorMsgOp.isPresent()) {
@@ -102,6 +114,12 @@
                 }
                 request.setStatusMessage(errorMsg);
                 execution.setVariable("ErrorMessage", errorMsg);
+                String handlingCode = (String) execution.getVariable("handlingCode");
+                if ("Abort".equalsIgnoreCase(handlingCode)) {
+                    request.setRequestStatus(Status.ABORTED.toString());
+                } else {
+                    request.setRequestStatus(Status.FAILED.toString());
+                }
             }
             if (ebb != null && ebb.getBuildingBlock() != null) {
                 String flowStatus = "";
@@ -115,7 +133,6 @@
             }
 
             request.setProgress(Long.valueOf(100));
-            request.setRequestStatus("FAILED");
             request.setLastModifiedBy("CamundaBPMN");
             request.setEndTime(new Timestamp(System.currentTimeMillis()));
             requestDbclient.updateInfraActiveRequests(request);
@@ -128,10 +145,10 @@
         String errorMsg = null;
         try {
             WorkflowException exception = (WorkflowException) execution.getVariable("WorkflowException");
-            if (exception != null && (exception.getErrorMessage() != null || !exception.getErrorMessage().equals(""))) {
+            if (exception != null && (exception.getErrorMessage() != null || !"".equals(exception.getErrorMessage()))) {
                 errorMsg = exception.getErrorMessage();
             }
-            if (errorMsg == null || errorMsg.equals("")) {
+            if (errorMsg == null || "".equals(errorMsg)) {
                 errorMsg = (String) execution.getVariable("WorkflowExceptionErrorMessage");
             }
             if (errorMsg == null) {
@@ -150,7 +167,7 @@
         updateRequestStatusToFailed(execution);
     }
 
-    public void abortCallErrorHandling(DelegateExecution execution) {
+    public void abortCallErrorHandling() {
         String msg = "Flow has failed. Rainy day handler has decided to abort the process.";
         logger.error(msg);
         throw new BpmnError(msg);
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasks.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasks.java
index 44152fc..a17556f 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasks.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasks.java
@@ -312,7 +312,6 @@
             }
 
             workflowActionBBFailure.updateRequestErrorStatusMessage(execution);
-
             if (rollbackFlows.isEmpty())
                 execution.setVariable("isRollbackNeeded", false);
             else
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/SDNCVfModuleResources.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/SDNCVfModuleResources.java
index b83a4d5..b3ea18d 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/SDNCVfModuleResources.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/SDNCVfModuleResources.java
@@ -60,9 +60,9 @@
     }
 
     public GenericResourceApiVfModuleOperationInformation unassignVfModule(VfModule vfModule, GenericVnf vnf,
-            ServiceInstance serviceInstance, URI callbackURI) throws MapperException {
+            ServiceInstance serviceInstance, RequestContext requestContext, URI callbackURI) throws MapperException {
         return sdncRM.reqMapper(SDNCSvcOperation.VF_MODULE_TOPOLOGY_OPERATION, SDNCSvcAction.UNASSIGN, vfModule, null,
-                vnf, serviceInstance, null, null, null, null, callbackURI);
+                vnf, serviceInstance, null, null, requestContext, null, callbackURI);
     }
 
     public GenericResourceApiVfModuleOperationInformation deactivateVfModule(VfModule vfModule, GenericVnf vnf,
diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/common/data/TestDataSetup.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/common/data/TestDataSetup.java
index 825c703..4f1ad99 100644
--- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/common/data/TestDataSetup.java
+++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/common/data/TestDataSetup.java
@@ -159,7 +159,7 @@
 
     public RequestContext buildRequestContext() {
         RequestContext requestContext = new RequestContext();
-        requestContext.setMsoRequestId(UUID.randomUUID().toString());
+        requestContext.setMsoRequestId("fb06f44c-c797-4f38-9b17-b4b975344600");
         requestContext.setProductFamilyId("testProductFamilyId");
         requestContext.setRequestorId("testRequestorId");
 
diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasksTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasksTest.java
index b889493..ed3ec75 100644
--- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasksTest.java
+++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasksTest.java
@@ -60,7 +60,6 @@
 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
 import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoGenericVnf;
 import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoVfModule;
-import org.onap.so.bpmn.servicedecomposition.tasks.exceptions.DuplicateNameException;
 import org.onap.so.client.exception.BBObjectNotFoundException;
 import org.onap.so.db.catalog.beans.OrchestrationStatus;
 import org.onap.so.client.aai.entities.uri.AAIResourceUri;
@@ -130,14 +129,6 @@
     }
 
     @Test
-    public void createServiceInstanceNameInUseExceptionTest() throws Exception {
-        expectedException.expect(BpmnError.class);
-        doReturn(true).when(aaiServiceInstanceResources).checkInstanceServiceNameInUse(serviceInstance);
-        execution.setVariable("aLaCarte", Boolean.TRUE);
-        aaiCreateTasks.createServiceInstance(execution);
-    }
-
-    @Test
     public void createServiceInstanceExceptionTest() throws Exception {
         expectedException.expect(BpmnError.class);
 
@@ -162,14 +153,6 @@
     }
 
     @Test
-    public void createVolumeGroupDuplicateNameTest() throws Exception {
-        expectedException.expect(BpmnError.class);
-        execution.setVariable("aLaCarte", Boolean.TRUE);
-        doReturn(true).when(aaiVolumeGroupResources).checkNameInUse(volumeGroup);
-        aaiCreateTasks.createVolumeGroup(execution);
-    }
-
-    @Test
     public void createVolumeGroupExceptionTest() throws Exception {
         expectedException.expect(BpmnError.class);
 
@@ -349,14 +332,6 @@
     }
 
     @Test
-    public void createVnfDuplicateNameTest() throws Exception {
-        expectedException.expect(BpmnError.class);
-        doReturn(true).when(aaiVnfResources).checkNameInUse(genericVnf.getVnfName());
-        execution.setVariable("aLaCarte", Boolean.TRUE);
-        aaiCreateTasks.createVnf(execution);
-    }
-
-    @Test
     public void createVnfExceptionTest() throws Exception {
         expectedException.expect(BpmnError.class);
         lookupKeyMap.put(ResourceKey.GENERIC_VNF_ID, "notfound");
@@ -386,14 +361,6 @@
     }
 
     @Test
-    public void createVfModuleDuplicateNameTest() throws Exception {
-        expectedException.expect(BpmnError.class);
-        execution.setVariable("aLaCarte", Boolean.TRUE);
-        doReturn(true).when(aaiVfModuleResources).checkNameInUse(vfModule);
-        aaiCreateTasks.createVfModule(execution);
-    }
-
-    @Test
     public void createServiceSubscriptionTest() {
         doNothing().when(aaiServiceInstanceResources).createServiceSubscription(customer);
         aaiCreateTasks.createServiceSubscription(execution);
@@ -441,14 +408,6 @@
     }
 
     @Test
-    public void createNetworkNameInUseExceptionTest() throws Exception {
-        expectedException.expect(BpmnError.class);
-        execution.setVariable("aLaCarte", Boolean.TRUE);
-        doReturn(true).when(aaiNetworkResources).checkNetworkNameInUse(network.getNetworkName());
-        aaiCreateTasks.createNetwork(execution);
-    }
-
-    @Test
     public void createNetworkExceptionTest() throws Exception {
         expectedException.expect(BpmnError.class);
 
@@ -560,15 +519,6 @@
     }
 
     @Test
-    public void createConfigurationNameInUseExceptionTest() throws Exception {
-        expectedException.expect(BpmnError.class);
-        doReturn(true).when(aaiConfigurationResources)
-                .checkConfigurationNameInUse(configuration.getConfigurationName());
-        execution.setVariable("aLaCarte", Boolean.TRUE);
-        aaiCreateTasks.createConfiguration(execution);
-    }
-
-    @Test
     public void connectVnfToCloudRegionTest() throws Exception {
         gBBInput = execution.getGeneralBuildingBlock();
         doNothing().when(aaiVnfResources).connectVnfToCloudRegion(genericVnf, gBBInput.getCloudRegion());
@@ -609,15 +559,6 @@
     }
 
     @Test
-    public void createInstanceGroupVnfNameInUseExceptionTest() throws Exception {
-        expectedException.expect(BpmnError.class);
-        doReturn(true).when(aaiInstanceGroupResources)
-                .checkInstanceGroupNameInUse(instanceGroup.getInstanceGroupName());
-        execution.setVariable("aLaCarte", Boolean.TRUE);
-        aaiCreateTasks.createInstanceGroupVnf(execution);
-    }
-
-    @Test
     public void createInstanceGroupVnfExceptionTest() throws Exception {
         expectedException.expect(BpmnError.class);
         doThrow(RuntimeException.class).when(aaiInstanceGroupResources)
diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/adapter/network/tasks/NetworkAdapterRestV1Test.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/adapter/network/tasks/NetworkAdapterRestV1Test.java
index d0cee42..8aea2d2 100644
--- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/adapter/network/tasks/NetworkAdapterRestV1Test.java
+++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/adapter/network/tasks/NetworkAdapterRestV1Test.java
@@ -39,12 +39,14 @@
 import org.onap.so.client.exception.BadResponseException;
 import org.onap.so.client.exception.ExceptionBuilder;
 import org.onap.so.client.exception.MapperException;
+import org.onap.so.utils.TargetEntity;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
@@ -110,8 +112,9 @@
         delegateExecution.setVariable("networkAdapterRequest", updateNetworkRequest);
         delegateExecution.setVariable("NetworkAResponse_MESSAGE", updateNetworkResponse.toXmlString());
 
-        doThrow(new BpmnError("MSOWorkflowException")).when(exceptionBuilder)
-                .buildAndThrowWorkflowException(any(DelegateExecution.class), anyInt(), any(String.class));
+        doThrow(new BpmnError("MSOWorkflowException")).when(exceptionBuilder).buildAndThrowWorkflowException(
+                any(DelegateExecution.class), anyInt(), any(String.class), any(TargetEntity.class));
+
         try {
             networkAdapterRestV1Tasks.processCallback(delegateExecution);
         } catch (BpmnError be) {
@@ -119,6 +122,6 @@
         }
         assertNull(delegateExecution.getVariable("updateNetworkResponse"));
         verify(exceptionBuilder, times(1)).buildAndThrowWorkflowException(any(DelegateExecution.class), eq(7000),
-                eq("test error message"));
+                eq("test error message"), eq(TargetEntity.OPENSTACK));
     }
 }
diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/audit/AuditTasksTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/audit/AuditTasksTest.java
index 3bf2429..cee06ca 100644
--- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/audit/AuditTasksTest.java
+++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/audit/AuditTasksTest.java
@@ -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.
@@ -21,14 +21,20 @@
 
 import static com.shazam.shazamcrest.MatcherAssert.assertThat;
 import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
+import static org.junit.Assert.assertEquals;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.when;
+import java.util.ArrayList;
+import java.util.List;
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
 import org.mockito.ArgumentMatchers;
 import org.mockito.InjectMocks;
+import org.mockito.Mockito;
+import org.onap.aai.domain.yang.Vserver;
 import org.onap.so.audit.beans.AuditInventory;
 import org.onap.so.bpmn.BaseTaskTest;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
@@ -36,6 +42,11 @@
 import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
 import org.onap.so.client.exception.BBObjectNotFoundException;
+import org.onap.so.client.graphinventory.GraphInventoryCommonObjectMapperProvider;
+import org.onap.so.db.request.beans.RequestProcessingData;
+import org.onap.so.objects.audit.AAIObjectAudit;
+import org.onap.so.objects.audit.AAIObjectAuditList;
+import com.fasterxml.jackson.core.JsonProcessingException;
 
 public class AuditTasksTest extends BaseTaskTest {
 
@@ -50,16 +61,29 @@
     public final ExpectedException exception = ExpectedException.none();
 
     @Before
-    public void before() throws BBObjectNotFoundException {
+    public void before() throws BBObjectNotFoundException, JsonProcessingException {
         serviceInstance = setServiceInstance();
         genericVnf = setGenericVnf();
         vfModule = setVfModule();
+        buildRequestContext();
         setCloudRegion();
+        setRequestContext();
         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.GENERIC_VNF_ID)))
                 .thenReturn(genericVnf);
         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.SERVICE_INSTANCE_ID)))
                 .thenReturn(serviceInstance);
+        execution.setVariable("auditQuerySuccess", true);
+        AAIObjectAuditList auditList = new AAIObjectAuditList();
+        auditList.setHeatStackName("testHeatStackName");
+        AAIObjectAudit audit = new AAIObjectAudit();
+        Vserver vserver = new Vserver();
+        vserver.setVserverId("testVserverId");
+        audit.setAaiObject(vserver);
+        auditList.getAuditList().add(audit);
+        GraphInventoryCommonObjectMapperProvider objectMapper = new GraphInventoryCommonObjectMapperProvider();
+        String auditListString = objectMapper.getMapper().writeValueAsString(audit);
+        execution.setVariable("auditList", auditListString);
     }
 
     @Test
@@ -68,8 +92,12 @@
         expectedAuditInventory.setCloudOwner("testCloudOwner");
         expectedAuditInventory.setCloudRegion("testLcpCloudRegionId");
         expectedAuditInventory.setHeatStackName("testVfModuleName1");
+        expectedAuditInventory.setVfModuleId("testVfModuleId1");
         expectedAuditInventory.setTenantId("testTenantId");
+        expectedAuditInventory.setGenericVnfId("testVnfId1");
+        expectedAuditInventory.setMsoRequestId("fb06f44c-c797-4f38-9b17-b4b975344600");
         auditTasks.setupAuditVariable(execution);
         assertThat((AuditInventory) execution.getVariable("auditInventory"), sameBeanAs(expectedAuditInventory));
     }
+
 }
diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/namingservice/tasks/NamingServiceCreateTasksTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/namingservice/tasks/NamingServiceCreateTasksTest.java
index 44e5e0e..609d2da 100644
--- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/namingservice/tasks/NamingServiceCreateTasksTest.java
+++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/namingservice/tasks/NamingServiceCreateTasksTest.java
@@ -21,6 +21,7 @@
 package org.onap.so.bpmn.infrastructure.namingservice.tasks;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.isA;
 import static org.mockito.Mockito.doReturn;
@@ -31,6 +32,7 @@
 import java.util.Optional;
 import org.junit.Before;
 import org.junit.Test;
+import org.mockito.ArgumentCaptor;
 import org.mockito.ArgumentMatchers;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
@@ -47,6 +49,8 @@
 import org.onap.so.client.aai.entities.AAIResultWrapper;
 import org.onap.so.client.aai.entities.Relationships;
 import org.onap.so.client.exception.BBObjectNotFoundException;
+import org.onap.so.client.namingservice.NamingRequestObject;
+import org.onap.so.client.namingservice.NamingServiceConstants;
 
 public class NamingServiceCreateTasksTest extends BaseTaskTest {
     @InjectMocks
@@ -106,9 +110,17 @@
         String generatedName = "generatedWanTransportServiceName";
         doReturn(generatedName).when(namingServiceResources).generateServiceInstanceName(any());
         NamingServiceCreateTasks spy = Mockito.spy(namingServiceCreateTasks);
+        ArgumentCaptor<NamingRequestObject> captor = ArgumentCaptor.forClass(NamingRequestObject.class);
 
         spy.createWanTransportServiceName(execution);
-        verify(namingServiceResources, times(1)).generateServiceInstanceName(any());
+        verify(namingServiceResources, times(1)).generateServiceInstanceName(captor.capture());
+        assertTrue(captor.getAllValues().get(0).getExternalKeyValue().startsWith("testServiceInstanceId"));
+        assertEquals(captor.getAllValues().get(0).getNamingTypeValue(), NamingServiceConstants.NAMING_TYPE_SERVICE);
+        assertEquals(captor.getAllValues().get(0).getResourceNameValue(),
+                NamingServiceConstants.RESOURCE_NAME_SERVICE_INSTANCE_NAME);
+        assertEquals(captor.getAllValues().get(0).getPolicyInstanceNameValue(), null);
+        assertTrue(captor.getAllValues().get(0).getServiceModelNameValue().startsWith("testModelName"));
+        assertTrue(captor.getAllValues().get(0).getModelVersionValue().startsWith("testModelVersion"));
         assertEquals(generatedName, serviceInstance.getServiceInstanceName());
     }
 
@@ -118,10 +130,20 @@
                 .thenReturn(buildL3Network());
         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VPN_ID)))
                 .thenReturn(buildVpnBinding());
+        ArgumentCaptor<NamingRequestObject> captor = ArgumentCaptor.forClass(NamingRequestObject.class);
         String generatedName = "generatedWanTransportServiceName";
         doReturn(generatedName).when(namingServiceResources).generateServiceInstanceName(any());
         namingServiceCreateTasks.createVpnBondingServiceName(execution);
-        verify(namingServiceResources, times(1)).generateServiceInstanceName(any());
+        verify(namingServiceResources, times(1)).generateServiceInstanceName(captor.capture());
+        assertTrue(captor.getAllValues().get(0).getExternalKeyValue().startsWith("testServiceInstanceId"));
+        assertEquals(captor.getAllValues().get(0).getPolicyInstanceNameValue(), null);
+        assertEquals(captor.getAllValues().get(0).getNamingTypeValue(), NamingServiceConstants.NAMING_TYPE_SERVICE);
+        assertTrue(captor.getAllValues().get(0).getServiceModelNameValue().startsWith("testModelName"));
+        assertTrue(captor.getAllValues().get(0).getModelVersionValue().startsWith("testModelVersion"));
+        assertTrue(captor.getAllValues().get(0).getNetworkNameValue().startsWith("testNetworkName"));
+        assertTrue(captor.getAllValues().get(0).getVpnNameValue().startsWith("testVpnName"));
+        assertEquals(captor.getAllValues().get(0).getResourceNameValue(),
+                NamingServiceConstants.RESOURCE_NAME_SERVICE_INSTANCE_NAME);
         assertEquals(generatedName, serviceInstance.getServiceInstanceName());
     }
 }
diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/sdnc/tasks/SDNCQueryTasksTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/sdnc/tasks/SDNCQueryTasksTest.java
index 3ea8474..0ba9237 100644
--- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/sdnc/tasks/SDNCQueryTasksTest.java
+++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/sdnc/tasks/SDNCQueryTasksTest.java
@@ -43,6 +43,9 @@
 import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
 import org.onap.so.client.exception.BBObjectNotFoundException;
+import org.onap.so.client.exception.BadResponseException;
+import org.onap.so.utils.TargetEntities;
+import org.onap.so.utils.TargetEntity;
 
 public class SDNCQueryTasksTest extends BaseTaskTest {
     @InjectMocks
@@ -61,8 +64,8 @@
         genericVnf = setGenericVnf();
         vfModule = setVfModule();
 
-        doThrow(new BpmnError("BPMN Error")).when(exceptionUtil)
-                .buildAndThrowWorkflowException(any(BuildingBlockExecution.class), eq(7000), any(Exception.class));
+        doThrow(new BpmnError("BPMN Error")).when(exceptionUtil).buildAndThrowWorkflowException(
+                any(BuildingBlockExecution.class), eq(7000), any(Exception.class), any(TargetEntities.class));
         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.SERVICE_INSTANCE_ID)))
                 .thenReturn(serviceInstance);
 
@@ -88,6 +91,28 @@
     }
 
     @Test
+    public void queryVfModuleBadResponseExceptionTest() throws Exception {
+        BadResponseException exception = new BadResponseException("Error received from SDNC");
+        doThrow(exception).when(sdncVfModuleResources).queryVfModule(vfModule);
+
+        expectedException.expect(BpmnError.class);
+        sdncQueryTasks.queryVfModule(execution);
+
+        verify(exceptionUtil, times(1)).buildAndThrowWorkflowException(execution, 700, exception, TargetEntity.SDNC);
+    }
+
+    @Test
+    public void queryVfModuleResponseExceptionNoResponseTest() throws Exception {
+        BadResponseException exception = new BadResponseException("Error did not receive a response from SDNC.");
+        doThrow(exception).when(sdncVfModuleResources).queryVfModule(vfModule);
+
+        expectedException.expect(BpmnError.class);
+        sdncQueryTasks.queryVfModule(execution);
+
+        verify(exceptionUtil, times(1)).buildAndThrowWorkflowException(execution, 700, exception, TargetEntity.SO);
+    }
+
+    @Test
     public void queryVnfTest() throws Exception {
         String sdncQueryResponse = "response";
 
@@ -101,6 +126,28 @@
     }
 
     @Test
+    public void queryVnfBadResponseExceptionTest() throws Exception {
+        BadResponseException exception = new BadResponseException("Error received from SDNC");
+        doThrow(exception).when(sdncVnfResources).queryVnf(genericVnf);
+
+        expectedException.expect(BpmnError.class);
+        sdncQueryTasks.queryVnf(execution);
+
+        verify(exceptionUtil, times(1)).buildAndThrowWorkflowException(execution, 700, exception, TargetEntity.SDNC);
+    }
+
+    @Test
+    public void queryVnfBadResponseExceptionNoResponseTest() throws Exception {
+        BadResponseException exception = new BadResponseException("Error did not receive a response from SDNC.");
+        doThrow(exception).when(sdncVnfResources).queryVnf(genericVnf);
+
+        expectedException.expect(BpmnError.class);
+        sdncQueryTasks.queryVnf(execution);
+
+        verify(exceptionUtil, times(1)).buildAndThrowWorkflowException(execution, 700, exception, TargetEntity.SO);
+    }
+
+    @Test
     public void queryVfModuleForVolumeGroupTest() throws Exception {
         String sdncQueryResponse = "response";
         vfModule.setSelflink("vfModuleSelfLink");
@@ -115,6 +162,28 @@
     }
 
     @Test
+    public void queryVfModuleForVolumeGroupBadResponseExceptionTest() throws Exception {
+        BadResponseException exception = new BadResponseException("Error received from SDNC");
+        doThrow(exception).when(sdncVfModuleResources).queryVfModule(vfModule);
+
+        expectedException.expect(BpmnError.class);
+        sdncQueryTasks.queryVfModuleForVolumeGroup(execution);
+
+        verify(exceptionUtil, times(1)).buildAndThrowWorkflowException(execution, 700, exception, TargetEntity.SDNC);
+    }
+
+    @Test
+    public void queryVfModuleForVolumeGroupBadResponseExceptionNoResponseTest() throws Exception {
+        BadResponseException exception = new BadResponseException("Error did not receive a response from SDNC.");
+        doThrow(exception).when(sdncVfModuleResources).queryVfModule(vfModule);
+
+        expectedException.expect(BpmnError.class);
+        sdncQueryTasks.queryVfModuleForVolumeGroup(execution);
+
+        verify(exceptionUtil, times(1)).buildAndThrowWorkflowException(execution, 700, exception, TargetEntity.SO);
+    }
+
+    @Test
     public void queryVfModuleForVolumeGroupNoSelfLinkExceptionTest() throws Exception {
         expectedException.expect(BpmnError.class);
 
diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/sdnc/tasks/SDNCRequestTasksTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/sdnc/tasks/SDNCRequestTasksTest.java
index 6a94b35..0fc33fe 100644
--- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/sdnc/tasks/SDNCRequestTasksTest.java
+++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/sdnc/tasks/SDNCRequestTasksTest.java
@@ -21,6 +21,7 @@
 package org.onap.so.bpmn.infrastructure.sdnc.tasks;
 
 import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.doThrow;
 import java.io.IOException;
@@ -48,6 +49,7 @@
 import org.onap.so.client.sdnc.SDNCClient;
 import org.onap.so.client.sdnc.beans.SDNCRequest;
 import org.onap.so.client.sdnc.endpoint.SDNCTopology;
+import org.onap.so.utils.TargetEntity;
 import org.w3c.dom.Document;
 import org.xml.sax.InputSource;
 import com.fasterxml.jackson.core.JsonParseException;
@@ -66,7 +68,6 @@
     @Mock
     SDNCClient sdncClient;
 
-
     @Spy
     private ExceptionBuilder exceptionBuilder;
 
diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/sdnc/tasks/SDNCUnassignTasksTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/sdnc/tasks/SDNCUnassignTasksTest.java
index 10c034d..b29d15c 100644
--- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/sdnc/tasks/SDNCUnassignTasksTest.java
+++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/sdnc/tasks/SDNCUnassignTasksTest.java
@@ -106,11 +106,11 @@
 
     @Test
     public void unassignVfModuleTest() throws Exception {
-        doReturn(new GenericResourceApiVfModuleOperationInformation()).when(sdncVfModuleResources)
-                .unassignVfModule(eq(vfModule), eq(genericVnf), eq(serviceInstance), any(URI.class));
+        doReturn(new GenericResourceApiVfModuleOperationInformation()).when(sdncVfModuleResources).unassignVfModule(
+                eq(vfModule), eq(genericVnf), eq(serviceInstance), eq(requestContext), any(URI.class));
         sdncUnassignTasks.unassignVfModule(execution);
         verify(sdncVfModuleResources, times(1)).unassignVfModule(eq(vfModule), eq(genericVnf), eq(serviceInstance),
-                any(URI.class));
+                eq(requestContext), any(URI.class));
         SDNCRequest sdncRequest = execution.getVariable("SDNCRequest");
         assertEquals(SDNCTopology.VFMODULE, sdncRequest.getTopology());
     }
@@ -119,7 +119,7 @@
     public void unassignVfModuleExceptionTest() throws Exception {
         expectedException.expect(BpmnError.class);
         doThrow(RuntimeException.class).when(sdncVfModuleResources).unassignVfModule(eq(vfModule), eq(genericVnf),
-                eq(serviceInstance), any(URI.class));
+                eq(serviceInstance), eq(requestContext), any(URI.class));
         sdncUnassignTasks.unassignVfModule(execution);
     }
 
diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBFailureTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBFailureTest.java
index c683303..2d48d02 100644
--- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBFailureTest.java
+++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBFailureTest.java
@@ -41,6 +41,7 @@
 import org.onap.so.bpmn.BaseTaskTest;
 import org.onap.so.bpmn.core.WorkflowException;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
+import org.onap.so.constants.Status;
 import org.onap.so.db.request.beans.InfraActiveRequests;
 
 public class WorkflowActionBBFailureTest extends BaseTaskTest {
@@ -102,6 +103,24 @@
         workflowActionBBFailure.updateRequestStatusToFailed(execution);
         String errorMsg = (String) execution.getVariable("ErrorMessage");
         assertEquals("error in test case", errorMsg);
+        assertEquals(Status.FAILED.toString(), req.getRequestStatus());
+    }
+
+    @Test
+    public void updateRequestStatusToAborted() {
+        execution.setVariable("mso-request-id", "123");
+        execution.setVariable("isRollbackComplete", false);
+        execution.setVariable("isRollback", false);
+        execution.setVariable("handlingCode", "Abort");
+        InfraActiveRequests req = new InfraActiveRequests();
+        WorkflowException wfe = new WorkflowException("processKey123", 1, "error in test case");
+        execution.setVariable("WorkflowException", wfe);
+        doReturn(req).when(requestsDbClient).getInfraActiveRequestbyRequestId("123");
+        doNothing().when(requestsDbClient).updateInfraActiveRequests(isA(InfraActiveRequests.class));
+        workflowActionBBFailure.updateRequestStatusToFailed(execution);
+        String errorMsg = (String) execution.getVariable("ErrorMessage");
+        assertEquals("error in test case", errorMsg);
+        assertEquals(Status.ABORTED.toString(), req.getRequestStatus());
     }
 
     @Test
@@ -117,19 +136,52 @@
         workflowActionBBFailure.updateRequestStatusToFailed(execution);
         String errorMsg = (String) execution.getVariable("RollbackErrorMessage");
         assertEquals("error in rollback", errorMsg);
+        assertEquals(Status.FAILED.toString(), req.getRequestStatus());
     }
 
     @Test
-    public void updateRequestStatusToFailedRollbackCompleted() {
+    public void updateRequestStatusToRolledback() {
         execution.setVariable("mso-request-id", "123");
         execution.setVariable("isRollbackComplete", true);
         execution.setVariable("isRollback", true);
+        execution.setVariable("rollbackTargetState", "ROLLED_BACK");
         InfraActiveRequests req = new InfraActiveRequests();
         doReturn(req).when(requestsDbClient).getInfraActiveRequestbyRequestId("123");
         doNothing().when(requestsDbClient).updateInfraActiveRequests(isA(InfraActiveRequests.class));
         workflowActionBBFailure.updateRequestStatusToFailed(execution);
         String errorMsg = (String) execution.getVariable("RollbackErrorMessage");
         assertEquals("Rollback has been completed successfully.", errorMsg);
+        assertEquals(Status.ROLLED_BACK.toString(), req.getRequestStatus());
+    }
+
+    @Test
+    public void updateRequestStatusToRolledbackToAssigned() {
+        execution.setVariable("mso-request-id", "123");
+        execution.setVariable("isRollbackComplete", true);
+        execution.setVariable("isRollback", true);
+        execution.setVariable("rollbackTargetState", "ROLLED_BACK_TO_ASSIGNED");
+        InfraActiveRequests req = new InfraActiveRequests();
+        doReturn(req).when(requestsDbClient).getInfraActiveRequestbyRequestId("123");
+        doNothing().when(requestsDbClient).updateInfraActiveRequests(isA(InfraActiveRequests.class));
+        workflowActionBBFailure.updateRequestStatusToFailed(execution);
+        String errorMsg = (String) execution.getVariable("RollbackErrorMessage");
+        assertEquals("Rollback has been completed successfully.", errorMsg);
+        assertEquals(Status.ROLLED_BACK_TO_ASSIGNED.toString(), req.getRequestStatus());
+    }
+
+    @Test
+    public void updateRequestStatusToRolledbackToCreated() {
+        execution.setVariable("mso-request-id", "123");
+        execution.setVariable("isRollbackComplete", true);
+        execution.setVariable("isRollback", true);
+        execution.setVariable("rollbackTargetState", "ROLLED_BACK_TO_CREATED");
+        InfraActiveRequests req = new InfraActiveRequests();
+        doReturn(req).when(requestsDbClient).getInfraActiveRequestbyRequestId("123");
+        doNothing().when(requestsDbClient).updateInfraActiveRequests(isA(InfraActiveRequests.class));
+        workflowActionBBFailure.updateRequestStatusToFailed(execution);
+        String errorMsg = (String) execution.getVariable("RollbackErrorMessage");
+        assertEquals("Rollback has been completed successfully.", errorMsg);
+        assertEquals(Status.ROLLED_BACK_TO_CREATED.toString(), req.getRequestStatus());
     }
 
     @Test
@@ -160,4 +212,38 @@
         Mockito.verify(reqMock, Mockito.times(1)).setLastModifiedBy("CamundaBPMN");
         Mockito.verify(reqMock, Mockito.times(1)).setEndTime(any(Timestamp.class));
     }
+
+    @Test
+    public void updateRequestRollbackErrorStatusMessageTest() {
+        String reqId = "reqId123";
+        execution.setVariable("mso-request-id", reqId);
+        WorkflowException we = new WorkflowException("WorkflowAction", 1231, "Error Case");
+        execution.setVariable("WorkflowException", we);
+        execution.setVariable("isRollback", true);
+
+        doReturn(reqMock).when(requestsDbClient).getInfraActiveRequestbyRequestId(reqId);
+        workflowActionBBFailure.updateRequestErrorStatusMessage(execution);
+        Mockito.verify(reqMock, Mockito.times(0)).setStatusMessage("Error Case");
+        Mockito.verify(reqMock, Mockito.times(1)).setRollbackStatusMessage("Error Case");
+        Mockito.verify(reqMock, Mockito.times(1)).setProgress(Long.valueOf(100));
+        Mockito.verify(reqMock, Mockito.times(1)).setLastModifiedBy("CamundaBPMN");
+        Mockito.verify(reqMock, Mockito.times(1)).setEndTime(any(Timestamp.class));
+    }
+
+    @Test
+    public void updateRequestNotRollbackErrorStatusMessageTest() {
+        String reqId = "reqId123";
+        execution.setVariable("mso-request-id", reqId);
+        WorkflowException we = new WorkflowException("WorkflowAction", 1231, "Error Case");
+        execution.setVariable("WorkflowException", we);
+        execution.setVariable("isRollback", false);
+
+        doReturn(reqMock).when(requestsDbClient).getInfraActiveRequestbyRequestId(reqId);
+        workflowActionBBFailure.updateRequestErrorStatusMessage(execution);
+        Mockito.verify(reqMock, Mockito.times(1)).setStatusMessage("Error Case");
+        Mockito.verify(reqMock, Mockito.times(0)).setRollbackStatusMessage("Error Case");
+        Mockito.verify(reqMock, Mockito.times(1)).setProgress(Long.valueOf(100));
+        Mockito.verify(reqMock, Mockito.times(1)).setLastModifiedBy("CamundaBPMN");
+        Mockito.verify(reqMock, Mockito.times(1)).setEndTime(any(Timestamp.class));
+    }
 }
diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionTest.java
index 176a09a..918a474 100644
--- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionTest.java
+++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionTest.java
@@ -26,6 +26,7 @@
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertThat;
@@ -96,6 +97,8 @@
 import org.onap.so.db.catalog.beans.VfModuleCustomization;
 import org.onap.so.db.catalog.beans.macro.NorthBoundRequest;
 import org.onap.so.db.catalog.beans.macro.OrchestrationFlow;
+import org.onap.so.db.request.beans.InfraActiveRequests;
+import org.onap.so.db.request.beans.RequestProcessingData;
 import org.onap.so.serviceinstancebeans.RequestDetails;
 import org.onap.so.serviceinstancebeans.RequestParameters;
 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
@@ -1195,6 +1198,49 @@
     }
 
     @Test
+    public void selectExecutionListMacroResumeTest() throws Exception {
+        String gAction = "createInstance";
+        String resource = "Service";
+        execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
+        execution.setVariable("requestAction", gAction);
+        String bpmnRequest =
+                new String(Files.readAllBytes(Paths.get("src/test/resources/__files/Macro/ServiceMacroAssign.json")));
+        execution.setVariable("bpmnRequest", bpmnRequest);
+        execution.setVariable("aLaCarte", false);
+        execution.setVariable("apiVersion", "7");
+        execution.setVariable("requestUri", "v6/serviceInstances/123");
+
+        NorthBoundRequest northBoundRequest = new NorthBoundRequest();
+        List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB");
+        northBoundRequest.setOrchestrationFlowList(orchFlows);
+
+        Service service = new Service();
+        service.setModelUUID("3c40d244-808e-42ca-b09a-256d83d19d0a");
+
+        ServiceInstance si = new ServiceInstance();
+
+        when(bbSetupUtils.getAAIServiceInstanceById("123")).thenReturn(si);
+        when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
+
+        String flowsToExecuteString =
+                "[{\"buildingBlock\":{\"mso-id\":\"2f9ddc4b-4dcf-4129-a35f-be1625ae0176\",\"bpmn-flow-name\":\"AssignServiceInstanceBB\",\"key\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"is-virtual-link\":false,\"virtual-link-key\":null},\"requestId\":\"9c944122-d161-4280-8594-48c06a9d96d5\",\"apiVersion\":\"7\",\"resourceId\":\"d1d35800-783d-42d3-82f6-d654c5054a6e\",\"requestAction\":\"deleteInstance\",\"vnfType\":\"\",\"aLaCarte\":true,\"homing\":false,\"workflowResourceIds\":{\"serviceInstanceId\":\"ff9dae72-05bb-4277-ad2b-1b082467c138\",\"vnfId\":\"84a29830-e533-4f20-a838-910c740bf24c\",\"networkId\":\"\",\"volumeGroupId\":\"\",\"vfModuleId\":\"d1d35800-783d-42d3-82f6-d654c5054a6e\",\"networkCollectionId\":null,\"configurationId\":\"10f8a3a3-91bf-4821-9515-c01b2864dff0\",\"instanceGroupId\":\"\"},\"requestDetails\":{\"modelInfo\":{\"modelCustomizationName\":\"McmrNcUpVnf20191..cr_mccm_fc_base..module-0\",\"modelInvariantId\":\"8028fcc0-96dc-427d-a4de-4536245943da\",\"modelType\":\"vfModule\",\"modelId\":\"00d15ebb-c80e-43c1-80f0-90c40dde70b0\",\"modelName\":\"McmrNcUpVnf20191..cr_mccm_fc_base..module-0\",\"modelVersion\":\"1\",\"modelCustomizationUuid\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"modelVersionId\":\"00d15ebb-c80e-43c1-80f0-90c40dde70b0\",\"modelCustomizationId\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"modelUuid\":\"00d15ebb-c80e-43c1-80f0-90c40dde70b0\",\"modelInvariantUuid\":\"8028fcc0-96dc-427d-a4de-4536245943da\",\"modelInstanceName\":\"McmrNcUpVnf20191..cr_mccm_fc_base..module-0\"},\"requestInfo\":{\"source\":\"VID\",\"suppressRollback\":false,\"requestorId\":\"pj8646\"},\"cloudConfiguration\":{\"tenantId\":\"e2a6af59d1cb43b2874e943bbbf8470a\",\"cloudOwner\":\"att-nc\",\"lcpCloudRegionId\":\"auk51b\"},\"requestParameters\":{\"testApi\":\"GR_API\"}},\"configurationResourceKeys\":{\"vfModuleCustomizationUUID\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"vnfResourceCustomizationUUID\":\"a80f05b8-d651-44af-b999-8ed78fb4582f\",\"cvnfcCustomizationUUID\":\"69cce457-9ffd-4359-962b-0596a1e83ad1\",\"vnfcName\":\"zauk51bmcmr01mcm001\"}}]";
+        ObjectMapper om = new ObjectMapper();
+        List<ExecuteBuildingBlock> flowsToExecute = null;
+        try {
+            ExecuteBuildingBlock[] asArray = om.readValue(flowsToExecuteString, ExecuteBuildingBlock[].class);
+            flowsToExecute = Arrays.asList(asArray);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        when(bbSetupUtils.loadOriginalFlowExecutionPath(anyString())).thenReturn(flowsToExecute);
+
+        workflowAction.selectExecutionList(execution);
+        List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
+        assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB");
+    }
+
+    @Test
     public void getRelatedResourcesInVfModuleTest() throws Exception {
         org.onap.aai.domain.yang.Vnfc vnfc = new org.onap.aai.domain.yang.Vnfc();
         vnfc.setModelInvariantId("modelInvariantId");
@@ -1424,6 +1470,21 @@
     }
 
     @Test
+    public void isUriResumeTest() {
+        assertTrue(workflowAction.isUriResume(
+                "http://localhost:9100/onap/so/infra/orchestrationRequests/v7/requests/2f8ab587-ef6a-4456-b7b2-d73f9363dabd/resume"));
+        assertFalse(workflowAction.isUriResume("/v6/serviceInstances/123/vnfs/1234/vfmodules/5678/replace"));
+    }
+
+    @Test
+    public void isRequestMacroServiceResumeTest() {
+        ServiceInstance si = new ServiceInstance();
+        when(bbSetupUtils.getAAIServiceInstanceById(anyString())).thenReturn(si);
+        assertFalse(workflowAction.isRequestMacroServiceResume(false, WorkflowType.SERVICE, "createInstance", ""));
+        assertTrue(workflowAction.isRequestMacroServiceResume(false, WorkflowType.SERVICE, "createInstance", "123"));
+    }
+
+    @Test
     public void populateResourceIdsFromApiHandlerTest() {
         execution.setVariable("serviceInstanceId", "123");
         execution.setVariable("vnfId", "888");
diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/SDNCVfModuleResourcesTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/SDNCVfModuleResourcesTest.java
index 57d6496..14e9932 100644
--- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/SDNCVfModuleResourcesTest.java
+++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/SDNCVfModuleResourcesTest.java
@@ -98,10 +98,12 @@
     @Test
     public void unassignVfModuleTest() throws MapperException {
         doReturn(sdncReq).when(vfModuleTopologyMapper).reqMapper(SDNCSvcOperation.VF_MODULE_TOPOLOGY_OPERATION,
-                SDNCSvcAction.UNASSIGN, vfModule, null, vnf, serviceInstance, null, null, null, null, testURI);
-        sdncVfModuleResources.unassignVfModule(vfModule, vnf, serviceInstance, testURI);
+                SDNCSvcAction.UNASSIGN, vfModule, null, vnf, serviceInstance, null, null, requestContext, null,
+                testURI);
+        sdncVfModuleResources.unassignVfModule(vfModule, vnf, serviceInstance, requestContext, testURI);
         verify(vfModuleTopologyMapper, times(1)).reqMapper(SDNCSvcOperation.VF_MODULE_TOPOLOGY_OPERATION,
-                SDNCSvcAction.UNASSIGN, vfModule, null, vnf, serviceInstance, null, null, null, null, testURI);
+                SDNCSvcAction.UNASSIGN, vfModule, null, vnf, serviceInstance, null, null, requestContext, null,
+                testURI);
     }
 
     @Test
diff --git a/cloudify-client/src/main/java/org/onap/so/cloudify/base/client/CloudifyClient.java b/cloudify-client/src/main/java/org/onap/so/cloudify/base/client/CloudifyClient.java
index 1893590..3bd646f 100644
--- a/cloudify-client/src/main/java/org/onap/so/cloudify/base/client/CloudifyClient.java
+++ b/cloudify-client/src/main/java/org/onap/so/cloudify/base/client/CloudifyClient.java
@@ -95,6 +95,11 @@
      */
     public <T> T execute(CloudifyRequest<T> request) {
         CloudifyResponse response = request(request);
+
+        if (null == response) {
+            return null;
+        }
+
         return (request.returnType() != null && request.returnType() != Void.class)
                 ? response.getEntity(request.returnType())
                 : null;
diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/Status.java b/common/src/main/java/org/onap/so/constants/OrchestrationRequestFormat.java
similarity index 81%
copy from mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/Status.java
copy to common/src/main/java/org/onap/so/constants/OrchestrationRequestFormat.java
index b791bf1..ccfd2f4 100644
--- a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/Status.java
+++ b/common/src/main/java/org/onap/so/constants/OrchestrationRequestFormat.java
@@ -18,12 +18,8 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.so.apihandlerinfra;
+package org.onap.so.constants;
 
-
-/*
- * Enum for Status values returned by API Handler to Tail-F
- */
-public enum Status {
-    PENDING, IN_PROGRESS, COMPLETE, COMPLETED, FAILED, TIMEOUT, UNLOCKED, PENDING_MANUAL_TASK
+public enum OrchestrationRequestFormat {
+    DETAIL, STATUSDETAIL
 }
diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/Status.java b/common/src/main/java/org/onap/so/constants/Status.java
similarity index 81%
rename from mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/Status.java
rename to common/src/main/java/org/onap/so/constants/Status.java
index b791bf1..b460418 100644
--- a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/Status.java
+++ b/common/src/main/java/org/onap/so/constants/Status.java
@@ -18,12 +18,23 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.so.apihandlerinfra;
+package org.onap.so.constants;
 
 
 /*
  * Enum for Status values returned by API Handler to Tail-F
  */
 public enum Status {
-    PENDING, IN_PROGRESS, COMPLETE, COMPLETED, FAILED, TIMEOUT, UNLOCKED, PENDING_MANUAL_TASK
+    PENDING,
+    IN_PROGRESS,
+    COMPLETE,
+    COMPLETED,
+    FAILED,
+    TIMEOUT,
+    UNLOCKED,
+    PENDING_MANUAL_TASK,
+    ABORTED,
+    ROLLED_BACK,
+    ROLLED_BACK_TO_ASSIGNED,
+    ROLLED_BACK_TO_CREATED
 }
diff --git a/common/src/main/java/org/onap/so/serviceinstancebeans/RequestStatus.java b/common/src/main/java/org/onap/so/serviceinstancebeans/RequestStatus.java
index e236003..3ada984 100644
--- a/common/src/main/java/org/onap/so/serviceinstancebeans/RequestStatus.java
+++ b/common/src/main/java/org/onap/so/serviceinstancebeans/RequestStatus.java
@@ -40,6 +40,36 @@
     protected String extSystemErrorSource;
     @JsonProperty("rollbackExtSystemErrorSource")
     protected String rollbackExtSystemErrorSource;
+    @JsonProperty("flowStatus")
+    protected String flowStatus;
+    @JsonProperty("retryStatusMessage")
+    protected String retryStatusMessage;
+    @JsonProperty("rollbackStatusMessage")
+    protected String rollbackStatusMessage;
+
+    public String getFlowStatus() {
+        return flowStatus;
+    }
+
+    public void setFlowStatus(String flowStatus) {
+        this.flowStatus = flowStatus;
+    }
+
+    public String getRetryStatusMessage() {
+        return retryStatusMessage;
+    }
+
+    public void setRetryStatusMessage(String retryStatusMessage) {
+        this.retryStatusMessage = retryStatusMessage;
+    }
+
+    public String getRollbackStatusMessage() {
+        return rollbackStatusMessage;
+    }
+
+    public void setRollbackStatusMessage(String rollbackStatusMessage) {
+        this.rollbackStatusMessage = rollbackStatusMessage;
+    }
 
     public String getExtSystemErrorSource() {
         return extSystemErrorSource;
@@ -94,6 +124,8 @@
         return new ToStringBuilder(this).append("requestState", requestState).append("statusMessage", statusMessage)
                 .append("percentProgress", percentProgress).append("timestamp", timeStamp)
                 .append("extSystemErrorSource", extSystemErrorSource)
-                .append("rollbackExtSystemErrorSource", rollbackExtSystemErrorSource).toString();
+                .append("rollbackExtSystemErrorSource", rollbackExtSystemErrorSource).append("flowStatus", flowStatus)
+                .append("retryStatusMessage", retryStatusMessage).append("rollbackStatusMessage", rollbackStatusMessage)
+                .toString();
     }
 }
diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/Status.java b/common/src/main/java/org/onap/so/utils/TargetEntities.java
similarity index 75%
copy from mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/Status.java
copy to common/src/main/java/org/onap/so/utils/TargetEntities.java
index b791bf1..94385ec 100644
--- a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/Status.java
+++ b/common/src/main/java/org/onap/so/utils/TargetEntities.java
@@ -2,14 +2,14 @@
  * ============LICENSE_START=======================================================
  * ONAP - SO
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2019 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.
@@ -18,12 +18,8 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.so.apihandlerinfra;
+package org.onap.so.utils;
 
+public interface TargetEntities {
 
-/*
- * Enum for Status values returned by API Handler to Tail-F
- */
-public enum Status {
-    PENDING, IN_PROGRESS, COMPLETE, COMPLETED, FAILED, TIMEOUT, UNLOCKED, PENDING_MANUAL_TASK
 }
diff --git a/common/src/main/java/org/onap/so/utils/TargetEntity.java b/common/src/main/java/org/onap/so/utils/TargetEntity.java
index 0f1fe51..3a3ec91 100644
--- a/common/src/main/java/org/onap/so/utils/TargetEntity.java
+++ b/common/src/main/java/org/onap/so/utils/TargetEntity.java
@@ -22,7 +22,7 @@
 
 import java.util.EnumSet;
 
-public enum TargetEntity {
+public enum TargetEntity implements TargetEntities {
     OPENSTACK_ADAPTER,
     BPMN,
     GRM,
@@ -37,7 +37,11 @@
     SDC,
     EXTERNAL,
     MULTICLOUD,
-    OOF;
+    OOF,
+    SDNC,
+    SO,
+    UNKNOWN,
+    OPENSTACK;
 
     private static final String PREFIX = "SO";
 
diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/filters/ResponseUpdateFilter.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/filters/ResponseUpdateFilter.java
index eb52625..119a0a5 100644
--- a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/filters/ResponseUpdateFilter.java
+++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/filters/ResponseUpdateFilter.java
@@ -31,7 +31,7 @@
 import javax.ws.rs.ext.Provider;
 import javax.ws.rs.ext.Providers;
 import org.onap.logging.ref.slf4j.ONAPLogConstants;
-import org.onap.so.apihandlerinfra.Status;
+import org.onap.so.constants.Status;
 import org.onap.so.db.request.beans.InfraActiveRequests;
 import org.onap.so.db.request.client.RequestsDbClient;
 import org.onap.so.serviceinstancebeans.RequestError;
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/E2EServiceInstances.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/E2EServiceInstances.java
index 49aef84..af76417 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/E2EServiceInstances.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/E2EServiceInstances.java
@@ -56,6 +56,7 @@
 import org.onap.so.apihandlerinfra.exceptions.ApiException;
 import org.onap.so.apihandlerinfra.exceptions.ValidateException;
 import org.onap.so.apihandlerinfra.logging.ErrorLoggerInfo;
+import org.onap.so.constants.Status;
 import org.onap.so.db.catalog.beans.Service;
 import org.onap.so.db.catalog.beans.ServiceRecipe;
 import org.onap.so.db.catalog.client.CatalogDbClient;
@@ -139,7 +140,7 @@
 
         instanceIdMap.put("serviceId", serviceId);
 
-        return updateE2EserviceInstances(request, Action.updateInstance, instanceIdMap, version);
+        return updateE2EserviceInstances(request, Action.updateInstance, version);
     }
 
     /**
@@ -187,7 +188,7 @@
 
         logger.debug("------------------scale begin------------------");
         instanceIdMap.put("serviceId", serviceId);
-        return scaleE2EserviceInstances(request, Action.scaleInstance, instanceIdMap, version);
+        return scaleE2EserviceInstances(request, Action.scaleInstance, version);
     }
 
     /**
@@ -250,8 +251,6 @@
         RequestClient requestClient;
         HttpResponse response;
 
-        long subStartTime = System.currentTimeMillis();
-
         try {
             requestClient = requestClientFactory.getRequestClient(workflowUrl);
 
@@ -290,8 +289,7 @@
         ResponseHandler respHandler = new ResponseHandler(response, requestClient.getType());
         int bpelStatus = respHandler.getStatus();
 
-        return beplStatusUpdate(requestId, startTime, requestClient, respHandler, bpelStatus, action, instanceIdMap,
-                version);
+        return beplStatusUpdate(requestClient, respHandler, bpelStatus, version);
     }
 
     private Response getE2EServiceInstance(String serviceId, String operationId, String version) {
@@ -300,8 +298,6 @@
 
         String apiVersion = version.substring(1);
 
-        long startTime = System.currentTimeMillis();
-
         OperationStatus operationStatus;
 
         try {
@@ -391,7 +387,6 @@
         RequestClient requestClient;
         HttpResponse response;
 
-        long subStartTime = System.currentTimeMillis();
         try {
             requestClient = requestClientFactory.getRequestClient(recipeLookupResult.getOrchestrationURI());
 
@@ -435,12 +430,10 @@
         ResponseHandler respHandler = new ResponseHandler(response, requestClient.getType());
         int bpelStatus = respHandler.getStatus();
 
-        return beplStatusUpdate(requestId, startTime, requestClient, respHandler, bpelStatus, action, instanceIdMap,
-                version);
+        return beplStatusUpdate(requestClient, respHandler, bpelStatus, version);
     }
 
-    private Response updateE2EserviceInstances(String requestJSON, Action action, HashMap<String, String> instanceIdMap,
-            String version) throws ApiException {
+    private Response updateE2EserviceInstances(String requestJSON, Action action, String version) throws ApiException {
 
         String requestId = UUID.randomUUID().toString();
         long startTime = System.currentTimeMillis();
@@ -512,7 +505,6 @@
         RequestClient requestClient;
         HttpResponse response;
 
-        long subStartTime = System.currentTimeMillis();
         String sirRequestJson = convertToString(sir);
 
         try {
@@ -553,8 +545,7 @@
         ResponseHandler respHandler = new ResponseHandler(response, requestClient.getType());
         int bpelStatus = respHandler.getStatus();
 
-        return beplStatusUpdate(serviceId, startTime, requestClient, respHandler, bpelStatus, action, instanceIdMap,
-                version);
+        return beplStatusUpdate(requestClient, respHandler, bpelStatus, version);
     }
 
     private Response processE2EserviceInstances(String requestJSON, Action action,
@@ -628,7 +619,6 @@
         RequestClient requestClient;
         HttpResponse response;
 
-        long subStartTime = System.currentTimeMillis();
         String sirRequestJson = convertToString(sir);
 
         try {
@@ -667,12 +657,10 @@
         ResponseHandler respHandler = new ResponseHandler(response, requestClient.getType());
         int bpelStatus = respHandler.getStatus();
 
-        return beplStatusUpdate(requestId, startTime, requestClient, respHandler, bpelStatus, action, instanceIdMap,
-                version);
+        return beplStatusUpdate(requestClient, respHandler, bpelStatus, version);
     }
 
-    private Response scaleE2EserviceInstances(String requestJSON, Action action, HashMap<String, String> instanceIdMap,
-            String version) throws ApiException {
+    private Response scaleE2EserviceInstances(String requestJSON, Action action, String version) throws ApiException {
 
         String requestId = UUID.randomUUID().toString();
         long startTime = System.currentTimeMillis();
@@ -727,7 +715,6 @@
         RequestClient requestClient;
         HttpResponse response;
 
-        long subStartTime = System.currentTimeMillis();
         try {
             requestClient = requestClientFactory.getRequestClient(recipeLookupResult.getOrchestrationURI());
 
@@ -771,12 +758,10 @@
         ResponseHandler respHandler = new ResponseHandler(response, requestClient.getType());
         int bpelStatus = respHandler.getStatus();
 
-        return beplStatusUpdate(requestId, startTime, requestClient, respHandler, bpelStatus, action, instanceIdMap,
-                version);
+        return beplStatusUpdate(requestClient, respHandler, bpelStatus, version);
     }
 
-    private Response beplStatusUpdate(String serviceId, long startTime, RequestClient requestClient,
-            ResponseHandler respHandler, int bpelStatus, Action action, HashMap<String, String> instanceIdMap,
+    private Response beplStatusUpdate(RequestClient requestClient, ResponseHandler respHandler, int bpelStatus,
             String version) {
 
         String apiVersion = version.substring(1);
@@ -875,7 +860,6 @@
 
         ServiceInstancesRequest sir = new ServiceInstancesRequest();
 
-        String returnString = null;
         RequestDetails requestDetails = new RequestDetails();
         ModelInfo modelInfo = new ModelInfo();
 
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/InstanceManagement.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/InstanceManagement.java
index c582e42..d8a7cb3 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/InstanceManagement.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/InstanceManagement.java
@@ -33,6 +33,7 @@
 import org.onap.so.apihandlerinfra.exceptions.RequestDbFailureException;
 import org.onap.so.apihandlerinfra.exceptions.ValidateException;
 import org.onap.so.apihandlerinfra.logging.ErrorLoggerInfo;
+import org.onap.so.constants.Status;
 import org.onap.so.db.catalog.beans.Workflow;
 import org.onap.so.db.catalog.client.CatalogDbClient;
 import org.onap.so.db.request.beans.InfraActiveRequests;
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ManualTasks.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ManualTasks.java
index 47f978a..b9b7fcc 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ManualTasks.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ManualTasks.java
@@ -50,7 +50,6 @@
 import org.onap.so.apihandlerinfra.tasksbeans.TasksRequest;
 import org.onap.so.apihandlerinfra.tasksbeans.Value;
 import org.onap.so.apihandlerinfra.tasksbeans.Variables;
-import org.onap.so.db.request.beans.InfraActiveRequests;
 import org.onap.so.exceptions.ValidationException;
 import org.onap.so.logger.ErrorCode;
 import org.onap.so.logger.MessageEnum;
@@ -93,7 +92,6 @@
 
         String requestId = requestContext.getProperty("requestId").toString();
         logger.info(LoggingAnchor.TWO, MessageEnum.APIH_GENERATED_REQUEST_ID.toString(), requestId);
-        long startTime = System.currentTimeMillis();
         logger.debug("requestId is: {}", requestId);
         TasksRequest taskRequest = null;
         String apiVersion = version.substring(1);
@@ -140,9 +138,6 @@
             throw validateException;
 
         }
-        // Create Request Record
-        InfraActiveRequests currentActiveReq =
-                msoRequest.createRequestObject(taskRequest, Action.completeTask, requestId, Status.PENDING, request);
 
         // Transform the request to Camunda-style Complete request
         Variables variablesForComplete = new Variables();
@@ -156,7 +151,7 @@
         variablesForComplete.setResponseValue(responseValue);
         variablesForComplete.setRequestorId(requestorIdValue);
 
-        String camundaJsonReq = null;
+        String camundaJsonReq;
         try {
             ObjectMapper mapper = new ObjectMapper();
             mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true);
@@ -175,9 +170,8 @@
             throw validateException;
         }
 
-        RequestClient requestClient = null;
-        HttpResponse response = null;
-        long subStartTime = System.currentTimeMillis();
+        RequestClient requestClient;
+        HttpResponse response;
         String requestUrl = taskUri + "/" + taskId + "/complete";
         try {
             requestClient = reqClientFactory.getRequestClient(requestUrl);
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/MsoRequest.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/MsoRequest.java
index cbfe927..4bcc0d4 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/MsoRequest.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/MsoRequest.java
@@ -63,6 +63,7 @@
 import org.onap.so.apihandlerinfra.vnfbeans.RequestStatusType;
 import org.onap.so.apihandlerinfra.vnfbeans.VnfInputs;
 import org.onap.so.apihandlerinfra.vnfbeans.VnfRequest;
+import org.onap.so.constants.Status;
 import org.onap.so.db.request.beans.InfraActiveRequests;
 import org.onap.so.db.request.client.RequestsDbClient;
 import org.onap.so.exceptions.ValidationException;
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/OrchestrationRequests.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/OrchestrationRequests.java
index b63e391..9e92c29 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/OrchestrationRequests.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/OrchestrationRequests.java
@@ -48,6 +48,8 @@
 import org.onap.so.apihandlerinfra.exceptions.ApiException;
 import org.onap.so.apihandlerinfra.exceptions.ValidateException;
 import org.onap.so.apihandlerinfra.logging.ErrorLoggerInfo;
+import org.onap.so.constants.OrchestrationRequestFormat;
+import org.onap.so.constants.Status;
 import org.onap.so.db.request.beans.InfraActiveRequests;
 import org.onap.so.db.request.beans.RequestProcessingData;
 import org.onap.so.db.request.client.RequestsDbClient;
@@ -72,6 +74,7 @@
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 
+
 @Path("onap/so/infra/orchestrationRequests")
 @Api(value = "onap/so/infra/orchestrationRequests", description = "API Requests for Orchestration requests")
 @Component
@@ -95,7 +98,7 @@
     @Transactional
     public Response getOrchestrationRequest(@PathParam("requestId") String requestId,
             @PathParam("version") String version, @QueryParam("includeCloudRequest") boolean includeCloudRequest,
-            @QueryParam("extSystemErrorSource") boolean extSystemErrorSource) throws ApiException {
+            @QueryParam(value = "format") String format) throws ApiException {
 
         String apiVersion = version.substring(1);
         GetOrchestrationResponse orchestrationResponse = new GetOrchestrationResponse();
@@ -142,7 +145,7 @@
             throw validateException;
         }
 
-        Request request = mapInfraActiveRequestToRequest(infraActiveRequest, includeCloudRequest, extSystemErrorSource);
+        Request request = mapInfraActiveRequestToRequest(infraActiveRequest, includeCloudRequest, format);
 
         if (!requestProcessingData.isEmpty()) {
             request.setRequestProcessingData(mapRequestProcessingData(requestProcessingData));
@@ -159,16 +162,14 @@
     @Produces(MediaType.APPLICATION_JSON)
     @Transactional
     public Response getOrchestrationRequest(@Context UriInfo ui, @PathParam("version") String version,
-            @QueryParam("includeCloudRequest") boolean includeCloudRequest,
-            @QueryParam("extSystemErrorSource") boolean extSystemErrorSource) throws ApiException {
-
-        long startTime = System.currentTimeMillis();
+            @QueryParam("includeCloudRequest") boolean includeCloudRequest, @QueryParam(value = "format") String format)
+            throws ApiException {
 
         MultivaluedMap<String, String> queryParams = ui.getQueryParameters();
 
-        List<InfraActiveRequests> activeRequests = null;
+        List<InfraActiveRequests> activeRequests;
 
-        GetOrchestrationListResponse orchestrationList = null;
+        GetOrchestrationListResponse orchestrationList;
         Map<String, List<String>> orchestrationMap;
         String apiVersion = version.substring(1);
 
@@ -197,7 +198,7 @@
             List<RequestProcessingData> requestProcessingData =
                     requestsDbClient.getRequestProcessingDataBySoRequestId(infraActive.getRequestId());
             RequestList requestList = new RequestList();
-            Request request = mapInfraActiveRequestToRequest(infraActive, includeCloudRequest, extSystemErrorSource);
+            Request request = mapInfraActiveRequestToRequest(infraActive, includeCloudRequest, format);
 
             if (!requestProcessingData.isEmpty()) {
                 request.setRequestProcessingData(mapRequestProcessingData(requestProcessingData));
@@ -219,12 +220,10 @@
     public Response unlockOrchestrationRequest(String requestJSON, @PathParam("requestId") String requestId,
             @PathParam("version") String version) throws ApiException {
 
-        long startTime = System.currentTimeMillis();
         logger.debug("requestId is: {}", requestId);
-        ServiceInstancesRequest sir = null;
+        ServiceInstancesRequest sir;
 
-        InfraActiveRequests infraActiveRequest = null;
-        Request request = null;
+        InfraActiveRequests infraActiveRequest;
 
         try {
             ObjectMapper mapper = new ObjectMapper();
@@ -269,9 +268,10 @@
 
         } else {
             String status = infraActiveRequest.getRequestStatus();
-            if (status.equalsIgnoreCase("IN_PROGRESS") || status.equalsIgnoreCase("PENDING")
-                    || status.equalsIgnoreCase("PENDING_MANUAL_TASK")) {
-                infraActiveRequest.setRequestStatus("UNLOCKED");
+            if (Status.IN_PROGRESS.toString().equalsIgnoreCase(status)
+                    || Status.PENDING.toString().equalsIgnoreCase(status)
+                    || Status.PENDING_MANUAL_TASK.toString().equalsIgnoreCase(status)) {
+                infraActiveRequest.setRequestStatus(Status.UNLOCKED.toString());
                 infraActiveRequest.setLastModifiedBy(Constants.MODIFIED_BY_APIHANDLER);
                 infraActiveRequest.setRequestId(requestId);
                 requestsDbClient.save(infraActiveRequest);
@@ -294,7 +294,7 @@
     }
 
     protected Request mapInfraActiveRequestToRequest(InfraActiveRequests iar, boolean includeCloudRequest,
-            boolean extSystemErrorSource) throws ApiException {
+            String format) throws ApiException {
         String requestBody = iar.getRequestBody();
         Request request = new Request();
 
@@ -303,9 +303,6 @@
         request.setRequestId(iar.getRequestId());
         request.setRequestScope(iar.getRequestScope());
         request.setRequestType(iar.getRequestAction());
-        String rollbackStatusMessage = iar.getRollbackStatusMessage();
-        String flowStatusMessage = iar.getFlowStatus();
-        String retryStatusMessage = iar.getRetryStatusMessage();
 
         String originalRequestId = iar.getOriginalRequestId();
         if (originalRequestId != null) {
@@ -376,43 +373,15 @@
             String endTimeStamp = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss").format(iar.getEndTime()) + " GMT";
             request.setFinishTime(endTimeStamp);
         }
-        String statusMessages = null;
+
         RequestStatus status = new RequestStatus();
-        if (iar.getStatusMessage() != null) {
-            statusMessages = "STATUS: " + iar.getStatusMessage();
-        }
-        if (flowStatusMessage != null) {
-            if (statusMessages != null) {
-                statusMessages = statusMessages + " " + "FLOW STATUS: " + flowStatusMessage;
-            } else {
-                statusMessages = "FLOW STATUS: " + flowStatusMessage;
-            }
-        }
-        if (retryStatusMessage != null) {
-            if (statusMessages != null) {
-                statusMessages = statusMessages + " " + "RETRY STATUS: " + retryStatusMessage;
-            } else {
-                statusMessages = "RETRY STATUS: " + retryStatusMessage;
-            }
-        }
-        if (rollbackStatusMessage != null) {
-            if (statusMessages != null) {
-                statusMessages = statusMessages + " " + "ROLLBACK STATUS: " + rollbackStatusMessage;
-            } else {
-                statusMessages = "ROLLBACK STATUS: " + rollbackStatusMessage;
-            }
-        }
-        if (statusMessages != null) {
-            status.setStatusMessage(statusMessages);
-        }
+
         if (iar.getModifyTime() != null) {
             String timeStamp = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss").format(iar.getModifyTime()) + " GMT";
             status.setTimeStamp(timeStamp);
         }
 
-        if (iar.getRequestStatus() != null) {
-            status.setRequestState(iar.getRequestStatus());
-        }
+        status.setRequestState(mapRequestStatusToRequest(iar, format));
 
         if (iar.getProgress() != null) {
             status.setPercentProgress(iar.getProgress().intValue());
@@ -430,17 +399,80 @@
             });
         }
 
-        mapExtSystemErrorSourceToRequest(iar, status, extSystemErrorSource);
+        mapRequestStatusAndExtSysErrSrcToRequest(iar, status, format);
 
         request.setRequestStatus(status);
         return request;
     }
 
-    protected void mapExtSystemErrorSourceToRequest(InfraActiveRequests iar, RequestStatus status,
-            boolean extSystemErrorSource) {
-        if (extSystemErrorSource) {
+    protected String mapRequestStatusToRequest(InfraActiveRequests iar, String format) {
+        if (iar.getRequestStatus() != null) {
+            if (!StringUtils.isBlank(format) && OrchestrationRequestFormat.DETAIL.toString().equalsIgnoreCase(format)) {
+                return iar.getRequestStatus();
+            } else {
+                if (Status.ABORTED.toString().equalsIgnoreCase(iar.getRequestStatus())
+                        || Status.ROLLED_BACK.toString().equalsIgnoreCase(iar.getRequestStatus())
+                        || Status.ROLLED_BACK_TO_ASSIGNED.toString().equalsIgnoreCase(iar.getRequestStatus())
+                        || Status.ROLLED_BACK_TO_CREATED.toString().equalsIgnoreCase(iar.getRequestStatus())) {
+                    return Status.FAILED.toString();
+                } else {
+                    return iar.getRequestStatus();
+                }
+            }
+        }
+        return null;
+    }
+
+    protected void mapRequestStatusAndExtSysErrSrcToRequest(InfraActiveRequests iar, RequestStatus status,
+            String format) {
+        String rollbackStatusMessage = iar.getRollbackStatusMessage();
+        String flowStatusMessage = iar.getFlowStatus();
+        String retryStatusMessage = iar.getRetryStatusMessage();
+
+        String statusMessages = null;
+        if (iar.getStatusMessage() != null) {
+            statusMessages = "STATUS: " + iar.getStatusMessage();
+        }
+
+        if (OrchestrationRequestFormat.STATUSDETAIL.toString().equalsIgnoreCase(format)) {
+            if (flowStatusMessage != null) {
+                status.setFlowStatus(flowStatusMessage);
+            }
+            if (retryStatusMessage != null) {
+                status.setRetryStatusMessage(retryStatusMessage);
+            }
+            if (rollbackStatusMessage != null) {
+                status.setRollbackStatusMessage(rollbackStatusMessage);
+            }
             status.setExtSystemErrorSource(iar.getExtSystemErrorSource());
             status.setRollbackExtSystemErrorSource(iar.getRollbackExtSystemErrorSource());
+        } else {
+
+            if (flowStatusMessage != null) {
+                if (statusMessages != null) {
+                    statusMessages = statusMessages + " " + "FLOW STATUS: " + flowStatusMessage;
+                } else {
+                    statusMessages = "FLOW STATUS: " + flowStatusMessage;
+                }
+            }
+            if (retryStatusMessage != null) {
+                if (statusMessages != null) {
+                    statusMessages = statusMessages + " " + "RETRY STATUS: " + retryStatusMessage;
+                } else {
+                    statusMessages = "RETRY STATUS: " + retryStatusMessage;
+                }
+            }
+            if (rollbackStatusMessage != null) {
+                if (statusMessages != null) {
+                    statusMessages = statusMessages + " " + "ROLLBACK STATUS: " + rollbackStatusMessage;
+                } else {
+                    statusMessages = "ROLLBACK STATUS: " + rollbackStatusMessage;
+                }
+            }
+        }
+
+        if (statusMessages != null) {
+            status.setStatusMessage(statusMessages);
         }
     }
 
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/RequestHandlerUtils.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/RequestHandlerUtils.java
index 86e2f5c..c3f3234 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/RequestHandlerUtils.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/RequestHandlerUtils.java
@@ -62,6 +62,7 @@
 import org.onap.so.apihandlerinfra.exceptions.VfModuleNotFoundException;
 import org.onap.so.apihandlerinfra.infra.rest.handler.AbstractRestHandler;
 import org.onap.so.apihandlerinfra.logging.ErrorLoggerInfo;
+import org.onap.so.constants.Status;
 import org.onap.so.db.catalog.beans.VfModule;
 import org.onap.so.db.catalog.client.CatalogDbClient;
 import org.onap.so.db.request.beans.InfraActiveRequests;
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ResumeOrchestrationRequest.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ResumeOrchestrationRequest.java
index d82fd38..ed300d9 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ResumeOrchestrationRequest.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ResumeOrchestrationRequest.java
@@ -40,6 +40,7 @@
 import org.onap.so.apihandlerinfra.exceptions.RequestDbFailureException;
 import org.onap.so.apihandlerinfra.exceptions.ValidateException;
 import org.onap.so.apihandlerinfra.logging.ErrorLoggerInfo;
+import org.onap.so.constants.Status;
 import org.onap.so.db.request.beans.InfraActiveRequests;
 import org.onap.so.db.request.client.RequestsDbClient;
 import org.onap.so.logger.ErrorCode;
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ServiceInstances.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ServiceInstances.java
index b290a79..5b827d9 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ServiceInstances.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ServiceInstances.java
@@ -52,6 +52,7 @@
 import org.onap.so.apihandlerinfra.exceptions.ValidateException;
 import org.onap.so.apihandlerinfra.infra.rest.handler.AbstractRestHandler;
 import org.onap.so.apihandlerinfra.logging.ErrorLoggerInfo;
+import org.onap.so.constants.Status;
 import org.onap.so.db.catalog.beans.NetworkResource;
 import org.onap.so.db.catalog.beans.NetworkResourceCustomization;
 import org.onap.so.db.catalog.beans.Recipe;
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/WorkflowSpecificationsHandler.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/WorkflowSpecificationsHandler.java
index bba8064..b57bb5d 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/WorkflowSpecificationsHandler.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/WorkflowSpecificationsHandler.java
@@ -4,6 +4,8 @@
  * ================================================================================
  * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ================================================================================
  * 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
@@ -91,13 +93,13 @@
         List<Workflow> workflows = catalogDbClient.findWorkflowByModelUUID(vnfModelVersionId);
 
         List<Workflow> nativeWorkflows = catalogDbClient.findWorkflowBySource(NATIVE_WORKFLOW);
-        if (nativeWorkflows != null && nativeWorkflows.size() != 0) {
+        if (nativeWorkflows != null && !nativeWorkflows.isEmpty()) {
             workflows.addAll(nativeWorkflows);
         }
 
         WorkflowSpecifications workflowSpecifications = mapWorkflowsToWorkflowSpecifications(workflows);
 
-        String jsonResponse = null;
+        String jsonResponse;
         try {
             ObjectMapper mapper = new ObjectMapper();
             jsonResponse = mapper.writeValueAsString(workflowSpecifications);
@@ -116,11 +118,11 @@
     }
 
     protected WorkflowSpecifications mapWorkflowsToWorkflowSpecifications(List<Workflow> workflows) {
-        if (workflows == null || workflows.size() == 0) {
+        if (workflows == null || workflows.isEmpty()) {
             return null;
         }
         WorkflowSpecifications workflowSpecifications = new WorkflowSpecifications();
-        List<WorkflowSpecificationList> workflowSpecificationList = new ArrayList<WorkflowSpecificationList>();
+        List<WorkflowSpecificationList> workflowSpecificationList = new ArrayList<>();
 
         for (Workflow workflow : workflows) {
             WorkflowSpecificationList workflowSpecificationListItem = new WorkflowSpecificationList();
@@ -153,10 +155,10 @@
 
     private List<ActivitySequence> buildActivitySequence(Workflow workflow) {
         List<WorkflowActivitySpecSequence> workflowActivitySpecSequences = workflow.getWorkflowActivitySpecSequence();
-        if (workflowActivitySpecSequences == null || workflowActivitySpecSequences.size() == 0) {
+        if (workflowActivitySpecSequences == null || workflowActivitySpecSequences.isEmpty()) {
             return null;
         }
-        List<ActivitySequence> activitySequences = new ArrayList<ActivitySequence>();
+        List<ActivitySequence> activitySequences = new ArrayList<>();
         for (WorkflowActivitySpecSequence workflowActivitySpecSequence : workflowActivitySpecSequences) {
             if (workflowActivitySpecSequence != null) {
                 ActivitySpec activitySpec = workflowActivitySpecSequence.getActivitySpec();
@@ -174,17 +176,17 @@
 
     private List<WorkflowInputParameter> buildWorkflowInputParameters(Workflow workflow) {
         List<WorkflowActivitySpecSequence> workflowActivitySpecSequences = workflow.getWorkflowActivitySpecSequence();
-        if (workflowActivitySpecSequences == null || workflowActivitySpecSequences.size() == 0) {
-            return new ArrayList<WorkflowInputParameter>();
+        if (workflowActivitySpecSequences == null || workflowActivitySpecSequences.isEmpty()) {
+            return new ArrayList<>();
         }
-        Map<String, WorkflowInputParameter> workflowInputParameterMap = new HashMap<String, WorkflowInputParameter>();
+        Map<String, WorkflowInputParameter> workflowInputParameterMap = new HashMap<>();
         for (WorkflowActivitySpecSequence workflowActivitySpecSequence : workflowActivitySpecSequences) {
             if (workflowActivitySpecSequence != null) {
                 ActivitySpec activitySpec = workflowActivitySpecSequence.getActivitySpec();
                 if (activitySpec != null) {
                     List<ActivitySpecUserParameters> activitySpecUserParameters =
                             activitySpec.getActivitySpecUserParameters();
-                    if (activitySpecUserParameters != null && activitySpecUserParameters.size() != 0) {
+                    if (activitySpecUserParameters != null && !activitySpecUserParameters.isEmpty()) {
                         for (ActivitySpecUserParameters activitySpecUserParameter : activitySpecUserParameters) {
                             UserParameters userParameter = activitySpecUserParameter.getUserParameters();
                             if (userParameter != null) {
@@ -199,7 +201,7 @@
         }
 
         if (workflowInputParameterMap.size() == 0) {
-            return new ArrayList<WorkflowInputParameter>();
+            return new ArrayList<>();
         }
         List<WorkflowInputParameter> workflowInputParameterList =
                 workflowInputParameterMap.values().stream().collect(Collectors.toList());
@@ -220,7 +222,7 @@
     private List<Validation> buildValidationList(UserParameters userParameter) {
         List<Validation> validationList = null;
         if (userParameter.getMaxLength() != null || userParameter.getAllowableChars() != null) {
-            validationList = new ArrayList<Validation>();
+            validationList = new ArrayList<>();
             Validation validation = new Validation();
             if (userParameter.getMaxLength() != null) {
                 validation.setMaxLength(userParameter.getMaxLength().toString());
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/BpmnRequestBuilder.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/BpmnRequestBuilder.java
index 5b51d85..bb5b4ed 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/BpmnRequestBuilder.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/BpmnRequestBuilder.java
@@ -30,7 +30,6 @@
 import org.onap.aai.domain.yang.VfModule;
 import org.onap.aai.domain.yang.VolumeGroup;
 import org.onap.logging.ref.slf4j.ONAPLogConstants;
-import org.onap.so.apihandlerinfra.Status;
 import org.onap.so.apihandlerinfra.infra.rest.exception.AAIEntityNotFound;
 import org.onap.so.apihandlerinfra.infra.rest.exception.CloudConfigurationNotFoundException;
 import org.onap.so.client.aai.AAIObjectType;
@@ -38,6 +37,7 @@
 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.constants.Status;
 import org.onap.so.db.request.beans.InfraActiveRequests;
 import org.onap.so.db.request.client.RequestsDbClient;
 import org.onap.so.serviceinstancebeans.CloudConfiguration;
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/handler/AbstractRestHandler.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/handler/AbstractRestHandler.java
index 227506c..b5b548a 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/handler/AbstractRestHandler.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/handler/AbstractRestHandler.java
@@ -35,13 +35,13 @@
 import org.onap.so.apihandlerinfra.Actions;
 import org.onap.so.apihandlerinfra.Constants;
 import org.onap.so.apihandlerinfra.MsoRequest;
-import org.onap.so.apihandlerinfra.Status;
 import org.onap.so.apihandlerinfra.exceptions.ApiException;
 import org.onap.so.apihandlerinfra.exceptions.RequestDbFailureException;
 import org.onap.so.apihandlerinfra.exceptions.ValidateException;
 import org.onap.so.apihandlerinfra.infra.rest.exception.RequestConflictedException;
 import org.onap.so.apihandlerinfra.infra.rest.exception.WorkflowEngineConnectionException;
 import org.onap.so.apihandlerinfra.logging.ErrorLoggerInfo;
+import org.onap.so.constants.Status;
 import org.onap.so.db.catalog.client.CatalogDbClient;
 import org.onap.so.db.request.beans.InfraActiveRequests;
 import org.onap.so.db.request.client.RequestsDbClient;
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/handler/NetworkRestHandler.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/handler/NetworkRestHandler.java
index ebb5d7e..7b095fc 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/handler/NetworkRestHandler.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/handler/NetworkRestHandler.java
@@ -25,9 +25,9 @@
 import org.onap.so.apihandler.common.RequestClientParameter;
 import org.onap.so.apihandlerinfra.Action;
 import org.onap.so.apihandlerinfra.Constants;
-import org.onap.so.apihandlerinfra.Status;
 import org.onap.so.apihandlerinfra.infra.rest.exception.NoRecipeException;
 import org.onap.so.apihandlerinfra.infra.rest.exception.RequestConflictedException;
+import org.onap.so.constants.Status;
 import org.onap.so.db.catalog.beans.NetworkRecipe;
 import org.onap.so.db.catalog.beans.Recipe;
 import org.onap.so.db.request.beans.InfraActiveRequests;
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/handler/ServiceInstanceRestHandler.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/handler/ServiceInstanceRestHandler.java
index 7d3091e..afadf36 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/handler/ServiceInstanceRestHandler.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/handler/ServiceInstanceRestHandler.java
@@ -26,9 +26,9 @@
 import org.onap.so.apihandler.common.RequestClientParameter;
 import org.onap.so.apihandlerinfra.Action;
 import org.onap.so.apihandlerinfra.Constants;
-import org.onap.so.apihandlerinfra.Status;
 import org.onap.so.apihandlerinfra.infra.rest.exception.NoRecipeException;
 import org.onap.so.apihandlerinfra.infra.rest.exception.RequestConflictedException;
+import org.onap.so.constants.Status;
 import org.onap.so.db.catalog.beans.Recipe;
 import org.onap.so.db.catalog.beans.ServiceRecipe;
 import org.onap.so.db.request.beans.InfraActiveRequests;
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/handler/VFModuleRestHandler.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/handler/VFModuleRestHandler.java
index efd8b12..0762803 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/handler/VFModuleRestHandler.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/handler/VFModuleRestHandler.java
@@ -26,8 +26,8 @@
 import org.onap.so.apihandler.common.RequestClientParameter;
 import org.onap.so.apihandlerinfra.Action;
 import org.onap.so.apihandlerinfra.Constants;
-import org.onap.so.apihandlerinfra.Status;
 import org.onap.so.apihandlerinfra.infra.rest.exception.NoRecipeException;
+import org.onap.so.constants.Status;
 import org.onap.so.db.catalog.beans.Recipe;
 import org.onap.so.db.catalog.beans.VnfComponentsRecipe;
 import org.onap.so.db.request.beans.InfraActiveRequests;
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/handler/VnfRestHandler.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/handler/VnfRestHandler.java
index d98625f..e157d92 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/handler/VnfRestHandler.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/handler/VnfRestHandler.java
@@ -26,8 +26,8 @@
 import org.onap.so.apihandler.common.RequestClientParameter;
 import org.onap.so.apihandlerinfra.Action;
 import org.onap.so.apihandlerinfra.Constants;
-import org.onap.so.apihandlerinfra.Status;
 import org.onap.so.apihandlerinfra.infra.rest.exception.NoRecipeException;
+import org.onap.so.constants.Status;
 import org.onap.so.db.catalog.beans.Recipe;
 import org.onap.so.db.catalog.beans.VnfRecipe;
 import org.onap.so.db.request.beans.InfraActiveRequests;
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/handler/VolumeRestHandler.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/handler/VolumeRestHandler.java
index 52f7ee9..48a8aa2 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/handler/VolumeRestHandler.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/handler/VolumeRestHandler.java
@@ -26,7 +26,7 @@
 import org.onap.so.apihandler.common.RequestClientParameter;
 import org.onap.so.apihandlerinfra.Action;
 import org.onap.so.apihandlerinfra.Constants;
-import org.onap.so.apihandlerinfra.Status;
+import org.onap.so.constants.Status;
 import org.onap.so.db.request.beans.InfraActiveRequests;
 import org.onap.so.logger.LogConstants;
 import org.onap.so.serviceinstancebeans.ModelType;
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/CloudOrchestration.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/CloudOrchestration.java
index e8d00ed..d3fb798 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/CloudOrchestration.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/CloudOrchestration.java
@@ -42,7 +42,6 @@
 import org.apache.http.HttpStatus;
 import org.onap.so.apihandler.common.ErrorNumbers;
 import org.onap.so.apihandlerinfra.Constants;
-import org.onap.so.apihandlerinfra.Status;
 import org.onap.so.apihandlerinfra.exceptions.ApiException;
 import org.onap.so.apihandlerinfra.exceptions.DuplicateRequestException;
 import org.onap.so.apihandlerinfra.exceptions.ValidateException;
@@ -51,6 +50,7 @@
 import org.onap.so.apihandlerinfra.tenantisolationbeans.OperationalEnvironment;
 import org.onap.so.apihandlerinfra.tenantisolationbeans.RequestReferences;
 import org.onap.so.apihandlerinfra.tenantisolationbeans.TenantSyncResponse;
+import org.onap.so.constants.Status;
 import org.onap.so.db.request.beans.InfraActiveRequests;
 import org.onap.so.db.request.client.RequestsDbClient;
 import org.onap.so.exceptions.ValidationException;
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/CloudResourcesOrchestration.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/CloudResourcesOrchestration.java
index 20e8fed..e9cd303 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/CloudResourcesOrchestration.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/CloudResourcesOrchestration.java
@@ -88,9 +88,9 @@
     public Response unlockOrchestrationRequest(String requestJSON, @PathParam("requestId") String requestId,
             @PathParam("version") String version) throws ApiException {
         TenantIsolationRequest msoRequest = new TenantIsolationRequest(requestId);
-        InfraActiveRequests infraActiveRequest = null;
+        InfraActiveRequests infraActiveRequest;
 
-        CloudOrchestrationRequest cor = null;
+        CloudOrchestrationRequest cor;
 
         logger.debug("requestId is: {}", requestId);
 
@@ -140,8 +140,8 @@
 
         } else {
             String status = infraActiveRequest.getRequestStatus();
-            if (status.equalsIgnoreCase("IN_PROGRESS") || status.equalsIgnoreCase("PENDING")
-                    || status.equalsIgnoreCase("PENDING_MANUAL_TASK")) {
+            if ("IN_PROGRESS".equalsIgnoreCase(status) || "PENDING".equalsIgnoreCase(status)
+                    || "PENDING_MANUAL_TASK".equalsIgnoreCase(status)) {
                 infraActiveRequest.setRequestStatus("UNLOCKED");
                 infraActiveRequest.setLastModifiedBy(Constants.MODIFIED_BY_APIHANDLER);
                 infraActiveRequest.setRequestId(requestId);
@@ -181,8 +181,7 @@
             String requestId = requestIdKey.get(0);
 
             CloudOrchestrationResponse cloudOrchestrationGetResponse = new CloudOrchestrationResponse();
-            TenantIsolationRequest tenantIsolationRequest = new TenantIsolationRequest(requestId);
-            InfraActiveRequests requestDB = null;
+            InfraActiveRequests requestDB;
 
             try {
                 requestDB = requestDbClient.getInfraActiveRequestbyRequestId(requestId);
@@ -213,8 +212,8 @@
 
         } else {
             TenantIsolationRequest tenantIsolationRequest = new TenantIsolationRequest();
-            List<InfraActiveRequests> activeRequests = null;
-            CloudOrchestrationRequestList orchestrationList = null;
+            List<InfraActiveRequests> activeRequests;
+            CloudOrchestrationRequestList orchestrationList;
 
 
             Map<String, String> orchestrationMap;
@@ -233,7 +232,7 @@
             }
             activeRequests = requestDbClient.getCloudOrchestrationFiltersFromInfraActive(orchestrationMap);
             orchestrationList = new CloudOrchestrationRequestList();
-            List<CloudOrchestrationResponse> requestLists = new ArrayList<CloudOrchestrationResponse>();
+            List<CloudOrchestrationResponse> requestLists = new ArrayList<>();
 
             for (InfraActiveRequests infraActive : activeRequests) {
 
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/ModelDistributionRequest.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/ModelDistributionRequest.java
index b2933df..2165884 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/ModelDistributionRequest.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/ModelDistributionRequest.java
@@ -75,8 +75,7 @@
     @Transactional
     public Response updateModelDistributionStatus(String requestJSON, @PathParam("version") String version,
             @PathParam("distributionId") String distributionId) throws ApiException {
-        long startTime = System.currentTimeMillis();
-        Distribution distributionRequest = null;
+        Distribution distributionRequest;
 
         try {
             ObjectMapper mapper = new ObjectMapper();
@@ -146,7 +145,7 @@
         }
         re.setServiceException(se);
 
-        String requestErrorStr = null;
+        String requestErrorStr;
         try {
             ObjectMapper mapper = new ObjectMapper();
             mapper.setSerializationInclusion(Include.NON_DEFAULT);
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/TenantIsolationRequest.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/TenantIsolationRequest.java
index 007ea93..efdc52b 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/TenantIsolationRequest.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/TenantIsolationRequest.java
@@ -30,7 +30,6 @@
 import javax.ws.rs.core.MultivaluedMap;
 import org.apache.commons.lang3.StringUtils;
 import org.onap.so.apihandlerinfra.Constants;
-import org.onap.so.apihandlerinfra.Status;
 import org.onap.so.apihandlerinfra.tenantisolationbeans.Action;
 import org.onap.so.apihandlerinfra.tenantisolationbeans.Manifest;
 import org.onap.so.apihandlerinfra.tenantisolationbeans.OperationalEnvironment;
@@ -42,6 +41,7 @@
 import org.onap.so.apihandlerinfra.tenantisolationbeans.ResourceType;
 import org.onap.so.apihandlerinfra.tenantisolationbeans.ServiceModelList;
 import org.onap.so.apihandlerinfra.vnfbeans.RequestStatusType;
+import org.onap.so.constants.Status;
 import org.onap.so.db.request.beans.InfraActiveRequests;
 import org.onap.so.db.request.client.RequestsDbClient;
 import org.onap.so.exceptions.ValidationException;
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/process/CreateVnfOperationalEnvironment.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/process/CreateVnfOperationalEnvironment.java
index fe81a07..5eb4a67 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/process/CreateVnfOperationalEnvironment.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/process/CreateVnfOperationalEnvironment.java
@@ -145,7 +145,7 @@
             throws TenantIsolationException {
         List<ServiceEndPoint> endpointList = serviceEndPointList.getServiceEndPointList();
         logger.debug("Number of service endpoints from GRM: {}", endpointList.size());
-        List<ServiceEndPointRequest> serviceEndPointRequestList = new ArrayList<ServiceEndPointRequest>();
+        List<ServiceEndPointRequest> serviceEndPointRequestList = new ArrayList<>();
         for (ServiceEndPoint serviceEndpoint : endpointList) {
             serviceEndPointRequestList.add(buildServiceEndpoint(serviceEndpoint));
         }
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/resources/application-local.yaml b/mso-api-handlers/mso-api-handler-infra/src/main/resources/application-local.yaml
deleted file mode 100644
index a39d280..0000000
--- a/mso-api-handlers/mso-api-handler-infra/src/main/resources/application-local.yaml
+++ /dev/null
@@ -1,179 +0,0 @@
-# will be used as entry in DB to say SITE OFF/ON for healthcheck
-
-server:
-    port: 8080
-    tomcat:
-        max-threads: 50
-ssl-enable: false
-
-apih-healthcheck-urn: /ecomp/mso/healthcheck,/ecomp/mso/homing/healthcheck,/ecomp/mso/infra/healthcheck,/asdc/healthcheck,/dbadapters/healthcheck,/ecomp/mso/catalog/v2/healthcheck
-jra-healthcheck-urn: /networks/rest/healthcheck,/adapters/rest/healthcheck,/vnfs/rest/healthcheck,/tenants/rest/healthcheck,/appc/rest/healthcheck,/workflows/messages/healthcheck
-camunda-healthcheck-urn: /mso/healthcheck
-
-apih-nodehealthcheck-urn: /ecomp/mso/infra/nodehealthcheck
-jra-nodehealthcheck-urn: /adapters/rest/nodehealthcheck
-camunda-nodehealthcheck-urn: /mso/nodehealthcheck
-
-
-
-mso:
-  health:
-    endpoints:
-      catalogdb: http://localhost:8800
-      sdnc: http://localhost:8400
-      openstack: http://localhost:8300
-      requestdb: http://localhost:8700
-      bpmn: http://localhost:8200
-      asdc: http://localhost:8400
-      requestdbattsvc: http://localhost:8600
-      
-  adapters:
-    requestDb:
-      auth: Basic YnBlbDptc28tZGItMTUwNyE=
-      endpoint: http://localhost:8081
-  logPath: logs
-  site-name: mtanj
-  catalog:
-    db:
-      spring:
-        endpoint: "http://localhost:8080"
-  db:
-    auth: Basic YnBlbDptc28tZGItMTUwNyE=
-  config: 
-    path: /src/main/resources/
-  infra:
-    default:
-      alacarte:
-        orchestrationUri: /mso/async/services/ALaCarteOrchestrator
-        recipeTimeout: 180
-        testApi: VNF_API
-      service:
-        macro:
-          default:
-            testApi: GR_API
-  apih:
-    homing:
-      sdna:
-        url: http://localhost:8089/
-        password: 4E0BDC08EE8EDC0572ABBE9FD2D59B62DB725A00B8469E39393D6C86D64284C5D34A57D56F7B58C375316F
-  camundaURL: http://localhost:8089/
-  camundaAuth: E8E19DD16CC90D2E458E8FF9A884CC0452F8F3EB8E321F96038DE38D5C1B0B02DFAE00B88E2CF6E2A4101AB2C011FC161212EE
-  async:
-    core-pool-size: 50
-    max-pool-size: 50
-    queue-capacity: 500
-  sdc:
-    client:
-      auth: 97FF88AB352DA16E00DDD81E3876431DEF8744465DACA489EB3B3BE1F10F63EDA1715E626D0A4827A3E19CD88421BF
-    activate:
-      instanceid: test
-      userid: cs0008
-    endpoint: http://localhost:28090
-  msoKey: 07a7159d3bf51a0e53be7a8f89699be7
-  tenant:
-    isolation:
-      retry:
-        count: 3
-  aai:
-    endpoint: http://localhost:28090
-    auth: 5E12ACACBD552A415E081E29F2C4772F9835792A51C766CCFDD7433DB5220B59969CB2798C
-  grm:
-    endpoint: http://localhost:28090
-    username: gmruser
-    password: test
-  so:
-    operational-environment:
-      dmaap:
-        username: testuser
-        password: VjR5NDcxSzA=
-        host: http://localhost:28090
-      publisher:
-        topic: com.att.ecomp.mso.operationalEnvironmentEvent
-
-# controls what actions the infra API (APIH) allows sent in on REST request
-vnf:
-  v1:
-    ApiAllowableActions: 
-  v2:
-    ApiAllowableActions: 
-  v3:
-    ApiAllowableActions: 
-  
-network:
-  v1:
-    ApiAllowableActions: 
-  v2:
-    ApiAllowableActions: 
-  v3:
-    ApiAllowableActions: 
-  
-volume:
-  v1:
-    ApiAllowableActions: 
-  v2:
-    ApiAllowableActions: 
-  v3:
-    ApiAllowableActions: 
-
-# H2
-spring:
-  datasource:
-    url: jdbc:h2:mem:AZ;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
-    username: sa
-    password: sa
-    driver-class-name: org.h2.Driver
-    intialize: true
-  h2:
-    console:
-      enabled: true
-      path: /h2
-
-  jpa:
-      show-sql: true
-      hibernate:
-        dialect: org.hibernate.dialect.H2Dialect
-        ddl-auto: validate
-        naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy
-        enable_lazy_load_no_trans: true
-  jersey:
-    type: filter
-  security:
-    usercredentials:
-    -  
-      username: sitecontrol
-      password: '$2a$12$VBUF.qBmeK1FNyO2MqTpD.P2M1tvlesZlhCkAjjHvF9hmYNVdMDmu'
-      role: SiteControl-Client 
-    -  
-      username: gui
-      password: '$2a$12$9Y4daXavh.oX5fz6t/e7TuCdj7EKW5B5ibqq425fN3/xpp0/Fhyti'
-      role: GUI-Client  
-    -  
-      username: infraportal
-      password: '$2a$12$IpUEhQijWTNbq0fGYVkA9upZrDvdIK6QfblIaKAiwi0vBQRE.C6Ri'
-      role: InfraPortal-Client        
-    -  
-      username: bpel
-      password: '$2a$12$1xyutEZNfjGewIZRfKaE8eZE99f5sYFUmmM80BobI65KNjmcK0JuO'
-      role: BPEL-Client   
-    -  
-      username: mso_admin
-      password: '$2a$12$tidKuu.h88E2nuL95pTVY.ZOYMN/1dp29A9b1o.0GFDsVVSYlMkHa'
-      role: ACTUATOR      
-request:
-  datasource:
-    url: jdbc:h2:mem:AZ;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
-    username: sa
-    password: sa
-    driver-class-name: org.h2.Driver
-    intialize: true 
-
-#Actuator
-management: 
-  context-path: /manage
-
-org:
-  onap:
-    so:
-      adapters:
-        network:
-          encryptionKey: aa3871669d893c7fb8abbcda31b88b4f
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/OrchestrationRequestsUnitTest.java b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/OrchestrationRequestsUnitTest.java
index 99ff4ff..fc548a7 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/OrchestrationRequestsUnitTest.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/OrchestrationRequestsUnitTest.java
@@ -23,16 +23,10 @@
 import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
 import javax.ws.rs.core.Response;
-import org.apache.http.HttpStatus;
+import org.apache.commons.lang.StringUtils;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -40,11 +34,11 @@
 import org.junit.runner.RunWith;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.Spy;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.onap.so.apihandler.common.ResponseBuilder;
 import org.onap.so.apihandlerinfra.exceptions.ApiException;
+import org.onap.so.constants.OrchestrationRequestFormat;
+import org.onap.so.constants.Status;
 import org.onap.so.db.request.beans.InfraActiveRequests;
 import org.onap.so.db.request.client.RequestsDbClient;
 import org.onap.so.serviceinstancebeans.InstanceReferences;
@@ -64,7 +58,6 @@
     @Rule
     public ExpectedException thrown = ExpectedException.none();
     @InjectMocks
-    @Spy
     private OrchestrationRequests orchestrationRequests;
 
     private static final String REQUEST_ID = "7cb9aa56-dd31-41e5-828e-d93027d4ebba";
@@ -72,14 +65,13 @@
     private static final String ORIGINAL_REQUEST_ID = "8f2d38a6-7c20-465a-bd7e-075645f1394b";
     private static final String SERVICE = "service";
     private static final String EXT_SYSTEM_ERROR_SOURCE = "external system error source";
-    private static final String ROLLBACK_EXT_SYSTEM_ERROR_SOURCE = "SDNC";
+    private static final String FLOW_STATUS = "FlowStatus";
+    private static final String RETRY_STATUS_MESSAGE = "RetryStatusMessage";
+    private static final String ROLLBACK_STATUS_MESSAGE = "RollbackStatusMessage";
     private InfraActiveRequests iar;
     boolean includeCloudRequest = false;
-    boolean extSystemErrorSource = false;
+    private static final String ROLLBACK_EXT_SYSTEM_ERROR_SOURCE = "SDNC";
 
-    private static final String VERSION = "v7";
-
-    List<org.onap.so.db.request.beans.RequestProcessingData> requestProcessingData = new ArrayList<>();
 
     @Before
     public void setup() {
@@ -87,12 +79,6 @@
         iar.setRequestScope(SERVICE);
         iar.setRequestId(REQUEST_ID);
         iar.setServiceInstanceId(SERVICE_INSTANCE_ID);
-        when(requestDbClient.getInfraActiveRequestbyRequestId(Mockito.eq(REQUEST_ID))).thenReturn(iar);
-        when(requestDbClient.getRequestProcessingDataBySoRequestId(Mockito.eq(REQUEST_ID)))
-                .thenReturn(requestProcessingData);
-
-        when(builder.buildResponse(Mockito.eq(HttpStatus.SC_OK), Mockito.eq(REQUEST_ID), any(Object.class),
-                any(String.class))).thenReturn(response);
     }
 
     @Test
@@ -100,6 +86,7 @@
         InstanceReferences instanceReferences = new InstanceReferences();
         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
         RequestStatus requestStatus = new RequestStatus();
+        requestStatus.setRequestState(iar.getRequestStatus());
         Request expected = new Request();
         expected.setRequestId(REQUEST_ID);
         expected.setOriginalRequestId(ORIGINAL_REQUEST_ID);
@@ -109,8 +96,8 @@
 
         iar.setOriginalRequestId(ORIGINAL_REQUEST_ID);
 
-        Request result =
-                orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest, extSystemErrorSource);
+        Request result = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
+                OrchestrationRequestFormat.DETAIL.toString());
         assertThat(result, sameBeanAs(expected));
     }
 
@@ -119,22 +106,24 @@
         InstanceReferences instanceReferences = new InstanceReferences();
         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
         RequestStatus requestStatus = new RequestStatus();
+        requestStatus.setRequestState(iar.getRequestStatus());
         Request expected = new Request();
         expected.setRequestId(REQUEST_ID);
         expected.setInstanceReferences(instanceReferences);
         expected.setRequestStatus(requestStatus);
         expected.setRequestScope(SERVICE);
 
-        Request result =
-                orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest, extSystemErrorSource);
+        Request result = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
+                OrchestrationRequestFormat.DETAIL.toString());
         assertThat(result, sameBeanAs(expected));
     }
 
     @Test
-    public void mapExtSystemErrorSourceToRequestFalseTest() throws ApiException {
+    public void mapRequestStatusAndExtSysErrSrcToRequestFalseTest() throws ApiException {
         InstanceReferences instanceReferences = new InstanceReferences();
         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
         RequestStatus requestStatus = new RequestStatus();
+        requestStatus.setRequestState(iar.getRequestStatus());
 
         Request expected = new Request();
         expected.setRequestId(REQUEST_ID);
@@ -142,21 +131,24 @@
         expected.setRequestStatus(requestStatus);
         expected.setRequestScope(SERVICE);
 
-        extSystemErrorSource = false;
         includeCloudRequest = false;
 
-        Request actual =
-                orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest, extSystemErrorSource);
+        Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
+                OrchestrationRequestFormat.DETAIL.toString());
         assertThat(actual, sameBeanAs(expected));
     }
 
     @Test
-    public void mapExtSystemErrorSourceToRequestTrueTest() throws ApiException {
+    public void mapRequestStatusAndExtSysErrSrcToRequestStatusDetailTest() throws ApiException {
         InstanceReferences instanceReferences = new InstanceReferences();
         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
         RequestStatus requestStatus = new RequestStatus();
         requestStatus.setExtSystemErrorSource(EXT_SYSTEM_ERROR_SOURCE);
         requestStatus.setRollbackExtSystemErrorSource(ROLLBACK_EXT_SYSTEM_ERROR_SOURCE);
+        requestStatus.setRequestState(iar.getRequestStatus());
+        requestStatus.setFlowStatus(FLOW_STATUS);
+        requestStatus.setRollbackStatusMessage(ROLLBACK_STATUS_MESSAGE);
+        requestStatus.setRetryStatusMessage(RETRY_STATUS_MESSAGE);
 
         Request expected = new Request();
         expected.setRequestId(REQUEST_ID);
@@ -164,24 +156,44 @@
         expected.setRequestStatus(requestStatus);
         expected.setRequestScope(SERVICE);
 
-        extSystemErrorSource = true;
         includeCloudRequest = false;
         iar.setExtSystemErrorSource(EXT_SYSTEM_ERROR_SOURCE);
         iar.setRollbackExtSystemErrorSource(ROLLBACK_EXT_SYSTEM_ERROR_SOURCE);
+        iar.setFlowStatus(FLOW_STATUS);
+        iar.setRollbackStatusMessage(ROLLBACK_STATUS_MESSAGE);
+        iar.setRetryStatusMessage(RETRY_STATUS_MESSAGE);
 
-        Request actual =
-                orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest, extSystemErrorSource);
+        Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
+                OrchestrationRequestFormat.STATUSDETAIL.toString());
         assertThat(actual, sameBeanAs(expected));
     }
 
     @Test
-    public void mapExtSystemErrorSourceToRequestMethodInvokedTest() throws ApiException, IOException {
-        extSystemErrorSource = true;
-        includeCloudRequest = false;
-        orchestrationRequests.getOrchestrationRequest(REQUEST_ID, VERSION, includeCloudRequest, extSystemErrorSource);
+    public void mapRequestStatusAndExtSysErrSrcToRequestDetailTest() throws ApiException {
+        InstanceReferences instanceReferences = new InstanceReferences();
+        instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
+        RequestStatus requestStatus = new RequestStatus();
+        requestStatus.setRequestState(iar.getRequestStatus());
+        requestStatus.setStatusMessage(String.format("FLOW STATUS: %s RETRY STATUS: %s ROLLBACK STATUS: %s",
+                FLOW_STATUS, RETRY_STATUS_MESSAGE, ROLLBACK_STATUS_MESSAGE));
 
-        verify(orchestrationRequests, times(1)).mapExtSystemErrorSourceToRequest(Mockito.eq(iar), Mockito.any(),
-                Mockito.eq(extSystemErrorSource));
+        Request expected = new Request();
+        expected.setRequestId(REQUEST_ID);
+        expected.setInstanceReferences(instanceReferences);
+        expected.setRequestStatus(requestStatus);
+        expected.setRequestScope(SERVICE);
+
+        includeCloudRequest = false;
+        iar.setExtSystemErrorSource(EXT_SYSTEM_ERROR_SOURCE);
+        iar.setRollbackExtSystemErrorSource(ROLLBACK_EXT_SYSTEM_ERROR_SOURCE);
+        iar.setFlowStatus(FLOW_STATUS);
+        iar.setRollbackStatusMessage(ROLLBACK_STATUS_MESSAGE);
+        iar.setRetryStatusMessage(RETRY_STATUS_MESSAGE);
+
+        Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
+                OrchestrationRequestFormat.DETAIL.toString());
+
+        assertThat(actual, sameBeanAs(expected));
     }
 
     @Test
@@ -190,4 +202,22 @@
         requestStatus.setExtSystemErrorSource(EXT_SYSTEM_ERROR_SOURCE);
         assertThat(requestStatus.getExtSystemErrorSource(), is(equalTo(EXT_SYSTEM_ERROR_SOURCE)));
     }
+
+    @Test
+    public void mapRequestStatusToRequestForFormatDetailTest() throws ApiException {
+        iar.setRequestStatus(Status.ABORTED.toString());
+        String result =
+                orchestrationRequests.mapRequestStatusToRequest(iar, OrchestrationRequestFormat.DETAIL.toString());
+
+        assertEquals(Status.ABORTED.toString(), result);
+    }
+
+
+    @Test
+    public void mapRequestStatusToRequestForFormatEmptyStringTest() throws ApiException {
+        iar.setRequestStatus(Status.ABORTED.toString());
+        String result = orchestrationRequests.mapRequestStatusToRequest(iar, StringUtils.EMPTY);
+
+        assertEquals(Status.FAILED.toString(), result);
+    }
 }
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/RequestHandlerUtilsUnitTest.java b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/RequestHandlerUtilsUnitTest.java
index 91ca756..d4b0c3a 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/RequestHandlerUtilsUnitTest.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/RequestHandlerUtilsUnitTest.java
@@ -41,6 +41,7 @@
 import org.onap.so.apihandlerinfra.exceptions.ApiException;
 import org.onap.so.apihandlerinfra.exceptions.ValidateException;
 import org.onap.so.apihandlerinfra.exceptions.VfModuleNotFoundException;
+import org.onap.so.constants.Status;
 import org.onap.so.db.catalog.beans.VfModule;
 import org.onap.so.db.catalog.client.CatalogDbClient;
 import org.onap.so.db.request.beans.InfraActiveRequests;
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/ResumeOrchestrationRequestTest.java b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/ResumeOrchestrationRequestTest.java
index 398966b..1e75541 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/ResumeOrchestrationRequestTest.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/ResumeOrchestrationRequestTest.java
@@ -52,6 +52,7 @@
 import org.onap.so.apihandlerinfra.exceptions.DuplicateRequestException;
 import org.onap.so.apihandlerinfra.exceptions.RequestDbFailureException;
 import org.onap.so.apihandlerinfra.exceptions.ValidateException;
+import org.onap.so.constants.Status;
 import org.onap.so.db.request.beans.InfraActiveRequests;
 import org.onap.so.db.request.client.RequestsDbClient;
 import org.onap.so.serviceinstancebeans.ModelInfo;
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/infra/rest/handler/NetworkRestHandlerTest.java b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/infra/rest/handler/NetworkRestHandlerTest.java
index 8ff7517..5930821 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/infra/rest/handler/NetworkRestHandlerTest.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/infra/rest/handler/NetworkRestHandlerTest.java
@@ -40,9 +40,9 @@
 import org.onap.so.apihandler.common.RequestClientParameter;
 import org.onap.so.apihandlerinfra.Action;
 import org.onap.so.apihandlerinfra.Constants;
-import org.onap.so.apihandlerinfra.Status;
 import org.onap.so.apihandlerinfra.infra.rest.exception.NoRecipeException;
 import org.onap.so.apihandlerinfra.infra.rest.handler.NetworkRestHandler;
+import org.onap.so.constants.Status;
 import org.onap.so.db.catalog.client.CatalogDbClient;
 import org.onap.so.db.request.beans.InfraActiveRequests;
 import org.onap.so.db.request.client.RequestsDbClient;
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/infra/rest/handler/ServiceInstanceRestHandlerTest.java b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/infra/rest/handler/ServiceInstanceRestHandlerTest.java
index 56d57aa..c1e6347 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/infra/rest/handler/ServiceInstanceRestHandlerTest.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/infra/rest/handler/ServiceInstanceRestHandlerTest.java
@@ -41,10 +41,10 @@
 import org.onap.so.apihandler.common.RequestClientParameter;
 import org.onap.so.apihandlerinfra.Action;
 import org.onap.so.apihandlerinfra.Constants;
-import org.onap.so.apihandlerinfra.Status;
 import org.onap.so.apihandlerinfra.infra.rest.exception.NoRecipeException;
 import org.onap.so.apihandlerinfra.infra.rest.exception.RequestConflictedException;
 import org.onap.so.apihandlerinfra.infra.rest.handler.ServiceInstanceRestHandler;
+import org.onap.so.constants.Status;
 import org.onap.so.db.catalog.beans.Recipe;
 import org.onap.so.db.catalog.beans.ServiceRecipe;
 import org.onap.so.db.catalog.client.CatalogDbClient;
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/infra/rest/handler/VfModuleRestHandlerTest.java b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/infra/rest/handler/VfModuleRestHandlerTest.java
index 280ae9c..7d14679 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/infra/rest/handler/VfModuleRestHandlerTest.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/infra/rest/handler/VfModuleRestHandlerTest.java
@@ -41,9 +41,9 @@
 import org.onap.so.apihandler.common.RequestClientParameter;
 import org.onap.so.apihandlerinfra.Action;
 import org.onap.so.apihandlerinfra.Constants;
-import org.onap.so.apihandlerinfra.Status;
 import org.onap.so.apihandlerinfra.infra.rest.exception.NoRecipeException;
 import org.onap.so.apihandlerinfra.infra.rest.handler.VFModuleRestHandler;
+import org.onap.so.constants.Status;
 import org.onap.so.db.catalog.beans.Recipe;
 import org.onap.so.db.catalog.beans.VnfComponentsRecipe;
 import org.onap.so.db.catalog.client.CatalogDbClient;
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/infra/rest/handler/VnfRestHandlerTest.java b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/infra/rest/handler/VnfRestHandlerTest.java
index 2ea537b..03725ec 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/infra/rest/handler/VnfRestHandlerTest.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/infra/rest/handler/VnfRestHandlerTest.java
@@ -40,9 +40,9 @@
 import org.onap.so.apihandler.common.RequestClientParameter;
 import org.onap.so.apihandlerinfra.Action;
 import org.onap.so.apihandlerinfra.Constants;
-import org.onap.so.apihandlerinfra.Status;
 import org.onap.so.apihandlerinfra.infra.rest.exception.NoRecipeException;
 import org.onap.so.apihandlerinfra.infra.rest.handler.VnfRestHandler;
+import org.onap.so.constants.Status;
 import org.onap.so.db.catalog.beans.Recipe;
 import org.onap.so.db.catalog.beans.ServiceRecipe;
 import org.onap.so.db.catalog.client.CatalogDbClient;
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/infra/rest/handler/VolumeRestHandlerTest.java b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/infra/rest/handler/VolumeRestHandlerTest.java
index 2721f8a..efa2774 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/infra/rest/handler/VolumeRestHandlerTest.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/infra/rest/handler/VolumeRestHandlerTest.java
@@ -40,9 +40,9 @@
 import org.onap.so.apihandler.common.RequestClientParameter;
 import org.onap.so.apihandlerinfra.Action;
 import org.onap.so.apihandlerinfra.Constants;
-import org.onap.so.apihandlerinfra.Status;
 import org.onap.so.apihandlerinfra.infra.rest.exception.NoRecipeException;
 import org.onap.so.apihandlerinfra.infra.rest.handler.VolumeRestHandler;
+import org.onap.so.constants.Status;
 import org.onap.so.db.catalog.client.CatalogDbClient;
 import org.onap.so.db.request.beans.InfraActiveRequests;
 import org.onap.so.db.request.client.RequestsDbClient;
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/tenantisolation/CloudOrchestrationTest.java b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/tenantisolation/CloudOrchestrationTest.java
index 9ae1e5b..a74c11c 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/tenantisolation/CloudOrchestrationTest.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/tenantisolation/CloudOrchestrationTest.java
@@ -35,9 +35,9 @@
 import org.junit.Ignore;
 import org.junit.Test;
 import org.onap.so.apihandlerinfra.BaseTest;
-import org.onap.so.apihandlerinfra.Status;
 import org.onap.so.apihandlerinfra.tenantisolationbeans.Action;
 import org.onap.so.apihandlerinfra.tenantisolationbeans.TenantIsolationRequest;
+import org.onap.so.constants.Status;
 import org.onap.so.db.request.beans.InfraActiveRequests;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
diff --git a/mso-api-handlers/mso-requests-db-repositories/pom.xml b/mso-api-handlers/mso-requests-db-repositories/pom.xml
index f890dab..4dbf22c 100644
--- a/mso-api-handlers/mso-requests-db-repositories/pom.xml
+++ b/mso-api-handlers/mso-requests-db-repositories/pom.xml
@@ -30,7 +30,6 @@
     <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-data-rest</artifactId>
-      <optional>true</optional>
     </dependency>
     <dependency>
       <groupId>com.h2database</groupId>
diff --git a/mso-api-handlers/mso-requests-db-repositories/src/main/java/org/onap/so/db/request/configuration/ExposeEntityIdResourceConfiguration.java b/mso-api-handlers/mso-requests-db-repositories/src/main/java/org/onap/so/db/request/configuration/ExposeEntityIdResourceConfiguration.java
new file mode 100644
index 0000000..575e5ff
--- /dev/null
+++ b/mso-api-handlers/mso-requests-db-repositories/src/main/java/org/onap/so/db/request/configuration/ExposeEntityIdResourceConfiguration.java
@@ -0,0 +1,21 @@
+package org.onap.so.db.request.configuration;
+
+import org.onap.so.db.request.beans.RequestProcessingData;
+import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
+import org.springframework.data.rest.webmvc.config.RepositoryRestConfigurerAdapter;
+import org.springframework.stereotype.Component;
+
+@Component
+public class ExposeEntityIdResourceConfiguration extends RepositoryRestConfigurerAdapter {
+
+    /**
+     * Spring Data Rest hides the ID by default, in order to have it in the JSON you have to manually configure that for
+     * your entity
+     *
+     * @param config
+     */
+    @Override
+    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
+        config.exposeIdsFor(RequestProcessingData.class);
+    }
+}
diff --git a/mso-api-handlers/mso-requests-db-repositories/src/main/java/org/onap/so/db/request/data/repository/RequestProcessingDataRepository.java b/mso-api-handlers/mso-requests-db-repositories/src/main/java/org/onap/so/db/request/data/repository/RequestProcessingDataRepository.java
index 1abc21d..7081713 100644
--- a/mso-api-handlers/mso-requests-db-repositories/src/main/java/org/onap/so/db/request/data/repository/RequestProcessingDataRepository.java
+++ b/mso-api-handlers/mso-requests-db-repositories/src/main/java/org/onap/so/db/request/data/repository/RequestProcessingDataRepository.java
@@ -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.
@@ -34,5 +34,11 @@
     RequestProcessingData findOneBySoRequestIdAndGroupingIdAndName(@Param("SO_REQUEST_ID") String soRequestId,
             @Param("GROUPING_ID") String groupingId, @Param("NAME") String name);
 
+    RequestProcessingData findOneBySoRequestIdAndName(@Param("SO_REQUEST_ID") String soRequestId,
+            @Param("NAME") String name);
+
     List<RequestProcessingData> findBySoRequestIdOrderByGroupingIdDesc(@Param("SO_REQUEST_ID") String soRequestId);
+
+    List<RequestProcessingData> findByGroupingIdAndNameAndTag(@Param("GROUPING_ID") String groupingId,
+            @Param("NAME") String name, @Param("TAG") String tag);
 }
diff --git a/mso-api-handlers/mso-requests-db/src/main/java/org/onap/so/db/request/client/RequestsDbClient.java b/mso-api-handlers/mso-requests-db/src/main/java/org/onap/so/db/request/client/RequestsDbClient.java
index 9ab0f3b..4d16d9c 100644
--- a/mso-api-handlers/mso-requests-db/src/main/java/org/onap/so/db/request/client/RequestsDbClient.java
+++ b/mso-api-handlers/mso-requests-db/src/main/java/org/onap/so/db/request/client/RequestsDbClient.java
@@ -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.
@@ -26,6 +26,8 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.StreamSupport;
 import javax.annotation.PostConstruct;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.UriBuilder;
@@ -72,6 +74,9 @@
     private static final String REQUEST_ID = "REQUEST_ID";
     private static final String OPERATIONAL_ENVIRONMENT_ID = "OPERATIONAL_ENV_ID";
     private static final String SERVICE_MODEL_VERSION_ID = "SERVICE_MODEL_VERSION_ID";
+    private static final String TAG = "TAG";
+    private static final String FLOW_EXECUTION_PATH = "flowExecutionPath";
+    private static final String BPMN_EXECUTION_DATA_TAG = "BPMNExecutionData";
 
     @Value("${mso.adapters.requestDb.endpoint:#{null}}")
     protected String endpoint;
@@ -95,6 +100,8 @@
 
     private String findOneByServiceIdAndOperationIdURI = "/findOneByServiceIdAndOperationId";
 
+    private String findOneByRequestId = "/infraActiveRequests/search/findOneByRequestId";
+
     private String findOneByOperationalEnvIdAndServiceModelVersionIdAndRequestIdURI =
             "/findOneByOperationalEnvIdAndServiceModelVersionIdAndRequestId";
 
@@ -110,9 +117,13 @@
     private static final String findBySoRequestIdAndGroupIdAndName =
             "/requestProcessingData/search/findOneBySoRequestIdAndGroupingIdAndName";
 
+    private static final String findBySoRequestIdAndName = "/requestProcessingData/search/findOneBySoRequestIdAndName";
+
     private static final String findBySoRequestIdOrderByGroupingIdDesc =
             "/requestProcessingData/search/findBySoRequestIdOrderByGroupingIdDesc";
 
+    private static final String findByGroupingIdAndNameAndTag =
+            "/requestProcessingData/search/findByGroupingIdAndNameAndTag";
 
     @Autowired
     protected RestTemplate restTemplate;
@@ -136,6 +147,7 @@
                         + findOneByOperationalEnvIdAndServiceModelVersionIdAndRequestIdURI;
         findAllByOperationalEnvIdAndRequestIdURI =
                 endpoint + OPERATIONAL_ENV_SERVICE_MODEL_STATUS_SEARCH + findAllByOperationalEnvIdAndRequestIdURI;
+        findOneByRequestId = endpoint + findOneByRequestId;
     }
 
     private ClientFactory getClientFactory() {
@@ -342,7 +354,7 @@
 
     public void updateRequestProcessingData(RequestProcessingData requestProcessingData) {
         HttpHeaders headers = getHttpHeaders();
-        URI uri = getUri(requestProcessingDataURI);
+        URI uri = getUri(requestProcessingDataURI + "/" + requestProcessingData.getId());
         HttpEntity<RequestProcessingData> entity = new HttpEntity<>(requestProcessingData, headers);
         restTemplate.put(uri, entity);
     }
@@ -361,6 +373,41 @@
                         .queryParam(GROUPING_ID, groupingId).build().toString()));
     }
 
+    public List<RequestProcessingData> getRequestProcessingDataByGroupingIdAndNameAndTag(String groupingId, String name,
+            String tag) {
+        Iterable<RequestProcessingData> requestProcessingDataListIt =
+                getClientFactory().create(RequestProcessingData.class)
+                        .getAll(getUri(UriBuilder.fromUri(endpoint + findByGroupingIdAndNameAndTag)
+                                .queryParam(GROUPING_ID, groupingId).queryParam(NAME, name).queryParam(TAG, tag).build()
+                                .toString()));
+
+        List<RequestProcessingData> requestProcessingDataList =
+                StreamSupport.stream(requestProcessingDataListIt.spliterator(), false).collect(Collectors.toList());
+
+        return requestProcessingDataList;
+    }
+
+    public RequestProcessingData getRequestProcessingDataBySoRequestIdAndName(String soRequestId, String name) {
+        return getClientFactory().create(RequestProcessingData.class)
+                .get(getUri(UriBuilder.fromUri(endpoint + findBySoRequestIdAndName)
+                        .queryParam(SO_REQUEST_ID, soRequestId).queryParam(NAME, name).build().toString()));
+    }
+
+
+    public void persistProcessingData(String flowExecutionPath, String requestId) {
+
+        HttpHeaders headers = getHttpHeaders();
+        URI uri = getUri(requestProcessingDataURI);
+        RequestProcessingData rpd = new RequestProcessingData();
+        rpd.setName(FLOW_EXECUTION_PATH);
+        rpd.setSoRequestId(requestId);
+        rpd.setValue(flowExecutionPath);
+        rpd.setTag(BPMN_EXECUTION_DATA_TAG);
+
+        HttpEntity<RequestProcessingData> entity = new HttpEntity<>(rpd, headers);
+        restTemplate.postForLocation(uri, entity);
+    }
+
     private List<RequestProcessingData> getRequestProcessingData(URI uri) {
         Iterable<RequestProcessingData> requestProcessingDataIterator =
                 getClientFactory().create(RequestProcessingData.class).getAll(uri);
@@ -370,6 +417,20 @@
         return requestProcessingDataList;
     }
 
+    public InfraActiveRequests findOneByRequestId(String requestId) {
+        try {
+            HttpEntity<?> entity = getHttpEntity();
+            return restTemplate.exchange(
+                    getUri(UriBuilder.fromUri(findOneByRequestId).queryParam(REQUEST_ID, requestId).build().toString()),
+                    HttpMethod.GET, entity, InfraActiveRequests.class).getBody();
+        } catch (HttpClientErrorException e) {
+            if (HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()) {
+                return null;
+            }
+            throw e;
+        }
+    }
+
     // From and To are defaulted to ignore start/endtime on query to database
     public List<InfraActiveRequests> getRequest(final Map<String, String[]> filters) {
         String url = UriBuilder.fromUri(getUri(getInfraActiveRequests)).queryParam("from", "0")
diff --git a/mso-api-handlers/mso-requests-db/src/test/java/org/onap/so/db/request/client/RequestDbClientTest.java b/mso-api-handlers/mso-requests-db/src/test/java/org/onap/so/db/request/client/RequestDbClientTest.java
new file mode 100644
index 0000000..fdbc04a
--- /dev/null
+++ b/mso-api-handlers/mso-requests-db/src/test/java/org/onap/so/db/request/client/RequestDbClientTest.java
@@ -0,0 +1,35 @@
+package org.onap.so.db.request.client;
+
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.isA;
+import static org.mockito.Mockito.times;
+import java.net.URI;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.onap.so.db.request.beans.RequestProcessingData;
+import org.springframework.http.HttpEntity;
+import org.springframework.web.client.RestTemplate;
+
+
+@RunWith(MockitoJUnitRunner.class)
+public class RequestDbClientTest {
+
+    @InjectMocks
+    protected RequestsDbClient requestsDbClient;
+
+    @Mock
+    protected RestTemplate restTemplate;
+
+    @Test
+    public void updateRequestProcessingDataTest() {
+        RequestProcessingData requestProcessingData = new RequestProcessingData();
+        requestProcessingData.setId(1);
+        URI uri = URI.create("/requestProcessingData/1");
+        requestsDbClient.updateRequestProcessingData(requestProcessingData);
+        Mockito.verify(restTemplate, times(1)).put(eq(uri), isA(HttpEntity.class));
+    }
+}
diff --git a/mso-catalog-db/src/test/java/org/onap/so/db/catalog/client/CatalogDbClientTest.java b/mso-catalog-db/src/test/java/org/onap/so/db/catalog/client/CatalogDbClientTest.java
index 9c257bd..b82c17d 100644
--- a/mso-catalog-db/src/test/java/org/onap/so/db/catalog/client/CatalogDbClientTest.java
+++ b/mso-catalog-db/src/test/java/org/onap/so/db/catalog/client/CatalogDbClientTest.java
@@ -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.
@@ -170,4 +170,5 @@
         CvnfcCustomization aCvnfc = catalogDbClient.findCvnfcCustomizationInAList(cvnfcCustomizationUuid, cvnfcs);
         assertTrue(aCvnfc.getModelCustomizationUUID().equals("a123"));
     }
+
 }
diff --git a/pom.xml b/pom.xml
index 58f8afa..a27c149 100644
--- a/pom.xml
+++ b/pom.xml
@@ -210,7 +210,7 @@
       </resource>
     </resources>
     <plugins>
-      <plugin>
+      <!-- <plugin>
         <groupId>org.sonatype.plugins</groupId>
         <artifactId>nexus-staging-maven-plugin</artifactId>
         <version>1.6.7</version>
@@ -220,7 +220,7 @@
           <stagingProfileId>176c31dfe190a</stagingProfileId>
           <serverId>ecomp-staging</serverId>
         </configuration>
-      </plugin>
+      </plugin> -->
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-deploy-plugin</artifactId>
diff --git a/so-monitoring/readme.md b/so-monitoring/readme.md
new file mode 100644
index 0000000..d4b876c
--- /dev/null
+++ b/so-monitoring/readme.md
@@ -0,0 +1,35 @@
+# SO Monitoring
+
+----
+
+## Introduction
+
+SO Monitoring provides multiple useful features:
+* Search/Filtering Menu
+* A graphical user interface
+* Workflow pathing
+* Subflow navigation
+* Access to the workflow variables
+
+## Compiling / Running
+
+Compiling is simple: `mvn clean install`
+Compilation may fail if your code is not formatted properly. 
+
+## Components
+
+### so-monitoring-handler
+
+
+### so-monitoring-service
+
+Backend API for so-monitoring. Requires basic auth to access it.
+
+Default credentials:
+- with role GUI-Client: gui/password1$
+
+Note that these default users should be changed for production.
+
+### so-monitoring-ui
+
+UI for so-monitoring has a separate README.md - so-monitoring/so-monitoring-ui/src/main/frontend/README.md
diff --git a/so-monitoring/so-monitoring-service/pom.xml b/so-monitoring/so-monitoring-service/pom.xml
index ff70a77..f5448aa 100644
--- a/so-monitoring/so-monitoring-service/pom.xml
+++ b/so-monitoring/so-monitoring-service/pom.xml
@@ -64,6 +64,10 @@
       <artifactId>spring-boot-configuration-processor</artifactId>
       <scope>compile</scope>
     </dependency>
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-security</artifactId>
+    </dependency>
   </dependencies>
 
   <build>
diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/Status.java b/so-monitoring/so-monitoring-service/src/main/java/org/onap/so/monitoring/rest/api/UserController.java
similarity index 62%
copy from mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/Status.java
copy to so-monitoring/so-monitoring-service/src/main/java/org/onap/so/monitoring/rest/api/UserController.java
index b791bf1..3959631 100644
--- a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/Status.java
+++ b/so-monitoring/so-monitoring-service/src/main/java/org/onap/so/monitoring/rest/api/UserController.java
@@ -1,29 +1,35 @@
 /*-
  * ============LICENSE_START=======================================================
- * ONAP - SO
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *  Copyright (C) 2019 Samsung
  * ================================================================================
  * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.so.apihandlerinfra;
+package org.onap.so.monitoring.rest.api;
 
+import java.security.Principal;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
-/*
- * Enum for Status values returned by API Handler to Tail-F
- */
-public enum Status {
-    PENDING, IN_PROGRESS, COMPLETE, COMPLETED, FAILED, TIMEOUT, UNLOCKED, PENDING_MANUAL_TASK
+@RestController
+public class UserController {
+
+    @RequestMapping("/user")
+    public Principal user(Principal user) {
+        return user;
+    }
 }
diff --git a/so-monitoring/so-monitoring-service/src/main/java/org/onap/so/monitoring/rest/api/WebApplicationConfig.java b/so-monitoring/so-monitoring-service/src/main/java/org/onap/so/monitoring/rest/api/WebApplicationConfig.java
index cadd60b..2b53ed8 100644
--- a/so-monitoring/so-monitoring-service/src/main/java/org/onap/so/monitoring/rest/api/WebApplicationConfig.java
+++ b/so-monitoring/so-monitoring-service/src/main/java/org/onap/so/monitoring/rest/api/WebApplicationConfig.java
@@ -2,7 +2,9 @@
  * ============LICENSE_START=======================================================
  *  Copyright (C) 2018 Ericsson. All rights reserved.
  * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Modifications Copyright (c) 2019 Samsung
+ * ================================================================================
+  * 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
  * 
@@ -21,16 +23,15 @@
 
 import org.springframework.context.annotation.Configuration;
 import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
 /**
  * @author waqas.ikram@ericsson.com
  */
 @Configuration
-public class WebApplicationConfig extends WebMvcConfigurerAdapter {
+public class WebApplicationConfig implements WebMvcConfigurer {
     @Override
     public void addViewControllers(final ViewControllerRegistry registry) {
-        super.addViewControllers(registry);
         registry.addViewController("/details/**").setViewName("forward:/");
     }
 }
diff --git a/so-monitoring/so-monitoring-service/src/main/java/org/onap/so/monitoring/rest/api/WebSecurityConfigImpl.java b/so-monitoring/so-monitoring-service/src/main/java/org/onap/so/monitoring/rest/api/WebSecurityConfigImpl.java
new file mode 100644
index 0000000..298f52b
--- /dev/null
+++ b/so-monitoring/so-monitoring-service/src/main/java/org/onap/so/monitoring/rest/api/WebSecurityConfigImpl.java
@@ -0,0 +1,39 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 Samsung
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.monitoring.rest.api;
+
+import org.onap.so.security.WebSecurityConfig;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.annotation.Order;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+
+@EnableWebSecurity
+@Configuration("att-security-config")
+@Order(2)
+public class WebSecurityConfigImpl extends WebSecurityConfig {
+
+    @Override
+    protected void configure(HttpSecurity http) throws Exception {
+        http.authorizeRequests().antMatchers("/actuator", "/actuator/*", "/login", "/", "/index.html", "/*.js",
+                "/*.js.map", "/favicon.png").permitAll().anyRequest().authenticated().and().httpBasic();
+    }
+}
diff --git a/so-monitoring/so-monitoring-service/src/main/resources/application.yaml b/so-monitoring/so-monitoring-service/src/main/resources/application.yaml
index 8235c74..347845e 100644
--- a/so-monitoring/so-monitoring-service/src/main/resources/application.yaml
+++ b/so-monitoring/so-monitoring-service/src/main/resources/application.yaml
@@ -16,3 +16,10 @@
         url: http://so-request-db-adapter.onap:8083/infraActiveRequests/
         auth: Basic YnBlbDpwYXNzd29yZDEk
 
+spring:
+  security:
+    usercredentials:
+    -
+      username: gui
+      password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke'
+      role: GUI-Client
diff --git a/so-monitoring/so-monitoring-ui/src/main/frontend/README.md b/so-monitoring/so-monitoring-ui/src/main/frontend/README.md
index 329de0f..65731cd 100644
--- a/so-monitoring/so-monitoring-ui/src/main/frontend/README.md
+++ b/so-monitoring/so-monitoring-ui/src/main/frontend/README.md
@@ -6,6 +6,15 @@
 
 Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files.
 
+FYI: You may need to change environments.ts to hit to your backend: not so-monitoring:30224 but localhost:8088  
+
+### Logging in
+
+Backend API for so-monitoring. Requires basic auth to access it.
+
+Default credentials:
+- with role GUI-Client: gui/password1$
+
 ## Code scaffolding
 
 Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
diff --git a/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/app-routing.module.ts b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/app-routing.module.ts
index 428998d..03e77fc 100644
--- a/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/app-routing.module.ts
+++ b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/app-routing.module.ts
@@ -2,6 +2,8 @@
 ============LICENSE_START=======================================================
  Copyright (C) 2018 Ericsson. All rights reserved.
 ================================================================================
+ Modifications Copyright (c) 2019 Samsung
+================================================================================
 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
@@ -24,17 +26,25 @@
 import { Routes, RouterModule } from '@angular/router';
 import { HomeComponent } from './home/home.component';
 import { DetailsComponent } from './details/details.component';
+import {AuthGuard} from "./auth.guard";
+import {LoginComponent} from "./login/login.component";
 
 const routes: Routes = [
   {
     // Route to home page
     path: '',
-    component: HomeComponent
+    component: HomeComponent,
+    canActivate: [AuthGuard]
   },
   {
     // Route to page to show individual process based on ID
     path: 'details/:id',
     component: DetailsComponent
+  },
+  {
+    // Route to login page
+    path: 'login',
+    component: LoginComponent
   }
 ];
 
diff --git a/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/app.module.ts b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/app.module.ts
index 2330863..71294bf 100644
--- a/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/app.module.ts
+++ b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/app.module.ts
@@ -2,6 +2,8 @@
 ============LICENSE_START=======================================================
  Copyright (C) 2018 Ericsson. All rights reserved.
 ================================================================================
+ Modifications Copyright (c) 2019 Samsung
+================================================================================
 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
@@ -28,7 +30,7 @@
 import { SidebarComponent } from './sidebar/sidebar.component';
 import { TopbarComponent } from './topbar/topbar.component';
 import { HomeComponent } from './home/home.component';
-import { HttpClientModule } from '@angular/common/http';
+import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
 import { FormsModule, ReactiveFormsModule } from '@angular/forms';
 import { DetailsComponent } from './details/details.component';
 import { ToastrNotificationService } from './toastr-notification-service.service';
@@ -37,6 +39,9 @@
 import { NgxSpinnerModule } from 'ngx-spinner';
 import { RouterModule, Routes } from '@angular/router';
 import { APP_BASE_HREF } from '@angular/common';
+import { LoginComponent } from './login/login.component';
+import {BasicAuthInterceptor} from "./basic-auth.interceptor";
+import {ErrorInterceptor} from "./error.interceptor";
 
 @NgModule({
   declarations: [
@@ -44,7 +49,8 @@
     SidebarComponent,
     TopbarComponent,
     HomeComponent,
-    DetailsComponent
+    DetailsComponent,
+    LoginComponent
   ],
   imports: [
     BrowserModule,
@@ -64,12 +70,16 @@
     RouterModule,
     MatPaginatorModule,
     MatSortModule,
-    RouterModule.forRoot([])
+    RouterModule.forRoot([]),
+    ReactiveFormsModule
   ],
   schemas: [
     CUSTOM_ELEMENTS_SCHEMA
   ],
-  providers: [ToastrNotificationService],
+  providers: [
+    { provide: HTTP_INTERCEPTORS, useClass: BasicAuthInterceptor, multi: true },
+    { provide: HTTP_INTERCEPTORS, useClass: ErrorInterceptor, multi: true },
+    ToastrNotificationService],
   bootstrap: [AppComponent]
 })
 export class AppModule { }
diff --git a/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/auth.guard.ts b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/auth.guard.ts
new file mode 100644
index 0000000..f437a21
--- /dev/null
+++ b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/auth.guard.ts
@@ -0,0 +1,46 @@
+/**
+ ============LICENSE_START=======================================================
+ Copyright (C) 2019 Samsung. 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.
+
+ SPDX-License-Identifier: Apache-2.0
+ ============LICENSE_END=========================================================
+
+ @authors: k.kazak@samsung.com
+ **/
+
+import { Injectable } from '@angular/core';
+import {CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router} from '@angular/router';
+import { Observable } from 'rxjs';
+
+@Injectable({
+  providedIn: 'root'
+})
+export class AuthGuard implements CanActivate {
+
+  constructor(private router:Router) { }
+
+  canActivate(
+    next: ActivatedRouteSnapshot,
+    state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
+      if (localStorage.getItem('authdata')) {
+        // logged in
+        return true;
+      }
+
+      // not logged in
+      this.router.navigate(['/login'], { queryParams: {returnUrl: state.url}});
+      return false;
+  }
+}
diff --git a/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/authentication.service.ts b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/authentication.service.ts
new file mode 100644
index 0000000..d7610ee
--- /dev/null
+++ b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/authentication.service.ts
@@ -0,0 +1,50 @@
+/**
+ ============LICENSE_START=======================================================
+ Copyright (C) 2019 Samsung. 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.
+
+ SPDX-License-Identifier: Apache-2.0
+ ============LICENSE_END=========================================================
+
+ @authors: k.kazak@samsung.com
+ **/
+
+import {Injectable} from '@angular/core';
+import {HttpClient} from "@angular/common/http";
+import {environment} from "../environments/environment";
+
+@Injectable({
+  providedIn: 'root'
+})
+export class AuthenticationService {
+
+  constructor(private http: HttpClient) {
+  }
+
+  login(username: string, password: string) {
+    // remove old data from storage
+    localStorage.removeItem('authdata');
+    // add to local storage
+    var authdata = window.btoa(username + ':' + password);
+    localStorage.setItem('authdata', authdata);
+
+    // make request
+    return this.http.get(environment.authBackendURL);
+  }
+
+  logout() {
+    // remove from local storage
+    localStorage.removeItem('authdata');
+  }
+}
diff --git a/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/basic-auth.interceptor.ts b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/basic-auth.interceptor.ts
new file mode 100644
index 0000000..4990d05
--- /dev/null
+++ b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/basic-auth.interceptor.ts
@@ -0,0 +1,43 @@
+/**
+ ============LICENSE_START=======================================================
+ Copyright (C) 2019 Samsung. 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.
+
+ SPDX-License-Identifier: Apache-2.0
+ ============LICENSE_END=========================================================
+
+ @authors: k.kazak@samsung.com
+ **/
+
+import { Injectable } from '@angular/core';
+import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http';
+import { Observable } from 'rxjs';
+
+@Injectable()
+export class BasicAuthInterceptor implements HttpInterceptor {
+  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
+    //add authorization header with basic auth credentials if available
+    let auth = localStorage.getItem('authdata');
+    if (auth) {
+        const authReq = request.clone({
+          headers: request.headers.set('Authorization', 'Basic Z3VpOnBhc3N3b3JkMSQ=')
+        });
+
+        // send cloned request with header to the next handler.
+        return next.handle(authReq);
+   }
+
+    return next.handle(request);
+  }
+}
diff --git a/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/data.service.ts b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/data.service.ts
index b391672..8dfae3d 100644
--- a/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/data.service.ts
+++ b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/data.service.ts
@@ -21,7 +21,7 @@
 */
 
 import { Injectable } from '@angular/core';
-import { HttpClient, HttpErrorResponse } from '@angular/common/http';
+import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';
 import { BpmnInfraRequest } from './model/bpmnInfraRequest.model';
 import { catchError } from 'rxjs/operators';
 import { Observable } from 'rxjs';
diff --git a/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/error.interceptor.ts b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/error.interceptor.ts
new file mode 100644
index 0000000..afe792c
--- /dev/null
+++ b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/error.interceptor.ts
@@ -0,0 +1,45 @@
+/**
+ ============LICENSE_START=======================================================
+ Copyright (C) 2019 Samsung. 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.
+
+ SPDX-License-Identifier: Apache-2.0
+ ============LICENSE_END=========================================================
+
+ @authors: k.kazak@samsung.com
+ **/
+
+import { Injectable } from '@angular/core';
+import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http';
+import { Observable, throwError } from 'rxjs';
+import { catchError } from 'rxjs/operators';
+import {AuthenticationService} from "./authentication.service";
+
+@Injectable()
+export class ErrorInterceptor implements HttpInterceptor {
+  constructor(private authenticationService: AuthenticationService) {}
+
+  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
+    return next.handle(request).pipe(catchError(err => {
+      if (err.status === 401) {
+        // auto logout if 401 response returned from api
+        this.authenticationService.logout();
+        location.reload(true);
+      }
+
+      const error = err.error.message || err.statusText;
+      return throwError(error);
+    }))
+  }
+}
diff --git a/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/login/login.component.html b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/login/login.component.html
new file mode 100644
index 0000000..107e1da
--- /dev/null
+++ b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/login/login.component.html
@@ -0,0 +1,43 @@
+<!--
+============LICENSE_START=======================================================
+Copyright (C) 2019 Samsung. 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.
+
+SPDX-License-Identifier: Apache-2.0
+============LICENSE_END=========================================================
+
+@authors: k.kazak@samsung.com
+-->
+<h2>Login</h2>
+<form [formGroup]="loginForm" (ngSubmit)="onSubmit()">
+  <div class="form-group">
+    <label for="username">Username</label>
+    <input type="text" formControlName="username" class="form-control" [ngClass]="{ 'is-invalid': submitted && f.username.errors }" />
+    <div *ngIf="submitted && f.username.errors" class="invalid-feedback">
+      <div *ngIf="f.username.errors.required">Username is required</div>
+    </div>
+  </div>
+  <div class="form-group">
+    <label for="password">Password</label>
+    <input type="password" formControlName="password" class="form-control" [ngClass]="{ 'is-invalid': submitted && f.password.errors }" />
+    <div *ngIf="submitted && f.password.errors" class="invalid-feedback">
+      <div *ngIf="f.password.errors.required">Password is required</div>
+    </div>
+  </div>
+  <div class="form-group">
+    <button [disabled]="loading" class="btn btn-primary">Login</button>
+    <img *ngIf="loading" src="data:image/gif;base64,R0lGODlhEAAQAPIAAP///wAAAMLCwkJCQgAAAGJiYoKCgpKSkiH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAADMwi63P4wyklrE2MIOggZnAdOmGYJRbExwroUmcG2LmDEwnHQLVsYOd2mBzkYDAdKa+dIAAAh+QQJCgAAACwAAAAAEAAQAAADNAi63P5OjCEgG4QMu7DmikRxQlFUYDEZIGBMRVsaqHwctXXf7WEYB4Ag1xjihkMZsiUkKhIAIfkECQoAAAAsAAAAABAAEAAAAzYIujIjK8pByJDMlFYvBoVjHA70GU7xSUJhmKtwHPAKzLO9HMaoKwJZ7Rf8AYPDDzKpZBqfvwQAIfkECQoAAAAsAAAAABAAEAAAAzMIumIlK8oyhpHsnFZfhYumCYUhDAQxRIdhHBGqRoKw0R8DYlJd8z0fMDgsGo/IpHI5TAAAIfkECQoAAAAsAAAAABAAEAAAAzIIunInK0rnZBTwGPNMgQwmdsNgXGJUlIWEuR5oWUIpz8pAEAMe6TwfwyYsGo/IpFKSAAAh+QQJCgAAACwAAAAAEAAQAAADMwi6IMKQORfjdOe82p4wGccc4CEuQradylesojEMBgsUc2G7sDX3lQGBMLAJibufbSlKAAAh+QQJCgAAACwAAAAAEAAQAAADMgi63P7wCRHZnFVdmgHu2nFwlWCI3WGc3TSWhUFGxTAUkGCbtgENBMJAEJsxgMLWzpEAACH5BAkKAAAALAAAAAAQABAAAAMyCLrc/jDKSatlQtScKdceCAjDII7HcQ4EMTCpyrCuUBjCYRgHVtqlAiB1YhiCnlsRkAAAOwAAAAAAAAAAAA==" />
+  </div>
+  <div *ngIf="error" class="alert alert-danger">{{error}}</div>
+</form>
diff --git a/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/login/login.component.spec.ts b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/login/login.component.spec.ts
new file mode 100644
index 0000000..8cf379d
--- /dev/null
+++ b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/login/login.component.spec.ts
@@ -0,0 +1,108 @@
+/**
+ ============LICENSE_START=======================================================
+ Copyright (C) 2019 Samsung. 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.
+
+ SPDX-License-Identifier: Apache-2.0
+ ============LICENSE_END=========================================================
+
+ @authors: k.kazak@samsung.com
+ **/
+
+import {async, ComponentFixture, inject, TestBed} from '@angular/core/testing';
+
+import {LoginComponent} from './login.component';
+import {AuthenticationService} from "../authentication.service";
+import {CUSTOM_ELEMENTS_SCHEMA} from "@angular/core";
+import {FormsModule, ReactiveFormsModule} from '@angular/forms';
+import {RouterTestingModule} from "@angular/router/testing";
+import {ActivatedRoute, Router, RouterModule} from "@angular/router";
+
+describe('LoginComponent', () => {
+  // Create SPY Object for Jasmine tests to mock DataService
+  let spyDataService: jasmine.SpyObj<AuthenticationService>;
+  let component: LoginComponent;
+  let fixture: ComponentFixture<LoginComponent>;
+  let router: Router;
+
+  beforeEach(async(() => {
+    spyDataService = jasmine.createSpyObj('AuthenticationService', ['login', 'logout']);
+
+    TestBed.configureTestingModule({
+      providers: [LoginComponent,
+        {provide: AuthenticationService, useValue: spyDataService},
+        {provide: ActivatedRoute, useValue: { snapshot: {queryParams: { returnUrl: 'test'}}}}
+      ],
+      imports: [RouterTestingModule, ReactiveFormsModule, FormsModule, RouterModule.forRoot([])],
+      declarations: [LoginComponent],
+      schemas: [
+        CUSTOM_ELEMENTS_SCHEMA
+      ]
+    });
+
+    fixture = TestBed.createComponent(LoginComponent);
+    component = fixture.componentInstance;
+    router = TestBed.get(Router);
+  }));
+
+
+  it('should create', inject([LoginComponent],
+    (component: LoginComponent) => {
+      expect(component).toBeTruthy();
+    }));
+
+  it('should logout and route to test directory', inject([LoginComponent],
+    (component: LoginComponent) => {
+      component.ngOnInit();
+      expect(component.returnUrl).toBe('test');
+    }));
+
+  it('should logout and route to root directory', inject([LoginComponent],
+    (component: LoginComponent) => {
+      router.initialNavigation();
+      component.ngOnInit();
+      expect(component.returnUrl).toBe('test');
+    }));
+
+  it('should submit without success', inject([LoginComponent],
+    (component: LoginComponent) => {
+      component.ngOnInit();
+      expect(component.loginForm.valid).toBe(false);
+      component.onSubmit();
+      expect(component.submitted).toBe(true);
+    }));
+
+  it('should submit without success', inject([LoginComponent],
+    (component: LoginComponent) => {
+      component.ngOnInit();
+      expect(component.loginForm.valid).toBe(false);
+      spyDataService.login.and.returnValue(Promise.resolve());
+
+      let compiled = fixture.debugElement.nativeElement;
+      let username = compiled.querySelector('input[type="text"]');
+      let password = compiled.querySelector('input[type="password"]');
+
+      fixture.detectChanges();
+
+      // Change value
+      username.value = 'test';
+      password.value = 'password';
+
+      // dispatch input event
+      dispatchEvent(new Event('input'));
+
+      component.onSubmit();
+      expect(component.submitted).toBe(true);
+    }));
+});
diff --git a/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/login/login.component.ts b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/login/login.component.ts
new file mode 100644
index 0000000..4a3f4e6
--- /dev/null
+++ b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/login/login.component.ts
@@ -0,0 +1,81 @@
+/**
+ ============LICENSE_START=======================================================
+ Copyright (C) 2019 Samsung. 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.
+
+ SPDX-License-Identifier: Apache-2.0
+ ============LICENSE_END=========================================================
+
+ @authors: k.kazak@samsung.com
+ **/
+
+import { Component, OnInit } from '@angular/core';
+import {FormBuilder, FormGroup, Validators, ReactiveFormsModule} from "@angular/forms";
+import {ActivatedRoute, Router} from "@angular/router";
+import {AuthenticationService} from "../authentication.service";
+import {first} from "rxjs/internal/operators";
+
+@Component({
+  selector: 'app-login',
+  templateUrl: './login.component.html',
+  styleUrls: []
+})
+export class LoginComponent implements OnInit {
+
+  loginForm: FormGroup;
+  loading = false;
+  submitted = false;
+  returnUrl: string;
+  error = '';
+
+  constructor(private formBuilder: FormBuilder,
+              private route: ActivatedRoute,
+              private router: Router,
+              private authenticationService: AuthenticationService) { }
+
+  ngOnInit() {
+    this.loginForm = this.formBuilder.group({
+      username: ['', Validators.required],
+      password: ['', Validators.required]
+    });
+
+    // logout
+    this.authenticationService.logout();
+
+    this.returnUrl = this.route.snapshot.queryParams['returnUrl'] || '/';
+  }
+
+  // convenience getter for easy access to form fields
+  get f() { return this.loginForm.controls; }
+
+  onSubmit() {
+    this.submitted = true;
+
+    // stop here if form is invalid
+    if (this.loginForm.invalid) {
+      return;
+    }
+
+    this.loading = true;
+    this.authenticationService.login(this.f.username.value, this.f.password.value)
+    .subscribe(
+       next => {
+           this.router.navigate([this.returnUrl]);
+         },
+         error => {
+           this.error = error;
+           this.loading = false;
+         });
+  }
+}
diff --git a/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/sidebar/sidebar.component.html b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/sidebar/sidebar.component.html
index e8b54d7..1c62351 100644
--- a/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/sidebar/sidebar.component.html
+++ b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/sidebar/sidebar.component.html
@@ -1,29 +1,34 @@
-<!--
-============LICENSE_START=======================================================
- Copyright (C) 2018 Ericsson. 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.
-
-SPDX-License-Identifier: Apache-2.0
-============LICENSE_END=========================================================
-
-@authors: ronan.kenny@ericsson.com, waqas.ikram@ericsson.com
--->
-
-<nav>
-  <ul>
-    <li>
-      <a routerLink="/">Home</a>
-    </li>
-  </ul>
-</nav>
+<!--
+============LICENSE_START=======================================================
+ Copyright (C) 2018 Ericsson. All rights reserved.
+================================================================================
+ Modifications Copyright (c) 2019 Samsung
+================================================================================
+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.
+
+SPDX-License-Identifier: Apache-2.0
+============LICENSE_END=========================================================
+
+@authors: ronan.kenny@ericsson.com, waqas.ikram@ericsson.com
+-->
+
+<nav>
+  <ul>
+    <li>
+      <a routerLink="/">Home</a>
+    </li>
+    <li>
+      <a routerLink="/login">Logout</a>
+    </li>
+  </ul>
+</nav>
diff --git a/so-monitoring/so-monitoring-ui/src/main/frontend/src/environments/environment.ts b/so-monitoring/so-monitoring-ui/src/main/frontend/src/environments/environment.ts
index f0c63fe..484a156 100644
--- a/so-monitoring/so-monitoring-ui/src/main/frontend/src/environments/environment.ts
+++ b/so-monitoring/so-monitoring-ui/src/main/frontend/src/environments/environment.ts
@@ -2,6 +2,8 @@
 ============LICENSE_START=======================================================
  Copyright (C) 2018 Ericsson. All rights reserved.
 ================================================================================
+ Modifications Copyright (c) 2019 Samsung
+================================================================================
 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
@@ -24,5 +26,6 @@
 export const environment = {
   production: false,
 
-  soMonitoringBackendURL: 'http://so-monitoring:30224/so/monitoring/'
+  soMonitoringBackendURL: 'http://so-monitoring:30224/so/monitoring/',
+  authBackendURL: 'http://so-monitoring:30224/user'
 };
diff --git a/vnfm-simulator/vnfm-service/pom.xml b/vnfm-simulator/vnfm-service/pom.xml
index c09c5f0..7beccb6 100644
--- a/vnfm-simulator/vnfm-service/pom.xml
+++ b/vnfm-simulator/vnfm-service/pom.xml
@@ -144,5 +144,23 @@
         <artifactId>spring-boot-maven-plugin</artifactId>
       </plugin>
     </plugins>
+    <resources>
+      <resource>
+        <directory>src/main/resources</directory>
+        <filtering>true</filtering>
+        <excludes>
+          <exclude>**/*.p12</exclude>
+          <exclude>**/*.jks</exclude>
+        </excludes>
+      </resource>
+      <resource>
+        <directory>src/main/resources</directory>
+        <filtering>false</filtering>
+        <includes>
+          <include>**/*.p12</include>
+          <include>**/*.jks</include>
+        </includes>
+      </resource>
+    </resources>
   </build>
 </project>
diff --git a/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/config/ApplicationConfig.java b/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/config/ApplicationConfig.java
index 91b7975..32c05eb 100644
--- a/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/config/ApplicationConfig.java
+++ b/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/config/ApplicationConfig.java
@@ -4,6 +4,7 @@
 import java.util.Arrays;
 import org.onap.svnfm.simulator.constants.Constant;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.ApplicationArguments;
 import org.springframework.boot.ApplicationRunner;
 import org.springframework.cache.Cache;
@@ -19,6 +20,9 @@
 
     private static final String PORT = "local.server.port";
 
+    @Value("${server.dns.name:so-vnfm-simulator.onap}")
+    private String serverDnsName;
+
     @Autowired
     private Environment environment;
 
@@ -26,7 +30,7 @@
 
     @Override
     public void run(final ApplicationArguments args) throws Exception {
-        baseUrl = "http://" + InetAddress.getLocalHost().getHostAddress() + ":" + environment.getProperty(PORT);
+        baseUrl = "https://" + serverDnsName + ":" + environment.getProperty(PORT);
     }
 
     public String getBaseUrl() {
@@ -35,8 +39,8 @@
 
     @Bean
     public CacheManager cacheManager() {
-        Cache inlineResponse201 = new ConcurrentMapCache(Constant.IN_LINE_RESPONSE_201_CACHE);
-        SimpleCacheManager manager = new SimpleCacheManager();
+        final Cache inlineResponse201 = new ConcurrentMapCache(Constant.IN_LINE_RESPONSE_201_CACHE);
+        final SimpleCacheManager manager = new SimpleCacheManager();
         manager.setCaches(Arrays.asList(inlineResponse201));
         return manager;
     }
diff --git a/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/controller/SvnfmController.java b/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/controller/SvnfmController.java
index 9c3a02d..d3ff66a 100644
--- a/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/controller/SvnfmController.java
+++ b/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/controller/SvnfmController.java
@@ -168,6 +168,6 @@
 
         final HttpHeaders headers = new HttpHeaders();
         headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON);
-        return new ResponseEntity<>(response, headers, HttpStatus.OK);
+        return new ResponseEntity<>(response, headers, HttpStatus.CREATED);
     }
 }
diff --git a/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services/VnfmHelper.java b/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services/VnfmHelper.java
index 60b251c..8f1e299 100644
--- a/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services/VnfmHelper.java
+++ b/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services/VnfmHelper.java
@@ -43,9 +43,13 @@
 @Component
 public class VnfmHelper {
 
-    @Autowired
     private ApplicationConfig applicationConfig;
 
+    @Autowired
+    public VnfmHelper(ApplicationConfig applicationConfig) {
+        this.applicationConfig = applicationConfig;
+    }
+
     /**
      *
      * @param createVNFRequest
diff --git a/vnfm-simulator/vnfm-service/src/main/resources/application.yaml b/vnfm-simulator/vnfm-service/src/main/resources/application.yaml
index 2ef302c..ea8105d 100644
--- a/vnfm-simulator/vnfm-service/src/main/resources/application.yaml
+++ b/vnfm-simulator/vnfm-service/src/main/resources/application.yaml
@@ -34,6 +34,11 @@
   port: 9093
   tomcat:
     max-threads: 50
+  ssl:
+    key-alias: so@so.onap.org
+    key--store-password: '7Em3&j4.19xYiMelhD5?xbQ.'
+    key-store: classpath:so-vnfm-simulator.p12
+    key-store-type: PKCS12
 
 vnfds:
   vnfdlist:
@@ -56,4 +61,4 @@
      - vnfcid: VNFC4
        resourceTemplateId: vnfd2_vnfc4
        vduId: vnfd2_vduForVnfc4
-       type: COMPUTE
\ No newline at end of file
+       type: COMPUTE
diff --git a/vnfm-simulator/vnfm-service/src/main/resources/so-vnfm-simulator.p12 b/vnfm-simulator/vnfm-service/src/main/resources/so-vnfm-simulator.p12
new file mode 100644
index 0000000..7ac0285
--- /dev/null
+++ b/vnfm-simulator/vnfm-service/src/main/resources/so-vnfm-simulator.p12
Binary files differ
diff --git a/vnfm-simulator/vnfm-service/src/test/java/org/onap/svnfm/simulator/services/VnfmHelperTest.java b/vnfm-simulator/vnfm-service/src/test/java/org/onap/svnfm/simulator/services/VnfmHelperTest.java
new file mode 100644
index 0000000..2b9598e
--- /dev/null
+++ b/vnfm-simulator/vnfm-service/src/test/java/org/onap/svnfm/simulator/services/VnfmHelperTest.java
@@ -0,0 +1,104 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2019 Nokia.
+ * ================================================================================
+ * 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.svnfm.simulator.services;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.CreateVnfRequest;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse201;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse201.InstantiationStateEnum;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse201LinksSelf;
+import org.onap.svnfm.simulator.config.ApplicationConfig;
+import org.onap.svnfm.simulator.constants.Constant;
+import org.onap.svnfm.simulator.model.VnfInstance;
+
+public class VnfmHelperTest {
+
+    private static final String VNF_INSTANCE_ID = "vnfInstanceTestId";
+    private static final String VNFD_ID = "vnfdTestId";
+    private static final String VNF_INSTANCE_NAME = "vnfInsNameTest";
+    private static final String VNF_INSTANCE_DESCRIPTION = "vnfInstTestDescr";
+    private static final String APPLICATION_CONFIG_BASE_URL = "appConfUrl";
+    private VnfmHelper testedObject;
+    private ApplicationConfig applicationConfigMock;
+
+    @Before
+    public void setup() {
+        applicationConfigMock = mock(ApplicationConfig.class);
+        testedObject = new VnfmHelper(applicationConfigMock);
+    }
+
+    @Test
+    public void createVnfInstance() {
+        // when
+        VnfInstance result = testedObject.createVnfInstance(createVnfRequest(), VNF_INSTANCE_ID);
+        // then
+        assertThat(result.getId()).isEqualTo(VNF_INSTANCE_ID);
+        assertThat(result.getVnfdId()).isEqualTo(VNFD_ID);
+        assertThat(result.getVnfInstanceName()).isEqualTo(VNF_INSTANCE_NAME);
+        assertThat(result.getVnfInstanceDescription()).isEqualTo(VNF_INSTANCE_DESCRIPTION);
+        assertThat(result.getVnfProvider()).isEqualTo(Constant.VNF_PROVIDER);
+        assertThat(result.getVnfProductName()).isEqualTo(Constant.VNF_PROVIDER_NAME);
+    }
+
+    @Test
+    public void getInlineResponse201() throws Exception {
+        // given
+        when(applicationConfigMock.getBaseUrl()).thenReturn(APPLICATION_CONFIG_BASE_URL);
+        // when
+        InlineResponse201 result = testedObject.getInlineResponse201(prepareVnfInstance());
+        // then
+        assertThat(result.getVnfdVersion()).isEqualTo(Constant.VNFD_VERSION);
+        assertThat(result.getVnfSoftwareVersion()).isEqualTo(Constant.VNF_SOFTWARE_VERSION);
+        assertThat(result.getInstantiationState()).isEqualByComparingTo(InstantiationStateEnum.NOT_INSTANTIATED);
+        verifyAdditionalPropertyInlineResponse201(result);
+    }
+
+    private CreateVnfRequest createVnfRequest() {
+        CreateVnfRequest createVnfRequest = new CreateVnfRequest();
+        createVnfRequest.setVnfdId(VNFD_ID);
+        createVnfRequest.setVnfInstanceName(VNF_INSTANCE_NAME);
+        createVnfRequest.setVnfInstanceDescription(VNF_INSTANCE_DESCRIPTION);
+        return createVnfRequest;
+    }
+
+    private VnfInstance prepareVnfInstance() {
+        VnfInstance vnfInstance = new VnfInstance();
+        vnfInstance.setId(VNF_INSTANCE_ID);
+        return vnfInstance;
+    }
+
+    private void verifyAdditionalPropertyInlineResponse201(InlineResponse201 result) {
+        InlineResponse201LinksSelf expectedVnfInstancesLinksSelf = new InlineResponse201LinksSelf();
+        expectedVnfInstancesLinksSelf
+                .setHref(APPLICATION_CONFIG_BASE_URL + "/vnflcm/v1/vnf_instances/" + VNF_INSTANCE_ID);
+        assertThat(result.getLinks().getSelf()).isEqualTo(expectedVnfInstancesLinksSelf);
+
+        InlineResponse201LinksSelf expectedVnfInstancesLinksSelfInstantiate = new InlineResponse201LinksSelf();
+        expectedVnfInstancesLinksSelfInstantiate.setHref(
+                (APPLICATION_CONFIG_BASE_URL + "/vnflcm/v1/vnf_instances/" + VNF_INSTANCE_ID + "/instantiate"));
+        assertThat(result.getLinks().getInstantiate()).isEqualTo(expectedVnfInstancesLinksSelfInstantiate);
+    }
+
+}
