diff --git a/.gitignore b/.gitignore
index 48b8bf9..bb125c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,4 @@
 vendor/
+.idea/
+*.iml
+*~
diff --git a/glide.lock b/glide.lock
index 910b296..f8b3ba0 100644
--- a/glide.lock
+++ b/glide.lock
@@ -1,8 +1,41 @@
 hash: 9b96c783f272b0a712add71d2d753d1eb07ba91dfe9b42e3532b8d3e3cec639c
-updated: 2016-10-04T12:46:18.025613379-07:00
+updated: 2016-12-16T16:08:14.415655665-08:00
 imports: []
 testImports:
 - name: github.com/onsi/ginkgo
   version: 45a5f6ffb2a14e4f29698c16ae4c0a34018a8951
+  subpackages:
+  - config
+  - internal/codelocation
+  - internal/containernode
+  - internal/failer
+  - internal/leafnodes
+  - internal/remote
+  - internal/spec
+  - internal/specrunner
+  - internal/suite
+  - internal/testingtproxy
+  - internal/writer
+  - reporters
+  - reporters/stenographer
+  - types
 - name: github.com/onsi/gomega
   version: d59fa0ac68bb5dd932ee8d24eed631cdd519efc3
+  subpackages:
+  - format
+  - internal/assertion
+  - internal/asyncassertion
+  - internal/oraclematcher
+  - internal/testingtsupport
+  - matchers
+  - matchers/support/goraph/bipartitegraph
+  - matchers/support/goraph/edge
+  - matchers/support/goraph/node
+  - matchers/support/goraph/util
+  - types
+- name: golang.org/x/sys
+  version: c200b10b5d5e122be351b67af224adc6128af5bf
+  subpackages:
+  - unix
+- name: gopkg.in/yaml.v2
+  version: a5b47d31c556af34a302ce5d659e6fea44d90de0
diff --git a/scaffold.go b/scaffold.go
index a878a7b..9d90a0d 100644
--- a/scaffold.go
+++ b/scaffold.go
@@ -317,23 +317,11 @@
 }
 
 /*
-Listen should be called instead of using the standard "http" and "net"
+StartListen should be called instead of using the standard "http" and "net"
 libraries. It will open a port (or ports) and begin listening for
-HTTP traffic. It will block until the server is shut down by
-the various methods in this class.
-It will use the graceful shutdown logic to ensure that once marked down,
-the server will not exit until all the requests have completed,
-or until the shutdown timeout has expired.
-Like http.Serve, this function will block until we are done serving HTTP.
-If "SetInsecurePort" or "SetSecurePort" were not set, then it will listen on
-a dynamic port.
-Listen will block until the server is shutdown using "Shutdown" or one of
-the other shutdown mechanisms. It must not be called until after "Open"
-has been called.
-If shut down, Listen will return the error that was passed to the "shutdown"
-method.
+HTTP traffic.
 */
-func (s *HTTPScaffold) Listen(baseHandler http.Handler) error {
+func (s *HTTPScaffold) StartListen(baseHandler http.Handler) error {
 	if !s.open {
 		err := s.Open()
 		if err != nil {
@@ -366,7 +354,24 @@
 	if s.secureListener != nil {
 		go http.Serve(s.secureListener, mainHandler)
 	}
+	return nil
+}
 
+/*
+WaitForShutdown blocks until we are shut down.
+It will use the graceful shutdown logic to ensure that once marked down,
+the server will not exit until all the requests have completed,
+or until the shutdown timeout has expired.
+Like http.Serve, this function will block until we are done serving HTTP.
+If "SetInsecurePort" or "SetSecurePort" were not set, then it will listen on
+a dynamic port.
+This method will block until the server is shutdown using "Shutdown" or one of
+the other shutdown mechanisms. It must not be called until after
+"StartListenen"
+When shut down, this method will return the error that was passed to the "shutdown"
+method.
+*/
+func (s *HTTPScaffold) WaitForShutdown() error {
 	err := <-s.tracker.C
 
 	if s.insecureListener != nil {
@@ -383,6 +388,19 @@
 }
 
 /*
+Listen is a convenience function that first calls "StartListen" and then
+calls "WaitForShutdown."
+*/
+func (s *HTTPScaffold) Listen(baseHandler http.Handler) error {
+	err := s.StartListen(baseHandler)
+	if err != nil {
+		return err
+	}
+
+	return s.WaitForShutdown()
+}
+
+/*
 Shutdown indicates that the server should stop handling incoming requests
 and exit from the "Serve" call. This may be called automatically by
 calling "CatchSignals," or automatically using this call. If
