diff --git a/src/main/java/org/onap/clamp/clds/client/TcaPolicyDelegate.java b/src/main/java/org/onap/clamp/clds/client/TcaPolicyDelegate.java
index 9debcc2..7de1268 100644
--- a/src/main/java/org/onap/clamp/clds/client/TcaPolicyDelegate.java
+++ b/src/main/java/org/onap/clamp/clds/client/TcaPolicyDelegate.java
@@ -23,19 +23,19 @@
 
 package org.onap.clamp.clds.client;
 
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
 import java.util.UUID;
 
 import org.camunda.bpm.engine.delegate.DelegateExecution;
 import org.camunda.bpm.engine.delegate.JavaDelegate;
-import org.onap.clamp.clds.client.req.TcaMPolicyReq;
+import org.onap.clamp.clds.client.req.TcaRequestFormatter;
 import org.onap.clamp.clds.model.prop.ModelProperties;
 import org.onap.clamp.clds.model.prop.Tca;
 import org.onap.clamp.clds.model.refprop.RefProp;
 import org.springframework.beans.factory.annotation.Autowired;
 
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-
 /**
  * Send Tca info to policy api.
  *
@@ -46,10 +46,10 @@
     protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger();
 
     @Autowired
-    private RefProp                 refProp;
+    private RefProp                   refProp;
 
     @Autowired
-    PolicyClient                    policyClient;
+    PolicyClient                      policyClient;
 
     /**
      * Perform activity. Send Tca info to policy api.
@@ -64,8 +64,8 @@
         ModelProperties prop = ModelProperties.create(execution);
         Tca tca = prop.getType(Tca.class);
         if (tca.isFound()) {
-            String policyJson = TcaMPolicyReq.formatTca(refProp, prop);
-            String responseMessage = policyClient.sendMicroServiceInJson(policyJson, prop, tcaPolicyRequestUuid);
+            String policyJson = TcaRequestFormatter.createPolicyJson(refProp, prop);
+            String responseMessage = policyClient.sendMicroServiceInOther(policyJson, prop, tcaPolicyRequestUuid);
             if (responseMessage != null) {
                 execution.setVariable("tcaPolicyResponseMessage", responseMessage.getBytes());
             }
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 c5e26f3..32846ed 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
@@ -26,7 +26,6 @@
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 import com.fasterxml.jackson.core.JsonParseException;
-import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JsonMappingException;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -89,25 +88,14 @@
         String updatedBlueprint = "";
         Tca tca = prop.getType(Tca.class);
         if (tca.isFound()) {
-            prop.setCurrentModelElementId(tca.getId());
-            ObjectNode rootNode = (ObjectNode) refProp.getJsonTemplate("tca.template", service);
-            ObjectNode content = rootNode.with("content");
-            TcaMPolicyReq.appendSignatures(refProp, service, content, tca, prop);
-            logger.info("Value of content:" + content);
-            // ObjectNode servConfNode =
-            // (ObjectNode)signatures.get("signatures");
-
-            // get updated blueprint by attaching service Conf from
-            // globalProperties
-            updatedBlueprint = getUpdatedBlueprintWithConfiguration(refProp, prop, yamlvalue, content);
-        }
-
+		updatedBlueprint = TcaRequestFormatter.updatedBlueprintWithConfiguration(refProp, prop, yamlvalue);
+        } 
         logger.info("value of blueprint:" + updatedBlueprint);
         return updatedBlueprint;
     }
 
     private static String getUpdatedBlueprintWithConfiguration(RefProp refProp, ModelProperties prop, String yamlValue,
-            ObjectNode serviceConf) throws JsonProcessingException, IOException {
+            ObjectNode serviceConf) throws IOException {
         String blueprint = "";
         Yaml yaml = new Yaml();
         // Serialiaze Yaml file
diff --git a/src/main/java/org/onap/clamp/clds/client/req/TcaMPolicyReq.java b/src/main/java/org/onap/clamp/clds/client/req/TcaMPolicyReq.java
deleted file mode 100644
index f310628..0000000
--- a/src/main/java/org/onap/clamp/clds/client/req/TcaMPolicyReq.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*-
- * ============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.client.req;
-
-import java.io.IOException;
-import java.util.Iterator;
-
-import org.onap.clamp.clds.model.prop.Global;
-import org.onap.clamp.clds.model.prop.ModelProperties;
-import org.onap.clamp.clds.model.prop.Tca;
-import org.onap.clamp.clds.model.prop.TcaItem;
-import org.onap.clamp.clds.model.prop.TcaThreshhold;
-import org.onap.clamp.clds.model.refprop.RefProp;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.fasterxml.jackson.core.JsonParseException;
-import com.fasterxml.jackson.databind.JsonMappingException;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
-/**
- * Construct a Policy for Tca/MTca Service request given CLDS objects.
- *
- *
- */
-public class TcaMPolicyReq {
-    protected static final EELFLogger logger        = EELFManager.getInstance().getLogger(TcaMPolicyReq.class);
-    protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger();
-
-    /**
-     * Format Tca Policy request
-     *
-     * @param refProp
-     * @param prop
-     * @return
-     * @throws JsonParseException
-     * @throws JsonMappingException
-     * @throws IOException
-     */
-    public static String formatTca(RefProp refProp, ModelProperties prop)
-            throws JsonParseException, JsonMappingException, IOException {
-        Global global = prop.getGlobal();
-        String service = global.getService();
-
-        Tca tca = prop.getType(Tca.class);
-        prop.setCurrentModelElementId(tca.getId());
-        ObjectNode rootNode = (ObjectNode) refProp.getJsonTemplate("tca.template", service);
-        rootNode.put("policyName", prop.getCurrentPolicyScopeAndPolicyName());
-        ObjectNode content = rootNode.with("content");
-        appendSignatures(refProp, service, content, tca, prop);
-
-        String tcaPolicyReq = rootNode.toString();
-        logger.info("tcaPolicyReq=" + tcaPolicyReq);
-        return tcaPolicyReq;
-    }
-
-    /**
-     * Add appendSignatures to json
-     *
-     * @param refProp
-     * @param service
-     * @param appendToNode
-     * @param tca
-     * @param prop
-     * @throws JsonParseException
-     * @throws JsonMappingException
-     * @throws IOException
-     */
-    public static void appendSignatures(RefProp refProp, String service, ObjectNode appendToNode, Tca tca,
-            ModelProperties prop) throws JsonParseException, JsonMappingException, IOException {
-        // "signatures":{
-        ArrayNode tcaNodes = appendToNode.withArray("signatures");
-        for (TcaItem tcaItem : tca.getTcaItems()) {
-            ObjectNode tcaNode = (ObjectNode) refProp.getJsonTemplate("tca.signature.template", service);
-            tcaNode.put("useCaseName", tcaItem.getTcaName());
-            tcaNode.put("signatureName", tcaItem.getTcaName() + "_" + tcaItem.getTcaUuId());
-            tcaNode.put("signatureUuid", tcaItem.getTcaUuId());
-            prop.setPolicyUniqueId(tcaItem.getPolicyId());
-            tcaNode.put("closedLoopControlName", prop.getControlNameAndPolicyUniqueId());
-            tcaNode.put("severity", tcaItem.getSeverity());
-            tcaNode.put("maxInterval", tcaItem.getInterval());
-            tcaNode.put("minMessageViolations", tcaItem.getViolations());
-
-            tcaNodes.add(tcaNode);
-            Iterator<TcaThreshhold> scItr = tcaItem.getTcaThreshholds().iterator();
-            while (scItr.hasNext()) {
-                TcaThreshhold tcaThreshhold = scItr.next();
-                // "thresholds": [
-                ArrayNode thNodes = tcaNode.withArray("thresholds");
-                ObjectNode thNode = thNodes.addObject();
-                thNode.put("fieldPath", tcaThreshhold.getFieldPath());
-                thNode.put("thresholdName", tcaThreshhold.getMetric());
-                thNode.put("thresholdValue", tcaThreshhold.getThreshhold());
-                thNode.put("direction", tcaThreshhold.getOperator());
-            }
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/src/main/java/org/onap/clamp/clds/client/req/TcaRequestFormatter.java b/src/main/java/org/onap/clamp/clds/client/req/TcaRequestFormatter.java
new file mode 100644
index 0000000..3fbf873
--- /dev/null
+++ b/src/main/java/org/onap/clamp/clds/client/req/TcaRequestFormatter.java
@@ -0,0 +1,166 @@
+/*-
+ * ============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.client.req;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.fasterxml.jackson.dataformat.yaml.snakeyaml.Yaml;
+
+import java.util.Map;
+
+import org.onap.clamp.clds.exception.TcaRequestFormatterException;
+import org.onap.clamp.clds.model.prop.ModelProperties;
+import org.onap.clamp.clds.model.prop.Tca;
+import org.onap.clamp.clds.model.prop.TcaItem;
+import org.onap.clamp.clds.model.prop.TcaThreshold;
+import org.onap.clamp.clds.model.refprop.RefProp;
+
+/**
+ * Construct the requests for TCA policy and SDC.
+ *
+ */
+public class TcaRequestFormatter {
+    protected static final EELFLogger logger        = EELFManager.getInstance().getLogger(TcaRequestFormatter.class);
+    protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger();
+
+    /**
+     * Hide the default constructor.
+     */
+    private TcaRequestFormatter() {
+
+    }
+
+    /**
+     * Format Tca Policy JSON request.
+     *
+     * @param refProp
+     *            The refProp generally created by Spring, it's an access on the
+     *            clds-references.properties file
+     * @param modelProperties
+     *            The Model Prop created from BPMN JSON and BPMN properties JSON
+     * @return The Json string containing that should be sent to policy
+     */
+    public static String createPolicyJson(RefProp refProp, ModelProperties modelProperties) {
+        try {
+            String service = modelProperties.getGlobal().getService();
+
+            Tca tca = modelProperties.getType(Tca.class);
+            modelProperties.setCurrentModelElementId(tca.getId());
+            ObjectNode rootNode = (ObjectNode) refProp.getJsonTemplate("tca.template", service);
+            ((ObjectNode) rootNode.get("cdap-tca-hi-lo_policy").get("metricsPerEventName").get(0)).put("policyName",
+                    modelProperties.getCurrentPolicyScopeAndPolicyName());
+            ((ObjectNode) rootNode.get("cdap-tca-hi-lo_policy").get("metricsPerEventName").get(0)).put("eventName",
+                    tca.getTcaItem().getEventName());
+
+            ObjectNode thresholdsParent = ((ObjectNode) rootNode.get("cdap-tca-hi-lo_policy").get("metricsPerEventName")
+                    .get(0));
+
+            addThresholds(refProp, service, thresholdsParent, tca.getTcaItem(), modelProperties);
+
+            String tcaPolicyReq = rootNode.toString();
+            logger.info("tcaPolicyReq=" + tcaPolicyReq);
+            return tcaPolicyReq;
+        } catch (Exception e) {
+            throw new TcaRequestFormatterException("Exception caught when attempting to create the policy JSON", e);
+        }
+    }
+
+    /**
+     * Add threshold values to the existing policy JSON.
+     *
+     * @param refProp
+     *            The refProp generally created by Spring, it's an access on the
+     *            clds-references.properties file
+     * @param service
+     *            The Service value extracted from Global section of the Bpmn
+     *            Properties JSON
+     * @param appendToNode
+     *            The JSON structure from where the thresholds section must be
+     *            added
+     * @param tcaItem
+     *            The TCA item contained in the Tca object
+     * @param modelProperties
+     *            The Model Properties created from BPMN JSON and BPMN
+     *            properties JSON
+     */
+    private static void addThresholds(RefProp refProp, String service, ObjectNode appendToNode, TcaItem tcaItem,
+            ModelProperties modelProperties) {
+        try {
+            ArrayNode tcaNodes = appendToNode.withArray("thresholds");
+            ObjectNode tcaNode = (ObjectNode) refProp.getJsonTemplate("tca.thresholds.template", service);
+
+            for (TcaThreshold tcaThreshold : tcaItem.getTcaThresholds()) {
+                tcaNode.put("controlLoopSchema", tcaThreshold.getControlLoopSchema());
+                tcaNode.put("closedLoopControlName", modelProperties.getControlNameAndPolicyUniqueId());
+                tcaNode.put("fieldPath", tcaThreshold.getFieldPath());
+                tcaNode.put("thresholdValue", tcaThreshold.getThreshold());
+                tcaNode.put("direction", tcaThreshold.getOperator());
+                tcaNode.put("closedLoopEventStatus", tcaThreshold.getClosedLoopEventStatus());
+                tcaNodes.add(tcaNode);
+            }
+        } catch (Exception e) {
+            throw new TcaRequestFormatterException("Exception caught when attempting to create the thresholds JSON", e);
+        }
+    }
+
+    /**
+     * This method updates the blueprint that is received in the UI with the TCA
+     * Json.
+     * 
+     * @param refProp
+     *            * The refProp generally created by Spring, it's an access on
+     *            the clds-references.properties file
+     * @param modelProperties
+     *            The Model Prop created from BPMN JSON and BPMN properties JSON
+     * @param yamlValue
+     *            The yaml string received from the UI
+     * @return The updated YAML as a string
+     */
+    public static String updatedBlueprintWithConfiguration(RefProp refProp, ModelProperties modelProperties,
+            String yamlValue) {
+        try {
+            String jsonPolicy = createPolicyJson(refProp, modelProperties);
+
+            logger.info("Yaml that will be updated:" + yamlValue);
+            Yaml yaml = new Yaml();
+
+            Map<String, Object> loadedYaml = (Map<String, Object>) yaml.load(yamlValue);
+
+            Map<String, Object> nodeTemplates = (Map<String, Object>) loadedYaml.get("node_templates");
+            Map<String, Object> tcaObject = (Map<String, Object>) nodeTemplates.get("tca_tca");
+            Map<String, Object> propsObject = (Map<String, Object>) tcaObject.get("properties");
+            Map<String, Object> appPreferences = (Map<String, Object>) propsObject.get("app_preferences");
+            appPreferences.put("tca_policy", jsonPolicy);
+
+            String blueprint = yaml.dump(loadedYaml);
+            logger.info("Yaml updated:" + blueprint);
+
+            return blueprint;
+        } catch (Exception e) {
+            throw new TcaRequestFormatterException("Exception caught when attempting to update the blueprint", e);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/org/onap/clamp/clds/model/prop/Tca.java b/src/main/java/org/onap/clamp/clds/model/prop/Tca.java
index f7bbac0..4fd6b59 100644
--- a/src/main/java/org/onap/clamp/clds/model/prop/Tca.java
+++ b/src/main/java/org/onap/clamp/clds/model/prop/Tca.java
@@ -27,25 +27,8 @@
 import com.att.eelf.configuration.EELFManager;
 import com.fasterxml.jackson.databind.JsonNode;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
 /**
- * Parse Tca json properties.
- *
- * Example json:
- * {"TCA_0lm6cix":{"Narra":[{"name":"tname","value":"Narra"},{"name":"tcaEnab",
- * "value":"on"},{"name":"tcaPol","value":"Polcicy1"},{"name":"tcaPolId","value"
- * :"1"},{"name":"tcaInt","value":"1"},{"name":"tcaSev","value":"Critical"},{
- * "name":"tcaVio","value":"1"},{"serviceConfigurations":[["FIELDPATH_test_1",
- * ">","4"],["FIELDPATH_test_1","=","5"]]}],"Srini":[{"name":"tname","value":
- * "Srini"},{"name":"tcaEnab","value":"on"},{"name":"tcaPol","value":"Policy1"},
- * {"name":"tcaPolId","value":"1"},{"name":"tcaInt","value":"1"},{"name":
- * "tcaSev","value":"Major"},{"name":"tcaVio","value":"1"},{
- * "serviceConfigurations":[["FIELDPATH_test_2","=","3"],["FIELDPATH_test_1",">"
- * ,"2"]]}]}}
- *
+ * Parse ONAP Tca json properties.
  *
  */
 public class Tca extends AbstractModelElement {
@@ -53,7 +36,7 @@
     protected static final EELFLogger logger      = EELFManager.getInstance().getLogger(Tca.class);
     protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger();
 
-    private List<TcaItem>             tcaItems;
+    private TcaItem                   tcaItem;
 
     private static final String       TYPE_TCA    = "tca";
 
@@ -69,16 +52,12 @@
 
         // process Server_Configurations
         if (modelElementJsonNode != null) {
-            Iterator<JsonNode> itr = modelElementJsonNode.elements();
-            tcaItems = new ArrayList<>();
-            while (itr.hasNext()) {
-                tcaItems.add(new TcaItem(itr.next()));
-            }
+            tcaItem = new TcaItem(modelElementJsonNode.elements().next());
         }
     }
 
-    public List<TcaItem> getTcaItems() {
-        return tcaItems;
+    public TcaItem getTcaItem() {
+        return tcaItem;
     }
 
     public static final String getType() {
diff --git a/src/main/java/org/onap/clamp/clds/model/prop/TcaItem.java b/src/main/java/org/onap/clamp/clds/model/prop/TcaItem.java
index f104b09..79da2db 100644
--- a/src/main/java/org/onap/clamp/clds/model/prop/TcaItem.java
+++ b/src/main/java/org/onap/clamp/clds/model/prop/TcaItem.java
@@ -23,45 +23,28 @@
 
 package org.onap.clamp.clds.model.prop;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 import com.fasterxml.jackson.databind.JsonNode;
 
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
 /**
- * Parse Tca Item json properties.
- *
- * Example json:
- * {"TCA_0lm6cix":{"Narra":[{"name":"tname","value":"Narra"},{"name":"tcaEnab",
- * "value":"on"},{"name":"tcaPol","value":"Polcicy1"},{"name":"tcaPolId","value"
- * :"1"},{"name":"tcaInt","value":"1"},{"name":"tcaSev","value":"Critical"},{
- * "name":"tcaVio","value":"1"},{"serviceConfigurations":[["FIELDPATH_test_1",
- * ">","4"],["FIELDPATH_test_1","=","5"]]}],"Srini":[{"name":"tname","value":
- * "Srini"},{"name":"tcaEnab","value":"on"},{"name":"tcaPol","value":"Policy1"},
- * {"name":"tcaPolId","value":"1"},{"name":"tcaInt","value":"1"},{"name":
- * "tcaSev","value":"Major"},{"name":"tcaVio","value":"1"},{
- * "serviceConfigurations":[["FIELDPATH_test_2","=","3"],["FIELDPATH_test_1",">"
- * ,"2"]]}]}}
- *
+ * Parse ONAP Tca Item json properties.
  *
  */
 public class TcaItem {
 
-    protected static final EELFLogger       logger      = EELFManager.getInstance().getLogger(TcaItem.class);
+    protected static final EELFLogger logger      = EELFManager.getInstance().getLogger(TcaItem.class);
     protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger();
 
-    private String                  tcaName;
-    private String                  tcaUuId;
-    private String                  nfNamingCode;
-    private String                  tcaEnable;
-    private String                  policyId;
-    private Integer                 interval;
-    private String                  severity;
-    private Integer                 violations;
-    private List<TcaThreshhold>     tcaThreshholds;
+    private String                    tcaName;
+    private String                    tcaUuId;
+    private String                    policyId;
+    private String                    eventName;
+    private List<TcaThreshold>        tcaThresholds;
 
     /**
      * Parse Tca Item given json node
@@ -72,23 +55,14 @@
 
         tcaName = AbstractModelElement.getValueByName(node, "tname");
         tcaUuId = AbstractModelElement.getValueByName(node, "tuuid");
-        nfNamingCode = AbstractModelElement.getValueByName(node, "tnfc");
-        tcaEnable = AbstractModelElement.getValueByName(node, "tcaEnab");
         policyId = AbstractModelElement.getValueByName(node, "tcaPolId");
-        if (AbstractModelElement.getValueByName(node, "tcaInt") != null) {
-            interval = Integer.valueOf(AbstractModelElement.getValueByName(node, "tcaInt"));
-        }
-        severity = AbstractModelElement.getValueByName(node, "tcaSev");
-        if (AbstractModelElement.getValueByName(node, "tcaVio") != null) {
-            violations = Integer.valueOf(AbstractModelElement.getValueByName(node, "tcaVio"));
-        }
-
+        eventName = AbstractModelElement.getValueByName(node, "eventName");
         // process service Configurations
         JsonNode serviceConfigurationsNode = node.get(node.size() - 1).get("serviceConfigurations");
         Iterator<JsonNode> itr = serviceConfigurationsNode.elements();
-        tcaThreshholds = new ArrayList<TcaThreshhold>();
+        tcaThresholds = new ArrayList<>();
         while (itr.hasNext()) {
-            tcaThreshholds.add(new TcaThreshhold(itr.next()));
+            tcaThresholds.add(new TcaThreshold(itr.next()));
         }
     }
 
@@ -108,22 +82,6 @@
         this.tcaUuId = tcaUuId;
     }
 
-    public String getNfNamingCode() {
-        return nfNamingCode;
-    }
-
-    public void setNfNamingCode(String nfNamingCode) {
-        this.nfNamingCode = nfNamingCode;
-    }
-
-    public String getTcaEnable() {
-        return tcaEnable;
-    }
-
-    public void setTcaEnable(String tcaEnable) {
-        this.tcaEnable = tcaEnable;
-    }
-
     public String getPolicyId() {
         return policyId;
     }
@@ -132,32 +90,16 @@
         this.policyId = policyId;
     }
 
-    public Integer getInterval() {
-        return interval;
+    public List<TcaThreshold> getTcaThresholds() {
+        return tcaThresholds;
     }
 
-    public void setInterval(Integer interval) {
-        this.interval = interval;
+    public String getEventName() {
+        return eventName;
     }
 
-    public String getSeverity() {
-        return severity;
-    }
-
-    public void setSeverity(String severity) {
-        this.severity = severity;
-    }
-
-    public Integer getViolations() {
-        return violations;
-    }
-
-    public void setViolations(Integer violations) {
-        this.violations = violations;
-    }
-
-    public List<TcaThreshhold> getTcaThreshholds() {
-        return tcaThreshholds;
+    public void setEventName(String eventName) {
+        this.eventName = eventName;
     }
 
 }
diff --git a/src/main/java/org/onap/clamp/clds/model/prop/TcaThreshhold.java b/src/main/java/org/onap/clamp/clds/model/prop/TcaThreshhold.java
deleted file mode 100644
index 39369f1..0000000
--- a/src/main/java/org/onap/clamp/clds/model/prop/TcaThreshhold.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*-
- * ============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.model.prop;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.fasterxml.jackson.databind.JsonNode;
-
-/**
- * Parse Tca Threshhold json properties.
- *
- * Example json:
- * {"TCA_0lm6cix":{"Narra":[{"name":"tname","value":"Narra"},{"name":"tcaEnab",
- * "value":"on"},{"name":"tcaPol","value":"Polcicy1"},{"name":"tcaPolId","value"
- * :"1"},{"name":"tcaInt","value":"1"},{"name":"tcaSev","value":"Critical"},{
- * "name":"tcaVio","value":"1"},{"serviceConfigurations":[["FIELDPATH_test_1",
- * ">","4"],["FIELDPATH_test_1","=","5"]]}],"Srini":[{"name":"tname","value":
- * "Srini"},{"name":"tcaEnab","value":"on"},{"name":"tcaPol","value":"Policy1"},
- * {"name":"tcaPolId","value":"1"},{"name":"tcaInt","value":"1"},{"name":
- * "tcaSev","value":"Major"},{"name":"tcaVio","value":"1"},{
- * "serviceConfigurations":[["FIELDPATH_test_2","=","3"],["FIELDPATH_test_1",">"
- * ,"2"]]}]}}
- *
- *
- */
-public class TcaThreshhold {
-
-    protected static final EELFLogger       logger      = EELFManager.getInstance().getLogger(TcaThreshhold.class);
-    protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger();
-
-    private String                  metric;
-    private String                  fieldPath;
-    private String                  operator;
-    private Integer                 threshhold;
-
-    /**
-     * Parse Tca Threshhold given json node
-     *
-     * @param node
-     */
-    public TcaThreshhold(JsonNode node) {
-
-        if (node.get(0) != null) {
-            metric = node.get(0).asText();
-        }
-        if (node.get(1) != null) {
-            operator = node.get(1).asText();
-        }
-        if (node.get(2) != null) {
-            threshhold = Integer.valueOf(node.get(2).asText());
-        }
-        if (node.get(3) != null) {
-            fieldPath = node.get(3).asText();
-        }
-    }
-
-    public String getMetric() {
-        return metric;
-    }
-
-    public void setMetric(String metric) {
-        this.metric = metric;
-    }
-
-    public String getFieldPath() {
-        return fieldPath;
-    }
-
-    public void setFieldPath(String fieldPath) {
-        this.fieldPath = fieldPath;
-    }
-
-    public String getOperator() {
-        return operator;
-    }
-
-    public void setOperator(String operator) {
-        this.operator = operator;
-    }
-
-    public Integer getThreshhold() {
-        return threshhold;
-    }
-
-    public void setThreshhold(Integer threshhold) {
-        this.threshhold = threshhold;
-    }
-
-}
diff --git a/src/main/java/org/onap/clamp/clds/model/prop/TcaThreshold.java b/src/main/java/org/onap/clamp/clds/model/prop/TcaThreshold.java
new file mode 100644
index 0000000..43bdb5c
--- /dev/null
+++ b/src/main/java/org/onap/clamp/clds/model/prop/TcaThreshold.java
@@ -0,0 +1,108 @@
+/*-
+ * ============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.model.prop;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import com.fasterxml.jackson.databind.JsonNode;
+
+/**
+ * Parse ONAP Tca Threshold json properties.
+ *
+ */
+public class TcaThreshold {
+
+    protected static final EELFLogger logger      = EELFManager.getInstance().getLogger(TcaThreshold.class);
+    protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger();
+
+    private String                    fieldPath;
+    private String                    operator;
+    private Integer                   threshold;
+    private String                    closedLoopEventStatus;
+    private String                    controlLoopSchema;
+
+    /**
+     * Parse Tca Threshhold given json node
+     *
+     * @param node
+     */
+    public TcaThreshold(JsonNode node) {
+
+        if (node.get(0) != null) {
+            fieldPath = node.get(0).asText();
+        }
+        if (node.get(1) != null) {
+            operator = node.get(1).asText();
+        }
+        if (node.get(2) != null) {
+            threshold = Integer.valueOf(node.get(2).asText());
+        }
+        if (node.get(3) != null) {
+            controlLoopSchema = node.get(3).asText();
+        }
+        if (node.get(4) != null) {
+            closedLoopEventStatus = node.get(4).asText();
+        }
+    }
+
+    public String getFieldPath() {
+        return fieldPath;
+    }
+
+    public void setFieldPath(String fieldPath) {
+        this.fieldPath = fieldPath;
+    }
+
+    public String getOperator() {
+        return operator;
+    }
+
+    public void setOperator(String operator) {
+        this.operator = operator;
+    }
+
+    public Integer getThreshold() {
+        return threshold;
+    }
+
+    public void setThreshold(Integer threshold) {
+        this.threshold = threshold;
+    }
+
+    public String getClosedLoopEventStatus() {
+        return closedLoopEventStatus;
+    }
+
+    public void setClosedLoopEventStatus(String closedLoopEventStatus) {
+        this.closedLoopEventStatus = closedLoopEventStatus;
+    }
+
+    public String getControlLoopSchema() {
+        return controlLoopSchema;
+    }
+
+    public void setControlLoopSchema(String controlLoopSchema) {
+        this.controlLoopSchema = controlLoopSchema;
+    }
+}
diff --git a/src/main/resources/clds/clds-reference.properties b/src/main/resources/clds/clds-reference.properties
index d404e4e..9a56295 100644
--- a/src/main/resources/clds/clds-reference.properties
+++ b/src/main/resources/clds/clds-reference.properties
@@ -38,17 +38,18 @@
 #
 # General Policy request properties
 #
-policy.ecomp.name=DCAE
+policy.onap.name=DCAE
 policy.pdp.group=default
 policy.ms.type=MicroService
 policy.ms.policyNamePrefix=Config_MS_
 policy.op.type=BRMS_Param
 policy.op.policyNamePrefix=Config_BRMS_Param_
-#
+
 # TCA MicroService Policy request build properties
 #
-tca.template={"service":"MThresholdCrossingConfiguration","location":"Edge","uuid":"TestUUID","policyName":"???","description":"from clds","configName":"MThresholdCrossingConfiguration","templateVersion":"5.2.0.1","priority":"4","version":"5.2.0.1","policyScope":"resource=F5,service=vSCP,type=configuration,closedLoopControlName=vSCP_F5_Firewall_d925ed73-8231-4d02-9545-db4e101f88f8","content":{"$class": "com.att.ecomp.dcae.clamp.common.MThresholdCrossingConfiguration","domain":"measurementsForVfScaling","policyScope":"pnf=eNodeB;type=configuration","policyName":"policy.dcae.configuration","policyVersion":"1.0.0","subscriberContentType": "application/json","subscriberConsumerId": "c13","subscriberConsumerGroup": "OpenDCAE-c13","subscriberTimeoutMS": "-1","subscriberMessageLimit": "-1","subscriberPollingInterval": "20000","publisherContentType": "application/json","publisherMaxBatchSize": "10","publisherMaxRecoveryQueueSize": "100000","publisherPollingInterval": "20000","publisherAlertWindowingTime": "86400","signatures":[]}}
-tca.signature.template={"nfNamingCode":"ENBE","target":"common_id","targetType":"eNodeB","useCaseName":"???","signatureName":"???","signatureUuid":"???","closedLoopControlName":"???","severity":"???","version":"1.0.2","maxInterval":1200,"minMessageViolations":4,"thresholds":[]}
+tca.template={"cdap-tca-hi-lo_policy": {"domain": "measurementsForVfScaling","metricsPerEventName": [{"eventName": "???","policyScope": "DCAE","policyName": "???","policyVersion": "v0.0.1","thresholds": []}]}}
+tca.thresholds.template={"closedLoopControlName": "???", "controlLoopSchema": "VM","version": "1.0.2","fieldPath": "?????", "thresholdValue": 0,"direction": "???","severity": "MAJOR", "closedLoopEventStatus": "???"}
+
 #
 #
 # Operational Policy request build properties
@@ -73,9 +74,9 @@
 op.eNodeB.period=10s
 #
 # Sdc service properties
-sdc.catalog.url=http://sdc.api.simpledemo.openecomp.org:8080/sdc/v1/catalog/
-sdc.hostUrl=http://sdc.api.simpledemo.openecomp.org:8080
-sdc.serviceUrl=http://sdc.api.simpledemo.openecomp.org:8080/sdc/v1/catalog/services
+sdc.catalog.url=http://sdcb-conexus.e73c65.rdm2.tci.att.com:8080/sdc/v1/catalog/
+sdc.hostUrl=http://sdcb-conexus.e73c65.rdm2.tci.att.com:8080
+sdc.serviceUrl=http://sdcb-conexus.e73c65.rdm2.tci.att.com:8080/sdc/v1/catalog/services
 sdc.serviceUsername=test
 sdc.servicePassword=123456
 sdc.artifactLabel=blueprintclampcockpit
@@ -84,6 +85,17 @@
 sdc.locationArtifactLabel=locationclampcockpit
 sdc.locationArtifactType=DCAE_INVENTORY_JSON
 sdc.InstanceID=X-ECOMP-InstanceID
+#sdc.catalog.url=http://135.205.226.136:8080/sdc/v1/catalog/
+#sdc.hostUrl=http://135.205.226.136:8080
+#sdc.serviceUrl=http://135.205.226.136:8080/sdc/v1/catalog/services
+#sdc.serviceUsername=clamp
+#sdc.servicePassword=clampdown
+##sdc.artifactLabel=blueprintclampcockpit
+#sdc.sdcX-InstanceID=CLAMP
+#sdc.artifactType=DCAE_INVENTORY_BLUEPRINT
+#sdc.locationArtifactLabel=locationclampcockpit
+#sdc.locationArtifactType=DCAE_INVENTORY_JSON
+#sdc.InstanceID=X-ECOMP-InstanceID
 #
 #
 #
@@ -94,7 +106,7 @@
 action.test.override=false
 # if action.insert.test.event is true, then insert event even if the action is set to test
 action.insert.test.event=false
-CLDS_SERVICE_CACHE_MAX_SECONDS=5
+CLDS_SERVICE_CACHE_MAX_SECONDS=300
 
 #DCAE Inventory Url Properties
 DCAE_INVENTORY_URL = https://dcae.api.simpledemo.openecomp.org:8080
diff --git a/src/test/java/org/onap/clamp/clds/it/TcaRequestFormatterIT.java b/src/test/java/org/onap/clamp/clds/it/TcaRequestFormatterIT.java
new file mode 100644
index 0000000..89ff579
--- /dev/null
+++ b/src/test/java/org/onap/clamp/clds/it/TcaRequestFormatterIT.java
@@ -0,0 +1,89 @@
+/*-
+ * ============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.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.io.IOException;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.onap.clamp.clds.AbstractIT;
+import org.onap.clamp.clds.client.req.TcaRequestFormatter;
+import org.onap.clamp.clds.model.CldsEvent;
+import org.onap.clamp.clds.model.prop.ModelProperties;
+import org.onap.clamp.clds.util.ResourceFileUtil;
+import org.skyscreamer.jsonassert.JSONAssert;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.TestPropertySource;
+import org.springframework.test.context.junit4.SpringRunner;
+
+/**
+ * Test Onap TcaPolicyReq features
+ */
+@RunWith(SpringRunner.class)
+@SpringBootTest
+@TestPropertySource(locations = "classpath:application-no-camunda.properties")
+public class TcaRequestFormatterIT extends AbstractIT {
+
+    String modelProp;
+    String modelBpmn;
+    String modelName;
+    String controlName;
+    String yamlInput;
+
+    /**
+     * Initialize Test.
+     */
+    @Before
+    public void setUp() throws IOException {
+        modelProp = ResourceFileUtil.getResourceAsString("example/model-properties/tca/modelBpmnProperties.json");
+        modelBpmn = ResourceFileUtil.getResourceAsString("example/model-properties/tca/modelBpmn.json");
+        yamlInput = ResourceFileUtil.getResourceAsString("example/tca-policy-req/blueprint-input.yaml");
+        modelName = "example-model01";
+        controlName = "ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf";
+    }
+
+    @Test
+    public void testCreatePolicyJson() throws IOException {
+        ModelProperties prop = new ModelProperties(modelName, controlName, CldsEvent.ACTION_SUBMIT, false, modelBpmn,
+                modelProp);
+        String result = TcaRequestFormatter.createPolicyJson(refProp, prop);
+        assertNotNull(result);
+        JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("example/tca-policy-req/tca-policy-expected.json"),
+                result, true);
+    }
+
+    @Test
+    public void testUpdatedBlueprintWithConfiguration() throws IOException {
+        ModelProperties prop = new ModelProperties(modelName, controlName, CldsEvent.ACTION_SUBMIT, false, modelBpmn,
+                modelProp);
+        String result = TcaRequestFormatter.updatedBlueprintWithConfiguration(refProp, prop, yamlInput);
+
+        assertNotNull(result);
+        assertEquals(ResourceFileUtil.getResourceAsString("example/tca-policy-req/blueprint-expected.yaml"), 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 60056d4..45f39a4 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
@@ -24,11 +24,10 @@
 package org.onap.clamp.clds.model.prop;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -46,10 +45,11 @@
     }
 
     @Test
-    public void testHolmes() throws IOException {
+    public void testTcaModelDecoding() throws IOException {
 
-        String modelBpmnProp = ResourceFileUtil.getResourceAsString("example/model-properties/modelBpmnProp.json");
-        String modelBpmn = ResourceFileUtil.getResourceAsString("example/model-properties/modelBpmn.json");
+        String modelBpmnProp = ResourceFileUtil
+                .getResourceAsString("example/model-properties/tca/modelBpmnProperties.json");
+        String modelBpmn = ResourceFileUtil.getResourceAsString("example/model-properties/tca/modelBpmn.json");
 
         ModelProperties prop = new ModelProperties("example-model-name", "example-control-name", null, true, modelBpmn,
                 modelBpmnProp);
@@ -66,11 +66,52 @@
         assertEquals(null, policy.getPolicyChains().get(0).getPolicyItems().get(0).getParentPolicyConditions());
 
         Tca tca = prop.getType(Tca.class);
+        assertNotNull(tca);
         assertTrue(tca.isFound());
-        assertEquals(1, tca.getTcaItems().size());
-        assertEquals(0, tca.getTcaItems().get(0).getTcaThreshholds().size());
+        assertEquals("vFirewallBroadcastPackets", tca.getTcaItem().getEventName());
+        assertEquals("policy1", tca.getTcaItem().getPolicyId());
+        assertEquals("f734f031-10aa-t8fb-330f-04dde2886325", tca.getTcaItem().getTcaUuId());
+        assertEquals(2, tca.getTcaItem().getTcaThresholds().size());
+
+        assertEquals("ABATED", tca.getTcaItem().getTcaThresholds().get(0).getClosedLoopEventStatus());
+        assertEquals("VM", tca.getTcaItem().getTcaThresholds().get(0).getControlLoopSchema());
+        assertEquals(
+                "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated",
+                tca.getTcaItem().getTcaThresholds().get(0).getFieldPath());
+        assertEquals("LESS_OR_EQUAL", tca.getTcaItem().getTcaThresholds().get(0).getOperator());
+        assertEquals(Integer.valueOf(123), tca.getTcaItem().getTcaThresholds().get(0).getThreshold());
+
+        assertEquals("ONSET", tca.getTcaItem().getTcaThresholds().get(1).getClosedLoopEventStatus());
+        assertEquals("VNF", tca.getTcaItem().getTcaThresholds().get(1).getControlLoopSchema());
+        assertEquals("$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta",
+                tca.getTcaItem().getTcaThresholds().get(1).getFieldPath());
+        assertEquals("GREATER_OR_EQUAL", tca.getTcaItem().getTcaThresholds().get(1).getOperator());
+        assertEquals(Integer.valueOf(123), tca.getTcaItem().getTcaThresholds().get(1).getThreshold());
+    }
+
+    @Test
+    public void testHolmesModelDecoding() 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", "example-control-name", null, true, modelBpmn,
+                modelBpmnProp);
+
+        Policy policy = prop.getType(Policy.class);
+        assertTrue(policy.isFound());
+        assertEquals(1, policy.getPolicyChains().size());
+        assertEquals("0", policy.getPolicyChains().get(0).getPolicyId());
+        assertEquals(1, policy.getPolicyChains().get(0).getPolicyItems().size());
+        assertEquals("resourceid", policy.getPolicyChains().get(0).getPolicyItems().get(0).getTargetResourceId());
+        assertEquals(180, policy.getPolicyChains().get(0).getPolicyItems().get(0).getRetryTimeLimit());
+        assertEquals(3, policy.getPolicyChains().get(0).getPolicyItems().get(0).getMaxRetries());
+        assertEquals("", policy.getPolicyChains().get(0).getPolicyItems().get(0).getParentPolicy());
+        assertEquals(null, policy.getPolicyChains().get(0).getPolicyItems().get(0).getParentPolicyConditions());
 
         Holmes holmes = prop.getType(Holmes.class);
+        assertNotNull(holmes);
         assertTrue(holmes.isFound());
         assertEquals("policy1", holmes.getOperationalPolicy());
         assertEquals("blabla", holmes.getCorrelationLogic());
@@ -80,7 +121,7 @@
     public void testGetVf() throws IOException {
         CldsModel cldsModel = new CldsModel();
         cldsModel.setPropText(
-                ResourceFileUtil.getResourceAsString("example/model-properties/modelBpmnPropWithGlobal.json"));
+                ResourceFileUtil.getResourceAsString("example/model-properties/tca/modelBpmnProperties.json"));
         assertEquals("f5213e3a-9191-4362-93b5-b67f8d770e44", ModelProperties.getVf(cldsModel));
     }
 }
\ No newline at end of file
diff --git a/src/test/resources/clds/clds-reference.properties b/src/test/resources/clds/clds-reference.properties
index f2ec43b..405b3ed 100644
--- a/src/test/resources/clds/clds-reference.properties
+++ b/src/test/resources/clds/clds-reference.properties
@@ -28,9 +28,9 @@
 #
 # TCA MicroService Policy request build properties
 #
-tca.template={"service":"MThresholdCrossingConfiguration","location":"Edge","uuid":"TestUUID","policyName":"???","description":"from clds","configName":"MThresholdCrossingConfiguration","templateVersion":"5.2.0.1","priority":"4","version":"5.2.0.1","policyScope":"resource=F5,service=vSCP,type=configuration,closedLoopControlName=vSCP_F5_Firewall_d925ed73-8231-4d02-9545-db4e101f88f8","content":{"$class": "com.att.ecomp.dcae.clamp.common.MThresholdCrossingConfiguration","domain":"measurementsForVfScaling","policyScope":"pnf=eNodeB;type=configuration","policyName":"policy.dcae.configuration","policyVersion":"1.0.0","subscriberContentType": "application/json","subscriberConsumerId": "c13","subscriberConsumerGroup": "OpenDCAE-c13","subscriberTimeoutMS": "-1","subscriberMessageLimit": "-1","subscriberPollingInterval": "20000","publisherContentType": "application/json","publisherMaxBatchSize": "10","publisherMaxRecoveryQueueSize": "100000","publisherPollingInterval": "20000","publisherAlertWindowingTime": "86400","signatures":[]}}
-tca.signature.template={"nfNamingCode":"ENBE","target":"common_id","targetType":"eNodeB","useCaseName":"???","signatureName":"???","signatureUuid":"???","closedLoopControlName":"???","severity":"???","version":"1.0.2","maxInterval":1200,"minMessageViolations":4,"thresholds":[]}
-
+tca.template={"cdap-tca-hi-lo_policy": {"domain": "measurementsForVfScaling","metricsPerEventName": [{"eventName": "???","policyScope": "DCAE","policyName": "???","policyVersion": "v0.0.1","thresholds": []}]}}
+tca.thresholds.template={"closedLoopControlName": "???", "controlLoopSchema": "VM","version": "1.0.2","fieldPath": "?????", "thresholdValue": 0,"direction": "???","severity": "MAJOR", "closedLoopEventStatus": "???"}
+#
 #
 # DCAE request build properties
 #
@@ -45,7 +45,7 @@
 #
 # General Policy request properties
 #
-policy.ecomp.name=DCAE
+policy.onap.name=DCAE
 policy.pdp.group=default
 policy.ms.type=MicroService
 policy.ms.policyNamePrefix=Config_MS_
diff --git a/src/test/resources/example/model-properties/holmes/modelBpmn.json b/src/test/resources/example/model-properties/holmes/modelBpmn.json
new file mode 100644
index 0000000..db8e54d
--- /dev/null
+++ b/src/test/resources/example/model-properties/holmes/modelBpmn.json
@@ -0,0 +1,20 @@
+{
+  "vesCollector": [
+    {
+      "id": "VesCollector_0orydnh",
+      "from": "StartEvent_1"
+    }
+  ],
+   "holmes": [
+    {
+      "id": "Holmes_0i4n2mm",
+      "from": "VesCollector_0orydnh"
+    }
+  ],
+  "policy": [
+    {
+      "id": "Policy_0honxgv",
+      "from": "Holmes_0i4n2mm"
+    }
+  ]
+}
diff --git a/src/test/resources/example/model-properties/holmes/modelBpmnProperties.json b/src/test/resources/example/model-properties/holmes/modelBpmnProperties.json
new file mode 100644
index 0000000..14b3a8c
--- /dev/null
+++ b/src/test/resources/example/model-properties/holmes/modelBpmnProperties.json
@@ -0,0 +1,116 @@
+{
+  "Holmes_0i4n2mm": [
+    {
+      "name": "correlationalLogic",
+      "value": "blabla"
+    },
+    {
+      "name": "operationalPolicy",
+      "value": "policy1"
+    }
+  ],
+  "Policy_0honxgv": {
+    "policy1": [
+      {
+        "name": "pname",
+        "value": "policy1"
+      },
+      {
+        "name": "pid",
+        "value": "0"
+      },
+      {
+        "name": "timeout",
+        "value": "345"
+      },
+      {
+        "policyConfigurations": [
+          [
+            {
+              "name": "maxRetries",
+              "value": [
+                "3"
+              ]
+            },
+            {
+              "name": "retryTimeLimit",
+              "value": [
+                "180"
+              ]
+            },
+            {
+              "name": "_id",
+              "value": [
+                "dGLuNqg"
+              ]
+            },
+            {
+              "name": "parentPolicy",
+              "value": [
+                ""
+              ]
+            },
+            {
+              "name": "targetResourceId",
+              "value": [
+                "resourceid"
+              ]
+            }
+          ]
+        ]
+      }
+    ]
+  },
+  "global": [
+    {
+      "name": "actionSet",
+      "value": [
+        "vnfRecipe"
+      ]
+    },
+    {
+      "name": "location",
+      "value": [
+        "SNDGCA64",
+        "ALPRGAED"
+      ]
+    },
+    {
+      "name": "vf",
+      "value": [
+        "f5213e3a-9191-4362-93b5-b67f8d770e44"
+      ]
+    },
+    {
+      "name": "location",
+      "value": [
+        "SNDGCA64",
+        "ALPRGAED",
+        "LSLEILAA",
+        "MDTWNJC1"
+      ]
+    }
+  ],
+  "shared": {
+    "byService": {
+      "": {
+        "vf": {
+          "": ""
+        },
+        "location": {
+          "": ""
+        },
+        "alarmCondition": {
+          "": ""
+        }
+      }
+    },
+    "byVf": {
+      "": {
+        "vfc": {
+          "": ""
+        }
+      }
+    }
+  }
+}
diff --git a/src/test/resources/example/model-properties/tca/modelBpmn.json b/src/test/resources/example/model-properties/tca/modelBpmn.json
new file mode 100644
index 0000000..7358f9a
--- /dev/null
+++ b/src/test/resources/example/model-properties/tca/modelBpmn.json
@@ -0,0 +1,20 @@
+{
+  "vesCollector": [
+    {
+      "id": "VesCollector_0orydnh",
+      "from": "StartEvent_1"
+    }
+  ],
+   "tca": [
+    {
+      "id": "TCA_1jy9to4",
+      "from": "VesCollector_0orydnh"
+    }
+  ],
+  "policy": [
+    {
+      "id": "Policy_0honxgv",
+      "from": "TCA_1jy9to4"
+    }
+  ]
+}
diff --git a/src/test/resources/example/model-properties/tca/modelBpmnProperties.json b/src/test/resources/example/model-properties/tca/modelBpmnProperties.json
new file mode 100644
index 0000000..0bfa78c
--- /dev/null
+++ b/src/test/resources/example/model-properties/tca/modelBpmnProperties.json
@@ -0,0 +1,150 @@
+{
+  "TCA_1jy9to4": {
+    "group1": [
+      {
+        "name": "tname",
+        "value": "group1"
+      },
+      {
+        "name": "tuuid",
+        "value": "f734f031-10aa-t8fb-330f-04dde2886325"
+      },
+      {
+        "name": "tcaPolId",
+        "value": "policy1"
+      },
+      {
+        "name": "eventName",
+        "value": "vFirewallBroadcastPackets"
+      },
+      {
+        "serviceConfigurations": [
+          [
+            "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated",
+            "LESS_OR_EQUAL",
+            "123",
+            "VM",
+            "ABATED"
+          ],
+          [
+            "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta",
+            "GREATER_OR_EQUAL",
+            "123",
+            "VNF",
+            "ONSET"
+          ]
+        ]
+      }
+    ]
+  },
+  "Policy_0honxgv": {
+    "policy1": [
+      {
+        "name": "pname",
+        "value": "policy1"
+      },
+      {
+        "name": "pid",
+        "value": "0"
+      },
+      {
+        "name": "timeout",
+        "value": "345"
+      },
+      {
+        "policyConfigurations": [
+          [
+            {
+              "name": "maxRetries",
+              "value": [
+                "3"
+              ]
+            },
+            {
+              "name": "retryTimeLimit",
+              "value": [
+                "180"
+              ]
+            },
+            {
+              "name": "_id",
+              "value": [
+                "dGLuNqg"
+              ]
+            },
+            {
+              "name": "parentPolicy",
+              "value": [
+                ""
+              ]
+            },
+            {
+              "name": "targetResourceId",
+              "value": [
+                "resourceid"
+              ]
+            }
+          ]
+        ]
+      }
+    ]
+  },
+  "global": [
+    {
+      "name": "actionSet",
+      "value": [
+        "vnfRecipe"
+      ]
+    },
+    {
+      "name": "service",
+      "value": [
+        "serviceUUID"
+      ]
+    },
+    {
+      "name": "location",
+      "value": [
+        "SNDGCA64",
+        "ALPRGAED"
+      ]
+    },
+    {
+      "name": "vf",
+      "value": [
+        "f5213e3a-9191-4362-93b5-b67f8d770e44"
+      ]
+    },
+    {
+      "name": "location",
+      "value": [
+        "SNDGCA64",
+        "ALPRGAED",
+        "LSLEILAA",
+        "MDTWNJC1"
+      ]
+    }
+  ],
+  "shared": {
+    "byService": {
+      "": {
+        "vf": {
+          "": ""
+        },
+        "location": {
+          "": ""
+        },
+        "alarmCondition": {
+          "": ""
+        }
+      }
+    },
+    "byVf": {
+      "": {
+        "vfc": {
+          "": ""
+        }
+      }
+    }
+  }
+}
diff --git a/src/test/resources/example/templatePropForTca.json b/src/test/resources/example/templatePropForTca.json
deleted file mode 100644
index 9f1ce1d..0000000
--- a/src/test/resources/example/templatePropForTca.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-  "global": [
-    {
-      "name": "service",
-      "value": [
-        "tosca_definitions_version: cloudify_dsl_1_2\r\n\r\nimports:\r\n- http://www.getcloudify.org/spec/cloudify/3.3.1/types.yaml\r\n- http://135.207.127.211/1607_prod/type_files/cdap_app.yaml\r\n\r\nnode_templates:\r\n  MTCA:\r\n    type: dcae.nodes.cdap_app\r\n    properties:\r\n      service_name: \"cdap-mtca-central\"\r\n      deployment_JSON: |-\r\n          {\r\n            \"clusterService\": {\"$ref\": \"/services/vm-cdap-cluster-central/instances/rdm2c\"},\r\n            \"namespace\": \"MTCA\",\r\n            \"appNames\": [ \"cdap-mtca\" ],\r\n            \"flowNames\": [ \"cdap-mtca.TCAVESCollectorFlow\" ],\r\n            \"workerNames\": [\"cdap-mtca.TCADMaaPMRSubscriberWorker\", \"cdap-mtca.TCADMaaPMRPublisherWorker\"],\r\n            \"serviceNames\" : [],\r\n            \"apps\": {\r\n              \"cdap-mtca\": {\r\n                \"jarFile\": \"/opt/app/cdap-apps/dcae-analytics-mtca-1.0.0.jar\",\r\n                \"artifactName\": \"dcae-analytics-mtca\",\r\n                \"version\": \"1.0.0\",\r\n                \"appConfigFileContent\": \"{config:{ \\\"appName\\\":\\\"cdap-mtca\\\", \\\"appDescription\\\":\\\"DCAE Analytics Threshold Crossing Alert Application\\\", \\\"tcaSubscriberOutputStreamName\\\":\\\"TCASubscriberOutputStream\\\", \\\"thresholdCalculatorFlowletInstances\\\":2, \\\"tcaVESMessageStatusTableName\\\":\\\"TCAVESMessageStatusTable\\\", \\\"tcaVESMessageStatusTableTTLSeconds\\\":864000, \\\"tcaVESAlertsTableName\\\":\\\"TCAVESAlertsTable\\\", \\\"tcaVESAlertsTableTTLSeconds\\\":1728000 }}\"\r\n              }\r\n            },\r\n          \r\n            \"configuration\": {\r\n                \"$class\": \"com.att.ecomp.dcae.clamp.common.MThresholdCrossingConfiguration\",\r\n                \"subscriberContentType\": \"\",\r\n                \"subscriberConsumerId\": \"c12\",\r\n                \"subscriberConsumerGroup\": \"OpenDCAE-c12\",\r\n                \"subscriberTimeoutMS\": \"-1\",\r\n                \"subscriberMessageLimit\": \"-1\",\r\n                \"subscriberPollingInterval\": \"20000\",\r\n                \"publisherContentType\": \"application/json\",\r\n                \"publisherMaxBatchSize\": \"10\",\r\n                \"publisherMaxRecoveryQueueSize\": \"100000\",\r\n                \"publisherPollingInterval\": \"20000\",\r\n                \"publisherAlertWindowingTime\": \"86400\",\r\n                \"policyName\": \"policy.dcae.configuration\",\r\n                \"policyScope\": \"pnf=eNodeB;type=configuration\",\r\n                \"policyVersion\": \"1.0.0\",\r\n                \"domain\" : \"measurementsForVfScaling\",\r\n                \r\n                \"signatures\" : {\r\n             \t }\r\n\r\n             }\r\n          }\r\n"
-      ]
-    }
-  ]
-}
\ No newline at end of file
diff --git a/src/test/resources/expected/tca.json b/src/test/resources/expected/tca.json
deleted file mode 100644
index 2fd16bd..0000000
--- a/src/test/resources/expected/tca.json
+++ /dev/null
@@ -1,93 +0,0 @@
-{
-    "service": "MThresholdCrossingConfiguration",
-    "location": "Edge",
-    "uuid": "TestUUID",
-    "policyName": "example_model06.ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_TCA_",
-    "description": "from clds",
-    "configName": "MThresholdCrossingConfiguration",
-    "templateVersion": "5.2.0.1",
-    "priority": "4",
-    "version": "5.2.0.1",
-    "policyScope": "resource=F5,service=vSCP,type=configuration,closedLoopControlName=vSCP_F5_Firewall_d925ed73-8231-4d02-9545-db4e101f88f8",
-    "content": 
-    {
-        "$class": "com.att.ecomp.dcae.clamp.common.MThresholdCrossingConfiguration",
-        "domain": "measurementsForVfScaling",
-        "policyScope": "pnf=eNodeB;type=configuration",
-        "policyName": "policy.dcae.configuration",
-        "policyVersion": "1.0.0",
-        "subscriberContentType": "application/json",
-        "subscriberConsumerId": "c13",
-        "subscriberConsumerGroup": "OpenDCAE-c13",
-        "subscriberTimeoutMS": "-1",
-        "subscriberMessageLimit": "-1",
-        "subscriberPollingInterval": "20000",
-        "publisherContentType": "application/json",
-        "publisherMaxBatchSize": "10",
-        "publisherMaxRecoveryQueueSize": "100000",
-        "publisherPollingInterval": "20000",
-        "publisherAlertWindowingTime": "86400",
-        "signatures": 
-        [
-            {
-                "nfNamingCode": "ENBE",
-                "target": "common_id",
-                "targetType": "eNodeB",
-                "useCaseName": "Narra",
-                "signatureName": "Narra_886be8da-14fe-tca1-d04b-d13b55d58df9",
-                "signatureUuid": "886be8da-14fe-tca1-d04b-d13b55d58df9",
-                "closedLoopControlName": "ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_1",
-                "severity": "Warning",
-                "version": "1.0.2",
-                "maxInterval": 2,
-                "minMessageViolations": 3,
-                "thresholds": 
-                [
-                    {
-                        "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[?(@.Name == 'PMRRCCONNESTABFAILCELLLATENCY')].Value",
-                        "thresholdName": "PMRRCCONNESTABFAILCELLLATENCY",
-                        "thresholdValue": 4,
-                        "direction": "LESS"
-                    },
-
-                    {
-                        "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[?(@.Name == 'PMRAATTCBRA')].Value",
-                        "thresholdName": "PMRAATTCBRA",
-                        "thresholdValue": 30,
-                        "direction": "GREATER"
-                    }
-                ]
-            },
-
-            {
-                "nfNamingCode": "ENBE",
-                "target": "common_id",
-                "targetType": "eNodeB",
-                "useCaseName": "Srini",
-                "signatureName": "Srini_8b5ba88d-f4b4-tf0e-50b1-78a5a7dd412d",
-                "signatureUuid": "8b5ba88d-f4b4-tf0e-50b1-78a5a7dd412d",
-                "closedLoopControlName": "ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_2",
-                "severity": "Critical",
-                "version": "1.0.2",
-                "maxInterval": 10,
-                "minMessageViolations": 5,
-                "thresholds": 
-                [
-                    {
-                        "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[?(@.Name == 'PMRRCCONNESTABFAILCELLLATENCY')].Value",
-                        "thresholdName": "PMRRCCONNESTABFAILCELLLATENCY",
-                        "thresholdValue": 3,
-                        "direction": "EQUAL"
-                    },
-
-                    {
-                        "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[?(@.Name == 'PMRAATTCBRA')].Value",
-                        "thresholdName": "PMRAATTCBRA",
-                        "thresholdValue": 30,
-                        "direction": "GREATER"
-                    }
-                ]
-            }
-        ]
-    }
-}
\ No newline at end of file
