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 77f0f1f..25c2f03 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
@@ -60,8 +60,7 @@
  */
 
 @WebSocket
-public class UiWebSocket
-        implements UiConnection {
+public class UiWebSocket implements UiConnection {
 
     private static final Logger log = LoggerFactory.getLogger(UiWebSocket.class);
 
@@ -88,10 +87,6 @@
 
     private static final long MAX_AGE_MS = 30_000;
 
-    private static final byte PING = 0x9;
-    private static final byte PONG = 0xA;
-    private static final byte[] PING_DATA = new byte[]{(byte) 0xde, (byte) 0xad};
-
     private final ObjectMapper mapper = new ObjectMapper();
     private final ServiceDirectory directory;
     private final UiTopoSession topoSession;
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocketServlet.java b/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocketServlet.java
index 4faae28..040e98a 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocketServlet.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocketServlet.java
@@ -18,15 +18,15 @@
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Sets;
+import org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest;
+import org.eclipse.jetty.websocket.servlet.ServletUpgradeResponse;
+import org.eclipse.jetty.websocket.servlet.WebSocketCreator;
 import org.eclipse.jetty.websocket.servlet.WebSocketServlet;
 import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;
 import org.onlab.osgi.DefaultServiceDirectory;
 import org.onlab.osgi.ServiceDirectory;
 
 import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
 import java.security.Principal;
 import java.util.Set;
 import java.util.Timer;
@@ -38,6 +38,7 @@
 public class UiWebSocketServlet extends WebSocketServlet {
 
     private static final long PING_DELAY_MS = 5000;
+    private static final long IDLE_TIMEOUT_MS = 10000;
 
     private static UiWebSocketServlet instance;
     private static final Object INSTANCE_LOCK = new Object();
@@ -45,13 +46,15 @@
     private static ServiceDirectory directory = new DefaultServiceDirectory();
 
     private final Set<UiWebSocket> sockets = Sets.newConcurrentHashSet();
+
     private final Timer timer = new Timer();
     private final TimerTask pruner = new Pruner();
     private static boolean isStopped = false;
 
     @Override
     public void configure(WebSocketServletFactory webSocketServletFactory) {
-
+        webSocketServletFactory.getPolicy().setIdleTimeout(IDLE_TIMEOUT_MS);
+        webSocketServletFactory.setCreator(new UiWebSocketCreator());
     }
 
     /**
@@ -78,25 +81,6 @@
         timer.schedule(pruner, PING_DELAY_MS, PING_DELAY_MS);
     }
 
-    @Override
-    public void service(HttpServletRequest request, HttpServletResponse response)
-           throws ServletException, IOException {
-        super.service(request, response);
-        if (isStopped) {
-            return;
-        }
-
-        // FIXME: Replace this with globally shared opaque token to allow secure failover
-        Principal p = request.getUserPrincipal();
-        String userName = p != null ? p.getName() : FAKE_USERNAME;
-
-        UiWebSocket socket = new UiWebSocket(directory, userName);
-        sockets.add(socket);
-    }
-
-    // FIXME: This should not be necessary
-    private static final String FAKE_USERNAME = "UI-user";
-
     /**
      * Sends the specified message to all the GUI clients.
      *
@@ -138,4 +122,22 @@
             });
         }
     }
+
+    // FIXME: This should not be necessary
+    private static final String FAKE_USERNAME = "UI-user";
+
+    public class UiWebSocketCreator implements WebSocketCreator {
+        @Override
+        public Object createWebSocket(ServletUpgradeRequest request, ServletUpgradeResponse response) {
+            if (!isStopped) {
+                // FIXME: Replace this with globally shared opaque token to allow secure failover
+                Principal p = request.getUserPrincipal();
+                String userName = p != null ? p.getName() : FAKE_USERNAME;
+
+                UiWebSocket socket = new UiWebSocket(directory, userName);
+                sockets.add(socket);
+            }
+            return null;
+        }
+    }
 }
