diff --git a/src/main/java/org/onap/clamp/clds/client/HolmesPolicyDelegate.java b/src/main/java/org/onap/clamp/clds/client/HolmesPolicyDelegate.java
index c42a22c..5e0d470 100644
--- a/src/main/java/org/onap/clamp/clds/client/HolmesPolicyDelegate.java
+++ b/src/main/java/org/onap/clamp/clds/client/HolmesPolicyDelegate.java
@@ -61,7 +61,7 @@
         ModelProperties prop = ModelProperties.create(execution);
         Holmes holmes = prop.getType(Holmes.class);
         if (holmes.isFound()) {
-            String responseMessage = policyClient.sendBasePolicyInOther(holmes.getCorrelationLogic(), prop,
+            String responseMessage = policyClient.sendBasePolicyInOther(formatHolmesConfigBody(prop, holmes), holmes.getConfigPolicyName(), prop,
                     holmesPolicyRequestUuid);
             if (responseMessage != null) {
                 execution.setVariable("holmesPolicyResponseMessage", responseMessage.getBytes());
@@ -69,4 +69,7 @@
         }
     }
 
+    public static String formatHolmesConfigBody (ModelProperties prop, Holmes holmes) {
+        return prop.getControlName() + "$$$" + holmes.getCorrelationLogic();
+    }
 }
diff --git a/src/main/java/org/onap/clamp/clds/client/PolicyClient.java b/src/main/java/org/onap/clamp/clds/client/PolicyClient.java
index 7aa1330..d4f9014 100644
--- a/src/main/java/org/onap/clamp/clds/client/PolicyClient.java
+++ b/src/main/java/org/onap/clamp/clds/client/PolicyClient.java
@@ -162,16 +162,18 @@
 
     /**
      * Perform send of base policy in OTHER type.
-     * 
+     *
      * @param configBody
      *            The config policy string body
+     * @param configPolicyName
+     *            The config policy name of the component that has been pre-deployed in DCAE
      * @param prop
      *            The ModelProperties
      * @param policyRequestUuid
      *            The policy request UUID
      * @return The answer from policy call
      */
-    public String sendBasePolicyInOther(String configBody, ModelProperties prop, String policyRequestUuid) {
+    public String sendBasePolicyInOther(String configBody, String configPolicyName, ModelProperties prop, String policyRequestUuid) {
 
         PolicyParameters policyParameters = new PolicyParameters();
 
@@ -183,6 +185,7 @@
         policyParameters.setConfigBody(configBody);
         policyParameters.setConfigBodyType(PolicyType.OTHER);
         policyParameters.setConfigName("HolmesPolicy");
+        policyParameters.setPolicyName(configPolicyName);
 
         policyParameters.setRequestID(UUID.fromString(policyRequestUuid));
 
diff --git a/src/main/java/org/onap/clamp/clds/client/SdcSendReqDelegate.java b/src/main/java/org/onap/clamp/clds/client/SdcSendReqDelegate.java
index 0ffde93..2d327f5 100644
--- a/src/main/java/org/onap/clamp/clds/client/SdcSendReqDelegate.java
+++ b/src/main/java/org/onap/clamp/clds/client/SdcSendReqDelegate.java
@@ -70,21 +70,24 @@
         getSdcAttributes((String) execution.getVariable("controlName"));
         ModelProperties prop = ModelProperties.create(execution);
         String bluprintPayload = SdcReq.formatBlueprint(refProp, prop, docText);
-        String formattedSdcReq = SdcReq.formatSdcReq(bluprintPayload, artifactName, artifactLabel, artifactType);
-        if (formattedSdcReq != null) {
-            execution.setVariable("formattedArtifactReq", formattedSdcReq.getBytes());
-        }
-        List<String> sdcReqUrlsList = SdcReq.getSdcReqUrlsList(prop, baseUrl, sdcCatalogServices, execution);
+        // no need to upload blueprint for Holmes, thus blueprintPayload for Holmes is empty
+        if (!bluprintPayload.isEmpty()) {
+            String formattedSdcReq = SdcReq.formatSdcReq(bluprintPayload, artifactName, artifactLabel, artifactType);
+            if (formattedSdcReq != null) {
+                execution.setVariable("formattedArtifactReq", formattedSdcReq.getBytes());
+            }
+            List<String> sdcReqUrlsList = SdcReq.getSdcReqUrlsList(prop, baseUrl, sdcCatalogServices, execution);
 
-        String sdcLocationsPayload = SdcReq.formatSdcLocationsReq(prop, artifactName);
-        String locationArtifactName = (String) execution.getVariable("controlName") + "-location.json";
-        String formattedSdcLocationReq = SdcReq.formatSdcReq(sdcLocationsPayload, locationArtifactName,
+            String sdcLocationsPayload = SdcReq.formatSdcLocationsReq(prop, artifactName);
+            String locationArtifactName = (String) execution.getVariable("controlName") + "-location.json";
+            String formattedSdcLocationReq = SdcReq.formatSdcReq(sdcLocationsPayload, locationArtifactName,
                 locationArtifactLabel, locationArtifactType);
-        if (formattedSdcLocationReq != null) {
-            execution.setVariable("formattedLocationReq", formattedSdcLocationReq.getBytes());
-        }
-        sdcCatalogServices.uploadToSdc(prop, userid, sdcReqUrlsList, formattedSdcReq, formattedSdcLocationReq,
+            if (formattedSdcLocationReq != null) {
+                execution.setVariable("formattedLocationReq", formattedSdcLocationReq.getBytes());
+            }
+            sdcCatalogServices.uploadToSdc(prop, userid, sdcReqUrlsList, formattedSdcReq, formattedSdcLocationReq,
                 artifactName, locationArtifactName);
+        }
     }
 
     /**
diff --git a/src/main/java/org/onap/clamp/clds/client/req/SdcReq.java b/src/main/java/org/onap/clamp/clds/client/req/SdcReq.java
index 32846ed..9c3f261 100644
--- a/src/main/java/org/onap/clamp/clds/client/req/SdcReq.java
+++ b/src/main/java/org/onap/clamp/clds/client/req/SdcReq.java
@@ -88,8 +88,8 @@
         String updatedBlueprint = "";
         Tca tca = prop.getType(Tca.class);
         if (tca.isFound()) {
-		updatedBlueprint = TcaRequestFormatter.updatedBlueprintWithConfiguration(refProp, prop, yamlvalue);
-        } 
+            updatedBlueprint = TcaRequestFormatter.updatedBlueprintWithConfiguration(refProp, prop, yamlvalue);
+        }
         logger.info("value of blueprint:" + updatedBlueprint);
         return updatedBlueprint;
     }
diff --git a/src/main/java/org/onap/clamp/clds/model/prop/Holmes.java b/src/main/java/org/onap/clamp/clds/model/prop/Holmes.java
index 4fa0407..bd47e8d 100644
--- a/src/main/java/org/onap/clamp/clds/model/prop/Holmes.java
+++ b/src/main/java/org/onap/clamp/clds/model/prop/Holmes.java
@@ -29,7 +29,7 @@
  * Parse Holmes bpmn parameters json properties.
  * <p>
  * Example json:
- * [{"name":"correlationalLogic","value":"vcwx"},{"name":"operationalPolicy","value":"cccc"}]
+ * [{"name":"correlationalLogic","value":"vcwx"},{"name":"configPolicyName","value":"cccc"}]
  *
  */
 public class Holmes extends AbstractModelElement {
@@ -38,11 +38,11 @@
 
     private String              correlationLogic;
 
-    private String              operationalPolicy;
+    private String              configPolicyName;
 
     /**
      * Default constructor for Holmes Element
-     * 
+     *
      * @param modelProp
      *            The ModelProperties containing the all the info, like bpmn,
      *            bpmn params, etc ...
@@ -53,7 +53,7 @@
         super(TYPE_HOLMES, modelProp, modelBpmn, modelJson);
 
         correlationLogic = this.getValueByName("correlationalLogic");
-        operationalPolicy = this.getValueByName("operationalPolicy");
+        configPolicyName = this.getValueByName("configPolicyName");
     }
 
     public static final String getType() {
@@ -64,8 +64,8 @@
         return correlationLogic;
     }
 
-    public String getOperationalPolicy() {
-        return operationalPolicy;
+    public String getConfigPolicyName() {
+        return configPolicyName;
     }
 
 }
diff --git a/src/main/resources/META-INF/resources/designer/partials/portfolios/holmes_properties.html b/src/main/resources/META-INF/resources/designer/partials/portfolios/holmes_properties.html
index 3c7607b..71ca631 100644
--- a/src/main/resources/META-INF/resources/designer/partials/portfolios/holmes_properties.html
+++ b/src/main/resources/META-INF/resources/designer/partials/portfolios/holmes_properties.html
@@ -43,12 +43,10 @@
           <textarea class="form-control" focus="true" name="correlationalLogic"  id="correlationalLogic" />
         </div>
         <div>
-          <label for="operationalPolicy" class="col-sm-4 control-label">Operational policy</label>
+          <label for="configPolicyName" class="col-sm-4 control-label">Configuration Policy Name</label>
         </div>
-    <div class="col-sm-8">
-    <select class="form-control" id="operationalPolicy" name="operationalPolicy" autofocus="autofocus" required ng-trim="true" enableFilter="true">
-		  <option ng-repeat="x in operationalPolicies" value="{{x}}">{{x}}</option>
-		</select>
+        <div class="col-sm-8">
+          <textarea class="form-control" focus="true" name="configPolicyName"  id="configPolicyName" />
         </div>
       </div>
     </form>
diff --git a/src/test/java/org/onap/clamp/clds/it/HolmesPolicyDelegateItCase.java b/src/test/java/org/onap/clamp/clds/it/HolmesPolicyDelegateItCase.java
new file mode 100644
index 0000000..b45c297
--- /dev/null
+++ b/src/test/java/org/onap/clamp/clds/it/HolmesPolicyDelegateItCase.java
@@ -0,0 +1,63 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights
+ *                             reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END============================================
+ * ===================================================================
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+
+package org.onap.clamp.clds.it;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertNotNull;
+
+import java.io.IOException;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.onap.clamp.clds.AbstractItCase;
+import org.onap.clamp.clds.client.HolmesPolicyDelegate;
+import org.onap.clamp.clds.model.prop.Holmes;
+import org.onap.clamp.clds.model.prop.ModelProperties;
+import org.onap.clamp.clds.util.ResourceFileUtil;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.TestPropertySource;
+import org.springframework.test.context.junit4.SpringRunner;
+
+/**
+ * Test Onap HolmesPolicyDelegate features.
+ */
+@RunWith(SpringRunner.class)
+@SpringBootTest
+@TestPropertySource(locations = "classpath:application-no-camunda.properties")
+public class HolmesPolicyDelegateItCase extends AbstractItCase {
+
+    @Test
+    public void testCreatePolicyJson() throws IOException {
+        String modelBpmnProp = ResourceFileUtil
+                .getResourceAsString("example/model-properties/holmes/modelBpmnProperties.json");
+        String modelBpmn = ResourceFileUtil.getResourceAsString("example/model-properties/holmes/modelBpmn.json");
+
+        ModelProperties prop = new ModelProperties("example-model-name", "ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf", null, true, modelBpmn,
+                modelBpmnProp);
+
+        Holmes holmes =  prop.getType(Holmes.class);
+        String result = HolmesPolicyDelegate.formatHolmesConfigBody(prop, holmes);
+        assertTrue("ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf$$$blabla".equals(result));
+    }
+}
diff --git a/src/test/java/org/onap/clamp/clds/model/prop/ModelPropertiesTest.java b/src/test/java/org/onap/clamp/clds/model/prop/ModelPropertiesTest.java
index 45f39a4..9daa97c 100644
--- a/src/test/java/org/onap/clamp/clds/model/prop/ModelPropertiesTest.java
+++ b/src/test/java/org/onap/clamp/clds/model/prop/ModelPropertiesTest.java
@@ -113,7 +113,7 @@
         Holmes holmes = prop.getType(Holmes.class);
         assertNotNull(holmes);
         assertTrue(holmes.isFound());
-        assertEquals("policy1", holmes.getOperationalPolicy());
+        assertEquals("configPolicy1", holmes.getConfigPolicyName());
         assertEquals("blabla", holmes.getCorrelationLogic());
     }
 
diff --git a/src/test/resources/example/model-properties/holmes/modelBpmnProperties.json b/src/test/resources/example/model-properties/holmes/modelBpmnProperties.json
index 14b3a8c..cd76a12 100644
--- a/src/test/resources/example/model-properties/holmes/modelBpmnProperties.json
+++ b/src/test/resources/example/model-properties/holmes/modelBpmnProperties.json
@@ -5,8 +5,8 @@
       "value": "blabla"
     },
     {
-      "name": "operationalPolicy",
-      "value": "policy1"
+      "name": "configPolicyName",
+      "value": "configPolicy1"
     }
   ],
   "Policy_0honxgv": {
diff --git a/src/test/resources/example/model-properties/modelBpmnProp.json b/src/test/resources/example/model-properties/modelBpmnProp.json
index a521ba7..eacb124 100644
--- a/src/test/resources/example/model-properties/modelBpmnProp.json
+++ b/src/test/resources/example/model-properties/modelBpmnProp.json
@@ -101,7 +101,7 @@
       "value": "blabla"
     },
     {
-      "name": "operationalPolicy",
+      "name": "configPolicyName",
       "value": "policy1"
     }
   ]
