diff --git a/action/create.go b/action/create.go
index 5a8d6c4..31972c0 100644
--- a/action/create.go
+++ b/action/create.go
@@ -93,7 +93,7 @@
 		}
 
 		for _, i := range deps {
-			msg.Info("Found imported reference to %s\n", i.Name)
+			msg.Info("Found imported reference to %s", i.Name)
 			config.Imports = append(config.Imports, i)
 		}
 	}
@@ -124,7 +124,7 @@
 		root, subpkg := util.NormalizeName(n)
 
 		if !config.HasDependency(root) {
-			msg.Info("Found reference to %s\n", n)
+			msg.Info("Found reference to %s", n)
 			d := &cfg.Dependency{
 				Name: root,
 			}
@@ -137,7 +137,7 @@
 				subpkg = strings.TrimPrefix(subpkg, "/")
 				d := config.Imports.Get(root)
 				if !d.HasSubpackage(subpkg) {
-					msg.Info("Adding sub-package %s to %s\n", subpkg, root)
+					msg.Info("Adding sub-package %s to %s", subpkg, root)
 					d.Subpackages = append(d.Subpackages, subpkg)
 				}
 			}
diff --git a/action/ensure.go b/action/ensure.go
index c57bbac..6168f73 100644
--- a/action/ensure.go
+++ b/action/ensure.go
@@ -99,7 +99,7 @@
 	}
 
 	msg.Error("Could not find any of %s/src.\n", strings.Join(gps, "/src, "))
-	msg.Info("As of Glide 0.5/Go 1.5, this is required.\n")
+	msg.Info("As of Glide 0.5/Go 1.5, this is required.")
 	msg.Die("Wihtout src, cannot continue.")
 	return ""
 }
diff --git a/action/rebuild.go b/action/rebuild.go
index d53b774..8cebfa1 100644
--- a/action/rebuild.go
+++ b/action/rebuild.go
@@ -24,10 +24,10 @@
 		msg.Die("Could not get vendor path: %s", err)
 	}
 
-	msg.Info("Building dependencies.\n")
+	msg.Info("Building dependencies.")
 
 	if len(conf.Imports) == 0 {
-		msg.Info("No dependencies found. Nothing built.\n")
+		msg.Info("No dependencies found. Nothing built.")
 		return
 	}
 
@@ -87,7 +87,7 @@
 }
 
 func buildPath(path string) error {
-	msg.Info("Running go build %s\n", path)
+	msg.Info("Running go build %s", path)
 	// . in a filepath.Join is removed so it needs to be prepended separately.
 	p := "." + string(filepath.Separator) + filepath.Join("vendor", path)
 	out, err := exec.Command("go", "install", p).CombinedOutput()
diff --git a/action/update.go b/action/update.go
index 5d56a51..15b4b80 100644
--- a/action/update.go
+++ b/action/update.go
@@ -17,6 +17,9 @@
 	EnsureVendorDir()
 	conf := EnsureConfig()
 
+	msg.StartProgress("Updating dependencies...")
+	defer msg.StopProgress("Update complete")
+
 	// Delete unused packages
 	if installer.DeleteUnused {
 		dependency.DeleteUnused(conf)
diff --git a/dependency/delete.go b/dependency/delete.go
index 39a6367..8a0e5c0 100644
--- a/dependency/delete.go
+++ b/dependency/delete.go
@@ -92,7 +92,7 @@
 	// Perform the actual delete.
 	for _, path := range markForDelete {
 		localPath := strings.TrimPrefix(path, searchPath)
-		msg.Info("Removing unused package: %s\n", localPath)
+		msg.Info("Removing unused package: %s", localPath)
 		rerr := os.RemoveAll(path)
 		if rerr != nil {
 			return rerr
diff --git a/gb/gb.go b/gb/gb.go
index 5a07c62..aa1816d 100644
--- a/gb/gb.go
+++ b/gb/gb.go
@@ -24,7 +24,7 @@
 		return []*cfg.Dependency{}, nil
 	}
 
-	msg.Info("Found GB manifest file.\n")
+	msg.Info("Found GB manifest file.")
 	buf := []*cfg.Dependency{}
 	file, err := os.Open(path)
 	if err != nil {
diff --git a/glide.lock b/glide.lock
index ef461c7..233399f 100644
--- a/glide.lock
+++ b/glide.lock
@@ -1,8 +1,12 @@
-hash: 1d4d06656329894abc78c0ac256169337c947260b784fee7ed02a0e405c0f63b
-updated: 2016-01-28T11:15:09.190330904-05:00
+hash: 45950a5c234a3741dbbb86a8f0fb4bd2757e3d19e571a8fe6e9372cbb878517c
+updated: 2016-02-11T22:12:03.12669949-07:00
 imports:
 - name: github.com/codegangsta/cli
-  version: c31a7975863e7810c92e2e288a9ab074f9a88f29
+  version: 0ab42fd482c27cf2c95e7794ad3bb2082c2ab2d7
+- name: github.com/Masterminds/kitt
+  version: 7e843d5f21a5f009f5119a91ea3868eabb19b20f
+  subpackages:
+  - progress
 - name: github.com/Masterminds/semver
   version: 513f3dcb3ecfb1248831fb5cb06a23a3cd5935dc
 - name: github.com/Masterminds/vcs
diff --git a/glide.yaml b/glide.yaml
index 09401c9..436abb1 100644
--- a/glide.yaml
+++ b/glide.yaml
@@ -15,3 +15,4 @@
 - package: github.com/codegangsta/cli
 - package: github.com/Masterminds/semver
   version: ^1.0.0
+- package: github.com/Masterminds/kitt
diff --git a/godep/godep.go b/godep/godep.go
index 6785a0d..7670793 100644
--- a/godep/godep.go
+++ b/godep/godep.go
@@ -53,7 +53,7 @@
 	if _, err := os.Stat(path); err != nil {
 		return []*cfg.Dependency{}, nil
 	}
-	msg.Info("Found Godeps.json file.\n")
+	msg.Info("Found Godeps.json file.")
 
 	buf := []*cfg.Dependency{}
 
diff --git a/gpm/gpm.go b/gpm/gpm.go
index 41de69d..9190a11 100644
--- a/gpm/gpm.go
+++ b/gpm/gpm.go
@@ -27,10 +27,10 @@
 	if i, err := os.Stat(path); err != nil {
 		return []*cfg.Dependency{}, nil
 	} else if i.IsDir() {
-		msg.Info("Godeps is a directory. This is probably a Godep project.\n")
+		msg.Info("Godeps is a directory. This is probably a Godep project.")
 		return []*cfg.Dependency{}, nil
 	}
-	msg.Info("Found Godeps file.\n")
+	msg.Info("Found Godeps file.")
 
 	buf := []*cfg.Dependency{}
 
diff --git a/msg/msg.go b/msg/msg.go
index 7c9f705..ec8cfbc 100644
--- a/msg/msg.go
+++ b/msg/msg.go
@@ -6,6 +6,8 @@
 	"os"
 	"strings"
 	"sync"
+
+	"github.com/Masterminds/kitt/progress"
 )
 
 // Messanger provides the underlying implementation that displays output to
@@ -31,15 +33,30 @@
 	// PanicOnDie if true Die() will panic instead of exiting.
 	PanicOnDie bool
 
+	// InProgress indicates whether the Messanger is currently in a progress meter.
+	InProgress bool
+
 	// The default exit code to use when dyping
 	ecode int
 
 	// If an error was been sent.
 	hasErrored bool
+
+	meter ProgressMeter
+}
+
+type ProgressMeter interface {
+	Start(string)
+	Message(string)
+	Done(string)
 }
 
 // NewMessanger creates a default Messanger to display output.
 func NewMessanger() *Messanger {
+	//var mtr ProgressMeter = (nilMeter)(0)
+	mtr := progress.NewIndicator()
+	mtr.Frames = Cylon
+	mtr.Interval = CylonInterval
 	m := &Messanger{
 		Quiet:       false,
 		IsDebugging: false,
@@ -48,6 +65,8 @@
 		Stderr:      os.Stderr,
 		PanicOnDie:  false,
 		ecode:       1,
+		meter:       mtr,
+		InProgress:  false,
 	}
 
 	return m
@@ -67,6 +86,10 @@
 
 // Info logs information using the Default Messanger
 func Info(msg string, args ...interface{}) {
+	if Default.InProgress {
+		Default.meter.Message(fmt.Sprintf(msg, args...))
+		return
+	}
 	Default.Info(msg, args...)
 }
 
diff --git a/msg/progress.go b/msg/progress.go
new file mode 100644
index 0000000..c06acf2
--- /dev/null
+++ b/msg/progress.go
@@ -0,0 +1,57 @@
+package msg
+
+import (
+	"fmt"
+	"time"
+)
+
+var Cylon = []string{
+	" 〖\033[0;31m        ◼︎\033[m〗",
+	" 〖\033[0;31m       ◼︎ \033[m〗",
+	" 〖\033[0;31m      ◼︎▫︎ \033[m〗",
+	" 〖\033[0;31m     ◼︎ ▫︎▫︎\033[m〗",
+	" 〖\033[0;31m    ◼︎ ▫︎▫︎ \033[m〗",
+	" 〖\033[0;31m   ◼︎ ▫︎▫︎  \033[m〗",
+	" 〖\033[0;31m  ◼︎ ▫︎▫︎   \033[m〗",
+	" 〖\033[0;31m ◼︎ ▫︎▫︎    \033[m〗",
+	" 〖\033[0;31m◼︎ ▫︎▫︎     \033[m〗",
+	" 〖\033[0;31m◼︎        \033[m〗",
+	" 〖\033[0;31m▫︎◼︎       \033[m〗",
+	" 〖\033[0;31m▫︎▫︎◼︎      \033[m〗",
+	" 〖\033[0;31m ▫︎▫︎◼︎     \033[m〗",
+	" 〖\033[0;31m  ▫︎▫︎◼︎    \033[m〗",
+	" 〖\033[0;31m   ▫︎▫︎◼︎   \033[m〗",
+	" 〖\033[0;31m    ▫︎▫︎◼︎  \033[m〗",
+	" 〖\033[0;31m      ▫︎▫︎◼︎\033[m〗",
+}
+
+const CylonInterval = 100 * time.Millisecond
+
+func StartProgress(msg string) {
+	Default.InProgress = true
+	Default.meter.Start(msg)
+}
+
+func Progress(msg string, v ...interface{}) {
+	if Default.InProgress {
+		Default.meter.Message(fmt.Sprintf(msg, v...))
+	}
+}
+
+func StopProgress(msg string) {
+	Default.meter.Done(msg)
+	Default.InProgress = false
+}
+
+// nilMeter is an implementation of ProgressMeter that prints messages to Info.
+type nilMeter int
+
+func (n nilMeter) Start(s string) {
+	Info(s)
+}
+func (n nilMeter) Message(s string) {
+	Info(s)
+}
+func (n nilMeter) Done(s string) {
+	Info(s)
+}
diff --git a/repo/installer.go b/repo/installer.go
index 7ab1727..678818a 100644
--- a/repo/installer.go
+++ b/repo/installer.go
@@ -4,6 +4,7 @@
 	"fmt"
 	"os"
 	"path/filepath"
+	"runtime"
 	"strings"
 	"sync"
 
@@ -235,8 +236,6 @@
 	var lock sync.Mutex
 	var returnErr error
 
-	msg.Info("Downloading dependencies. Please wait...")
-
 	for ii := 0; ii < concurrentWorkers; ii++ {
 		go func(ch <-chan *cfg.Dependency) {
 			for {
@@ -268,6 +267,8 @@
 		in <- dep
 	}
 
+	runtime.Gosched()
+	msg.Info("Fetching %d dependencies", len(deps))
 	wg.Wait()
 
 	// Close goroutines setting the version
diff --git a/repo/set_reference.go b/repo/set_reference.go
index d40615b..6a63187 100644
--- a/repo/set_reference.go
+++ b/repo/set_reference.go
@@ -18,7 +18,7 @@
 	}
 
 	if len(conf.Imports) == 0 {
-		msg.Info("No references set.\n")
+		msg.Info("No references set.")
 		return nil
 	}
 
diff --git a/repo/vcs.go b/repo/vcs.go
index c54531f..3fa59d7 100644
--- a/repo/vcs.go
+++ b/repo/vcs.go
@@ -30,17 +30,17 @@
 		return nil
 	}
 
-	msg.Info("Fetching updates for %s.\n", dep.Name)
+	msg.Info("Fetching updates for %s.", dep.Name)
 
 	if filterArchOs(dep) {
-		msg.Info("%s is not used for %s/%s.\n", dep.Name, runtime.GOOS, runtime.GOARCH)
+		msg.Info("%s is not used for %s/%s.", dep.Name, runtime.GOOS, runtime.GOARCH)
 		return nil
 	}
 
 	// If destination doesn't exist we need to perform an initial checkout.
 	if _, err := os.Stat(dest); os.IsNotExist(err) {
 		if err = VcsGet(dep, dest, home, cache, cacheGopath, useGopath); err != nil {
-			msg.Warn("Unable to checkout %s\n", dep.Name)
+			msg.Warn("Unable to checkout %s", dep.Name)
 			return err
 		}
 	} else {
@@ -187,7 +187,7 @@
 		// If there is a ^ prefix we assume it's a semver constraint rather than
 		// part of the git/VCS commit id.
 		if repo.IsReference(ver) && !strings.HasPrefix(ver, "^") {
-			msg.Info("Setting version for %s to %s.\n", dep.Name, ver)
+			msg.Info("Setting version for %s to %s.", dep.Name, ver)
 		} else {
 
 			// Create the constraing first to make sure it's valid before
@@ -222,7 +222,7 @@
 				}
 			}
 			if found {
-				msg.Info("Detected semantic version. Setting version for %s to %s.\n", dep.Name, ver)
+				msg.Info("Detected semantic version. Setting version for %s to %s.", dep.Name, ver)
 			} else {
 				msg.Warn("Unable to find semantic version for constraint %s %s\n", dep.Name, ver)
 			}
