diff --git a/cmd/flatten.go b/cmd/flatten.go
index 652b522..d24fd54 100644
--- a/cmd/flatten.go
+++ b/cmd/flatten.go
@@ -7,6 +7,7 @@
 	"strings"
 
 	"github.com/Masterminds/cookoo"
+	"github.com/Masterminds/glide/util"
 	"github.com/Masterminds/glide/yaml"
 	"github.com/Masterminds/semver"
 )
@@ -55,7 +56,10 @@
 
 	f := &flattening{conf, vend, vend, deps, packages}
 
-	err := recFlatten(f, force, home, cache, cacheGopath, skipGopath)
+	// The assumption here is that once something has been scanned once in a
+	// run, there is no need to scan it again.
+	scanned := map[string]bool{}
+	err := recFlatten(f, force, home, cache, cacheGopath, skipGopath, scanned)
 	if err != nil {
 		return conf, err
 	}
@@ -99,7 +103,7 @@
 var updateCache = map[string]bool{}
 
 // refFlatten recursively flattens the vendor tree.
-func recFlatten(f *flattening, force bool, home string, cache, cacheGopath, skipGopath bool) error {
+func recFlatten(f *flattening, force bool, home string, cache, cacheGopath, skipGopath bool, scanned map[string]bool) error {
 	Debug("---> Inspecting %s for changes (%d packages).\n", f.curr, len(f.scan))
 	for _, imp := range f.scan {
 		Debug("----> Scanning %s", imp)
@@ -113,9 +117,11 @@
 			mod = m
 		} else if m, ok = mergeGb(base, imp, f.deps, f.top); ok {
 			mod = m
-		} else if m, ok = mergeGuess(base, imp, f.deps, f.top); ok {
+		} else if m, ok = mergeGuess(base, imp, f.deps, f.top, scanned); ok {
 			mod = m
 		}
+		//mod, _ = mergeGuess(base, imp, f.deps, f.top, scanned)
+		//Info("Scanned: %v", scanned)
 
 		if len(mod) > 0 {
 			Debug("----> Updating all dependencies for %q (%d)", imp, len(mod))
@@ -126,7 +132,7 @@
 				curr: base,
 				deps: f.deps,
 				scan: mod}
-			recFlatten(f2, force, home, cache, cacheGopath, skipGopath)
+			recFlatten(f2, force, home, cache, cacheGopath, skipGopath, scanned)
 		}
 	}
 
@@ -254,59 +260,67 @@
 // This always returns true because it always handles the job of searching
 // for dependencies. So generally it should be the last merge strategy
 // that you try.
-func mergeGuess(dir, pkg string, deps map[string]*yaml.Dependency, vend string) ([]string, bool) {
-	/*
-			Info("Scanning %s for dependencies.", pkg)
-			buildContext, err := GetBuildContext()
-			if err != nil {
-				Warn("Could not scan package %q: %s", pkg, err)
-				return []string{}, false
-			}
+func mergeGuess(dir, pkg string, deps map[string]*yaml.Dependency, vend string, scanned map[string]bool) ([]string, bool) {
+	Info("Scanning %s for dependencies.", pkg)
+	buildContext, err := GetBuildContext()
+	if err != nil {
+		Warn("Could not scan package %q: %s", pkg, err)
+		return []string{}, false
+	}
 
-			res := []string{}
+	res := []string{}
 
-			if _, err := os.Stat(dir); err != nil {
-				Warn("Directory is missing: %s", dir)
-				return res, true
-			}
-
-			d := walkDeps(buildContext, dir, pkg)
-			for _, name := range d {
-				name, _ := NormalizeName(name)
-				repo := getRepoRootFromPackage(name)
-				if _, ok := deps[name]; ok {
-					Debug("====> Seen %s already. Skipping", name)
-					continue
-				}
-
-				found := findPkg(buildContext, name, dir)
-				switch found.PType {
-				case ptypeUnknown:
-					Debug("✨☆ Undownloaded dependency: %s", name)
-					nd := &Dependency{
-						Name:       name,
-						Repository: "https://" + repo,
-					}
-					deps[name] = nd
-					res = append(res, name)
-				case ptypeGoroot, ptypeCgo:
-					break
-				default:
-					// We're looking for dependencies that might exist in $GOPATH
-					// but not be on vendor. We add any that are on $GOPATH.
-					if _, ok := deps[name]; !ok {
-						Debug("✨☆ GOPATH dependency: %s", name)
-						nd := &Dependency{Name: name}
-						deps[name] = nd
-						res = append(res, name)
-					}
-				}
-			}
-
+	if _, err := os.Stat(dir); err != nil {
+		Warn("Directory is missing: %s", dir)
 		return res, true
-	*/
-	Info("Package %s manages its own dependencies", pkg)
-	return []string{}, true
+	}
+
+	d := walkDeps(buildContext, dir, pkg)
+	for _, oname := range d {
+		if _, ok := scanned[oname]; ok {
+			//Info("===> Scanned %s already. Skipping", name)
+			continue
+		}
+		Info("=> Scanning %s", oname)
+		name, _ := NormalizeName(oname)
+		//if _, ok := deps[name]; ok {
+		//scanned[oname] = true
+		//Debug("====> Seen %s already. Skipping", name)
+		//continue
+		//}
+
+		repo := util.GetRootFromPackage(name)
+		found := findPkg(buildContext, name, dir)
+		switch found.PType {
+		case ptypeUnknown:
+			Info("==> Unknown %s (%s)", name, oname)
+			Debug("✨☆ Undownloaded dependency: %s", name)
+			nd := &yaml.Dependency{
+				Name:       name,
+				Repository: "https://" + repo,
+			}
+			deps[name] = nd
+			res = append(res, name)
+		case ptypeGoroot, ptypeCgo:
+			scanned[oname] = true
+			// Why do we break rather than continue?
+			break
+		default:
+			// We're looking for dependencies that might exist in $GOPATH
+			// but not be on vendor. We add any that are on $GOPATH.
+			if _, ok := deps[name]; !ok {
+				Debug("✨☆ GOPATH dependency: %s", name)
+				nd := &yaml.Dependency{Name: name}
+				deps[name] = nd
+				res = append(res, name)
+			}
+			scanned[oname] = true
+		}
+	}
+
+	return res, true
+	//Info("Package %s manages its own dependencies", pkg)
+	//return []string{}, true
 }
 
 // mergeDeps merges any dependency array into deps.
diff --git a/cmd/tree.go b/cmd/tree.go
index b521641..8983c4a 100644
--- a/cmd/tree.go
+++ b/cmd/tree.go
@@ -223,7 +223,11 @@
 
 		pkg, err := b.ImportDir(path, 0)
 		if err != nil {
-			return err
+			if !strings.HasPrefix(err.Error(), "no buildable Go source") {
+				Warn("Error: %s (%s)", err, path)
+				// Not sure if we should return here.
+				//return err
+			}
 		}
 
 		if pkg.Goroot {
diff --git a/cmd/update_references.go b/cmd/update_references.go
index c81a95c..3e602fa 100644
--- a/cmd/update_references.go
+++ b/cmd/update_references.go
@@ -70,6 +70,7 @@
 
 func discoverDependencyTree(f *flattening) error {
 	Debug("---> Inspecting %s for dependencies (%d packages).\n", f.curr, len(f.scan))
+	scanned := map[string]bool{}
 	for _, imp := range f.scan {
 		Debug("----> Scanning %s", imp)
 		base := path.Join(f.top, imp)
@@ -82,7 +83,7 @@
 			mod = m
 		} else if m, ok = mergeGb(base, imp, f.deps, f.top); ok {
 			mod = m
-		} else if m, ok = mergeGuess(base, imp, f.deps, f.top); ok {
+		} else if m, ok = mergeGuess(base, imp, f.deps, f.top, scanned); ok {
 			mod = m
 		}
 
