diff --git a/www/js/home-controller.js b/www/js/home-controller.js
index 58da7d874fadd693ad9ee1d69bf9cc20bb43e6bb..4df170c299baa1405037640a099fcd3966837561 100644
--- a/www/js/home-controller.js
+++ b/www/js/home-controller.js
@@ -112,6 +112,9 @@ function ExploreController($scope, $rootScope, $state, BMA, $q, UIUtils, $interv
         }, wait);
       }
     });
+    BMA.websocket.peer().on('peer', function(peer) {
+      console.log(peer);
+    });
   };
 
   $scope.$watch('formData.useRelative', function() {
diff --git a/www/js/services.js b/www/js/services.js
index 5cb259a9a4f6d074d4ca41d28b6aa0c3ea14de4b..a3b028a552b9753fca70e41fe61dadfb0f483fd4 100644
--- a/www/js/services.js
+++ b/www/js/services.js
@@ -32,6 +32,17 @@ angular.module('cesium.services', ['ngResource'])
         }
       }
 
+      function ws(uri) {
+        var sock = new WebSocket(uri);
+        return {
+          on: function(type, callback) {
+            sock.onmessage = function(e) {
+              callback(JSON.parse(e.data));
+            };
+          }
+        };
+      }
+
       return {
         wot: {
           lookup: getResource('http://' + server + '/wot/lookup/:search'),
@@ -56,10 +67,10 @@ angular.module('cesium.services', ['ngResource'])
         },
         websocket: {
           block: function() {
-            return io('http://' + server + '/websocket/block');
+            return ws('ws://' + server + '/ws/block');
           },
           peer: function() {
-            return io('http://' + server + '/websocket/peer');
+            return ws('ws://' + server + '/ws/peer');
           }
         }
       }