Resolve by import usage, not by path.
diff --git a/dependency/resolver.go b/dependency/resolver.go
index e08f738..a73a3c6 100644
--- a/dependency/resolver.go
+++ b/dependency/resolver.go
@@ -2,6 +2,7 @@
 
 import (
 	"container/list"
+	//"go/build"
 	"os"
 	"path/filepath"
 	"strings"
@@ -185,7 +186,8 @@
 	//msg.Debug("Scanning %s", target)
 	l := list.New()
 	l.PushBack(target)
-	return r.resolveList(l)
+	//return r.resolveList(l)
+	return r.resolveImports(l)
 }
 
 // ResolveLocal resolves dependencies for the current project.
@@ -251,7 +253,8 @@
 	}
 
 	if deep {
-		return r.resolveList(l)
+		//return r.resolveList(l)
+		return r.resolveImports(l)
 	}
 
 	// If we're not doing a deep scan, we just convert the list into an
@@ -280,13 +283,78 @@
 	return r.resolveList(queue)
 }
 
+// resolveImports takes a list of existing packages and resolves their imports.
+func (r *Resolver) resolveImports(queue *list.List) ([]string, error) {
+	for e := queue.Front(); e != nil; e = e.Next() {
+		dep := e.Value.(string)
+
+		// Skip ignored packages
+		t := strings.TrimPrefix(dep, r.VendorDir+string(os.PathSeparator))
+		if r.Config.HasIgnore(t) {
+			msg.Info("Ignoring: %s", t)
+			continue
+		}
+		r.VersionHandler.Process(t)
+
+		// Here, we want to import the package and see what imports it has.
+		pkg, err := r.BuildContext.ImportDir(dep, 0)
+		if err != nil {
+			msg.Error("Failed to import %s: %s", dep, err)
+			continue
+			//return nil, err
+		}
+
+		for _, imp := range pkg.Imports {
+			pi := r.FindPkg(imp)
+			switch pi.Loc {
+			case LocVendor:
+				msg.Info("Already vendored: %s", imp)
+			case LocUnknown:
+				msg.Info("Not found: %s", imp)
+			case LocGopath:
+				msg.Info("Found on GOPATH, not vendor: %s", imp)
+			}
+		}
+
+	}
+
+	// FIXME: From here to the end is a straight copy of the resolveList() func.
+	res := make([]string, 0, queue.Len())
+
+	// In addition to generating a list
+	for e := queue.Front(); e != nil; e = e.Next() {
+		t := strings.TrimPrefix(e.Value.(string), r.VendorDir+string(os.PathSeparator))
+		root, sp := util.NormalizeName(t)
+
+		// TODO(mattfarina): Need to eventually support devImport
+		existing := r.Config.Imports.Get(root)
+		if existing != nil {
+			if sp != "" && !existing.HasSubpackage(sp) {
+				existing.Subpackages = append(existing.Subpackages, sp)
+			}
+		} else {
+			newDep := &cfg.Dependency{
+				Name: root,
+			}
+			if sp != "" {
+				newDep.Subpackages = []string{sp}
+			}
+
+			r.Config.Imports = append(r.Config.Imports, newDep)
+		}
+		res = append(res, e.Value.(string))
+	}
+
+	return res, nil
+}
+
 // resolveList takes a list and resolves it.
 func (r *Resolver) resolveList(queue *list.List) ([]string, error) {
 
 	var failedDep string
 	for e := queue.Front(); e != nil; e = e.Next() {
 		dep := e.Value.(string)
-		t := strings.TrimPrefix(e.Value.(string), r.VendorDir+string(os.PathSeparator))
+		t := strings.TrimPrefix(dep, r.VendorDir+string(os.PathSeparator))
 		if r.Config.HasIgnore(t) {
 			msg.Info("Ignoring: %s", t)
 			continue
diff --git a/dependency/resolver_test.go b/dependency/resolver_test.go
index 0edb764..d73ede5 100644
--- a/dependency/resolver_test.go
+++ b/dependency/resolver_test.go
@@ -72,6 +72,10 @@
 	if len(l) != 1 {
 		t.Errorf("Expected 1 dep, got %d: %s", len(l), l[0])
 	}
+
+	if strings.HasSuffix("github.com/codegangsta/cli", l[0]) {
+		t.Errorf("Unexpected package name: %s", l[0])
+	}
 }
 
 func TestResolveAll(t *testing.T) {