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-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..7500097 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;
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..b99eaa9 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
@@ -40,10 +40,16 @@
     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) {
         AuditInventory auditInventory = externalTask.getVariable("auditInventory");
@@ -51,17 +57,21 @@
         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);
         }
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..c8ac9d1
--- /dev/null
+++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditQueryStackService.java
@@ -0,0 +1,68 @@
+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.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) {
+        AuditInventory auditInventory = externalTask.getVariable("auditInventory");
+        setupMDC(externalTask);
+        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());
+            } 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);
+                } 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/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/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/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-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/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/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/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 ba2d021..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.
@@ -38,4 +38,7 @@
             @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 c0ce59d..7a24d14 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,7 @@
     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";
 
@@ -119,6 +122,8 @@
     private static final String findBySoRequestIdOrderByGroupingIdDesc =
             "/requestProcessingData/search/findBySoRequestIdOrderByGroupingIdDesc";
 
+    private static final String findByGroupingIdAndNameAndTag =
+            "/requestProcessingData/search/findByGroupingIdAndNameAndTag";
 
     @Autowired
     protected RestTemplate restTemplate;
@@ -368,6 +373,20 @@
                         .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)
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"));
     }
+
 }
