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;
+        }
+    }
 }
