diff --git a/web/gui/src/main/webapp/app/fw/remote/websocket.js b/web/gui/src/main/webapp/app/fw/remote/websocket.js
index bdd1e3c..15e992d 100644
--- a/web/gui/src/main/webapp/app/fw/remote/websocket.js
+++ b/web/gui/src/main/webapp/app/fw/remote/websocket.js
@@ -22,6 +22,36 @@
 
     var fs;
 
+    function fnOpen(f) {
+        return fs.isF(f);
+    }
+
+    function fnMessage(f) {
+        // wrap the onMessage function; we will attempt to decode the
+        // message event payload as JSON and pass that in...
+        var fn = fs.isF(f);
+        if (!fn) {
+            return null;
+        }
+
+        return function (msgEvent) {
+            var ev;
+            try {
+                ev = JSON.parse(msgEvent.data);
+            } catch (e) {
+                ev = {
+                    error: 'Failed to parse JSON',
+                    e: e
+                };
+            }
+            fn(ev);
+        }
+    }
+
+    function fnClose(f) {
+        return fs.isF(f);
+    }
+
     angular.module('onosRemote')
     .factory('WebSocketService',
             ['$log', '$location', 'UrlFnService', 'FnService',
@@ -32,20 +62,29 @@
             // creates a web socket for the given path, returning a "handle".
             // opts contains the event handler callbacks.
             function createWebSocket(path, opts) {
-                var wsport = opts && opts.wsport,
+                var o = opts || {},
+                    wsport = opts && opts.wsport,
                     fullUrl = ufs.wsUrl(path, wsport),
-                    ws = new WebSocket(fullUrl),
                     api = {
-                        meta: { path: fullUrl, ws: ws },
+                        meta: { path: fullUrl, ws: null },
                         send: send,
                         close: close
-                    };
+                    },
+                    ws;
+
+                try {
+                    ws = new WebSocket(fullUrl);
+                    api.meta.ws = ws;
+                } catch (e) {
+                }
 
                 $log.debug('Attempting to open websocket to: ' + fullUrl);
 
-                ws.onopen = (opts && opts.onOpen) || null;
-                ws.onmessage = (opts && opts.onMessage) || null;
-                ws.onclose = (opts && opts.onClose) || null;
+                if (ws) {
+                    ws.onopen = fnOpen(o.onOpen);
+                    ws.onmessage = fnMessage(o.onMessage);
+                    ws.onclose = fnClose(o.onClose);
+                }
 
                 function send(msg) {
                     if (msg) {
@@ -62,6 +101,7 @@
                     if (ws) {
                         ws.close();
                         ws = null;
+                        api.meta.ws = null;
                     }
                 }
 
diff --git a/web/gui/src/main/webapp/app/view/topo/topo.js b/web/gui/src/main/webapp/app/view/topo/topo.js
index 7337a68..696677c 100644
--- a/web/gui/src/main/webapp/app/view/topo/topo.js
+++ b/web/gui/src/main/webapp/app/view/topo/topo.js
@@ -34,7 +34,7 @@
     var ovtopo, svg, defs, zoomLayer, map;
 
     // Internal state
-    var zoomer;
+    var zoomer, wsock;
 
     // Note: "exported" state should be properties on 'self' variable
 
@@ -136,21 +136,20 @@
 
     }
 
-    function onWsMessage(msg) {
-        var ev = JSON.parse(msg.data);
-        $log.log('got event: ', ev);
+    function onWsMessage(ev) {
+        $log.log('got JSON event: ', ev);
 
     }
 
-    function onWsClose(msg) {
-        $log.log('web socket closed...', msg);
+    function onWsClose(closeEvent) {
+        $log.log('web socket closed...', closeEvent);
 
     }
 
     // wsport indicates web-socket-server port other than the default.
     // Used for testing with the mock-web-socket-server.
     function setUpWebSocket(wsport) {
-        var wsHandle = wss.createWebSocket('topology', {
+        wsock = wss.createWebSocket('topology', {
             onOpen: onWsOpen,
             onMessage: onWsMessage,
             onClose: onWsClose,
@@ -161,7 +160,7 @@
         // TODO: implement retry on close functionality
 
 
-        $log.log('created web socket', wsHandle);
+        $log.log('created web socket', wsock);
         // TODO: complete implementation...
 
     }
diff --git a/web/gui/src/main/webapp/tests/app/fw/remote/websocket-spec.js b/web/gui/src/main/webapp/tests/app/fw/remote/websocket-spec.js
index 8786109..0d066c7 100644
--- a/web/gui/src/main/webapp/tests/app/fw/remote/websocket-spec.js
+++ b/web/gui/src/main/webapp/tests/app/fw/remote/websocket-spec.js
@@ -50,6 +50,7 @@
     });
 
     it('should use the appropriate URL', function () {
+        debugger;
         var ws = wss.createWebSocket('foo/path');
         expect(ws.meta.path).toEqual('ws://foo:80/onos/ui/ws/foo/path');
     });
@@ -66,7 +67,8 @@
         });
 
         expect(ws.meta.ws.onopen).toBe(oo);
-        expect(ws.meta.ws.onmessage).toBe(om);
+        // TODO: om is wrapped - we can't test by reference
+        //expect(ws.meta.ws.onmessage).toBe(om);
         expect(ws.meta.ws.onclose).toBe(oc);
     });
 
@@ -80,7 +82,8 @@
         });
 
         expect(ws.meta.ws.onopen).toBe(oo);
-        expect(ws.meta.ws.onmessage).toBe(om);
+        // TODO: om is wrapped - we can't test by reference
+        //expect(ws.meta.ws.onmessage).toBe(om);
         expect(ws.meta.ws.onclose).toBeNull();
     });
 
