Sanitized displayName; cache/force logic fixed.
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/ProjectVulnerability.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/ProjectVulnerability.java
index 8b6431c..153e29b 100644
--- a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/ProjectVulnerability.java
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/ProjectVulnerability.java
@@ -44,7 +44,7 @@
     @ProjectType(id = "org-netbeans-modules-gradle")
 })
 public final class ProjectVulnerability {
-    private final RequestProcessor AUDIT_PROCESSOR = new RequestProcessor(ProjectVulnerability.class);
+    private final RequestProcessor AUDIT_PROCESSOR = new RequestProcessor(ProjectVulnerability.class.getName(), 4);
     private final RequestProcessor CALL_PROCESSOR = new RequestProcessor(ProjectVulnerability.class);
     
     private final Project project;
diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/VulnerabilityWorker.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/VulnerabilityWorker.java
index 4516960..241cbb6 100644
--- a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/VulnerabilityWorker.java
+++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/VulnerabilityWorker.java
@@ -390,15 +390,12 @@
         List<ApplicationDependency> result = new ArrayList();
         convert(dr.getRoot(), new HashMap<>(), result);
         
-        CacheItem cacheItem;
+        CacheItem cacheItem = null;
         VulnerabilityReport savedAudit = null;
         
         if (!forceAudit) {
             try {
                 savedAudit = AuditCache.getInstance().loadAudit(knowledgeBaseId);
-                if (savedAudit != null) {
-                    cacheItem = new CacheItem(project, dr, savedAudit);
-                }
             } catch (IOException ex) {
                 LOG.log(Level.WARNING, "Could not load cached audit data", ex);
             }
@@ -421,6 +418,7 @@
                 if (!response.getVulnerabilityAuditCollection().getItems().isEmpty()) {
                     VulnerabilityAuditSummary summary = response.getVulnerabilityAuditCollection().getItems().get(0);
                     cacheItem = fetchVulnerabilityItems(project, admClient, dr, summary, projectDisplayName);
+                    savedAudit = new VulnerabilityReport(cacheItem.getAudit(), cacheItem.getVulnerabilities());
                 }
             } catch (BmcException ex) {
                 LOG.log(Level.FINE, "Unable to list newest audit for knowledgebase {0}, compartment {1}", new Object[] {
@@ -429,7 +427,7 @@
             }
         }
         
-        if (savedAudit == null) {
+        if (savedAudit == null && forceAudit) {
             try (ApplicationDependencyManagementClient admClient
                     = new ApplicationDependencyManagementClient(OCIManager.getDefault().getConfigProvider())) {
                 final VulnerabilityAuditConfiguration auditConfiguration = VulnerabilityAuditConfiguration
@@ -442,7 +440,7 @@
                         .builder()
                         .compartmentId(compartmentId)
                         .knowledgeBaseId(knowledgeBaseId)
-                        .displayName(projectDisplayName)
+                        .displayName(projectDisplayName.replaceAll("[^A-Za-z0-9-_]", "_")) // remove offending characters
                         .buildType(VulnerabilityAudit.BuildType.Maven)
                         .configuration(auditConfiguration)
                         .applicationDependencies(result)
@@ -464,7 +462,7 @@
             } finally {
                 progressHandle.finish();
             }
-        } else {
+        } else if (savedAudit != null) {
             cacheItem = new CacheItem(project, dr, savedAudit);
         }