diff --git a/apps/layout/src/main/resources/app/view/tlTopov/tlTopov.css b/apps/layout/src/main/resources/app/view/tlTopov/tlTopov.css
new file mode 100644
index 0000000..8aa18f6
--- /dev/null
+++ b/apps/layout/src/main/resources/app/view/tlTopov/tlTopov.css
@@ -0,0 +1,2 @@
+/* css for layout topology overlay  */
+
diff --git a/apps/layout/src/main/resources/app/view/tlTopov/tlTopov.html b/apps/layout/src/main/resources/app/view/tlTopov/tlTopov.html
new file mode 100644
index 0000000..1f76225
--- /dev/null
+++ b/apps/layout/src/main/resources/app/view/tlTopov/tlTopov.html
@@ -0,0 +1,4 @@
+<!-- partial HTML -->
+<div id="ov-tl-topov">
+    <p>This is a hidden view .. just a placeholder to house the javascript</p>
+</div>
diff --git a/apps/layout/src/main/resources/app/view/tlTopov/tlTopov.js b/apps/layout/src/main/resources/app/view/tlTopov/tlTopov.js
new file mode 100644
index 0000000..729d117
--- /dev/null
+++ b/apps/layout/src/main/resources/app/view/tlTopov/tlTopov.js
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2015-present Open Networking Foundation
+ *
+ * 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.
+ */
+
+/*
+ Module containing the "business logic" for the layout topology overlay.
+ */
+
+(function () {
+    'use strict';
+
+    // injected refs
+    var $log, flash, wss;
+
+    function doLayout(type, description) {
+        flash.flash(description);
+        wss.sendEvent('doLayout', {
+            type: type
+        });
+    }
+
+    angular.module('ovTlTopov', [])
+        .factory('LayoutTopovService',
+        ['$log', 'FlashService', 'WebSocketService',
+
+        function (_$log_, _flash_, _wss_) {
+            $log = _$log_;
+            flash = _flash_;
+            wss = _wss_;
+
+            return {
+                doLayout: doLayout
+            };
+        }]);
+}());
diff --git a/apps/layout/src/main/resources/app/view/tlTopov/tlTopovOverlay.js b/apps/layout/src/main/resources/app/view/tlTopov/tlTopovOverlay.js
new file mode 100644
index 0000000..aba7d14
--- /dev/null
+++ b/apps/layout/src/main/resources/app/view/tlTopov/tlTopovOverlay.js
@@ -0,0 +1,58 @@
+// path painter topology overlay - client side
+//
+// This is the glue that binds our business logic (in ppTopov.js)
+// to the overlay framework.
+
+(function () {
+    'use strict';
+
+    // injected refs
+    var $log, tov, lts;
+
+    // our overlay definition
+    var overlay = {
+        overlayId: 'tl-overlay',
+        glyphId: 'm_disjointPaths',
+        tooltip: 'Algorithmic Layout Overlay',
+
+        activate: function () {
+            $log.debug("Layout topology overlay ACTIVATED");
+        },
+        deactivate: function () {
+            lts.clear();
+            $log.debug("Layout topology overlay DEACTIVATED");
+        },
+
+        keyBindings: {
+            0: {
+                cb: function () {
+                    lts.doLayout('default', 'Default (force-based) Layout');
+                },
+                tt: 'Default (force-based) layout',
+                gid: 'm_fiberSwitch'
+            },
+            1: {
+                cb: function () {
+                    lts.doLayout('access', 'Access Network Layout - separate service leafs');
+                },
+                tt: 'Access layout - separate service leafs',
+                gid: 'm_disjointPaths'
+            },
+
+            _keyOrder: [
+                '0', '1'
+            ]
+        }
+    };
+
+    // invoke code to register with the overlay service
+    angular.module('ovTlTopov')
+        .run(['$log', 'TopoOverlayService', 'LayoutTopovService',
+
+            function (_$log_, _tov_, _lts_) {
+                $log = _$log_;
+                tov = _tov_;
+                lts = _lts_;
+                tov.register(overlay);
+            }]);
+}());
