diff --git a/ui-react/src/ClampHeader.js b/ui-react/src/ClampHeader.js
new file mode 100644
index 0000000..79a24cd
--- /dev/null
+++ b/ui-react/src/ClampHeader.js
@@ -0,0 +1,42 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 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 ClampLogo from './ClampLogo';
+import UserBar from './UserBar';
+import MenuBar from './MenuBar';
+import './index.css';
+
+class ClampHeader extends React.Component {
+	render() {
+		return (
+			<div >
+
+<MenuBar />
+			<UserBar />
+			</div>
+		);
+	}
+}
+
+export default ClampHeader;
diff --git a/ui-react/src/ClampLogo.js b/ui-react/src/ClampLogo.js
new file mode 100644
index 0000000..bbde81e
--- /dev/null
+++ b/ui-react/src/ClampLogo.js
@@ -0,0 +1,43 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 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 './index.css';
+
+class ClampLogo extends React.Component {
+	render() {
+		return (
+			<div className="col-md-4 col-lg-4">
+				<img className="image_style" alt="" src={require('./images/logo_onap_2017.png')}
+				height="50px"
+				width="234px"/>
+				<div className="navbar-brand logo">
+					&nbsp;&nbsp;
+					<b>CLAMP</b>
+				</div>
+			</div>
+		);
+	}
+}
+
+export default ClampLogo;
diff --git a/ui-react/src/MenuBar.js b/ui-react/src/MenuBar.js
new file mode 100644
index 0000000..2078c96
--- /dev/null
+++ b/ui-react/src/MenuBar.js
@@ -0,0 +1,55 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 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 Navbar from 'react-bootstrap/Navbar';
+import Nav from 'react-bootstrap/Nav';
+import NavItem from 'react-bootstrap/NavItem';
+import NavDropdown from 'react-bootstrap/NavDropdown';
+
+
+class MenuBar extends React.Component {
+	render () {
+	   return (
+<div>
+<Navbar bg="light" expand="lg">
+  <Navbar.Brand href="#home">React-Bootstrap</Navbar.Brand>
+  <Navbar.Toggle aria-controls="basic-navbar-nav" />
+  <Navbar.Collapse id="basic-navbar-nav">
+    <Nav className="mr-auto">
+      <NavDropdown title="Dropdown" id="basic-nav-dropdown">
+        <NavDropdown.Item href="#action/3.1">Action</NavDropdown.Item>
+        <NavDropdown.Item href="#action/3.2">Another action</NavDropdown.Item>
+        <NavDropdown.Item href="#action/3.3">Something</NavDropdown.Item>
+      </NavDropdown>
+    </Nav>
+  </Navbar.Collapse>
+</Navbar>
+
+  		</div>
+
+
+    );
+  }
+}
+
+export default MenuBar;
diff --git a/ui-react/src/UserBar.js b/ui-react/src/UserBar.js
new file mode 100644
index 0000000..d5f2554
--- /dev/null
+++ b/ui-react/src/UserBar.js
@@ -0,0 +1,36 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 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 './index.css';
+
+class UserBar extends React.Component {
+	render () {
+		const user = this.props.user;
+		return (
+			<div className="user_name">Hello:{user}
+			</div>
+		);
+	}
+}
+
+export default UserBar;
diff --git a/ui-react/src/index.js b/ui-react/src/index.js
index fed8c0f..53d3698 100644
--- a/ui-react/src/index.js
+++ b/ui-react/src/index.js
@@ -1,44 +1,28 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 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 ReactDOM from 'react-dom';
-import './index.css';
-
-class UserBar extends React.Component {
-	render () {
-		const user = this.props.user;
-		return (
-			<div className="user_name">Hello:{user}
-			</div>
-		);
-	}
-}
-
-class ClampLogo extends React.Component {
-	render() {
-		return (
-			<div className="col-md-4 col-lg-4">
-				<img className="image_style" alt="" src={require('./images/logo_onap_2017.png')} 
-				height="50px"
-				width="234px"/>
-				<div className="navbar-brand logo">
-					&nbsp;&nbsp;
-					<b>CLAMP</b>
-				</div>
-			</div>
-		);
-	}
-}
-
-class ClampHeader extends React.Component {
-	render() {
-		return (
-			<div className='rowC'>
-			<ClampLogo />
-			<div className="dummy"></div>
-			<UserBar />
-			</div>
-		);
-	}
-}
+import ClampHeader from './ClampHeader'; 
 
 ReactDOM.render(
 	<ClampHeader />,
