diff --git a/htrace-core/src/go/gobuild.sh b/htrace-core/src/go/gobuild.sh
index 91cefbf..40cb4bf 100755
--- a/htrace-core/src/go/gobuild.sh
+++ b/htrace-core/src/go/gobuild.sh
@@ -95,9 +95,6 @@
     # Download dependencies into the build directory.
     echo "godep restore..."
     godep restore || die "failed to set up dependencies"
-    go run "$SCRIPT_DIR/src/org/apache/htrace/bundler/bundler.go" \
-        --src="$SCRIPT_DIR/../web/" --dst="$SCRIPT_DIR/src/org/apache/htrace/resource/" \
-            || die "bundler failed"
 
     # Discover the git version
     GIT_VERSION=$(git rev-parse HEAD)
diff --git a/htrace-core/src/go/src/org/apache/htrace/bundler/bundler.go b/htrace-core/src/go/src/org/apache/htrace/bundler/bundler.go
deleted file mode 100644
index 11c3292..0000000
--- a/htrace-core/src/go/src/org/apache/htrace/bundler/bundler.go
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package main
-
-//
-// The bundler turns files into resources contained in go code.
-//
-// This is useful for serving HTML and Javascript files from a self-contained binary.
-//
-
-import (
-	"bufio"
-	"flag"
-	"fmt"
-	"io/ioutil"
-	"log"
-	"os"
-	"path/filepath"
-	"strings"
-)
-
-const APACHE_HEADER = `/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-`
-
-const GENERATED_CODE_COMMENT = "// THIS IS GENERATED CODE.  DO NOT EDIT."
-
-var SEP string = string(os.PathSeparator)
-
-// Return true if a file contains a given string.
-func fileContainsString(path, line string) (bool, error) {
-	file, err := os.Open(path)
-	if err != nil {
-		return false, err
-	}
-	defer file.Close()
-	scanner := bufio.NewScanner(file)
-	for scanner.Scan() {
-		if strings.Contains(scanner.Text(), line) {
-			return true, nil
-		}
-	}
-	if err := scanner.Err(); err != nil {
-		return false, err
-	}
-	return false, nil
-}
-
-// Converts a source file path to a destination file path
-func sfileToDfile(sfile string) string {
-	return strings.Replace(sfile, SEP, "__", -1) + ".go"
-}
-
-// Delete generated files that are in dfiles but not sfiles.
-// sfiles and dfiles must be sorted by file name.
-func deleteUnusedDst(sfiles []string, dst string, dfiles []os.FileInfo) error {
-	s := 0
-	for d := range dfiles {
-		fullDst := dst + SEP + dfiles[d].Name()
-		generated, err := fileContainsString(fullDst, GENERATED_CODE_COMMENT)
-		if err != nil {
-			return err
-		}
-		if !generated {
-			// Skip this destination file, since it is not generated.
-			continue
-		}
-		found := false
-		for {
-			if s >= len(sfiles) {
-				break
-			}
-			tgt := sfileToDfile(sfiles[s])
-			if tgt == dfiles[d].Name() {
-				found = true
-				break
-			}
-			if tgt > dfiles[d].Name() {
-				break
-			}
-			s++
-		}
-		if !found {
-			log.Printf("Removing %s\n", fullDst)
-			err := os.Remove(fullDst)
-			if err != nil {
-				return err
-			}
-		}
-	}
-	return nil
-}
-
-func createBundleFile(pkg, src, sfile, dst string) error {
-	// Open destination file and write header.
-	tgt := sfileToDfile(sfile)
-	fullDst := dst + SEP + tgt
-	out, err := os.Create(fullDst)
-	if err != nil {
-		return err
-	}
-	defer out.Close()
-	_, err = out.WriteString(APACHE_HEADER)
-	if err != nil {
-		return err
-	}
-	_, err = out.WriteString("\n" + GENERATED_CODE_COMMENT + "\n")
-	if err != nil {
-		return err
-	}
-	_, err = out.WriteString(fmt.Sprintf("\npackage %s\n", pkg))
-	if err != nil {
-		return err
-	}
-	_, err = out.WriteString(fmt.Sprintf("var _ = addResource(\"%s\", `\n", tgt[:len(tgt)-3]))
-	if err != nil {
-		return err
-	}
-
-	// Open source file and create scanner.
-	fullSrc := src + SEP + sfile
-	in, err := os.Open(fullSrc)
-	if err != nil {
-		return err
-	}
-	defer in.Close()
-	reader := bufio.NewReader(in)
-	scanner := bufio.NewScanner(reader)
-	for scanner.Scan() {
-		str := strings.Replace(scanner.Text(), "`", "` + \"`\" + `", -1) + "\n"
-		// Avoid "Unicode (UTF-8) BOM in middle of file" error.
-		str = strings.Replace(str, "\uFEFF", "` + \"\\uFEFF\" + `", -1)
-		_, err := out.WriteString(str)
-		if err != nil {
-			return err
-		}
-	}
-	_, err = out.WriteString("`)\n")
-	if err != nil {
-		return err
-	}
-	err = out.Close()
-	if err != nil {
-		return err
-	}
-	return nil
-}
-
-var src = flag.String("src", "", "Source path for bundled resources.")
-var dst = flag.String("dst", "", "Destination path for bundled resources.")
-var pkg = flag.String("pkg", "resource", "Package name to use for bundled resources")
-
-func main() {
-	flag.Parse()
-	if *src == "" {
-		log.Fatal("You must supply a src directory to bundle.")
-	}
-	if *dst == "" {
-		log.Fatal("You must supply a dst directory for output.")
-	}
-	sfiles := make([]string, 0, 32)
-	absSrc, err := filepath.Abs(filepath.Clean(*src))
-	if err != nil {
-		log.Fatalf("Error getting absolute path for %s: %s\n", *src, err.Error())
-	}
-	err = filepath.Walk(absSrc, func(path string, info os.FileInfo, err error) error {
-		if err != nil {
-			return err
-		}
-		if info.IsDir() {
-			return nil
-		}
-		var suffix string
-		suffix, err = filepath.Rel(absSrc, path)
-		if err != nil {
-			return err
-		}
-		sfiles = append(sfiles, suffix)
-		return nil
-	})
-	if err != nil {
-		log.Fatalf("Error listing files in src directory %s: %s\n", absSrc, err.Error())
-	}
-	var dfiles []os.FileInfo
-	dfiles, err = ioutil.ReadDir(*dst)
-	if err != nil {
-		log.Fatalf("Error listing files in output directory %s: %s\n", *dst, err.Error())
-	}
-	deleteUnusedDst(sfiles, *dst, dfiles)
-	for s := range sfiles {
-		err = createBundleFile(*pkg, absSrc, sfiles[s], *dst)
-		if err != nil {
-			log.Fatalf("Error creating bundle file for %s in %s: %s\n",
-				sfiles[s], *dst, err.Error())
-		}
-		log.Printf("Bundled %s as %s\n", absSrc, *dst+SEP+sfileToDfile(sfiles[s]))
-	}
-}
diff --git a/htrace-core/src/go/src/org/apache/htrace/htraced/rest.go b/htrace-core/src/go/src/org/apache/htrace/htraced/rest.go
index dc9a061..58486f1 100644
--- a/htrace-core/src/go/src/org/apache/htrace/htraced/rest.go
+++ b/htrace-core/src/go/src/org/apache/htrace/htraced/rest.go
@@ -31,6 +31,7 @@
 	"org/apache/htrace/common"
 	"org/apache/htrace/conf"
 	"org/apache/htrace/resource"
+	"os"
 	"path/filepath"
 	"strconv"
 	"strings"
@@ -292,7 +293,17 @@
 	span.Handle("/{id}/children", findChildrenH).Methods("GET")
 
 	// Default Handler. This will serve requests for static requests.
-	r.PathPrefix("/").Handler(&defaultServeHandler{lg: rsv.lg}).Methods("GET")
+	webdir := os.Getenv("HTRACED_WEB_DIR")
+	if webdir == "" {
+		webdir, err = filepath.Abs(filepath.Join(filepath.Dir(os.Args[0]), "..", "..", "web"))
+
+		if err != nil {
+			return nil, err
+		}
+	}
+
+	rsv.lg.Infof("Serving static files from %s\n.", webdir)
+	r.PathPrefix("/").Handler(http.FileServer(http.Dir(webdir))).Methods("GET")
 
 	// Log an error message for unknown non-GET requests.
 	r.PathPrefix("/").Handler(&logErrorHandler{lg: rsv.lg})
