diff --git a/ui-react/src/components/dialogs/Loop/CreateLoopModal.js b/ui-react/src/components/dialogs/Loop/CreateLoopModal.js
index d6c5e35..e382077 100644
--- a/ui-react/src/components/dialogs/Loop/CreateLoopModal.js
+++ b/ui-react/src/components/dialogs/Loop/CreateLoopModal.js
@@ -34,6 +34,14 @@
 const ModalStyled = styled(Modal)`
 	background-color: transparent;
 `
+const LoopViewSvgDivStyled = styled.div`
+	overflow: hidden;
+	background-color: ${props => (props.theme.loopViewerBackgroundColor)};
+	border-color: ${props => (props.theme.loopViewerHeaderColor)};
+	margin-left: auto;
+	margin-right:auto;
+	text-align: center;
+`
 
 export default class CreateLoopModal extends React.Component {
 	constructor(props, context) {
@@ -46,6 +54,7 @@
 		this.handleDropdownListChange = this.handleDropdownListChange.bind(this);
 		this.state = {
 			show: true,
+			content: '',
 			chosenTemplateName: '',
 			modelName: '',
 			templateNames: []
@@ -63,6 +72,13 @@
 
 	handleDropdownListChange(e) {
 		this.setState({ chosenTemplateName: e.value });
+		TemplateService.getBlueprintMicroServiceTemplates(e.value).then(svgXml => {
+			if (svgXml.length !== 0) {
+				this.setState({ content: svgXml })
+			} else {
+				this.setState({ content: 'Error1' })
+			}
+		})
 	}
 
 	getTemplateNames() {
@@ -77,7 +93,7 @@
 			alert("A model name is required");
 			return;
 		}
-		console.info("Create Model " + this.state.modelName + ", Template " + this.state.chosenTemplateName + " is chosen");
+		console.debug("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);
@@ -92,18 +108,17 @@
 		.catch(error => {
 			console.debug("Create Loop failed");
 		});
-
 	}
 
 	handleModelName = event => {
-    	this.setState({
-      		modelName: event.target.value
-    	})
+		this.setState({
+			modelName: event.target.value
+		})
 	}
 
 	render() {
 		return (
-			<ModalStyled size="lg" show={this.state.show} onHide={this.handleClose}>
+			<ModalStyled size="xl" show={this.state.show} onHide={this.handleClose}>
 				<Modal.Header closeButton>
 					<Modal.Title>Create Model</Modal.Title>
 				</Modal.Header>
@@ -115,6 +130,10 @@
 						</Col>
 					</Form.Group>
 					<Form.Group controlId="formPlaintextEmail">
+						<LoopViewSvgDivStyled dangerouslySetInnerHTML={{ __html: this.state.content }} value={this.state.content} >
+						</LoopViewSvgDivStyled>
+					</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}
@@ -127,7 +146,6 @@
 					<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/Loop/OpenLoopModal.js b/ui-react/src/components/dialogs/Loop/OpenLoopModal.js
index 4e8d978..7c98fab 100644
--- a/ui-react/src/components/dialogs/Loop/OpenLoopModal.js
+++ b/ui-react/src/components/dialogs/Loop/OpenLoopModal.js
@@ -37,6 +37,14 @@
 const CheckBoxStyled = styled(FormCheck.Input)`
 	margin-left:3rem;
 `
+const LoopViewSvgDivStyled = styled.div`
+	overflow: hidden;
+	background-color: ${props => (props.theme.loopViewerBackgroundColor)};
+	border-color: ${props => (props.theme.loopViewerHeaderColor)};
+	margin-left: auto;
+	margin-right:auto;
+	text-align: center;
+`
 
 export default class OpenLoopModal extends React.Component {
 	constructor(props, context) {
@@ -49,7 +57,8 @@
 		this.state = {
 			show: true,
 			chosenLoopName: '',
-			loopNames: []
+			loopNames: [],
+			content:''
 		};
 	}
 
@@ -64,6 +73,13 @@
 
 	handleDropdownListChange(e) {
 		this.setState({ chosenLoopName: e.value });
+		LoopService.getSvg(e.value).then(svgXml => {
+			if (svgXml.length !== 0) {
+				this.setState({ content: svgXml })
+			} else {
+				this.setState({ content: 'Error1' })
+			}
+		});
 	}
 
 	getLoopNames() {
@@ -71,7 +87,9 @@
 		    if (Object.entries(loopNames).length !== 0) {
 		        const loopOptions = loopNames.filter(loopName => loopName!=='undefined').map((loopName) => { return { label: loopName, value: loopName } });
             	this.setState({ loopNames: loopOptions })
+
 		    }
+
 		});
 	}
 
@@ -83,7 +101,7 @@
 
 	render() {
 		return (
-			<ModalStyled size="lg" show={this.state.show} onHide={this.handleClose}>
+			<ModalStyled size="xl" show={this.state.show} onHide={this.handleClose}>
 				<Modal.Header closeButton>
 					<Modal.Title>Open Model</Modal.Title>
 				</Modal.Header>
@@ -91,9 +109,14 @@
 					<Form.Group as={Row} controlId="formPlaintextEmail">
 						<Form.Label column sm="2">Model Name</Form.Label>
 						<Col sm="10">
-							<Select onChange={this.handleDropdownListChange} options={this.state.loopNames} />
+							<Select onChange={this.handleDropdownListChange}
+							options={this.state.loopNames} />
 						</Col>
 					</Form.Group>
+					<Form.Group controlId="formPlaintextEmail">
+                         <LoopViewSvgDivStyled dangerouslySetInnerHTML={{ __html: this.state.content }}   value={this.state.content} >
+                         </LoopViewSvgDivStyled>
+                    </Form.Group>
 					<Form.Group controlId="formBasicChecbox">
 						<Form.Check>
 							<FormCheck.Label>Read Only</FormCheck.Label>
diff --git a/ui-react/src/components/dialogs/Loop/OpenLoopModal.test.js b/ui-react/src/components/dialogs/Loop/OpenLoopModal.test.js
index 208c947..f362cfa 100644
--- a/ui-react/src/components/dialogs/Loop/OpenLoopModal.test.js
+++ b/ui-react/src/components/dialogs/Loop/OpenLoopModal.test.js
@@ -28,12 +28,12 @@
 
   beforeEach(() => {
       fetch.resetMocks();
-          fetch.mockResponseOnce(JSON.stringify([
+      fetch.mockResponse(JSON.stringify([
         "LOOP_gmtAS_v1_0_ResourceInstanceName1_tca",
         "LOOP_gmtAS_v1_0_ResourceInstanceName1_tca_3",
         "LOOP_gmtAS_v1_0_ResourceInstanceName2_tca_2"
       ]));
-  })
+  });
 
     it('Test the render method', () => {
 
@@ -44,12 +44,12 @@
   it('Onchange event', () => {
     const event = {value: 'LOOP_gmtAS_v1_0_ResourceInstanceName1_tca_3'};
     const component = shallow(<OpenLoopModal/>);
-
     component.find('StateManager').simulate('change', event);
     component.update();
     expect(component.state('chosenLoopName')).toEqual("LOOP_gmtAS_v1_0_ResourceInstanceName1_tca_3");
   });
 
+
   it('Test handleClose', () => {
     const historyMock = { push: jest.fn() }; 
     const handleClose = jest.spyOn(OpenLoopModal.prototype,'handleClose');
diff --git a/ui-react/src/components/dialogs/Loop/__snapshots__/OpenLoopModal.test.js.snap b/ui-react/src/components/dialogs/Loop/__snapshots__/OpenLoopModal.test.js.snap
index 9e72224..1aa0b5a 100644
--- a/ui-react/src/components/dialogs/Loop/__snapshots__/OpenLoopModal.test.js.snap
+++ b/ui-react/src/components/dialogs/Loop/__snapshots__/OpenLoopModal.test.js.snap
@@ -4,7 +4,7 @@
 <Styled(Bootstrap(Modal))
   onHide={[Function]}
   show={true}
-  size="lg"
+  size="xl"
 >
   <ModalHeader
     closeButton={true}
@@ -47,6 +47,18 @@
       </Col>
     </FormGroup>
     <FormGroup
+      controlId="formPlaintextEmail"
+    >
+      <styled.div
+        dangerouslySetInnerHTML={
+          Object {
+            "__html": "",
+          }
+        }
+        value=""
+      />
+    </FormGroup>
+    <FormGroup
       controlId="formBasicChecbox"
     >
       <FormCheck
diff --git a/ui-react/src/components/dialogs/Tosca/ViewLoopTemplatesModal.js b/ui-react/src/components/dialogs/Tosca/ViewLoopTemplatesModal.js
index 89e5697..18c4440 100644
--- a/ui-react/src/components/dialogs/Tosca/ViewLoopTemplatesModal.js
+++ b/ui-react/src/components/dialogs/Tosca/ViewLoopTemplatesModal.js
@@ -38,22 +38,26 @@
 const ModalStyled = styled(Modal)`
 	background-color: transparent;
 `
-const TextModal = styled.textarea`
-margin-top: 20px;
-white-space:pre;
-background-color: ${props => props.theme.toscaTextareaBackgroundColor};;
-text-align: justify;
-font-size: ${props => props.theme.toscaTextareaFontSize};;
-width: 100%;
-height: 300px;
+const LoopViewSvgDivStyled = styled.div`
+	overflow: hidden;
+	background-color: ${props => (props.theme.loopViewerBackgroundColor)};
+	border-color: ${props => (props.theme.loopViewerHeaderColor)};
+	margin-left: auto;
+	margin-right:auto;
+	text-align: center;
+	margin-top: 20px;
 `
+const SvgContainerDivStyled = styled.div`
+	border: 1px solid;
+`
+
 const cellStyle = { border: '1px solid black' };
 const headerStyle = { backgroundColor: '#ddd',	border: '2px solid black'	};
 const rowHeaderStyle = {backgroundColor:'#ddd',  fontSize: '15pt', text: 'bold', border: '1px solid black'};
 
 export default class ViewLoopTemplatesModal extends React.Component {
   state = {
-    show: true,
+        show: true,
 		content: 'Please select a loop template to display it',
 		selectedRow: -1,
 		loopTemplateData: [],
@@ -97,8 +101,7 @@
 	constructor(props, context) {
 		super(props, context);
 		this.handleClose = this.handleClose.bind(this);
-		this.getBlueprintMicroServiceTemplates = this.getBlueprintMicroServiceTemplates.bind(this);
-		this.handleYamlContent = this.handleYamlContent.bind(this);
+		this.getBlueprintMicroServiceTemplate = this.getBlueprintMicroServiceTemplate.bind(this);
 		this.getBlueprintMicroServiceTemplates();
 	}
 
@@ -108,11 +111,20 @@
 		});
 	}
 
-	handleYamlContent = event => {
-		this.setState({
-			content: event.target.value
-		});
-	}
+	getBlueprintMicroServiceTemplate(templateName) {
+	    if (typeof templateName !== "undefined") {
+		    TemplateService.getBlueprintMicroServiceTemplate(templateName).then(svgXml => {
+				if (svgXml.length !== 0) {
+					this.setState({ content: svgXml })
+				} else {
+					this.setState({ content: 'Please select a loop template to view the details' })
+
+				}
+			});
+		} else {
+          	this.setState({ content: 'Please select a loop template to view the details' })
+          	}
+    }
 
 	handleClose() {
 		this.setState({ show: false });
@@ -121,30 +133,31 @@
 
 	render() {
     return (
-      <ModalStyled size="xl" show={this.state.show} onHide={this.handleClose}>
-        <Modal.Header closeButton>
-				</Modal.Header>
-				<Modal.Body>
-          <MaterialTable
-            title={"View Blueprint MicroService Templates"}
-            data={this.state.loopTemplateData}
+    		<ModalStyled size="xl" show={this.state.show} onHide={this.handleClose}>
+    			<Modal.Header closeButton>
+    			</Modal.Header>
+    			<Modal.Body>
+    			   <MaterialTable
+    				  title={"View Blueprint MicroService Templates"}
+    				  data={this.state.loopTemplateData}
 					  columns={this.state.loopTemplateColumnsDefinition}
 					  icons={this.state.tableIcons}
-					  onRowClick={(event, rowData) => {this.setState({content: rowData.name, selectedRow: rowData.tableData.id})}}
+    			      onRowClick={(event, rowData) => {this.getBlueprintMicroServiceTemplate(rowData.name);this.setState({selectedRow: rowData.tableData.id})}}
 					  options={{
-					  headerStyle:rowHeaderStyle,
-					  rowStyle: rowData => ({
-					  backgroundColor: (this.state.selectedRow !== -1 && this.state.selectedRow === rowData.tableData.id) ? '#EEE' : '#FFF'
-            })
-          }}
-          />
-          <div>
-            <TextModal value={this.state.content} onChange={this.handleYamlContent} />
-          </div>
-        </Modal.Body>
-        <Modal.Footer>
-          <Button variant="secondary" onClick={this.handleClose}>Close</Button>
-        </Modal.Footer>
+					      headerStyle:rowHeaderStyle,
+					      rowStyle: rowData => ({
+					      backgroundColor: (this.state.selectedRow !== -1 && this.state.selectedRow === rowData.tableData.id) ? '#EEE' : '#FFF'
+                          })
+                      }}
+                  />
+	              <SvgContainerDivStyled>
+		            <LoopViewSvgDivStyled dangerouslySetInnerHTML={{ __html: this.state.content }} value={this.state.content} >
+					</LoopViewSvgDivStyled>
+	              </SvgContainerDivStyled>
+                </Modal.Body>
+                <Modal.Footer>
+                	<Button variant="secondary" onClick={this.handleClose}>Close</Button>
+               </Modal.Footer>
       </ModalStyled>
       );
     }
diff --git a/ui-react/src/components/dialogs/Tosca/ViewLoopTemplatesModal.test.js b/ui-react/src/components/dialogs/Tosca/ViewLoopTemplatesModal.test.js
index 94d4acd..ddfb2a7 100644
--- a/ui-react/src/components/dialogs/Tosca/ViewLoopTemplatesModal.test.js
+++ b/ui-react/src/components/dialogs/Tosca/ViewLoopTemplatesModal.test.js
@@ -28,8 +28,7 @@
 describe('Verify ViewLoopTemplatesModal', () => {
 	beforeEach(() => {
 		fetch.resetMocks();
-		}
-	);
+	});
 
 	it('Test API Successful', () => {
 		fetch.mockImplementationOnce(() => {
@@ -133,29 +132,6 @@
 			const component = mount(<ViewLoopTemplatesModal/>);
 			expect(component.find('[className="MuiSelect-icon MuiTablePagination-selectIcon"]')).toBeTruthy();
 		});
-
-		it('Test handleYamlContent', () => {
-			fetch.mockImplementationOnce(() => {
-				return Promise.resolve({
-					ok: true,
-					status: 200,
-					json: () => {
-						return Promise.resolve({
-						"index": "1",
-						"name": "MTCA version 1",
-						"modelService.serviceDetails.name": "MTCA",
-						"allowedLoopType" : "CLOSED",
-						"maximumInstancesAllowed":1,
-						"updatedDate":"2019-09-06 19:09:42"
-						});
-					}
-				});
-			});
-			const yamlContent = 'MTCA version 1';
-			const component = shallow(<ViewLoopTemplatesModal/>);
-			component.find('[value="Please select a loop template to display it"]').prop('onChange')({ target: { value: yamlContent }});
-			expect(component.state('content')).toEqual(yamlContent);
-		});
 		
 		it('Test handleClose', () => {
 			fetch.mockImplementationOnce(() => {
diff --git a/ui-react/src/components/dialogs/Tosca/__snapshots__/ViewLoopTemplatesModal.test.js.snap b/ui-react/src/components/dialogs/Tosca/__snapshots__/ViewLoopTemplatesModal.test.js.snap
index efec96e..253820f 100644
--- a/ui-react/src/components/dialogs/Tosca/__snapshots__/ViewLoopTemplatesModal.test.js.snap
+++ b/ui-react/src/components/dialogs/Tosca/__snapshots__/ViewLoopTemplatesModal.test.js.snap
@@ -140,12 +140,16 @@
       }
       title="View Blueprint MicroService Templates"
     />
-    <div>
-      <styled.textarea
-        onChange={[Function]}
+    <styled.div>
+      <styled.div
+        dangerouslySetInnerHTML={
+          Object {
+            "__html": "Please select a loop template to display it",
+          }
+        }
         value="Please select a loop template to display it"
       />
-    </div>
+    </styled.div>
   </ModalBody>
   <ModalFooter>
     <Button
