diff --git a/ui-react/src/LoopUI.js b/ui-react/src/LoopUI.js
index 9510670..471e872 100644
--- a/ui-react/src/LoopUI.js
+++ b/ui-react/src/LoopUI.js
@@ -37,10 +37,12 @@
 import LoopActionService from './api/LoopActionService';
 
 import { Route } from 'react-router-dom'
+import CreateLoopModal from './components/dialogs/Loop/CreateLoopModal';
 import OpenLoopModal from './components/dialogs/Loop/OpenLoopModal';
 import ModifyLoopModal from './components/dialogs/Loop/ModifyLoopModal';
 import OperationalPolicyModal from './components/dialogs/OperationalPolicy/OperationalPolicyModal';
 import ConfigurationPolicyModal from './components/dialogs/ConfigurationPolicy/ConfigurationPolicyModal';
+import PolicyModal from './components/dialogs/Policy/PolicyModal';
 import LoopPropertiesModal from './components/dialogs/Loop/LoopPropertiesModal';
 import UserInfoModal from './components/dialogs/UserInfoModal';
 import LoopService from './api/LoopService';
@@ -257,6 +259,7 @@
 					render={(routeProps) => (<OperationalPolicyModal {...routeProps} loopCache={this.getLoopCache()} loadLoopFunction={this.loadLoop} updateLoopFunction={this.updateLoopCache} showAlert={this.showAlert}/>)} />
 				<Route path="/policyModal/:policyInstanceType/:policyName" render={(routeProps) => (<PolicyModal {...routeProps} loopCache={this.getLoopCache()} loadLoopFunction={this.loadLoop}/>)} />
 				<Route path="/configurationPolicyModal/:policyName" render={(routeProps) => (<ConfigurationPolicyModal {...routeProps} loopCache={this.getLoopCache()} loadLoopFunction={this.loadLoop}/>)} />
+				<Route path="/createLoop" render={(routeProps) => (<CreateLoopModal {...routeProps} 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}/>)} />
 				<Route path="/modifyLoop" render={(routeProps) => (<ModifyLoopModal {...routeProps} loopCache={this.getLoopCache()} loadLoopFunction={this.loadLoop}/>)} />
diff --git a/ui-react/src/__snapshots__/LoopUI.test.js.snap b/ui-react/src/__snapshots__/LoopUI.test.js.snap
index 3d0137c..7d2c446 100644
--- a/ui-react/src/__snapshots__/LoopUI.test.js.snap
+++ b/ui-react/src/__snapshots__/LoopUI.test.js.snap
@@ -29,6 +29,10 @@
     render={[Function]}
   />
   <Route
+    path="/createLoop"
+    render={[Function]}
+  />
+  <Route
     path="/openLoop"
     render={[Function]}
   />
diff --git a/ui-react/src/__snapshots__/OnapClamp.test.js.snap b/ui-react/src/__snapshots__/OnapClamp.test.js.snap
index 1c456e1..e195523 100644
--- a/ui-react/src/__snapshots__/OnapClamp.test.js.snap
+++ b/ui-react/src/__snapshots__/OnapClamp.test.js.snap
@@ -54,6 +54,10 @@
       render={[Function]}
     />
     <Route
+      path="/createLoop"
+      render={[Function]}
+    />
+    <Route
       path="/openLoop"
       render={[Function]}
     />
diff --git a/ui-react/src/api/LoopService.js b/ui-react/src/api/LoopService.js
index 432eabe..d665f81 100644
--- a/ui-react/src/api/LoopService.js
+++ b/ui-react/src/api/LoopService.js
@@ -38,6 +38,24 @@
 			});
 	}
 
+	static createLoop(loopName, templateName) {
+		return fetch('/restservices/clds/v2/loop/create/' + loopName + '?templateName=' + templateName, {
+			method: 'POST',
+			headers: {
+				"Content-Type": "application/json"
+			},
+			credentials: 'same-origin'
+		})
+			.then(function (response) {
+				console.debug("CreateLoop response received: ", response.status);
+				return response.json();
+			})
+			.catch(function (error) {
+				console.error("CreateLoop error received", error);
+				return "";
+			});
+	}
+
 	static getLoop(loopName) {
 		return fetch('/restservices/clds/v2/loop/' + loopName, {
 			method: 'GET',
diff --git a/ui-react/src/api/TemplateService.js b/ui-react/src/api/TemplateService.js
index 10e0b54..6a65d9a 100644
--- a/ui-react/src/api/TemplateService.js
+++ b/ui-react/src/api/TemplateService.js
@@ -21,6 +21,22 @@
  */
 
 export default class TemplateService {
+	static getTemplateNames() {
+		return fetch('/restservices/clds/v2/templates/names', { method: 'GET', credentials: 'same-origin' })
+			.then(function (response) {
+				console.debug("GetTemplateNames response received: ", response.status);
+				if (response.ok) {
+					return response.json();
+				} else {
+					console.error("GetTemplateNames query failed");
+					return {};
+				}
+			})
+			.catch(function (error) {
+				console.error("GetTemplateNames error received", error);
+				return {};
+			});
+	}
 
   static getBlueprintMicroServiceTemplates() {
     return fetch('restservices/clds/v2/templates', { method: 'GET', credentials: 'same-origin', })
diff --git a/ui-react/src/components/dialogs/Loop/CreateLoopModal.js b/ui-react/src/components/dialogs/Loop/CreateLoopModal.js
new file mode 100644
index 0000000..d6c5e35
--- /dev/null
+++ b/ui-react/src/components/dialogs/Loop/CreateLoopModal.js
@@ -0,0 +1,133 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2020 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============================================
+ * ===================================================================
+ *
+ */
+
+import React from 'react'
+import Select from 'react-select';
+import Button from 'react-bootstrap/Button';
+import Modal from 'react-bootstrap/Modal';
+import Form from 'react-bootstrap/Form';
+import Row from 'react-bootstrap/Row';
+import Col from 'react-bootstrap/Col';
+import styled from 'styled-components';
+import LoopService from '../../../api/LoopService';
+import TemplateService from '../../../api/TemplateService';
+
+const ModalStyled = styled(Modal)`
+	background-color: transparent;
+`
+
+export default class CreateLoopModal extends React.Component {
+	constructor(props, context) {
+		super(props, context);
+
+		this.getTemplateNames = this.getTemplateNames.bind(this);
+		this.handleCreate = this.handleCreate.bind(this);
+		this.handleModelName = this.handleModelName.bind(this);
+		this.handleClose = this.handleClose.bind(this);
+		this.handleDropdownListChange = this.handleDropdownListChange.bind(this);
+		this.state = {
+			show: true,
+			chosenTemplateName: '',
+			modelName: '',
+			templateNames: []
+		};
+	}
+
+	componentWillMount() {
+		this.getTemplateNames();
+	}
+
+	handleClose() {
+		this.setState({ show: false });
+		this.props.history.push('/');
+	}
+
+	handleDropdownListChange(e) {
+		this.setState({ chosenTemplateName: e.value });
+	}
+
+	getTemplateNames() {
+		TemplateService.getTemplateNames().then(templateNames => {
+			const templateOptions = templateNames.map((templateName) => { return { label: templateName, value: templateName } });
+			this.setState({ templateNames: templateOptions })
+		});
+	}
+
+	handleCreate() {
+		if (!this.state.modelName) {
+			alert("A model name is required");
+			return;
+		}
+		console.info("Create Model " + this.state.modelName + ", Template " + this.state.chosenTemplateName + " is chosen");
+		this.setState({ show: false });
+		LoopService.createLoop("LOOP_" + this.state.modelName, this.state.chosenTemplateName).then(text => {
+			console.debug("CreateLoop response received: ", text);
+			try {
+				this.props.history.push('/');
+				this.props.loadLoopFunction("LOOP_" + this.state.modelName);
+			} catch(err) {
+				alert(text);
+				this.props.history.push('/');
+			}
+		})
+		.catch(error => {
+			console.debug("Create Loop failed");
+		});
+
+	}
+
+	handleModelName = event => {
+    	this.setState({
+      		modelName: event.target.value
+    	})
+	}
+
+	render() {
+		return (
+			<ModalStyled size="lg" show={this.state.show} onHide={this.handleClose}>
+				<Modal.Header closeButton>
+					<Modal.Title>Create Model</Modal.Title>
+				</Modal.Header>
+				<Modal.Body>
+					<Form.Group as={Row} controlId="formPlaintextEmail">
+						<Form.Label column sm="2">Template Name</Form.Label>
+						<Col sm="10">
+							<Select onChange={this.handleDropdownListChange} options={this.state.templateNames} />
+						</Col>
+					</Form.Group>
+					<Form.Group controlId="formPlaintextEmail">
+						<Form.Label column sm="2">Model Name:</Form.Label>
+						<input type="text" style={{width: '50%'}}
+							value={this.state.modelName}
+							onChange={this.handleModelName}
+						/>
+					</Form.Group>
+				</Modal.Body>
+				<Modal.Footer>
+					<Button variant="secondary" type="null" onClick={this.handleClose}>Cancel</Button>
+					<Button variant="primary" type="submit" onClick={this.handleCreate}>Create</Button>
+				</Modal.Footer>
+			</ModalStyled>
+
+		);
+	}
+}
\ No newline at end of file
diff --git a/ui-react/src/components/dialogs/Policy/PolicyModal.js b/ui-react/src/components/dialogs/Policy/PolicyModal.js
index 75ac2c4..51a6464 100644
--- a/ui-react/src/components/dialogs/Policy/PolicyModal.js
+++ b/ui-react/src/components/dialogs/Policy/PolicyModal.js
@@ -61,14 +61,14 @@
 		}
 		else {
 			console.info("NO validation errors found in policy data");
-			if (policyInstanceType === 'MICRO-SERVICE-POLICY') {
+			if (this.state.policyInstanceType === 'MICRO-SERVICE-POLICY') {
                 this.state.loopCache.updateMicroServiceProperties(this.state.policyName, editorData[0]);
                 LoopService.setMicroServiceProperties(this.state.loopCache.getLoopName(), this.state.loopCache.getMicroServiceForName(this.state.policyName)).then(resp => {
                     this.setState({ show: false });
                     this.props.history.push('/');
                     this.props.loadLoopFunction(this.state.loopCache.getLoopName());
                 });
-			} else if (policyInstanceType === 'OPERATIONAL-POLICY') {
+			} else if (this.state.policyInstanceType === 'OPERATIONAL-POLICY') {
 			    this.state.loopCache.updateOperationalPolicyProperties(editorData);
             	LoopService.setOperationalPolicyProperties(this.state.loopCache.getLoopName(), this.state.loopCache.getOperationalPolicyForName(this.state.policyName)).then(resp => {
             		this.setState({ show: false });
@@ -92,10 +92,10 @@
 		console.debug("Rendering PolicyModal ", this.state.policyName);
 		var toscaModel = {};
 	    var editorData = {};
-	    if (policyInstanceType === 'MICRO-SERVICE-POLICY') {
+	    if (this.state.policyInstanceType === 'MICRO-SERVICE-POLICY') {
             toscaModel = this.state.loopCache.getMicroServiceJsonRepresentationForName(this.state.policyName);
             editorData = this.state.loopCache.getMicroServicePropertiesForName(this.state.policyName);
-        } else if (policyInstanceType === 'OPERATIONAL-POLICY') {
+        } else if (this.state.policyInstanceType === 'OPERATIONAL-POLICY') {
             toscaModel = this.state.loopCache.getOperationalPolicyJsonRepresentationForName(this.state.policyName);
             editorData = this.state.loopCache.getOperationalPolicyPropertiesForName(this.state.policyName);
         }
diff --git a/ui-react/src/components/menu/MenuBar.js b/ui-react/src/components/menu/MenuBar.js
index c1a7ac3..2f13cfe 100644
--- a/ui-react/src/components/menu/MenuBar.js
+++ b/ui-react/src/components/menu/MenuBar.js
@@ -95,10 +95,11 @@
                     		<NavDropdown.Item as={StyledLink} to="/viewToscaPolicyModal">View Tosca Models</NavDropdown.Item>
                     </StyledNavDropdown>
 					<StyledNavDropdown title="Loop Instance">
-							<NavDropdown.Item as={StyledLink} to="/openLoop">Open Loop</NavDropdown.Item>
+					        <NavDropdown.Item as={StyledLink} to="/createLoop">Create</NavDropdown.Item>
+							<NavDropdown.Item as={StyledLink} to="/openLoop">Open</NavDropdown.Item>
 							<NavDropdown.Item as={StyledLink} to="/loopProperties" disabled={this.state.disabled}>Properties</NavDropdown.Item>
 							<NavDropdown.Item as={StyledLink} to="/closeLoop" disabled={this.state.disabled}>Close</NavDropdown.Item>
-							<NavDropdown.Item as={StyledLink} to="/modifyLoop" >Modify</NavDropdown.Item>
+							<NavDropdown.Item as={StyledLink} to="/modifyLoop" disabled={this.state.disabled}>Modify</NavDropdown.Item>
 							<NavDropdown.Item as={StyledLink} to="/refreshStatus" disabled={this.state.disabled}>Refresh Status</NavDropdown.Item>
 					</StyledNavDropdown>
 					<StyledNavDropdown title="Loop Operations">
diff --git a/ui-react/src/components/menu/__snapshots__/MenuBar.test.js.snap b/ui-react/src/components/menu/__snapshots__/MenuBar.test.js.snap
index a7e66ed..63d3f65 100644
--- a/ui-react/src/components/menu/__snapshots__/MenuBar.test.js.snap
+++ b/ui-react/src/components/menu/__snapshots__/MenuBar.test.js.snap
@@ -213,9 +213,60 @@
         }
       }
       disabled={false}
+      to="/createLoop"
+    >
+      Create
+    </DropdownItem>
+    <DropdownItem
+      as={
+        Object {
+          "$$typeof": Symbol(react.forward_ref),
+          "attrs": Array [],
+          "componentStyle": ComponentStyle {
+            "componentId": "sc-bdVaJa",
+            "isStatic": false,
+            "rules": Array [
+              "
+	color: ",
+              [Function],
+              ";
+	background-color: ",
+              [Function],
+              ";
+	font-weight: normal;
+	display: block;
+	width: 100%;
+	padding: .25rem 1.5rem;
+	clear: both;
+	text-align: inherit;
+	white-space: nowrap;
+	border: 0;
+	:hover {
+		text-decoration: none;
+		background-color: ",
+              [Function],
+              ";
+		color:  ",
+              [Function],
+              ";
+	}
+",
+            ],
+          },
+          "displayName": "Styled(Link)",
+          "foldedComponentIds": Array [],
+          "render": [Function],
+          "styledComponentId": "sc-bdVaJa",
+          "target": [Function],
+          "toString": [Function],
+          "warnTooManyClasses": [Function],
+          "withComponent": [Function],
+        }
+      }
+      disabled={false}
       to="/openLoop"
     >
-      Open Loop
+      Open
     </DropdownItem>
     <DropdownItem
       as={
@@ -365,7 +416,7 @@
           "withComponent": [Function],
         }
       }
-      disabled={false}
+      disabled={true}
       to="/modifyLoop"
     >
       Modify
