diff --git a/services/debug/debug/browse.go b/services/debug/debug/browse.go
index 2826698..54695ed 100644
--- a/services/debug/debug/browse.go
+++ b/services/debug/debug/browse.go
@@ -498,7 +498,6 @@
 	ctx, tracer := newTracer(a.ctx)
 	stub := svtrace.StoreClient(name)
 
-	fmt.Println("calling out to", name)
 	call, err := stub.AllTraces(ctx)
 	if err != nil {
 		w.WriteHeader(http.StatusInternalServerError)
@@ -509,7 +508,6 @@
 	var traces []string
 	for stream.Advance() {
 		id := stream.Value().Id
-		fmt.Printf("Got back: %x", id)
 		traces = append(traces, hex.EncodeToString(id[:]))
 	}
 
@@ -529,18 +527,16 @@
 		Vtrace: tracer,
 	}
 	executeTemplate(a.ctx, w, r, tmplBrowseAllTraces, data)
-	fmt.Println("Done with template")
 }
 
 type divTree struct {
+	Id string
 	// Start is a value from 0-100 which is the percentage of time into the parent span's duration
 	// that this span started.
 	Start int
-	// End is a value from 0-100 which is the percentage of time into the parent span's duration
-	// that this span ended.
+	// Width is a value from 0-100 which is the percentage of time in the parent span's duration this span
+	// took
 	Width int
-	// VerticalOffset is the number of pixels from the top of the parent div this div should appear.
-	VerticalOffset int
 	Name string
 	Annotations []annotation
 	Children []divTree
@@ -553,7 +549,7 @@
 	Msg string
 }
 
-func convertToTree(n *vtrace.Node, parentStart time.Time, parentEnd time.Time, verticalPosition int) *divTree {
+func convertToTree(n *vtrace.Node, parentStart time.Time, parentEnd time.Time) *divTree {
 	startTime := n.Span.Start
 	if startTime.IsZero() {
 		startTime = parentStart
@@ -565,15 +561,13 @@
 	}
 
 	parentDuration := parentEnd.Sub(parentStart).Seconds()
-	fmt.Println("parent start is", parentStart, "start", startTime, "parentEnd", parentEnd, "end", endTime)
 	start := int(100 * startTime.Sub(parentStart).Seconds() / parentDuration)
 	width := int(100 * endTime.Sub(parentStart).Seconds() / parentDuration) - start
-	fmt.Println("start:", start, "end", width)
 	top := &divTree{
+		Id: n.Span.Id.String(),
 		Start: start,
 		Width: width,
 		Name: n.Span.Name,
-		VerticalOffset: verticalPosition,
 	}
 	top.Annotations = make([]annotation, len(n.Span.Annotations))
 	for i, a := range n.Span.Annotations {
@@ -585,10 +579,8 @@
 		top.Annotations[i].Position = int(100 * a.When.Sub(parentStart).Seconds() / parentDuration) - start
 	}
 	top.Children = make([]divTree, len(n.Children))
-	pos := 2
 	for i, c := range n.Children {
-		top.Children[i] = *convertToTree(c, startTime, endTime, pos)
-		pos += 2
+		top.Children[i] = *convertToTree(c, startTime, endTime)
 	}
 	return top
 
@@ -686,7 +678,7 @@
 		return
 	}
 
-	tree := convertToTree(node, findStartTime(node), findEndTime(node), 0)
+	tree := convertToTree(node, findStartTime(node), findEndTime(node))
 	data := struct{
 		Id  string
 		Root *divTree
@@ -1030,20 +1022,35 @@
 `)
 	tmplBrowseVtrace = makeTemplate("vtrace",`
 {{define ".span"}}
-<div style="position:relative;left:{{.Start}}%;width:{{.Width}}%;top:{{.VerticalOffset}}px;margin:0px;padding:0px">
+<div style="position:relative;left:{{.Start}}%;width:{{.Width}}%;margin:0px;padding-top:2px;" id="{{.Id}}">
   <!-- Root span -->
-  <div title="{{.Name}}" style="position:relative;left:0%;width:100%;background:{{nextColor}};height:15px;display:block;margin:0px;padding:0px"></div>
+  <div id="root" title="{{.Name}}" style="position:relative;width:100%;background:{{nextColor}};height:15px;display:block;margin:0px;padding:0px"></div>
   {{range $i, $child := .Children}}
   {{template ".span" $child}}
   {{end}}
 </div>
 {{end}}
+{{define ".collapse-nav"}}
+<div id="{{.Id}}" style="position:relative;left:5px">
+<div style="position:relative;height:15px;font:10pt" >{{len .Children}}</div>
+{{range .Children}}
+{{template ".collapse-nav" .}}
+{{end}}
+</div>
+{{end}}
 <section class="section--center mdl-grid">
   <h5>Vtrace for {{.Id}}</h5>
   <pre>{{.DebugTrace}}</pre>
-  <div id="parent" class="mdl-cell mdl-cell--12-col">
+  <div class="mdl-cell mdl-cell--12-col">
+  <div style="display:flex;flex-direction:row">
+  <div style="min-width:10%">
+  {{template ".collapse-nav" .Root}}
+  </div>
+  <div id="parent" style="width:80%">
   {{template ".span" .Root}}
   </div>
+  </div>
+  </div>
 </section>
 `)
 
