diff --git a/onos-byon-gui/src/main/java/org/onosproject/byon/gui/NetworkTopoOverlay.java b/onos-byon-gui/src/main/java/org/onosproject/byon/gui/NetworkTopoOverlay.java
new file mode 100644
index 0000000..42b582f
--- /dev/null
+++ b/onos-byon-gui/src/main/java/org/onosproject/byon/gui/NetworkTopoOverlay.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2014-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.
+ */
+
+package org.onosproject.byon.gui;
+
+import org.onosproject.ui.UiTopoOverlay;
+
+/**
+ * Network Topology Overlay hooks.
+ */
+public class NetworkTopoOverlay extends UiTopoOverlay {
+    // NOTE: this must match the ID defined in uiRefTopov.js
+    private static final String OVERLAY_ID = "byon-overlay";
+
+//    private static final String MY_TITLE = "My App Rocks!";
+//    private static final String MY_VERSION = "Beta-1.0.0042";
+//    private static final String MY_DEVICE_TITLE = "I changed the title";
+//
+//    private static final ButtonId FOO_BUTTON = new ButtonId("foo");
+//    private static final ButtonId BAR_BUTTON = new ButtonId("bar");
+
+    public NetworkTopoOverlay() {
+        super(OVERLAY_ID);
+    }
+
+/*
+    @Override
+    public void modifySummary(PropertyPanel pp) {
+        pp.title(MY_TITLE)
+                .typeId(TopoConstants.Glyphs.CROWN)
+                .removeProps(
+                        TOPOLOGY_SSCS,
+                        INTENTS,
+                        TUNNELS,
+                        FLOWS,
+                        VERSION
+                )
+                .addProp(VERSION, MY_VERSION);
+    }
+
+    @Override
+    public void modifyDeviceDetails(PropertyPanel pp, DeviceId deviceId) {
+        pp.title(MY_DEVICE_TITLE);
+        pp.removeProps(LATITUDE, LONGITUDE);
+
+        pp.addButton(FOO_BUTTON)
+                .addButton(BAR_BUTTON);
+
+        pp.removeButtons(TopoConstants.CoreButtons.SHOW_PORT_VIEW)
+                .removeButtons(TopoConstants.CoreButtons.SHOW_GROUP_VIEW);
+    }
+*/
+
+}
