diff --git a/.gitignore b/.gitignore
index 19b111a..0b9c8d1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,4 +4,5 @@
 *.a
 *.sublime-project
 *.sublime-workspace
-dist/
\ No newline at end of file
+dist/
+.DS_Store
diff --git a/cmd/cache.go b/cmd/cache.go
index 0a976e5..bbb9c7b 100644
--- a/cmd/cache.go
+++ b/cmd/cache.go
@@ -13,15 +13,22 @@
 	"github.com/Masterminds/cookoo"
 )
 
+var cacheEnabled = true
+
+var errCacheDisabled = errors.New("Cache disabled")
+
 // EnsureCacheDir Creates the $HOME/.glide/cache directory (unless home is
 // specified to be different) if it does not exist.
 func EnsureCacheDir(c cookoo.Context, p *cookoo.Params) (interface{}, cookoo.Interrupt) {
 	home := p.Get("home", "").(string)
 	if home == "" {
-		return nil, errors.New("No home directory set to create")
+		cacheEnabled = false
+		Warn("Unable to locate home directory")
+		return false, nil
 	}
 	err := os.MkdirAll(filepath.Join(home, "cache", "info"), os.ModeDir|os.ModePerm)
 	if err != nil {
+		cacheEnabled = false
 		Warn("Error creating Glide directory %s", home)
 	}
 	return false, nil
@@ -69,6 +76,9 @@
 }
 
 func saveCacheRepoData(key string, data cacheRepoInfo, location string) error {
+	if !cacheEnabled {
+		return errCacheDisabled
+	}
 	data.LastUpdate = time.Now().String()
 	d, err := json.Marshal(data)
 	if err != nil {
@@ -87,6 +97,9 @@
 }
 
 func cacheRepoData(key, location string) (*cacheRepoInfo, error) {
+	if !cacheEnabled {
+		return &cacheRepoInfo{}, errCacheDisabled
+	}
 	c := &cacheRepoInfo{}
 	p := filepath.Join(location, "cache", "info", key+".json")
 	f, err := ioutil.ReadFile(p)
diff --git a/cmd/get_imports.go b/cmd/get_imports.go
index fa55356..35baee6 100644
--- a/cmd/get_imports.go
+++ b/cmd/get_imports.go
@@ -304,7 +304,10 @@
 					if err == nil {
 						Debug("Saving default branch for %s", repo.Remote())
 						c := cacheRepoInfo{DefaultBranch: branch}
-						saveCacheRepoData(key, c, home)
+						err = saveCacheRepoData(key, c, home)
+						if err == errCacheDisabled {
+							Debug("Unable to cache default branch because caching is disabled")
+						}
 					}
 				}
 
@@ -357,7 +360,9 @@
 						Debug("Saving default branch for %s", repo.Remote())
 						c := cacheRepoInfo{DefaultBranch: branch}
 						err = saveCacheRepoData(key, c, home)
-						if err != nil {
+						if err == errCacheDisabled {
+							Debug("Unable to cache default branch because caching is disabled")
+						} else if err != nil {
 							Debug("Error saving %s to cache. Error: %s", repo.Remote(), err)
 						}
 					}
@@ -406,7 +411,9 @@
 			Debug("Saving default branch for %s", repo.Remote())
 			c := cacheRepoInfo{DefaultBranch: branch}
 			err = saveCacheRepoData(key, c, home)
-			if err != nil {
+			if err == errCacheDisabled {
+				Debug("Unable to cache default branch because caching is disabled")
+			} else if err != nil {
 				Debug("Error saving %s to cache. Error: %s", repo.Remote(), err)
 			}
 		}
@@ -605,7 +612,6 @@
 
 // Some repos will have multiple branches in them (e.g. Git) while others
 // (e.g. Svn) will not.
-// TODO(mattfarina): Add API calls to github, bitbucket, etc.
 func defaultBranch(repo v.Repo, home string) string {
 
 	// Svn and Bzr use different locations (paths or entire locations)
@@ -666,7 +672,12 @@
 		db := gh["default_branch"].(string)
 		if kerr == nil {
 			d.DefaultBranch = db
-			saveCacheRepoData(key, d, home)
+			err := saveCacheRepoData(key, d, home)
+			if err == errCacheDisabled {
+				Debug("Unable to cache default branch because caching is disabled")
+			} else if err != nil {
+				Debug("Error saving %s to cache. Error: %s", repo.Remote(), err)
+			}
 		}
 		return db
 	}
@@ -695,7 +706,12 @@
 		db := bb["name"].(string)
 		if kerr == nil {
 			d.DefaultBranch = db
-			saveCacheRepoData(key, d, home)
+			err := saveCacheRepoData(key, d, home)
+			if err == errCacheDisabled {
+				Debug("Unable to cache default branch because caching is disabled")
+			} else if err != nil {
+				Debug("Error saving %s to cache. Error: %s", repo.Remote(), err)
+			}
 		}
 		return db
 	}
diff --git a/cmd/msg.go b/cmd/msg.go
index d2f6787..a054cbf 100644
--- a/cmd/msg.go
+++ b/cmd/msg.go
@@ -65,9 +65,9 @@
 func ErrMsg(msg string, args ...interface{}) {
 	if len(args) == 0 {
 		fmt.Fprint(os.Stderr, msg)
-		return
+	} else {
+		fmt.Fprintf(os.Stderr, msg, args...)
 	}
-	fmt.Fprintf(os.Stderr, msg, args...)
 
 	// Get rid of the annoying fact that messages need \n at the end, but do
 	// it in a backward compatible way.
@@ -81,9 +81,9 @@
 func Msg(msg string, args ...interface{}) {
 	if len(args) == 0 {
 		fmt.Fprint(os.Stderr, msg)
-		return
+	} else {
+		fmt.Fprintf(os.Stderr, msg, args...)
 	}
-	fmt.Fprintf(os.Stderr, msg, args...)
 
 	// Get rid of the annoying fact that messages need \n at the end, but do
 	// it in a backward compatible way.
