diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java b/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java
index 38af57d..2585bc8 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java
@@ -27,7 +27,11 @@
 import org.onosproject.ui.UiExtensionService;
 import org.onosproject.ui.UiMessageHandler;
 import org.onosproject.ui.UiMessageHandlerFactory;
+import org.onosproject.ui.UiTopoLayoutService;
 import org.onosproject.ui.UiTopoOverlayFactory;
+import org.onosproject.ui.impl.topo.UiTopoSession;
+import org.onosproject.ui.impl.topo.model.UiSharedTopologyModel;
+import org.onosproject.ui.model.topo.UiTopoLayout;
 import org.onosproject.ui.topo.TopoConstants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -55,6 +59,8 @@
     private static final String USER = "user";
     private static final String BOOTSTRAP = "bootstrap";
 
+    public static final String TOPO = "topo";
+
     private static final long MAX_AGE_MS = 30_000;
 
     private static final byte PING = 0x9;
@@ -63,11 +69,12 @@
 
     private final ObjectMapper mapper = new ObjectMapper();
     private final ServiceDirectory directory;
-//    private final UiTopoSession topoSession;
+    private final UiTopoSession topoSession;
 
     private Connection connection;
     private FrameConnection control;
     private String userName;
+    private String currentView;
 
     private long lastActive = System.currentTimeMillis();
 
@@ -83,8 +90,9 @@
     public UiWebSocket(ServiceDirectory directory, String userName) {
         this.directory = directory;
         this.userName = userName;
-//        this.topoSession =
-//                new UiTopoSession(this, directory.get(UiSharedTopologyModel.class));
+        this.topoSession =
+                new UiTopoSession(this, directory.get(UiSharedTopologyModel.class),
+                                  directory.get(UiTopoLayoutService.class));
     }
 
     @Override
@@ -92,6 +100,27 @@
         return userName;
     }
 
+    @Override
+    public UiTopoLayout currentLayout() {
+        return topoSession.currentLayout();
+    }
+
+    @Override
+    public void setCurrentLayout(UiTopoLayout topoLayout) {
+        topoSession.setCurrentLayout(topoLayout);
+    }
+
+    @Override
+    public String currentView() {
+        return currentView;
+    }
+
+    @Override
+    public void setCurrentView(String viewId) {
+        currentView = viewId;
+        topoSession.enableEvent(viewId.equals(TOPO));
+    }
+
     /**
      * Issues a close on the connection.
      */
@@ -128,7 +157,7 @@
         this.connection = connection;
         this.control = (FrameConnection) connection;
         try {
-//            topoSession.init();
+            topoSession.init();
             createHandlersAndOverlays();
             sendBootstrapData();
             log.info("GUI client connected -- user <{}>", userName);
@@ -143,10 +172,10 @@
 
     @Override
     public synchronized void onClose(int closeCode, String message) {
-//        topoSession.destroy();
+        topoSession.destroy();
         destroyHandlersAndOverlays();
         log.info("GUI client disconnected [close-code={}, message={}]",
-                closeCode, message);
+                 closeCode, message);
     }
 
     @Override
@@ -228,7 +257,7 @@
             }
         });
         log.debug("#handlers = {}, #overlays = {}", handlers.size(),
-                overlayCache.size());
+                  overlayCache.size());
     }
 
     // Destroys message handlers.
@@ -255,7 +284,7 @@
                     .put(ID, node.id().toString())
                     .put(IP, node.ip().toString())
                     .put(TopoConstants.Glyphs.UI_ATTACHED,
-                            node.equals(service.getLocalNode()));
+                         node.equals(service.getLocalNode()));
             instances.add(instance);
         }
 
