diff --git a/src/main/java/org/onap/clamp/loop/CsarInstaller.java b/src/main/java/org/onap/clamp/loop/CsarInstaller.java
index 371f88e..16351b8 100644
--- a/src/main/java/org/onap/clamp/loop/CsarInstaller.java
+++ b/src/main/java/org/onap/clamp/loop/CsarInstaller.java
@@ -31,7 +31,6 @@
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
-import java.util.Map;
 import java.util.Map.Entry;
 
 import org.json.simple.parser.ParseException;
@@ -45,7 +44,7 @@
 import org.onap.clamp.clds.sdc.controller.installer.MicroService;
 import org.onap.clamp.clds.util.JsonUtils;
 import org.onap.clamp.clds.util.drawing.SvgFacade;
-import org.onap.clamp.loop.deploy.DeployParameters;
+import org.onap.clamp.loop.deploy.DcaeDeployParameters;
 import org.onap.clamp.loop.service.Service;
 import org.onap.clamp.loop.service.ServiceRepository;
 import org.onap.clamp.policy.Policy;
@@ -98,7 +97,7 @@
     @Autowired
     private SvgFacade svgFacade;
 
-   /**
+    /**
     * Verify whether Csar is deployed.
     * 
     * @param csar The Csar Handler
@@ -241,7 +240,7 @@
     }
 
     private JsonObject createGlobalPropertiesJson(BlueprintArtifact blueprintArtifact, Loop newLoop) {
-        return new DeployParameters(blueprintArtifact, newLoop).getDeploymentParametersinJson();
+        return DcaeDeployParameters.getDcaeDeploymentParametersInJson(blueprintArtifact, newLoop);
     }
 
     private static JsonObject createVfModuleProperties(CsarHandler csar) {
diff --git a/src/main/java/org/onap/clamp/loop/LoopController.java b/src/main/java/org/onap/clamp/loop/LoopController.java
index 72726fa..64874a3 100644
--- a/src/main/java/org/onap/clamp/loop/LoopController.java
+++ b/src/main/java/org/onap/clamp/loop/LoopController.java
@@ -117,4 +117,14 @@
         Loop loop = loopService.getLoop(loopName);
         return loop != null ? loop.getSvgRepresentation() : null;
     }
+
+    /**
+     * Refresh the Operational Policy Json representation of the loop.
+     *
+     * @param loopName The loop name
+     * @return The refreshed Loop
+     */
+    public Loop refreshOpPolicyJsonRepresentation(String loopName) {
+        return loopService.refreshOpPolicyJsonRepresentation(loopName);
+    }
 }
diff --git a/src/main/java/org/onap/clamp/loop/LoopService.java b/src/main/java/org/onap/clamp/loop/LoopService.java
index 85e24cd..e520296 100644
--- a/src/main/java/org/onap/clamp/loop/LoopService.java
+++ b/src/main/java/org/onap/clamp/loop/LoopService.java
@@ -105,4 +105,20 @@
         return loopsRepository.findById(loopName)
                 .orElseThrow(() -> new EntityNotFoundException("Couldn't find closed loop named: " + loopName));
     }
+
+    /**
+    * Api to refresh the Operational Policy UI window.
+    * 
+    * @param loopName The loop Name
+    * @return The refreshed loop object
+    */
+    public Loop refreshOpPolicyJsonRepresentation(String loopName) {
+        Loop loop = findClosedLoopByName(loopName);
+        Set<OperationalPolicy> policyList = loop.getOperationalPolicies();
+        for (OperationalPolicy policy : policyList) {
+            policy.updateJsonRepresentation();
+        }
+        loop.setOperationalPolicies(policyList);
+        return loopsRepository.save(loop);
+    }
 }
diff --git a/src/main/java/org/onap/clamp/loop/deploy/DeployParameters.java b/src/main/java/org/onap/clamp/loop/deploy/DcaeDeployParameters.java
similarity index 75%
rename from src/main/java/org/onap/clamp/loop/deploy/DeployParameters.java
rename to src/main/java/org/onap/clamp/loop/deploy/DcaeDeployParameters.java
index c994af7..1a75f71 100644
--- a/src/main/java/org/onap/clamp/loop/deploy/DeployParameters.java
+++ b/src/main/java/org/onap/clamp/loop/deploy/DcaeDeployParameters.java
@@ -35,33 +35,14 @@
 import org.onap.clamp.policy.microservice.MicroServicePolicy;
 import org.yaml.snakeyaml.Yaml;
 
-public class DeployParameters  {
+/**
+ * To decode the bluprint input parameters.
+ */
+public class DcaeDeployParameters  {
 
-    private LinkedHashMap<String, JsonObject> deploymentParamMap = new LinkedHashMap<String, JsonObject>();
-
-    /**
-     * Constructor.
-     * 
-     * @param blueprintArtifactList A list of blueprint artifacts
-     * @param loop The loop object
-     */
-    public DeployParameters(LinkedHashSet<BlueprintArtifact> blueprintArtifactList, Loop loop) {
-        this.init(blueprintArtifactList, loop);
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param blueprintArtifact One blueprint artifact
-     * @param loop The loop object
-     */
-    public DeployParameters(BlueprintArtifact blueprintArtifact, Loop loop) {
-        LinkedHashSet<BlueprintArtifact> blueprintArtifactList = new LinkedHashSet<BlueprintArtifact>();
-        blueprintArtifactList.add(blueprintArtifact);
-        this.init(blueprintArtifactList, loop);
-    }
-
-    private void init(LinkedHashSet<BlueprintArtifact> blueprintArtifactList, Loop loop) {
+    private static LinkedHashMap<String, JsonObject> init(LinkedHashSet<BlueprintArtifact> blueprintArtifactList,
+            Loop loop) {
+        LinkedHashMap<String, JsonObject> deploymentParamMap = new LinkedHashMap<String, JsonObject>();
         String microServiceName = ((MicroServicePolicy) loop.getMicroServicePolicies().toArray()[0]).getName();
         // Add index to the microservice name from the 2nd blueprint artifact for now.
         // Update the microservice names, when able to link the microserivce <-> blueprint in the future
@@ -69,15 +50,18 @@
         for (BlueprintArtifact blueprintArtifact: blueprintArtifactList) {
             if (index > 0) {
                 deploymentParamMap.put(microServiceName + index, 
-                        generateDeployParameter(blueprintArtifact, microServiceName));
+                        generateDcaeDeployParameter(blueprintArtifact, microServiceName));
             } else {
-                deploymentParamMap.put(microServiceName, generateDeployParameter(blueprintArtifact, microServiceName));
+                deploymentParamMap.put(microServiceName, 
+                        generateDcaeDeployParameter(blueprintArtifact, microServiceName));
             }
             index++;
         }
+        return deploymentParamMap;
     }
 
-    private JsonObject generateDeployParameter(BlueprintArtifact blueprintArtifact, String microServiceName) {
+    private static JsonObject generateDcaeDeployParameter(BlueprintArtifact blueprintArtifact,
+            String microServiceName) {
         JsonObject deployJsonBody = new JsonObject();
         Yaml yaml = new Yaml();
         Map<String, Object> inputsNodes = ((Map<String, Object>) ((Map<String, Object>) yaml
@@ -95,7 +79,7 @@
         return deployJsonBody;
     }
 
-    private void addPropertyToNode(JsonObject node, String key, Object value) {
+    private static void addPropertyToNode(JsonObject node, String key, Object value) {
         if (value instanceof String) {
             node.addProperty(key, (String) value);
         } else if (value instanceof Number) {
@@ -114,7 +98,10 @@
      *
      * @return The deploymentParameters in Json
      */
-    public JsonObject getDeploymentParametersinJson() {
+    public static JsonObject getDcaeDeploymentParametersInJson(LinkedHashSet<BlueprintArtifact> blueprintArtifactList,
+            Loop loop) {
+        LinkedHashMap<String, JsonObject> deploymentParamMap = init(blueprintArtifactList, loop);
+
         JsonObject globalProperties = new JsonObject();
         JsonObject deployParamJson = new JsonObject();
         for (Map.Entry<String, JsonObject> mapElement: deploymentParamMap.entrySet()) {
@@ -124,4 +111,14 @@
         return globalProperties;
     }
 
+    /**
+     * Convert the object in Json.
+     *
+     * @return The deploymentParameters in Json
+     */
+    public static JsonObject getDcaeDeploymentParametersInJson(BlueprintArtifact blueprintArtifact, Loop loop) {
+        LinkedHashSet<BlueprintArtifact> blueprintArtifactList = new LinkedHashSet<BlueprintArtifact>();
+        blueprintArtifactList.add(blueprintArtifact);
+        return getDcaeDeploymentParametersInJson(blueprintArtifactList, loop);
+    }
 }
diff --git a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java
index e8bf4a6..d9e8a57 100644
--- a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java
+++ b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java
@@ -174,7 +174,7 @@
 
     @Override
     public JsonObject getJsonRepresentation() {
-         return jsonRepresentation;
+        return jsonRepresentation;
     }
 
     void setJsonRepresentation(JsonObject jsonRepresentation) {
@@ -282,4 +282,17 @@
         return result;
     }
 
+    /**
+    * Regenerate the Operational Policy Json Representation.
+    *
+    */
+    public void updateJsonRepresentation() {
+        try {
+            this.jsonRepresentation = OperationalPolicyRepresentationBuilder
+                    .generateOperationalPolicySchema(loop.getModelService());
+        } catch (JsonSyntaxException | IOException | NullPointerException e) {
+            logger.error("Unable to generate the operational policy Schema ... ", e);
+            this.jsonRepresentation = new JsonObject();
+        }
+    }
 }
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 cf99625..a0a3eb1 100644
--- a/src/main/resources/clds/camel/rest/clamp-api-v2.xml
+++ b/src/main/resources/clds/camel/rest/clamp-api-v2.xml
@@ -238,6 +238,48 @@
 			</route>
 		</put>
 		<put
+			uri="/v2/loop/refreshOpPolicyJsonSchema/{loopName}"
+			outType="org.onap.clamp.loop.Loop"
+			produces="application/json">
+			<route>
+				<removeHeaders
+					pattern="*"
+					excludePattern="loopName" />
+				<doTry>
+					<log
+						loggingLevel="INFO"
+						message="Refresh Operational Policy UI for loop: ${header.loopName}" />
+					<to
+						uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'REFRESH OP Policy UI request')" />
+					<to
+						uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
+					<to uri="direct:load-loop" />
+					<to
+						uri="bean:org.onap.clamp.loop.LoopController?method=refreshOpPolicyJsonRepresentation(${header.loopName})" />
+					<log
+						loggingLevel="INFO"
+						message="REFRESH request successfully executed for loop: ${header.loopName}" />
+					<to
+						uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('REFRESH request successfully executed','INFO',${exchangeProperty[loopObject]})" />
+					<to
+						uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
+					<doCatch>
+						<exception>java.lang.Exception</exception>
+						<handled>
+							<constant>false</constant>
+						</handled>
+						<to
+							uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
+						<log
+							loggingLevel="ERROR"
+							message="REFRESH request failed for loop: ${header.loopName}" />
+						<to
+							uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('REFRESH request failed, Error reported: ${exception} - Body: ${exception.responseBody}','ERROR',${exchangeProperty[loopObject]})" />
+					</doCatch>
+				</doTry>
+			</route>
+		</put>
+		<put
 			uri="/v2/loop/undeploy/{loopName}"
 			outType="org.onap.clamp.loop.Loop"
 			produces="application/json">
diff --git a/src/main/resources/clds/camel/routes/loop-flows.xml b/src/main/resources/clds/camel/routes/loop-flows.xml
index 036e8ef..57d32f0 100644
--- a/src/main/resources/clds/camel/routes/loop-flows.xml
+++ b/src/main/resources/clds/camel/routes/loop-flows.xml
@@ -17,7 +17,6 @@
 			<stop />
 		</when>
 	</route>
-
 	<route id="update-policy-status-for-loop">
 		<from uri="direct:update-policy-status-for-loop" />
 		<setProperty propertyName="policyComponent">
diff --git a/src/main/resources/clds/camel/routes/policy-flows.xml b/src/main/resources/clds/camel/routes/policy-flows.xml
index 75ac66c..223498e 100644
--- a/src/main/resources/clds/camel/routes/policy-flows.xml
+++ b/src/main/resources/clds/camel/routes/policy-flows.xml
@@ -97,9 +97,9 @@
 				</simple>
 			</setHeader>
 			<log loggingLevel="INFO"
-				message="Endpoint to get policy deployment status: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyType]}/versions/1.0.0/policies/${exchangeProperty[policyName]}/versions/deployed"></log>
+				message="Endpoint to get policy deployment status: {{clamp.config.policy.pap.url}}/policy/pap/v1/policies/deployed/${exchangeProperty[policyName]}/1.0.0"></log>
 			<toD
-				uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyType]}/versions/1.0.0/policies/${exchangeProperty[policyName]}/versions/deployed?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+				uri="{{clamp.config.policy.pap.url}}/policy/pap/v1/policies/${exchangeProperty[policyName]}/1.0.0?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
 			<doFinally>
 				<to uri="direct:reset-raise-http-exception-flag" />
 				<to
diff --git a/src/test/java/org/onap/clamp/clds/model/dcae/DcaeInventoryResponseCacheTest.java b/src/test/java/org/onap/clamp/clds/model/dcae/DcaeInventoryResponseCacheTest.java
index 70d1b4a..26cc831 100644
--- a/src/test/java/org/onap/clamp/clds/model/dcae/DcaeInventoryResponseCacheTest.java
+++ b/src/test/java/org/onap/clamp/clds/model/dcae/DcaeInventoryResponseCacheTest.java
@@ -32,6 +32,9 @@
 
     public static DcaeInventoryCache inventoryCache = new DcaeInventoryCache();
 
+    /**
+     * Initialize the responses.
+     */
     @BeforeClass
     public static void createExample() {
         DcaeInventoryResponse response1 = new DcaeInventoryResponse();
diff --git a/src/test/java/org/onap/clamp/loop/deploy/DeployParametersTest.java b/src/test/java/org/onap/clamp/loop/deploy/BlueprintInputParametersTest.java
similarity index 94%
rename from src/test/java/org/onap/clamp/loop/deploy/DeployParametersTest.java
rename to src/test/java/org/onap/clamp/loop/deploy/BlueprintInputParametersTest.java
index 8834ef6..75ca25c 100644
--- a/src/test/java/org/onap/clamp/loop/deploy/DeployParametersTest.java
+++ b/src/test/java/org/onap/clamp/loop/deploy/BlueprintInputParametersTest.java
@@ -41,7 +41,7 @@
 import org.onap.clamp.policy.microservice.MicroServicePolicy;
 import org.onap.sdc.tosca.parser.exceptions.SdcToscaParserException;
 
-public class DeployParametersTest {
+public class BlueprintInputParametersTest {
 
     private BlueprintArtifact buildFakeBuildprintArtifact(String blueprintFilePath) throws IOException {
         BlueprintArtifact blueprintArtifact = Mockito.mock(BlueprintArtifact.class);
@@ -77,8 +77,7 @@
         umServiceSet.add(umService);
         Mockito.when(loop.getMicroServicePolicies()).thenReturn(umServiceSet);
 
-        DeployParameters deployParams = new DeployParameters(buildFakeCsarHandler(), loop);
-        JsonObject paramJson = deployParams.getDeploymentParametersinJson();
+        JsonObject paramJson = DcaeDeployParameters.getDcaeDeploymentParametersInJson(buildFakeCsarHandler(), loop);
 
         Assert.assertEquals(JsonUtils.GSON_JPA_MODEL.toJson(paramJson), 
             ResourceFileUtil.getResourceAsString("example/sdc/expected-result/deployment-parameters.json"));
diff --git a/src/test/resources/http-cache/third_party_proxy.py b/src/test/resources/http-cache/third_party_proxy.py
index 5ec9f46..9dcc4b3 100755
--- a/src/test/resources/http-cache/third_party_proxy.py
+++ b/src/test/resources/http-cache/third_party_proxy.py
@@ -237,7 +237,7 @@
         with open(cached_file_content, 'w+') as f:
                 f.write(self.data_string)
         return True
-     elif self.path.startswith("/policy/api/v1/policytypes/") and http_type == "GET":
+     elif (self.path.startswith("/policy/api/v1/policytypes/") or self.path.startswith("/policy/pap/v1/policies/deployed/")) and http_type == "GET":
         print "self.path start with /policy/api/v1/policytypes/, generating response json..."
         jsonGenerated =  "{\"policyTypeId\": \"onap.policies.controlloop.operational\",\"policyTypeVersion\": \"1.0.0\",\"policyId\": \"OPERATIONAL_z711F_v1_0_ResourceInstanceName1_tca\"}"
         print "jsonGenerated: " + jsonGenerated
diff --git a/ui-react/src/LoopUI.js b/ui-react/src/LoopUI.js
index 58fbce6..eb4ff6a 100644
--- a/ui-react/src/LoopUI.js
+++ b/ui-react/src/LoopUI.js
@@ -252,7 +252,7 @@
 				<Route path="/viewToscaPolicyModal" render={(routeProps) => (<ViewToscaPolicyModal {...routeProps} />)} />
 				<Route path="/viewBlueprintMicroServiceTemplatesModal" render={(routeProps) => (<ViewBlueprintMicroServiceTemplatesModal {...routeProps} />)} />
 				<Route path="/operationalPolicyModal"
-					render={(routeProps) => (<OperationalPolicyModal {...routeProps} loopCache={this.getLoopCache()} loadLoopFunction={this.loadLoop} showAlert={this.showAlert}/>)} />
+					render={(routeProps) => (<OperationalPolicyModal {...routeProps} loopCache={this.getLoopCache()} loadLoopFunction={this.loadLoop} updateLoopFunction={this.updateLoopCache} showAlert={this.showAlert}/>)} />
 				<Route path="/configurationPolicyModal/:componentName" render={(routeProps) => (<ConfigurationPolicyModal {...routeProps} loopCache={this.getLoopCache()} loadLoopFunction={this.loadLoop}/>)} />
 				<Route path="/openLoop" render={(routeProps) => (<OpenLoopModal {...routeProps} loadLoopFunction={this.loadLoop} />)} />
 				<Route path="/loopProperties" render={(routeProps) => (<LoopPropertiesModal {...routeProps} loopCache={this.getLoopCache()} loadLoopFunction={this.loadLoop}/>)} />
diff --git a/ui-react/src/api/LoopCache.js b/ui-react/src/api/LoopCache.js
index 95eb931..c73ed62 100644
--- a/ui-react/src/api/LoopCache.js
+++ b/ui-react/src/api/LoopCache.js
@@ -53,13 +53,19 @@
 	}
 	
 	getOperationalPolicyJsonSchema() {
-		return this.loopJsonCache["operationalPolicySchema"];
+		return this.loopJsonCache["operationalPolicies"]["0"]["jsonRepresentation"];
 	}
 
 	getOperationalPolicies() {
 		return this.loopJsonCache["operationalPolicies"];
 	}
 
+	getOperationalPoliciesNoJsonSchema() {
+		var operationalPolicies = JSON.parse(JSON.stringify(this.loopJsonCache["operationalPolicies"]));
+		delete operationalPolicies[0]["jsonRepresentation"];
+		return operationalPolicies;
+	}
+
 	getGlobalProperties() {
 		return this.loopJsonCache["globalPropertiesJson"];
 	}
diff --git a/ui-react/src/api/LoopCache.test.js b/ui-react/src/api/LoopCache.test.js
index f67bc0a..471fa4d 100644
--- a/ui-react/src/api/LoopCache.test.js
+++ b/ui-react/src/api/LoopCache.test.js
@@ -49,13 +49,36 @@
           "operational_policy": {
             "controlLoop": {},
             "policies": []
-
           }
-        }
+        },
+       "jsonRepresentation": {
+        "schema": {}
+      }
       }];
       expect(loopCache.getOperationalPolicies()).toStrictEqual(opPolicy);
     });
 
+    it('getOperationalPoliciesNoJsonSchema', () => {
+      const opPolicy = [{
+        "name": "OPERATIONAL_h2NMX_v1_0_ResourceInstanceName1_tca",
+        "configurationsJson": {
+          "guard_policies": {},
+          "operational_policy": {
+            "controlLoop": {},
+            "policies": []
+          }
+        }
+      }];
+      expect(loopCache.getOperationalPoliciesNoJsonSchema()).toStrictEqual(opPolicy);
+    });
+
+    it('getOperationalPolicyJsonSchema', () => {
+      const jsonSchema = {
+          "schema": {}
+      };
+
+      expect(loopCache.getOperationalPolicyJsonSchema()).toStrictEqual(jsonSchema);
+    });
     it('getGlobalProperties', () => {
       const globelProp = {
         "dcaeDeployParameters": {
diff --git a/ui-react/src/api/LoopCache_mokeLoopJsonCache.json b/ui-react/src/api/LoopCache_mokeLoopJsonCache.json
index c84b5b6..087ab5d 100644
--- a/ui-react/src/api/LoopCache_mokeLoopJsonCache.json
+++ b/ui-react/src/api/LoopCache_mokeLoopJsonCache.json
@@ -93,6 +93,9 @@
           "controlLoop": {},
           "policies": []
         }
+      },
+      "jsonRepresentation": {
+        "schema": {}
       }
     }
   ],
diff --git a/ui-react/src/api/LoopService.js b/ui-react/src/api/LoopService.js
index e2e2348..ead2cf8 100644
--- a/ui-react/src/api/LoopService.js
+++ b/ui-react/src/api/LoopService.js
@@ -152,4 +152,27 @@
 				return "";
 			});
 	}
+
+	static refreshOpPolicyJson(loopName) {
+		return fetch('/restservices/clds/v2/loop/refreshOpPolicyJsonSchema/' + loopName, {
+			method: 'PUT',
+			headers: {
+				"Content-Type": "application/json"
+			},
+			credentials: 'same-origin'
+		})
+			.then(function (response) {
+				console.debug("Refresh Operational Policy Json Schema response received: ", response.status);
+				if (response.ok) {
+					return response.json();
+				} else {
+					console.error("Refresh Operational Policy Json Schema query failed");
+					return {};
+				}
+			})
+			.catch(function (error) {
+				console.error("Refresh Operational Policy Json Schema error received", error);
+				return {};
+			});
+	}
 }
diff --git a/ui-react/src/components/dialogs/Loop/DeployLoopModal.js b/ui-react/src/components/dialogs/Loop/DeployLoopModal.js
index 9c9a16f..6468e9f 100644
--- a/ui-react/src/components/dialogs/Loop/DeployLoopModal.js
+++ b/ui-react/src/components/dialogs/Loop/DeployLoopModal.js
@@ -37,11 +37,9 @@
 	padding: .25rem 1.5rem;
 `
 export default class DeployLoopModal extends React.Component {
-	state = {
-		loopCache: this.props.loopCache,
-		temporaryPropertiesJson: JSON.parse(JSON.stringify(this.props.loopCache.getGlobalProperties())),
-		show: true
-	};
+
+
+		
 	constructor(props, context) {
 		super(props, context);
 
@@ -50,6 +48,24 @@
 		this.handleChange = this.handleChange.bind(this);
 		this.refreshStatus = this.refreshStatus.bind(this);
 		this.renderDeployParam = this.renderDeployParam.bind(this);
+
+		const propertiesJson = JSON.parse(JSON.stringify(this.props.loopCache.getGlobalProperties()));
+		this.state = {
+			loopCache: this.props.loopCache,
+			temporaryPropertiesJson: propertiesJson,
+			show: true,
+			key: this.getInitialKeyValue(propertiesJson)
+		};
+	}
+	getInitialKeyValue(temporaryPropertiesJson) {
+		const deployJsonList = temporaryPropertiesJson["dcaeDeployParameters"];
+		let initialKey;
+		Object.keys(deployJsonList)
+			.filter((obj) => Object.keys(deployJsonList).indexOf(obj) === 0)
+			.map(obj =>
+				initialKey = obj
+		);
+		return initialKey;
 	}
 	componentWillReceiveProps(newProps) {
 		this.setState({
@@ -57,14 +73,7 @@
 			show: true
 		});
 	}
-	componentDidMount() {
-		const deployJsonList = this.state.temporaryPropertiesJson["dcaeDeployParameters"];
-		Object.keys(deployJsonList)
-			.filter((obj) => Object.keys(deployJsonList).indexOf(obj) === 0)
-			.map(obj =>
-				this.setState({key: obj})
-		);
-	}
+
 	handleClose(){
 		this.props.history.push('/');
 	}
@@ -117,7 +126,6 @@
 		);
 		return indents;
 	}
-
 	renderDeployParam(deployJson) {
 		var indents = [];
 		Object.keys(deployJson).map((item,key) =>
diff --git a/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.js b/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.js
index 5c5f024..dc7c0a4 100644
--- a/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.js
+++ b/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.js
@@ -25,6 +25,7 @@
 import Button from 'react-bootstrap/Button';
 import Modal from 'react-bootstrap/Modal';
 import styled from 'styled-components';
+import LoopCache from '../../../api/LoopCache';
 import LoopService from '../../../api/LoopService';
 import JSONEditor from '@json-editor/json-editor';
 
@@ -45,6 +46,7 @@
 		this.handleClose = this.handleClose.bind(this);
 		this.handleSave = this.handleSave.bind(this);
 		this.renderJsonEditor = this.renderJsonEditor.bind(this);
+		this.handleRefresh = this.handleRefresh.bind(this);
 		this.setDefaultJsonEditorOptions();
 	}
 
@@ -114,7 +116,7 @@
 			console.error("NO Operational policy schema found");
 			return;
 		}
-		var operationalPoliciesData = this.state.loopCache.getOperationalPolicies();
+		var operationalPoliciesData = this.state.loopCache.getOperationalPoliciesNoJsonSchema();
 
 		this.setState({
 				jsonEditor: new JSONEditor(document.getElementById("editor"),
@@ -122,6 +124,25 @@
 			})
 	}
 
+	handleRefresh() {
+		LoopService.refreshOpPolicyJson(this.state.loopCache.getLoopName()).then(data => {
+			var newLoopCache =  new LoopCache(data);
+			var schema_json = newLoopCache.getOperationalPolicyJsonSchema();
+			var operationalPoliciesData = newLoopCache.getOperationalPoliciesNoJsonSchema();
+			document.getElementById("editor").innerHTML = "";
+			this.setState({
+				loopCache: newLoopCache,
+				jsonEditor: new JSONEditor(document.getElementById("editor"),
+					{ schema: schema_json.schema, startval: operationalPoliciesData })
+			})
+			this.props.updateLoopFunction(data);
+			
+		})
+		.catch(error => {
+			console.error("Error while refreshing the Operational Policy Json Representation");
+		});
+	}
+
 	render() {
 		return (
 			<ModalStyled size="xl" show={this.state.show} onHide={this.handleClose}>
@@ -135,10 +156,13 @@
 				<Modal.Footer>
 					<Button variant="secondary" onClick={this.handleClose}>
 						Close
-	            </Button>
+					</Button>
+					<Button variant="secondary" onClick={this.handleRefresh}>
+						Refresh
+					</Button>
 					<Button variant="primary" onClick={this.handleSave}>
 						Save Changes
-	            </Button>
+					</Button>
 				</Modal.Footer>
 			</ModalStyled>
 
diff --git a/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.test.js b/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.test.js
index 9c7da31..c10c6ff 100644
--- a/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.test.js
+++ b/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.test.js
@@ -46,9 +46,9 @@
                         "controlLoop": {},
                         "policies": []
                     }
-                }
-             }],
-            "operationalPolicySchema": {"schema": {}}
+                },
+                "jsonRepresentation" : {"schema": {}}
+             }]
     });
     const historyMock = { push: jest.fn() };
     const flushPromises = () => new Promise(setImmediate);
@@ -57,7 +57,7 @@
       const handleClose = jest.spyOn(OperationalPolicyModal.prototype,'handleClose');
       const component = mount(<OperationalPolicyModal history={historyMock} loopCache={loopCache}/>)
 
-      component.find('[variant="secondary"]').prop('onClick')();
+      component.find('[variant="secondary"]').get(0).props.onClick();
 
       expect(handleClose).toHaveBeenCalledTimes(1);
       expect(component.state('show')).toEqual(false);
@@ -78,4 +78,17 @@
         expect(component.state('show')).toEqual(false);
         expect(historyMock.push.mock.calls[0]).toEqual([ '/']);
     });
+
+    it('Test handleRefresh', async () => {
+        const updateLoopFunction = jest.fn();
+        const handleRefresh = jest.spyOn(OperationalPolicyModal.prototype,'handleRefresh');
+        const component = mount(<OperationalPolicyModal loopCache={loopCache} updateLoopFunction={updateLoopFunction} />)
+
+        component.find('[variant="secondary"]').get(1).props.onClick();
+        await flushPromises();
+        component.update();
+
+        expect(handleRefresh).toHaveBeenCalledTimes(1);
+        expect(component.state('show')).toEqual(true);
+    });
 });
\ No newline at end of file
