diff --git a/web/gui/src/main/webapp/app/fw/layer/layer.js b/web/gui/src/main/webapp/app/fw/layer/layer.js
new file mode 100644
index 0000000..a47f53e0
--- /dev/null
+++ b/web/gui/src/main/webapp/app/fw/layer/layer.js
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/*
+ ONOS GUI -- Layers Module
+ */
+(function () {
+    'use strict';
+
+    angular.module('onosLayer', ['onosUtil']);
+
+}());
diff --git a/web/gui/src/main/webapp/app/fw/layer/panel.js b/web/gui/src/main/webapp/app/fw/layer/panel.js
new file mode 100644
index 0000000..6b85e07
--- /dev/null
+++ b/web/gui/src/main/webapp/app/fw/layer/panel.js
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/*
+ ONOS GUI -- Layer -- Panel Service
+ */
+(function () {
+    'use strict';
+
+    var $log;
+
+    var defaultSettings = {
+        position: 'TR',
+        side: 'right',
+        width: 200
+    };
+
+    angular.module('onosLayer')
+        .factory('PanelService', ['$log', function (_$log_) {
+            $log = _$log_;
+
+
+            function createPanel(opts) {
+                var settings = angular.extend({}, defaultSettings, opts);
+
+                function renderPanel() {
+
+                }
+
+                function showPanel() {
+
+                }
+
+                function hidePanel() {
+
+                }
+
+                var api = {
+                    render: renderPanel,
+                    show: showPanel,
+                    hide: hidePanel
+                };
+
+                $log.debug('creating panel with settings: ', settings);
+                return api;
+            }
+
+            return {
+                createPanel: createPanel
+            };
+        }]);
+
+}());
diff --git a/web/gui/src/main/webapp/app/index.html b/web/gui/src/main/webapp/app/index.html
index 24a2cc1..c26b8f7 100644
--- a/web/gui/src/main/webapp/app/index.html
+++ b/web/gui/src/main/webapp/app/index.html
@@ -57,6 +57,9 @@
     <script src="fw/widget/widget.js"></script>
     <script src="fw/widget/table.js"></script>
 
+    <script src="fw/layer/layer.js"></script>
+    <script src="fw/layer/panel.js"></script>
+
     <!-- Framework and library stylesheets included here -->
     <!-- TODO: use a single catenated-minified file here -->
     <link rel="stylesheet" href="onos.css">
diff --git a/web/gui/src/main/webapp/tests/app/fw/layer/panel-spec.js b/web/gui/src/main/webapp/tests/app/fw/layer/panel-spec.js
new file mode 100644
index 0000000..bcc462b
--- /dev/null
+++ b/web/gui/src/main/webapp/tests/app/fw/layer/panel-spec.js
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/*
+ ONOS GUI -- Layer -- Panel Service - Unit Tests
+ */
+describe('factory: fw/layer/panel.js', function () {
+    var $log, fs, ps;
+
+    beforeEach(module('onosLayer'));
+
+    beforeEach(inject(function (_$log_, FnService, PanelService) {
+        $log = _$log_;
+        fs = FnService;
+        ps = PanelService;
+    }));
+
+
+    it('should define PanelService', function () {
+        expect(ps).toBeDefined();
+    });
+
+    it('should define api functions', function () {
+        expect(fs.areFunctions(ps, [
+            'createPanel'
+        ])).toBeTruthy();
+    });
+
+});
diff --git a/web/gui/src/main/webapp/tests/karma.conf.js b/web/gui/src/main/webapp/tests/karma.conf.js
index eb7dba4..3f08b15 100644
--- a/web/gui/src/main/webapp/tests/karma.conf.js
+++ b/web/gui/src/main/webapp/tests/karma.conf.js
@@ -30,6 +30,7 @@
         '../app/fw/svg/svg.js',
         '../app/fw/remote/remote.js',
         '../app/fw/widget/widget.js',
+        '../app/fw/layer/layer.js',
         // now load services etc. that augment the modules
         '../app/**/*.js',
 
