diff --git a/src/main/java/org/onap/clamp/loop/LoopOperation.java b/src/main/java/org/onap/clamp/loop/LoopOperation.java
index 518830a..172b77c 100644
--- a/src/main/java/org/onap/clamp/loop/LoopOperation.java
+++ b/src/main/java/org/onap/clamp/loop/LoopOperation.java
@@ -30,6 +30,7 @@
 import java.io.IOException;
 import java.util.Iterator;
 import java.util.Set;
+import java.util.UUID;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
@@ -52,8 +53,7 @@
     private static final String DCAE_STATUS_FIELD = "status";
     private static final String DCAE_SERVICETYPE_ID = "serviceTypeId";
     private static final String DCAE_INPUTS = "inputs";
-    private static final String DCAE_DEPLOYMENT_PREFIX = "closedLoop_";
-    private static final String DCAE_DEPLOYMENT_SUFIX = "_deploymentId";
+    private static final String DCAE_DEPLOYMENT_PREFIX = "CLAMP_";
     private static final String DEPLOYMENT_PARA = "dcaeDeployParameters";
     private final LoopService loopService;
 
@@ -63,8 +63,11 @@
 
     /**
      * The constructor.
-     * @param loopService The loop service
-     * @param refProp The clamp properties
+     *
+     * @param loopService
+     *        The loop service
+     * @param refProp
+     *        The clamp properties
      */
     @Autowired
     public LoopOperation(LoopService loopService) {
@@ -74,9 +77,11 @@
     /**
      * Get the payload used to send the deploy closed loop request.
      *
-     * @param loop The loop
+     * @param loop
+     *        The loop
      * @return The payload used to send deploy closed loop request
-     * @throws IOException IOException
+     * @throws IOException
+     *         IOException
      */
     public String getDeployPayload(Loop loop) throws IOException {
         JsonObject globalProp = loop.getGlobalPropertiesJson();
@@ -98,9 +103,11 @@
     /**
      * Get the deployment id.
      *
-     * @param loop The loop
+     * @param loop
+     *        The loop
      * @return The deployment id
-     * @throws IOException IOException
+     * @throws IOException
+     *         IOException
      */
     public String getDeploymentId(Loop loop) {
         // Set the deploymentId if not present yet
@@ -109,7 +116,7 @@
         if (loop.getDcaeDeploymentId() != null && !loop.getDcaeDeploymentId().isEmpty()) {
             deploymentId = loop.getDcaeDeploymentId();
         } else {
-            deploymentId = DCAE_DEPLOYMENT_PREFIX + loop.getName() + DCAE_DEPLOYMENT_SUFIX;
+            deploymentId = DCAE_DEPLOYMENT_PREFIX + UUID.randomUUID();
         }
         return deploymentId;
     }
@@ -117,10 +124,14 @@
     /**
      * Update the loop info.
      *
-     * @param camelExchange The camel exchange
-     * @param loop The loop
-     * @param deploymentId The deployment id
-     * @throws ParseException The parse exception
+     * @param camelExchange
+     *        The camel exchange
+     * @param loop
+     *        The loop
+     * @param deploymentId
+     *        The deployment id
+     * @throws ParseException
+     *         The parse exception
      */
     public void updateLoopInfo(Exchange camelExchange, Loop loop, String deploymentId) throws ParseException {
         Message in = camelExchange.getIn();
@@ -133,8 +144,9 @@
         JSONObject linksObj = (JSONObject) jsonObj.get(DCAE_LINK_FIELD);
         String statusUrl = (String) linksObj.get(DCAE_STATUS_FIELD);
 
-        // use http4 instead of http, because camel http4 component is used to do the http call
-        String newStatusUrl = statusUrl.replaceAll("http:", "http4:");
+        // use http4 instead of http, because camel http4 component is used to do the
+        // http call
+        String newStatusUrl = statusUrl.replaceAll("http:", "http4:").replaceAll("https:", "https4:");
 
         loop.setDcaeDeploymentId(deploymentId);
         loop.setDcaeDeploymentStatusUrl(newStatusUrl);
@@ -144,9 +156,11 @@
     /**
      * Get the Closed Loop status based on the reply from Policy.
      *
-     * @param statusCode The status code
+     * @param statusCode
+     *        The status code
      * @return The state based on policy response
-     * @throws ParseException The parse exception
+     * @throws ParseException
+     *         The parse exception
      */
     public String analysePolicyResponse(int statusCode) {
         if (statusCode == 200) {
@@ -160,11 +174,12 @@
     /**
      * Get the name of the first Operational policy.
      *
-     * @param loop The closed loop
+     * @param loop
+     *        The closed loop
      * @return The name of the first operational policy
      */
     public String getOperationalPolicyName(Loop loop) {
-        Set<OperationalPolicy> opSet = (Set<OperationalPolicy>)loop.getOperationalPolicies();
+        Set<OperationalPolicy> opSet = loop.getOperationalPolicies();
         Iterator<OperationalPolicy> iterator = opSet.iterator();
         while (iterator.hasNext()) {
             OperationalPolicy policy = iterator.next();
@@ -176,9 +191,11 @@
     /**
      * Get the Closed Loop status based on the reply from DCAE.
      *
-     * @param camelExchange The camel exchange
+     * @param camelExchange
+     *        The camel exchange
      * @return The state based on DCAE response
-     * @throws ParseException The parse exception
+     * @throws ParseException
+     *         The parse exception
      */
     public String analyseDcaeResponse(Exchange camelExchange, Integer statusCode) throws ParseException {
         if (statusCode == null) {
@@ -212,12 +229,17 @@
     }
 
     /**
-     * Update the status of the closed loop based on the response from Policy and DCAE.
+     * Update the status of the closed loop based on the response from Policy and
+     * DCAE.
      *
-     * @param loop The closed loop
-     * @param policyState The state get from Policy
-     * @param dcaeState The state get from DCAE
-     * @throws ParseException The parse exception
+     * @param loop
+     *        The closed loop
+     * @param policyState
+     *        The state get from Policy
+     * @param dcaeState
+     *        The state get from DCAE
+     * @throws ParseException
+     *         The parse exception
      */
     public LoopState updateLoopStatus(Loop loop, TempLoopState policyState, TempLoopState dcaeState) {
         LoopState clState = LoopState.IN_ERROR;
diff --git a/src/main/resources/clds/camel/rest/clamp-api-v2.xml b/src/main/resources/clds/camel/rest/clamp-api-v2.xml
index 7e0c891..692e342 100644
--- a/src/main/resources/clds/camel/rest/clamp-api-v2.xml
+++ b/src/main/resources/clds/camel/rest/clamp-api-v2.xml
@@ -216,7 +216,7 @@
 							<simple> ${exchangeProperty[policyStatus]} == 'SUBMITTED' and
 								${exchangeProperty[dcaeStatus]} == 'NOT_DEPLOYED'
 							</simple>
-							<to uri="direct:deploy-closedloop" />
+							<to uri="direct:deploy-loop" />
 						</when>
 						<otherwise>
 							<log
@@ -268,7 +268,7 @@
 						<when>
 							<simple> ${exchangeProperty[dcaeStatus]} == 'DEPLOYED'
 							</simple>
-							<to uri="direct:undeploy-closedloop" />
+							<to uri="direct:undeploy-loop" />
 						</when>
 						<otherwise>
 							<log
diff --git a/src/main/resources/clds/camel/routes/flexible-flow.xml b/src/main/resources/clds/camel/routes/flexible-flow.xml
index 920e1e5..790a167 100644
--- a/src/main/resources/clds/camel/routes/flexible-flow.xml
+++ b/src/main/resources/clds/camel/routes/flexible-flow.xml
@@ -489,8 +489,8 @@
 			</doFinally>
 		</doTry>
 	</route>
-	<route id="deploy-closedloop">
-		<from uri="direct:deploy-closedloop" />
+	<route id="deploy-loop">
+		<from uri="direct:deploy-loop" />
 		<doTry>
 			<log
 				loggingLevel="INFO"
@@ -535,19 +535,19 @@
 				<to
 					uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
 				<setProperty propertyName="logMessage">
-					<simple>Deploy closed loop status</simple>
+					<simple>Deploy closed loop status (id:${exchangeProperty[deploymentId]})</simple>
 				</setProperty>
 				<to uri="direct:dump-loop-log-http-response" />
 			</doFinally>
 		</doTry>
 	</route>
 
-	<route id="undeploy-closedloop">
-		<from uri="direct:undeploy-closedloop" />
+	<route id="undeploy-loop">
+		<from uri="direct:undeploy-loop" />
 		<doTry>
 			<log
 				loggingLevel="INFO"
-				message="UNdeploy the closed loop: ${exchangeProperty[loopObject].getName()} : ${exchangeProperty[loopObject].getDcaeDeploymentId()}" />
+				message="Undeploy the closed loop: ${exchangeProperty[loopObject].getName()} : ${exchangeProperty[loopObject].getDcaeDeploymentId()}" />
 			<to
 				uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('DCAE', 'Undeploy closed loop')" />
 
diff --git a/src/test/java/org/onap/clamp/loop/LoopOperationTestItCase.java b/src/test/java/org/onap/clamp/loop/LoopOperationTestItCase.java
index 9327478..a2c97e0 100644
--- a/src/test/java/org/onap/clamp/loop/LoopOperationTestItCase.java
+++ b/src/test/java/org/onap/clamp/loop/LoopOperationTestItCase.java
@@ -55,15 +55,12 @@
     LoopService loopService;
 
     private Loop createTestLoop() {
-        String yaml = "imports:\n"
-            + "  - \"http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\"\n"
-            + "node_templates:\n"
-            + "  docker_service_host:\n"
-            + "    type: dcae.nodes.SelectedDockerHost";
+        String yaml = "imports:\n" + "  - \"http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\"\n"
+            + "node_templates:\n" + "  docker_service_host:\n" + "    type: dcae.nodes.SelectedDockerHost";
 
         Loop loopTest = new Loop("ControlLoopTest", yaml, "<xml></xml>");
-        loopTest.setGlobalPropertiesJson(new Gson().fromJson("{\"dcaeDeployParameters\":"
-                + "{\"policy_id\": \"name\"}}", JsonObject.class));
+        loopTest.setGlobalPropertiesJson(
+            new Gson().fromJson("{\"dcaeDeployParameters\":" + "{\"policy_id\": \"name\"}}", JsonObject.class));
         loopTest.setLastComputedState(LoopState.DESIGN);
         loopTest.setDcaeDeploymentId("123456789");
         loopTest.setDcaeDeploymentStatusUrl("http4://localhost:8085");
@@ -71,14 +68,13 @@
 
         MicroServicePolicy microServicePolicy = new MicroServicePolicy("configPolicyTest", "",
             "tosca_definitions_version: tosca_simple_yaml_1_0_0", true,
-             gson.fromJson("{\"configtype\":\"json\"}", JsonObject.class), new HashSet<>());
+            gson.fromJson("{\"configtype\":\"json\"}", JsonObject.class), new HashSet<>());
         microServicePolicy.setProperties(new Gson().fromJson("{\"param1\":\"value1\"}", JsonObject.class));
 
         loopTest.addMicroServicePolicy(microServicePolicy);
         return loopTest;
     }
 
-
     @Test
     public void testAnalysePolicyResponse() {
         LoopOperation loopOp = new LoopOperation(loopService);
@@ -102,7 +98,7 @@
         assertThat(opName1).isNull();
 
         OperationalPolicy opPolicy1 = new OperationalPolicy("OperationalPolicyTest1", null,
-                gson.fromJson("{\"type\":\"Operational\"}", JsonObject.class));
+            gson.fromJson("{\"type\":\"Operational\"}", JsonObject.class));
         loop.addOperationalPolicy(opPolicy1);
         String opName2 = loopOp.getOperationalPolicyName(loop);
         assertThat(opName2).isEqualTo("OperationalPolicyTest1");
@@ -212,7 +208,7 @@
         loopOp.updateLoopInfo(camelExchange, loop, "testNewId");
 
         Loop newLoop = loopService.getLoop(loop.getName());
-        String newDeployId =  newLoop.getDcaeDeploymentId();
+        String newDeployId = newLoop.getDcaeDeploymentId();
         String newDeploymentStatusUrl = newLoop.getDcaeDeploymentStatusUrl();
 
         assertThat(newDeployId).isEqualTo("testNewId");
@@ -228,11 +224,12 @@
 
         loop.setDcaeDeploymentId(null);
         String deploymentId2 = loopOp.getDeploymentId(loop);
-        assertThat(deploymentId2).isEqualTo("closedLoop_ControlLoopTest_deploymentId");
+        assertThat(deploymentId2).startsWith("CLAMP_");
 
         loop.setDcaeDeploymentId("");
         String deploymentId3 = loopOp.getDeploymentId(loop);
-        assertThat(deploymentId3).isEqualTo("closedLoop_ControlLoopTest_deploymentId");
+        assertThat(deploymentId3).startsWith("CLAMP_");
+        assertThat(deploymentId3).isNotEqualTo(deploymentId2);
     }
 
     @Test
