diff --git a/ui-react/src/components/dialogs/ConfigurationPolicy/ConfigurationPolicyModal.js b/ui-react/src/components/dialogs/ConfigurationPolicy/ConfigurationPolicyModal.js
index b3b7383..4fbb783 100644
--- a/ui-react/src/components/dialogs/ConfigurationPolicy/ConfigurationPolicyModal.js
+++ b/ui-react/src/components/dialogs/ConfigurationPolicy/ConfigurationPolicyModal.js
@@ -46,25 +46,26 @@
 		this.handleClose = this.handleClose.bind(this);
 		this.handleSave = this.handleSave.bind(this);
 		this.renderJsonEditor = this.renderJsonEditor.bind(this);
-		//this.state.componentName = props.match.params.componentName;
 	}
 
 	handleSave() {
-
 		var errors = this.state.jsonEditor.validate();
 		var editorData = this.state.jsonEditor.getValue();
 
 		if (errors.length !== 0) {
 			console.error("Errors detected during config policy data validation ", errors);
+			this.setState({ show: false });
+			this.props.history.push('/');
 		}
 		else {
 			console.info("NO validation errors found in config policy data");
 			this.state.loopCache.updateMicroServiceProperties(this.state.componentName, editorData[0]);
-			LoopService.setMicroServiceProperties(this.state.loopCache.getLoopName(), this.state.loopCache.getMicroServiceForName(this.state.componentName));
+			LoopService.setMicroServiceProperties(this.state.loopCache.getLoopName(), this.state.loopCache.getMicroServiceForName(this.state.componentName)).then(resp => {
+				this.setState({ show: false });
+				this.props.history.push('/');
+				this.props.loadLoopFunction(this.state.loopCache.getLoopName());
+			});
 		}
-
-		this.setState({ show: false });
-		this.props.history.push('/');
 	}
 
 	handleClose() {
diff --git a/ui-react/src/components/dialogs/LoopProperties.js b/ui-react/src/components/dialogs/LoopProperties.js
index 1c0d015..dac7765 100644
--- a/ui-react/src/components/dialogs/LoopProperties.js
+++ b/ui-react/src/components/dialogs/LoopProperties.js
@@ -36,6 +36,7 @@
 	state = {
 		show: true,
 		loopCache: this.props.loopCache,
+		temporaryPropertiesJson: JSON.parse(JSON.stringify(this.props.loopCache.getGlobalProperties())),
 	};
 
 	constructor(props, context) {
@@ -43,6 +44,8 @@
 
 		this.handleClose = this.handleClose.bind(this);
 		this.handleSave = this.handleSave.bind(this);
+		this.handleChange = this.handleChange.bind(this);
+		
 		this.renderDcaeParameters = this.renderDcaeParameters.bind(this);
 		this.renderAllParameters = this.renderAllParameters.bind(this);
 		this.getDcaeParameters = this.getDcaeParameters.bind(this);
@@ -51,6 +54,8 @@
 	componentWillReceiveProps(newProps) {
 		this.setState({
 			loopCache: newProps.loopCache,
+			temporaryPropertiesJson: JSON.parse(JSON.stringify(newProps.loopCache.getGlobalProperties())),
+			
 		});
 	}
 
@@ -59,12 +64,15 @@
 	}
 
 	handleSave(event) {
-		// translate the deploymentParameter into jsonFormat at submit time
-
+		LoopService.updateGlobalProperties(this.state.loopCache.getLoopName(), this.state.temporaryPropertiesJson).then(resp => {
+			this.setState({ show: false });
+			this.props.history.push('/');
+			this.props.loadLoopFunction(this.state.loopCache.getLoopName());
+		});
 	}
 
-	saveAllProperties() {
-
+	handleChange(event) {
+		this.setState({temporaryPropertiesJson:{[event.target.name]: JSON.parse(event.target.value)}});
 	}
 
 	renderAllParameters() {
@@ -77,8 +85,8 @@
 	}
 
 	getDcaeParameters() {
-		if (typeof (this.state.loopCache.getGlobalProperties()) !== "undefined") {
-			return JSON.stringify(this.state.loopCache.getGlobalProperties()["dcaeDeployParameters"]);
+		if (typeof (this.state.temporaryPropertiesJson) !== "undefined") {
+			return JSON.stringify(this.state.temporaryPropertiesJson["dcaeDeployParameters"]);
 		} else {
 			return "";
 		}
@@ -89,7 +97,7 @@
 		return (
 			<Form.Group >
 				<Form.Label>Deploy Parameters</Form.Label>
-				<Form.Control as="textarea" rows="3" name="dcaeDeployParameters">{this.getDcaeParameters()}</Form.Control>
+				<Form.Control as="textarea" rows="3" name="dcaeDeployParameters" onChange={this.handleChange} defaultValue={this.getDcaeParameters()}></Form.Control>
 			</Form.Group>
 		);
 	}
diff --git a/ui-react/src/components/dialogs/OpenLoop/OpenLoopModal.js b/ui-react/src/components/dialogs/OpenLoop/OpenLoopModal.js
index 0bf7158..fbfc727 100644
--- a/ui-react/src/components/dialogs/OpenLoop/OpenLoopModal.js
+++ b/ui-react/src/components/dialogs/OpenLoop/OpenLoopModal.js
@@ -44,7 +44,6 @@
 
 		this.getLoopNames = this.getLoopNames.bind(this);
 		this.handleOpen = this.handleOpen.bind(this);
-		this.getModel = this.getModel.bind(this);
 		this.handleClose = this.handleClose.bind(this);
 		this.handleDropdownListChange = this.handleDropdownListChange.bind(this);
 		this.state = {
@@ -74,18 +73,11 @@
 		});
 	}
 
-	getModel() {
-		LoopService.getLoop(this.state.chosenLoopName).then(loop => {
-			console.debug("Settingloop cache with json");
-			this.props.updateLoopCacheFunction(loop);
-		});
-	}
-
 	handleOpen() {
 		console.info("Loop " + this.state.chosenLoopName + " is chosen");
 		this.setState({ show: false });
 		this.props.history.push('/');
-		this.getModel();
+		this.props.loadLoopFunction(this.state.chosenLoopName);
 	}
 
 	render() {
