diff --git a/handlers.go b/handlers.go
index 8c69ec8..e54cd02 100644
--- a/handlers.go
+++ b/handlers.go
@@ -4,6 +4,7 @@
 	"encoding/json"
 	"errors"
 	"net/http"
+	"net/http/pprof"
 )
 
 /*
@@ -49,6 +50,15 @@
 		s:   s,
 		mux: http.NewServeMux(),
 	}
+
+	// Manually register paths from "pprof" package because we are
+	// not using a standard HTTP handler here.
+	h.mux.HandleFunc("/debug/pprof/", pprof.Index)
+	h.mux.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline)
+	h.mux.HandleFunc("/debug/pprof/profile", pprof.Profile)
+	h.mux.HandleFunc("/debug/pprof/symbol", pprof.Symbol)
+	h.mux.HandleFunc("/debug/pprof/trace", pprof.Trace)
+
 	if s.healthPath != "" {
 		h.mux.HandleFunc(s.healthPath, s.handleHealth)
 	}
diff --git a/httpstop.go b/httpstop.go
deleted file mode 100644
index 49f014d..0000000
--- a/httpstop.go
+++ /dev/null
@@ -1 +0,0 @@
-package goscaffold
diff --git a/scaffold.go b/scaffold.go
index 629fcf8..55013d4 100644
--- a/scaffold.go
+++ b/scaffold.go
@@ -453,7 +453,6 @@
 
 	go func() {
 		for {
-			fmt.Printf("Listening for signals\n")
 			sig := <-sigChan
 			switch sig {
 			case syscall.SIGINT, syscall.SIGTERM:
@@ -468,7 +467,6 @@
 }
 
 func dumpStack(out io.Writer) {
-	fmt.Printf("Got HUP\n")
 	stackSize := 4096
 	stackBuf := make([]byte, stackSize)
 	var w int
diff --git a/scaffold_test.go b/scaffold_test.go
index 692602a..d3e3e98 100644
--- a/scaffold_test.go
+++ b/scaffold_test.go
@@ -1,6 +1,7 @@
 package goscaffold
 
 import (
+	"bytes"
 	"crypto/tls"
 	"encoding/json"
 	"errors"
@@ -46,6 +47,7 @@
 		Expect(err).Should(Succeed())
 		resp.Body.Close()
 		Expect(resp.StatusCode).Should(Equal(200))
+		validatePprof(s.InsecureAddress())
 		shutdownErr := errors.New("Validate")
 		s.Shutdown(shutdownErr)
 		Eventually(stopChan).Should(Receive(Equal(shutdownErr)))
@@ -79,6 +81,7 @@
 		Expect(err).Should(Succeed())
 		resp.Body.Close()
 		Expect(resp.StatusCode).Should(Equal(404))
+		validatePprof(s.ManagementAddress())
 		shutdownErr := errors.New("Validate")
 		s.Shutdown(shutdownErr)
 		Eventually(stopChan).Should(Receive(Equal(shutdownErr)))
@@ -362,6 +365,12 @@
 		Eventually(stopChan).Should(Receive(Equal(shutdownErr)))
 
 	})
+
+	It("Get stack trace", func() {
+		b := &bytes.Buffer{}
+		dumpStack(b)
+		Expect(b.Len()).ShouldNot(BeZero())
+	})
 })
 
 func getText(url string) (int, string) {
@@ -391,6 +400,14 @@
 	return resp.StatusCode, vals
 }
 
+func validatePprof(addr string) {
+	code, _ := getText(fmt.Sprintf("http://%s/debug/pprof/", addr))
+	Expect(code).Should(Equal(200))
+	code, cmdline := getText(fmt.Sprintf("http://%s/debug/pprof/cmdline", addr))
+	Expect(code).Should(Equal(200))
+	Expect(cmdline).ShouldNot(BeEmpty())
+}
+
 func testGet(s *HTTPScaffold, path string) bool {
 	resp, err := http.Get(fmt.Sprintf("http://%s", s.InsecureAddress()))
 	if err != nil {
