diff --git a/src/main/java/org/onap/clamp/clds/sdc/controller/SdcSingleController.java b/src/main/java/org/onap/clamp/clds/sdc/controller/SdcSingleController.java
index a629604..21deb64 100644
--- a/src/main/java/org/onap/clamp/clds/sdc/controller/SdcSingleController.java
+++ b/src/main/java/org/onap/clamp/clds/sdc/controller/SdcSingleController.java
@@ -200,10 +200,10 @@
     public void treatNotification(INotificationData iNotif) {
         CsarHandler csar = null;
         try {
-            // wait for a random time, so that 2 running Clamp will not treat the same Notification at the same time 
-            int i = ThreadLocalRandom.current().nextInt(1, 5);
-            Thread.sleep(i * 1000);
-
+            // wait for a random time, so that 2 running Clamp will not treat
+            // the same Notification at the same time
+            long i = ThreadLocalRandom.current().nextInt(1, 5);
+            Thread.sleep(i * 1000L);
             logger.info("Notification received for service UUID:" + iNotif.getServiceUUID());
             this.changeControllerStatus(SdcSingleControllerStatus.BUSY);
             csar = new CsarHandler(iNotif, this.sdcConfig.getSdcControllerName(),
@@ -247,6 +247,7 @@
                     e.getMessage(), System.currentTimeMillis());
         } catch (InterruptedException e) {
             logger.error("Interrupt exception caught during the notification processing", e);
+            Thread.currentThread().interrupt();
         } catch (RuntimeException e) {
             logger.error("Unexpected exception caught during the notification processing", e);
         } finally {
diff --git a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintArtifact.java b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintArtifact.java
index 5a29264..71d5ae3 100644
--- a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintArtifact.java
+++ b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintArtifact.java
@@ -20,20 +20,21 @@
  * ===================================================================
  * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  */
-
 /**
  * This class is useful to store the information concerning
  * blueprint artifact extracted from SDC CSAR
  */
+
 package org.onap.clamp.clds.sdc.controller.installer;
 
+import org.onap.sdc.api.notification.IResourceInstance;
+
 public class BlueprintArtifact {
 
     private String dcaeBlueprint;
     private String blueprintArtifactName;
-    private String blueprintInvariantResourceUuid;
     private String blueprintInvariantServiceUuid;
-    private String blueprintResourceInstanceName;
+    private IResourceInstance resourceAttached;
 
     public String getDcaeBlueprint() {
         return dcaeBlueprint;
@@ -51,14 +52,6 @@
         this.blueprintArtifactName = blueprintArtifactName;
     }
 
-    public String getBlueprintInvariantResourceUuid() {
-        return blueprintInvariantResourceUuid;
-    }
-
-    public void setBlueprintInvariantResourceUuid(String blueprintInvariantResourceUuid) {
-        this.blueprintInvariantResourceUuid = blueprintInvariantResourceUuid;
-    }
-
     public String getBlueprintInvariantServiceUuid() {
         return blueprintInvariantServiceUuid;
     }
@@ -67,11 +60,11 @@
         this.blueprintInvariantServiceUuid = blueprintInvariantServiceUuid;
     }
 
-    public String getBlueprintResourceInstanceName() {
-        return blueprintResourceInstanceName;
+    public IResourceInstance getResourceAttached() {
+        return resourceAttached;
     }
 
-    public void setBlueprintResourceInstanceName(String blueprintResourceInstanceName) {
-        this.blueprintResourceInstanceName = blueprintResourceInstanceName;
+    public void setResourceAttached(IResourceInstance resourceAttached) {
+        this.resourceAttached = resourceAttached;
     }
 }
diff --git a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarHandler.java b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarHandler.java
index aacef0a..c2652bc 100644
--- a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarHandler.java
+++ b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarHandler.java
@@ -135,15 +135,15 @@
                     try (InputStream stream = zipFile.getInputStream(entry)) {
                         blueprintArtifact.setDcaeBlueprint(IOUtils.toString(stream));
                     }
-                    IResourceInstance resource = searchForResourceByInstanceName(entry.getName().substring(
+                    blueprintArtifact.setResourceAttached(searchForResourceByInstanceName(entry.getName().substring(
                             entry.getName().indexOf(RESOURCE_INSTANCE_NAME_PREFIX)
                                     + RESOURCE_INSTANCE_NAME_PREFIX.length(),
-                            entry.getName().indexOf(RESOURCE_INSTANCE_NAME_SUFFIX)));
-                    blueprintArtifact.setBlueprintInvariantResourceUuid(resource.getResourceInvariantUUID());
-                    blueprintArtifact.setBlueprintResourceInstanceName(resource.getResourceInstanceName());
+                            entry.getName().indexOf(RESOURCE_INSTANCE_NAME_SUFFIX))));
+                    this.mapOfBlueprints.put(blueprintArtifact.getResourceAttached().getResourceInstanceName(),
+                            blueprintArtifact);
                     logger.info("Found a blueprint entry in the CSAR " + blueprintArtifact.getBlueprintArtifactName()
-                            + " for resource instance Name " + resource.getResourceInstanceName());
-                    this.mapOfBlueprints.put(blueprintArtifact.getBlueprintResourceInstanceName(), blueprintArtifact);
+                            + " for resource instance Name "
+                            + blueprintArtifact.getResourceAttached().getResourceInstanceName());
                 }
             }
             logger.info(this.mapOfBlueprints.size() + " blueprint(s) will be converted to closed loop");
diff --git a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarInstallerImpl.java b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarInstallerImpl.java
index ded75dd..5a00a82 100644
--- a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarInstallerImpl.java
+++ b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarInstallerImpl.java
@@ -173,7 +173,7 @@
             throws IOException, ParseException, InterruptedException {
         return dcaeInventoryService.getDcaeInformation(blueprintArtifact.getBlueprintArtifactName(),
                 blueprintArtifact.getBlueprintInvariantServiceUuid(),
-                blueprintArtifact.getBlueprintInvariantResourceUuid()).getTypeId();
+                blueprintArtifact.getResourceAttached().getResourceInvariantUUID()).getTypeId();
     }
 
     private CldsTemplate createFakeCldsTemplate(CsarHandler csar, BlueprintArtifact blueprintArtifact,
@@ -209,7 +209,7 @@
         cldsModel.setTemplateId(cldsTemplate.getId());
         cldsModel.setPropText("{\"global\":[{\"name\":\"service\",\"value\":[\""
                 + blueprintArtifact.getBlueprintInvariantServiceUuid() + "\"]},{\"name\":\"vf\",\"value\":[\""
-                + blueprintArtifact.getBlueprintInvariantResourceUuid()
+                + blueprintArtifact.getResourceAttached().getResourceInvariantUUID()
                 + "\"]},{\"name\":\"actionSet\",\"value\":[\"vnfRecipe\"]},{\"name\":\"location\",\"value\":[\"DC1\"]},{\"name\":\"deployParameters\",\"value\":{\n"
                 + "        \"policy_id\": \"" + "test" + "\"" + "      }}]}");
         cldsModel.setBpmnText(cldsTemplate.getBpmnText());
diff --git a/src/test/java/org/onap/clamp/clds/it/sdc/controller/installer/CsarInstallerItCase.java b/src/test/java/org/onap/clamp/clds/it/sdc/controller/installer/CsarInstallerItCase.java
index b741f7c..9009d37 100644
--- a/src/test/java/org/onap/clamp/clds/it/sdc/controller/installer/CsarInstallerItCase.java
+++ b/src/test/java/org/onap/clamp/clds/it/sdc/controller/installer/CsarInstallerItCase.java
@@ -67,6 +67,7 @@
     private static final String CSAR_ARTIFACT_NAME = "testArtifact.csar";
     private static final String INVARIANT_SERVICE_UUID = "4cc5b45a-1f63-4194-8100-cd8e14248c92";
     private static final String INVARIANT_RESOURCE1_UUID = "07e266fc-49ab-4cd7-8378-ca4676f1b9ec";
+    private static final String INSTANCE_NAME_RESOURCE1 = "ResourceInstanceName";
     @Autowired
     private CsarInstaller csarInstaller;
     @Autowired
@@ -77,6 +78,7 @@
             throws SdcArtifactInstallerException, SdcToscaParserException, CsarHandlerException, IOException {
         CsarHandler csarHandler = Mockito.mock(CsarHandler.class);
         BlueprintArtifact blueprintArtifact = Mockito.mock(BlueprintArtifact.class);
+        Mockito.when(blueprintArtifact.getResourceAttached()).thenReturn(Mockito.mock(IResourceInstance.class));
         Map<String, BlueprintArtifact> blueprintMap = new HashMap<>();
         blueprintMap.put("resourceid", blueprintArtifact);
         Mockito.when(csarHandler.getMapOfBlueprints()).thenReturn(blueprintMap);
@@ -93,8 +95,9 @@
         // Create fake resource in notification
         List<IResourceInstance> listResources = new ArrayList<>();
         IResourceInstance resource = Mockito.mock(IResourceInstance.class);
-        Mockito.when(resource.getResourceInstanceName()).thenReturn("mm-e 0");
-        Mockito.when(resource.getResourceInvariantUUID()).thenReturn("mme0-invariantUuid");
+        Mockito.when(resource.getResourceInstanceName()).thenReturn(INSTANCE_NAME_RESOURCE1);
+        Mockito.when(resource.getResourceInvariantUUID()).thenReturn(INVARIANT_RESOURCE1_UUID);
+        listResources.add(resource);
         Mockito.when(notificationData.getResources()).thenReturn(listResources);
         // Create fake blueprint artifact
         BlueprintArtifact blueprintArtifact = Mockito.mock(BlueprintArtifact.class);
@@ -102,7 +105,7 @@
                 .thenReturn(ResourceFileUtil.getResourceAsString("example/sdc/blueprint-dcae/tca.yaml"));
         Mockito.when(blueprintArtifact.getBlueprintArtifactName()).thenReturn(CSAR_ARTIFACT_NAME);
         Mockito.when(blueprintArtifact.getBlueprintInvariantServiceUuid()).thenReturn(INVARIANT_SERVICE_UUID);
-        Mockito.when(blueprintArtifact.getBlueprintInvariantResourceUuid()).thenReturn(INVARIANT_RESOURCE1_UUID);
+        Mockito.when(blueprintArtifact.getResourceAttached()).thenReturn(resource);
         Map<String, BlueprintArtifact> blueprintMap = new HashMap<>();
         blueprintMap.put("resourceid", blueprintArtifact);
         // Build fake csarhandler
diff --git a/src/test/java/org/onap/clamp/clds/sdc/controller/installer/CsarHandlerTest.java b/src/test/java/org/onap/clamp/clds/sdc/controller/installer/CsarHandlerTest.java
index b02e8ba..397a6a6 100644
--- a/src/test/java/org/onap/clamp/clds/sdc/controller/installer/CsarHandlerTest.java
+++ b/src/test/java/org/onap/clamp/clds/sdc/controller/installer/CsarHandlerTest.java
@@ -132,8 +132,8 @@
         // Test additional properties from Sdc notif
         assertEquals(BLUEPRINT1_NAME,
                 csar.getMapOfBlueprints().get(RESOURCE1_INSTANCE_NAME).getBlueprintArtifactName());
-        assertEquals(RESOURCE1_UUID,
-                csar.getMapOfBlueprints().get(RESOURCE1_INSTANCE_NAME).getBlueprintInvariantResourceUuid());
+        assertEquals(RESOURCE1_UUID, csar.getMapOfBlueprints().get(RESOURCE1_INSTANCE_NAME).getResourceAttached()
+                .getResourceInvariantUUID());
         assertEquals(SERVICE_UUID,
                 csar.getMapOfBlueprints().get(RESOURCE1_INSTANCE_NAME).getBlueprintInvariantServiceUuid());
         // Do some cleanup
@@ -158,8 +158,8 @@
         // Test additional properties from Sdc notif
         assertEquals(BLUEPRINT1_NAME,
                 csar.getMapOfBlueprints().get(RESOURCE1_INSTANCE_NAME).getBlueprintArtifactName());
-        assertEquals(RESOURCE1_UUID,
-                csar.getMapOfBlueprints().get(RESOURCE1_INSTANCE_NAME).getBlueprintInvariantResourceUuid());
+        assertEquals(RESOURCE1_UUID, csar.getMapOfBlueprints().get(RESOURCE1_INSTANCE_NAME).getResourceAttached()
+                .getResourceInvariantUUID());
         assertEquals(SERVICE_UUID,
                 csar.getMapOfBlueprints().get(RESOURCE1_INSTANCE_NAME).getBlueprintInvariantServiceUuid());
         Path path = Paths.get(SDC_FOLDER + "/test-controller/" + CSAR_ARTIFACT_NAME);
