diff --git a/src/test/java/org/onap/clamp/clds/client/req/policy/OperationalPolicyAttributesConstructorTest.java b/src/test/java/org/onap/clamp/clds/client/req/policy/OperationalPolicyAttributesConstructorTest.java
new file mode 100644
index 0000000..c257ec3
--- /dev/null
+++ b/src/test/java/org/onap/clamp/clds/client/req/policy/OperationalPolicyAttributesConstructorTest.java
@@ -0,0 +1,164 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2018 Nokia 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============================================
+ * ===================================================================
+ *
+ */
+
+package org.onap.clamp.clds.client.req.policy;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.collect.ImmutableMap;
+import org.assertj.core.api.Assertions;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Matchers;
+import org.mockito.Mockito;
+import org.onap.clamp.clds.config.ClampProperties;
+import org.onap.clamp.clds.model.properties.ModelProperties;
+import org.onap.clamp.clds.model.properties.PolicyChain;
+import org.onap.clamp.clds.util.ResourceFileUtil;
+import org.onap.policy.api.AttributeType;
+import org.onap.policy.controlloop.policy.ControlLoopPolicy;
+import org.onap.policy.controlloop.policy.Policy;
+import org.onap.policy.controlloop.policy.Target;
+import org.onap.policy.controlloop.policy.TargetType;
+import org.onap.policy.controlloop.policy.builder.BuilderException;
+import org.yaml.snakeyaml.Yaml;
+
+import java.io.IOException;
+import java.net.URLDecoder;
+import java.util.Map;
+
+public class OperationalPolicyAttributesConstructorTest {
+
+    private static final String CONTROL_NAME = "ClosedLoop-d4629aee-970f-11e8-86c9-02552dda865e";
+    private ModelProperties modelProperties;
+    private PolicyChain policyChain;
+
+    private OperationalPolicyYamlFormatter operationalPolicyYamlFormatter = new OperationalPolicyYamlFormatter();
+    private OperationalPolicyAttributesConstructor operationalPolicyAttributesConstructor =
+            new OperationalPolicyAttributesConstructor(operationalPolicyYamlFormatter);
+
+    @Before
+    public void setUp() throws Exception {
+        String modelProp = ResourceFileUtil
+                .getResourceAsString("example/model-properties/policy/modelBpmnProperties.json");
+        modelProperties = new ModelProperties("CLAMPDemoVFW_v1_0_3af8daec-6f10-4027-a3540",
+                CONTROL_NAME, "PUT", false, "{}", modelProp);
+        policyChain = readPolicyChainFromResources();
+    }
+
+
+    @Test
+    public void shouldFormatRequestAttributes() throws IOException, BuilderException {
+        // given
+        ClampProperties mockClampProperties = createMockClampProperties(ImmutableMap.<String, String>builder()
+                .put("op.templateName", "ClosedLoopControlName")
+                .put("op.notificationTopic", "POLICY-CL-MGT")
+                .put("op.controller", "amsterdam")
+                .put("op.recipeTopic", "APPC")
+                .build());
+
+        //when
+        Map<AttributeType, Map<String, String>> requestAttributes
+                = operationalPolicyAttributesConstructor.formatAttributes(mockClampProperties, modelProperties,
+                "789875c1-e788-432f-9a76-eac8ed889734", policyChain);
+        //then
+        Assertions.assertThat(requestAttributes).containsKeys(AttributeType.MATCHING, AttributeType.RULE);
+        Assertions.assertThat(requestAttributes.get(AttributeType.MATCHING))
+                .contains(Assertions.entry(OperationalPolicyAttributesConstructor.CONTROLLER, "amsterdam"));
+
+        Map<String, String> ruleParameters = requestAttributes.get(AttributeType.RULE);
+        Assertions.assertThat(ruleParameters).containsExactly(
+                Assertions.entry(OperationalPolicyAttributesConstructor.MAX_RETRIES, "3"),
+                Assertions.entry(OperationalPolicyAttributesConstructor.TEMPLATE_NAME, "ClosedLoopControlName"),
+                Assertions.entry(OperationalPolicyAttributesConstructor.NOTIFICATION_TOPIC, "POLICY-CL-MGT"),
+                Assertions.entry(OperationalPolicyAttributesConstructor.RECIPE_TOPIC, "APPC"),
+                Assertions.entry(OperationalPolicyAttributesConstructor.RECIPE, "healthCheck"),
+                Assertions.entry(OperationalPolicyAttributesConstructor.RESOURCE_ID,
+                        "cdb69724-57d5-4a22-b96c-4c345150fd0e"),
+                Assertions.entry(OperationalPolicyAttributesConstructor.RETRY_TIME_LIMIT, "180"),
+                Assertions.entry(OperationalPolicyAttributesConstructor.CLOSED_LOOP_CONTROL_NAME, CONTROL_NAME + "_1")
+        );
+    }
+
+    @Test
+    public void shouldFormatRequestAttributesWithProperControlLoopYaml() throws IOException, BuilderException {
+        //given
+        ClampProperties mockClampProperties = createMockClampProperties(ImmutableMap.<String, String>builder()
+                .put("op.templateName", "ClosedLoopControlName")
+                .put("op.operationTopic", "APPP-CL")
+                .put("op.notificationTopic", "POLICY-CL-MGT")
+                .put("op.controller", "amsterdam")
+                .put("op.recipeTopic", "APPC")
+                .build());
+
+        Policy expectedPolicy = new Policy("6f76ad0b-ea9d-4a92-8d7d-6a6367ce2c77", "healthCheck Policy",
+                "healthCheck Policy - the trigger (no parent) policy - created by CLDS", "APPC",
+                null, new Target(TargetType.VM, "cdb69724-57d5-4a22-b96c-4c345150fd0e"),
+                "healthCheck", 3, 180);
+
+        //when
+        Map<AttributeType, Map<String, String>> requestAttributes = operationalPolicyAttributesConstructor
+                .formatAttributes(mockClampProperties, modelProperties,
+                        "789875c1-e788-432f-9a76-eac8ed889734", policyChain);
+
+        //then
+        Assertions.assertThat(requestAttributes)
+                .containsKeys(AttributeType.MATCHING, AttributeType.RULE);
+        Assertions.assertThat(requestAttributes
+                .get(AttributeType.MATCHING))
+                .contains(Assertions.entry("controller", "amsterdam"));
+
+        Map<String, String> ruleParameters = requestAttributes.get(AttributeType.RULE);
+        Assertions.assertThat(ruleParameters).contains(
+                Assertions.entry(OperationalPolicyAttributesConstructor.OPERATION_TOPIC, "APPP-CL"),
+                Assertions.entry(OperationalPolicyAttributesConstructor.TEMPLATE_NAME, "ClosedLoopControlName"),
+                Assertions.entry(OperationalPolicyAttributesConstructor.NOTIFICATION_TOPIC, "POLICY-CL-MGT"),
+                Assertions.entry(OperationalPolicyAttributesConstructor.CLOSED_LOOP_CONTROL_NAME, CONTROL_NAME + "_1")
+        );
+
+        String controlLoopYaml = URLDecoder.decode(
+                ruleParameters.get(OperationalPolicyAttributesConstructor.CONTROL_LOOP_YAML), "UTF-8");
+        ControlLoopPolicy controlLoopPolicy = new Yaml().load(controlLoopYaml);
+
+        Assertions.assertThat(controlLoopPolicy.getControlLoop().getControlLoopName()).isEqualTo(CONTROL_NAME);
+        Assertions.assertThat(controlLoopPolicy.getPolicies())
+                .usingElementComparatorIgnoringFields("id")
+                .containsExactly(expectedPolicy);
+    }
+
+
+    private ClampProperties createMockClampProperties(ImmutableMap<String, String> propertiesMap) {
+        ClampProperties props = Mockito.mock(ClampProperties.class);
+        propertiesMap.forEach((property, value) ->
+                Mockito.when(props.getStringValue(Matchers.matches(property), Matchers.any())).thenReturn(value)
+        );
+        return props;
+    }
+
+    private PolicyChain readPolicyChainFromResources() throws IOException {
+        String policyChainText = ResourceFileUtil
+                .getResourceAsString("example/operational-policy/json-policy-chain.json");
+        JsonNode policyChainNode = new ObjectMapper().readTree(policyChainText);
+        return new PolicyChain(policyChainNode);
+    }
+}
diff --git a/src/test/java/org/onap/clamp/clds/client/req/policy/OperationalPolicyReqTest.java b/src/test/java/org/onap/clamp/clds/client/req/policy/OperationalPolicyYamlFormatterTest.java
similarity index 64%
rename from src/test/java/org/onap/clamp/clds/client/req/policy/OperationalPolicyReqTest.java
rename to src/test/java/org/onap/clamp/clds/client/req/policy/OperationalPolicyYamlFormatterTest.java
index d5e3069..046d739 100644
--- a/src/test/java/org/onap/clamp/clds/client/req/policy/OperationalPolicyReqTest.java
+++ b/src/test/java/org/onap/clamp/clds/client/req/policy/OperationalPolicyYamlFormatterTest.java
@@ -17,53 +17,55 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  * ============LICENSE_END============================================
+ * Modifications copyright (c) 2018 Nokia
  * ===================================================================
- * 
+ *
  */
 
 package org.onap.clamp.clds.client.req.policy;
 
-import static org.assertj.core.api.Assertions.assertThat;
-
-import java.lang.reflect.InvocationTargetException;
 import java.util.Arrays;
 import java.util.List;
+
+import org.assertj.core.api.Assertions;
 import org.junit.Test;
 import org.onap.policy.controlloop.policy.PolicyResult;
 import org.onap.policy.sdc.Resource;
 import org.onap.policy.sdc.ResourceType;
 
-public class OperationalPolicyReqTest {
+public class OperationalPolicyYamlFormatterTest {
+
+    private OperationalPolicyYamlFormatter policyYamlFormatter = new OperationalPolicyYamlFormatter();
 
     @Test
     public void shouldConvertGivenStringsToResourceObjects()
-        throws NoSuchMethodException, SecurityException, IllegalAccessException,
-        IllegalArgumentException, InvocationTargetException {
+            throws SecurityException,
+            IllegalArgumentException {
 
         //given
         List<String> stringList = Arrays.asList("test1", "test2", "test3", "test4");
 
         //when
-        Resource[] resources = OperationalPolicyReq.convertToResource(stringList, ResourceType.VF);
+        Resource[] resources = policyYamlFormatter.convertToResources(stringList, ResourceType.VF);
 
         //then
-        assertThat(resources).extracting(Resource::getResourceName)
-            .containsExactly("test1", "test2", "test3", "test4");
+        Assertions.assertThat(resources).extracting(Resource::getResourceName)
+                .containsExactly("test1", "test2", "test3", "test4");
     }
 
     @Test
     public void shouldConvertGivenStringsToPolicyResults()
-        throws NoSuchMethodException, SecurityException, IllegalAccessException,
-        IllegalArgumentException, InvocationTargetException {
+            throws SecurityException,
+            IllegalArgumentException {
         //given
         List<String> stringList = Arrays.asList("FAILURE", "SUCCESS", "FAILURE_GUARD", "FAILURE_TIMEOUT");
 
         //when
-        PolicyResult[] policyResults = OperationalPolicyReq.convertToPolicyResult(stringList);
+        PolicyResult[] policyResults = policyYamlFormatter.convertToPolicyResults(stringList);
 
         //then
-        assertThat(policyResults)
-            .containsExactly(PolicyResult.FAILURE, PolicyResult.SUCCESS,
-                PolicyResult.FAILURE_GUARD, PolicyResult.FAILURE_TIMEOUT);
+        Assertions.assertThat(policyResults)
+                .containsExactly(PolicyResult.FAILURE, PolicyResult.SUCCESS,
+                        PolicyResult.FAILURE_GUARD, PolicyResult.FAILURE_TIMEOUT);
     }
-}
+}
\ No newline at end of file
diff --git a/src/test/java/org/onap/clamp/clds/it/OperationPolicyReqItCase.java b/src/test/java/org/onap/clamp/clds/it/OperationPolicyReqItCase.java
index 69dad53..ad58ea1 100644
--- a/src/test/java/org/onap/clamp/clds/it/OperationPolicyReqItCase.java
+++ b/src/test/java/org/onap/clamp/clds/it/OperationPolicyReqItCase.java
@@ -17,6 +17,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  * ============LICENSE_END============================================
+ * Modifications copyright (c) 2018 Nokia
  * ===================================================================
  * 
  */
@@ -35,7 +36,7 @@
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.onap.clamp.clds.client.req.policy.OperationalPolicyReq;
+import org.onap.clamp.clds.client.req.policy.OperationalPolicyAttributesConstructor;
 import org.onap.clamp.clds.config.ClampProperties;
 import org.onap.clamp.clds.model.CldsEvent;
 import org.onap.clamp.clds.model.properties.ModelProperties;
@@ -55,6 +56,9 @@
     @Autowired
     private ClampProperties refProp;
 
+    @Autowired
+    private OperationalPolicyAttributesConstructor operationalPolicyAttributesConstructor;
+
     @Test
     public void formatAttributesTest() throws IOException, BuilderException {
         String modelBpmnProp = ResourceFileUtil
@@ -65,7 +69,7 @@
         List<Map<AttributeType, Map<String, String>>> attributes = new ArrayList<>();
         if (modelProperties.getType(Policy.class).isFound()) {
             for (PolicyChain policyChain : modelProperties.getType(Policy.class).getPolicyChains()) {
-                attributes.add(OperationalPolicyReq.formatAttributes(refProp, modelProperties,
+                attributes.add(operationalPolicyAttributesConstructor.formatAttributes(refProp, modelProperties,
                         modelProperties.getType(Policy.class).getId(), policyChain));
             }
         }
diff --git a/src/test/java/org/onap/clamp/clds/it/PolicyClientItCase.java b/src/test/java/org/onap/clamp/clds/it/PolicyClientItCase.java
index c6fc09d..2400d4a 100644
--- a/src/test/java/org/onap/clamp/clds/it/PolicyClientItCase.java
+++ b/src/test/java/org/onap/clamp/clds/it/PolicyClientItCase.java
@@ -17,6 +17,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  * ============LICENSE_END============================================
+ * Modifications copyright (c) 2018 Nokia
  * ===================================================================
  * 
  */
@@ -35,7 +36,7 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.onap.clamp.clds.client.req.policy.OperationalPolicyReq;
+import org.onap.clamp.clds.client.req.policy.OperationalPolicyAttributesConstructor;
 import org.onap.clamp.clds.client.req.policy.PolicyClient;
 import org.onap.clamp.clds.client.req.tca.TcaRequestFormatter;
 import org.onap.clamp.clds.config.ClampProperties;
@@ -64,7 +65,10 @@
     @Autowired
     private ClampProperties refProp;
     @Autowired
-    protected PolicyClient policyClient;
+    private PolicyClient policyClient;
+    @Autowired
+    private OperationalPolicyAttributesConstructor operationalPolicyAttributesConstructor;
+
     String modelProp;
     String modelBpmnProp;
     String modelName;
@@ -87,8 +91,8 @@
         if (policy.isFound()) {
             for (PolicyChain policyChain : policy.getPolicyChains()) {
                 String operationalPolicyRequestUuid = UUID.randomUUID().toString();
-                Map<AttributeType, Map<String, String>> attributes = OperationalPolicyReq.formatAttributes(refProp,
-                        prop, policy.getId(), policyChain);
+                Map<AttributeType, Map<String, String>> attributes = operationalPolicyAttributesConstructor
+                        .formatAttributes(refProp, prop, policy.getId(), policyChain);
                 policyClient.sendBrmsPolicy(attributes, prop, operationalPolicyRequestUuid);
             }
         }
diff --git a/src/test/resources/example/operational-policy/json-policy-chain.json b/src/test/resources/example/operational-policy/json-policy-chain.json
new file mode 100644
index 0000000..037b4d6
--- /dev/null
+++ b/src/test/resources/example/operational-policy/json-policy-chain.json
@@ -0,0 +1,63 @@
+[
+  {
+    "name": "pname",
+    "value": "healthCheck Policy"
+  },
+  {
+    "name": "pid",
+    "value": "1"
+  },
+  {
+    "name": "timeout",
+    "value": "180"
+  },
+  {
+    "policyConfigurations": [
+      [
+        {
+          "name": "recipe",
+          "value": [
+            "healthCheck"
+          ]
+        },
+        {
+          "name": "maxRetries",
+          "value": [
+            "3"
+          ]
+        },
+        {
+          "name": "retryTimeLimit",
+          "value": [
+            "180"
+          ]
+        },
+        {
+          "name": "_id",
+          "value": [
+            "789875c1-e788-432f-9a76-eac8ed889734"
+          ]
+        },
+        {
+          "name": "parentPolicy",
+          "value": [
+            ""
+          ]
+        },
+        {
+          "name": "actor",
+          "value": [
+            "APPC"
+          ]
+        },
+        {
+          "name": "targetResourceId",
+          "value": [
+            "cdb69724-57d5-4a22-b96c-4c345150fd0e"
+          ]
+        }
+
+      ]
+    ]
+  }
+]
\ No newline at end of file
