diff --git a/htrace-hbase/pom.xml b/htrace-hbase/pom.xml
index 2230b32..20075e9 100644
--- a/htrace-hbase/pom.xml
+++ b/htrace-hbase/pom.xml
@@ -32,10 +32,7 @@
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <hbase.version>0.99.2</hbase.version>
-    <!-- <hbase.version>0.99.0-SNAPSHOT</hbase.version> -->
-    <hadoop.version>2.4.0</hadoop.version>
-    <!-- <hadoop.version>3.0.0-SNAPSHOT</hadoop.version> -->
-    <protobuf.version>2.5.0</protobuf.version>
+    <jetty.version>9.2.13.v20150730</jetty.version>
   </properties>
 
   <build>
@@ -49,7 +46,6 @@
     </resources>
     <plugins>
       <plugin>
-        <!--Make it so assembly:single does nothing in here-->
         <artifactId>maven-assembly-plugin</artifactId>
         <configuration>
           <descriptorRefs>
@@ -84,6 +80,14 @@
                   <pattern>com.google.protobuf</pattern>
                   <shadedPattern>org.apache.htrace.com.google.protobuf</shadedPattern>
                 </relocation>
+                <relocation>
+                  <pattern>org.eclipse.jetty</pattern>
+                  <shadedPattern>org.apache.htrace.org.eclipse.jetty</shadedPattern>
+                </relocation>
+                <relocation>
+                  <pattern>javax.servlet</pattern>
+                  <shadedPattern>org.apache.htrace.javax.servlet</shadedPattern>
+                </relocation>
               </relocations>
             </configuration>
             <goals>
@@ -124,7 +128,17 @@
     <dependency>
       <groupId>com.google.protobuf</groupId>
       <artifactId>protobuf-java</artifactId>
-      <version>${protobuf.version}</version>
+      <version>2.5.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.jetty</groupId>
+      <artifactId>jetty-server</artifactId>
+      <version>${jetty.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.jetty</groupId>
+      <artifactId>jetty-servlet</artifactId>
+      <version>${jetty.version}</version>
     </dependency>
     <!-- Global deps. -->
     <dependency>
@@ -141,6 +155,7 @@
       <groupId>org.apache.hbase</groupId>
       <artifactId>hbase-client</artifactId>
       <version>${hbase.version}</version>
+      <scope>provided</scope>
       <exclusions>
         <exclusion>
           <groupId>org.apache.htrace</groupId>
@@ -169,7 +184,7 @@
           <plugin>
             <groupId>org.apache.hadoop</groupId>
             <artifactId>hadoop-maven-plugins</artifactId>
-            <version>${hadoop.version}</version>
+            <version>2.7.1</version>
             <configuration>
               <protocVersion>${protobuf.version}</protocVersion>
               <protocCommand>${protoc.path}</protocCommand>
diff --git a/htrace-hbase/src/main/java/org/apache/htrace/impl/HBaseSpanReceiver.java b/htrace-hbase/src/main/java/org/apache/htrace/impl/HBaseSpanReceiver.java
index b0720f3..1f54f18 100644
--- a/htrace-hbase/src/main/java/org/apache/htrace/impl/HBaseSpanReceiver.java
+++ b/htrace-hbase/src/main/java/org/apache/htrace/impl/HBaseSpanReceiver.java
@@ -364,6 +364,7 @@
     long traceid = parent.getSpan().getSpanId().getHigh();
     TraceScope child1 = Trace.startSpan("HBaseSpanReceiver.main.child.1");
     Thread.sleep(10);
+    child1.close();
     TraceScope child2 = Trace.startSpan("HBaseSpanReceiver.main.child.2", parent.getSpan());
     Thread.sleep(10);
     TraceScope gchild = Trace.startSpan("HBaseSpanReceiver.main.grandchild");
@@ -374,7 +375,6 @@
     Thread.sleep(10);
     child2.close();
     Thread.sleep(10);
-    child1.close();
     parent.close();
     receiver.close();
     System.out.println("trace id: " + traceid);
diff --git a/htrace-hbase/src/main/java/org/apache/htrace/viewer/HBaseSpanViewerServer.java b/htrace-hbase/src/main/java/org/apache/htrace/viewer/HBaseSpanViewerServer.java
index da90008..1ae7165 100644
--- a/htrace-hbase/src/main/java/org/apache/htrace/viewer/HBaseSpanViewerServer.java
+++ b/htrace-hbase/src/main/java/org/apache/htrace/viewer/HBaseSpanViewerServer.java
@@ -22,87 +22,66 @@
 import java.net.URI;
 import java.util.ArrayList;
 import java.util.List;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.http.HttpServer2;
-import org.apache.hadoop.net.NetUtils;
 import org.apache.hadoop.util.Tool;
 import org.apache.hadoop.util.ToolRunner;
 import org.apache.hadoop.hbase.HBaseConfiguration;
 
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.servlet.DefaultServlet;
+import org.eclipse.jetty.servlet.ServletContextHandler;
+import org.eclipse.jetty.servlet.ServletHolder;
+
 public class HBaseSpanViewerServer implements Tool {
   private static final Log LOG = LogFactory.getLog(HBaseSpanViewerServer.class);
   public static final String HTRACE_VIEWER_HTTP_ADDRESS_KEY = "htrace.viewer.http.address";
   public static final String HTRACE_VIEWER_HTTP_ADDRESS_DEFAULT = "0.0.0.0:16900";
-  public static final String HTRACE_CONF_ATTR = "htrace.conf";
-  public static final String HTRACE_APPDIR = "webapps";
-  public static final String NAME = "htrace";
-
   private Configuration conf;
-  private HttpServer2 httpServer;
-  private InetSocketAddress httpAddress;
+  private Server server;
 
+  @Override
   public void setConf(Configuration conf) {
     this.conf = conf;
   }
 
+  @Override
   public Configuration getConf() {
     return this.conf;
   }
 
-  void start() throws IOException {
-    httpAddress = NetUtils.createSocketAddr(
-        conf.get(HTRACE_VIEWER_HTTP_ADDRESS_KEY, HTRACE_VIEWER_HTTP_ADDRESS_DEFAULT));
-    conf.set(HTRACE_VIEWER_HTTP_ADDRESS_KEY, NetUtils.getHostPortString(httpAddress));
-    HttpServer2.Builder builder = new HttpServer2.Builder();
-    builder.setName(NAME).setConf(conf);
-    if (httpAddress.getPort() == 0) {
-      builder.setFindPort(true);
+  public void stop() throws Exception {
+    if (server != null) {
+      server.stop();
     }
-    URI uri = URI.create("http://" + NetUtils.getHostPortString(httpAddress));
-    builder.addEndpoint(uri);
-    LOG.info("Starting Web-server for " + NAME + " at: " + uri);
-    httpServer = builder.build();
-    httpServer.setAttribute(HTRACE_CONF_ATTR, conf);
-    httpServer.addServlet("gettraces",
-                          HBaseSpanViewerTracesServlet.PREFIX,
-                          HBaseSpanViewerTracesServlet.class);
-    httpServer.addServlet("getspans",
-                          HBaseSpanViewerSpansServlet.PREFIX + "/*",
-                          HBaseSpanViewerSpansServlet.class);
-
-    // for webapps/htrace bundled in jar.
-    String rb = httpServer.getClass()
-                          .getClassLoader()
-                          .getResource("webapps/" + NAME)
-                          .toString();
-    httpServer.getWebAppContext().setResourceBase(rb);
-
-    httpServer.start();
-    httpAddress = httpServer.getConnectorAddress(0);
-  }
-
-  void join() throws Exception {
-    if (httpServer != null) {
-      httpServer.join();
-    }
-  }
-
-  void stop() throws Exception {
-    if (httpServer != null) {
-      httpServer.stop();
-    }
-  }
-
-  InetSocketAddress getHttpAddress() {
-    return httpAddress;
   }
 
   public int run(String[] args) throws Exception {
-    start();
-    join();
-    stop();
+    URI uri = new URI("http://" + conf.get(HTRACE_VIEWER_HTTP_ADDRESS_KEY,
+                                           HTRACE_VIEWER_HTTP_ADDRESS_DEFAULT));
+    InetSocketAddress addr = new InetSocketAddress(uri.getHost(), uri.getPort());
+    server = new Server(addr);
+    ServletContextHandler root =
+      new ServletContextHandler(server, "/", ServletContextHandler.SESSIONS);
+    server.setHandler(root);
+
+    String resourceBase = server.getClass()
+                                .getClassLoader()
+                                .getResource("webapps/htrace")
+                                .toExternalForm();
+    root.setResourceBase(resourceBase);
+    root.setWelcomeFiles(new String[]{"index.html"});
+    root.addServlet(new ServletHolder(new DefaultServlet()),
+                    "/");
+    root.addServlet(new ServletHolder(new HBaseSpanViewerTracesServlet(conf)),
+                    "/gettraces");
+    root.addServlet(new ServletHolder(new HBaseSpanViewerSpansServlet(conf)),
+                    "/getspans/*");
+
+    server.start();
+    server.join();
     return 0;
   }
 
diff --git a/htrace-hbase/src/main/java/org/apache/htrace/viewer/HBaseSpanViewerSpansServlet.java b/htrace-hbase/src/main/java/org/apache/htrace/viewer/HBaseSpanViewerSpansServlet.java
index 8f3f50f..3983fde 100644
--- a/htrace-hbase/src/main/java/org/apache/htrace/viewer/HBaseSpanViewerSpansServlet.java
+++ b/htrace-hbase/src/main/java/org/apache/htrace/viewer/HBaseSpanViewerSpansServlet.java
@@ -29,8 +29,6 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.util.ServletUtil;
 import org.apache.htrace.protobuf.generated.SpanProtos;
 
 public class HBaseSpanViewerSpansServlet extends HttpServlet {
@@ -43,22 +41,24 @@
           return null;
         }
       };
+  private Configuration conf;
+
+  public HBaseSpanViewerSpansServlet(Configuration conf) {
+    this.conf = conf;
+  }
 
   @Override
   @SuppressWarnings("unchecked")
   public void doGet(HttpServletRequest request, HttpServletResponse response)
       throws ServletException, IOException {
-    final String path =
-        validatePath(ServletUtil.getDecodedPath(request, PREFIX));
-    if (path == null) {
+    final String path = request.getRequestURI().substring(PREFIX.length());
+    if (path == null || path.length() == 0) {
       response.setContentType("text/plain");
       response.getWriter().print("Invalid input");
       return;
     }
     HBaseSpanViewer viewer = tlviewer.get();
     if (viewer == null) {
-      final Configuration conf = (Configuration) getServletContext()
-        .getAttribute(HBaseSpanViewerServer.HTRACE_CONF_ATTR);
       viewer = new HBaseSpanViewer(conf);
       tlviewer.set(viewer);
     }
@@ -89,9 +89,4 @@
       viewer.close();
     }
   }
-
-  public static String validatePath(String p) {
-    return p == null || p.length() == 0?
-      null: new Path(p).toUri().getPath();
-  }
 }
diff --git a/htrace-hbase/src/main/java/org/apache/htrace/viewer/HBaseSpanViewerTracesServlet.java b/htrace-hbase/src/main/java/org/apache/htrace/viewer/HBaseSpanViewerTracesServlet.java
index b0370c4..37ed43c 100644
--- a/htrace-hbase/src/main/java/org/apache/htrace/viewer/HBaseSpanViewerTracesServlet.java
+++ b/htrace-hbase/src/main/java/org/apache/htrace/viewer/HBaseSpanViewerTracesServlet.java
@@ -29,8 +29,6 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.util.ServletUtil;
 import org.apache.htrace.protobuf.generated.SpanProtos;
 
 public class HBaseSpanViewerTracesServlet extends HttpServlet {
@@ -43,6 +41,11 @@
           return null;
         }
       };
+  private Configuration conf;
+
+  public HBaseSpanViewerTracesServlet(Configuration conf) {
+    this.conf = conf;
+  }
 
   @Override
   @SuppressWarnings("unchecked")
@@ -50,8 +53,6 @@
       throws ServletException, IOException {
     HBaseSpanViewer viewer = tlviewer.get();
     if (viewer == null) {
-      final Configuration conf = (Configuration) getServletContext()
-        .getAttribute(HBaseSpanViewerServer.HTRACE_CONF_ATTR);
       viewer = new HBaseSpanViewer(conf);
       tlviewer.set(viewer);
     }
diff --git a/htrace-hbase/src/main/webapps/static/bootstrap-theme.min.css b/htrace-hbase/src/main/webapps/htrace/bootstrap-theme.min.css
similarity index 100%
rename from htrace-hbase/src/main/webapps/static/bootstrap-theme.min.css
rename to htrace-hbase/src/main/webapps/htrace/bootstrap-theme.min.css
diff --git a/htrace-hbase/src/main/webapps/static/bootstrap.min.css b/htrace-hbase/src/main/webapps/htrace/bootstrap.min.css
similarity index 100%
rename from htrace-hbase/src/main/webapps/static/bootstrap.min.css
rename to htrace-hbase/src/main/webapps/htrace/bootstrap.min.css
diff --git a/htrace-hbase/src/main/webapps/static/d3.min.js b/htrace-hbase/src/main/webapps/htrace/d3.min.js
similarity index 100%
rename from htrace-hbase/src/main/webapps/static/d3.min.js
rename to htrace-hbase/src/main/webapps/htrace/d3.min.js
diff --git a/htrace-hbase/src/main/webapps/htrace/spans.html b/htrace-hbase/src/main/webapps/htrace/spans.html
index 28b48b7..6e3fa45 100644
--- a/htrace-hbase/src/main/webapps/htrace/spans.html
+++ b/htrace-hbase/src/main/webapps/htrace/spans.html
@@ -17,11 +17,11 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
-<script src="/static/d3.min.js" type="text/javascript"></script>
+<script src="d3.min.js" type="text/javascript"></script>
 <script src="spans.js" type="text/javascript"></script>
 <head>
-  <link href="/static/bootstrap.min.css" rel="stylesheet">
-  <link href="/static/bootstrap-theme.min.css" rel="stylesheet">
+  <link href="bootstrap.min.css" rel="stylesheet">
+  <link href="bootstrap-theme.min.css" rel="stylesheet">
 </head>
 <body>
 </body>
diff --git a/htrace-hbase/src/main/webapps/htrace/spans.js b/htrace-hbase/src/main/webapps/htrace/spans.js
index 03ff6fb..8e58860 100644
--- a/htrace-hbase/src/main/webapps/htrace/spans.js
+++ b/htrace-hbase/src/main/webapps/htrace/spans.js
@@ -21,7 +21,7 @@
 const size_tl = 6;
 const margin = {top: 50, bottom: 50, left: 50, right: 1000, process: 250};
 
-const ROOT_SPAN_ID = "477902"; // constants defined in org.apache.htrace.Span
+const ROOT_SPAN_ID = "0";
 const traceid = window.location.search.substring(1).split("=")[1];
 
 d3.json("/getspans/" + traceid, function(spans) {
diff --git a/htrace-hbase/src/main/webapps/htrace/traces.html b/htrace-hbase/src/main/webapps/htrace/traces.html
index a8e1e2a..c0f0a37 100644
--- a/htrace-hbase/src/main/webapps/htrace/traces.html
+++ b/htrace-hbase/src/main/webapps/htrace/traces.html
@@ -17,11 +17,11 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
-<script src="/static/d3.min.js" type="text/javascript"></script>
+<script src="d3.min.js" type="text/javascript"></script>
 <script src="traces.js" type="text/javascript"></script>
 <head>
-  <link href="/static/bootstrap.min.css" rel="stylesheet">
-  <link href="/static/bootstrap-theme.min.css" rel="stylesheet">
+  <link href="bootstrap.min.css" rel="stylesheet">
+  <link href="bootstrap-theme.min.css" rel="stylesheet">
 </head>
 <body>
 </body>
