Add better path support to resolveImports.
diff --git a/dependency/resolver.go b/dependency/resolver.go
index 545ff8c..57947f2 100644
--- a/dependency/resolver.go
+++ b/dependency/resolver.go
@@ -283,48 +283,68 @@
 	return r.resolveList(queue)
 }
 
+// stripv strips the vendor/ prefix from vendored packages.
+func (r *Resolver) stripv(str string) string {
+	return strings.TrimPrefix(str, r.VendorDir+string(os.PathSeparator))
+}
+
 // 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)
+		vdep := e.Value.(string)
+		dep := r.stripv(vdep)
 
 		r.alreadyQ[dep] = true
 
 		// Skip ignored packages
-		t := strings.TrimPrefix(dep, r.VendorDir+string(os.PathSeparator))
-		if r.Config.HasIgnore(t) {
-			msg.Info("Ignoring: %s", t)
+		if r.Config.HasIgnore(dep) {
+			msg.Info("Ignoring: %s", dep)
 			continue
 		}
-		r.VersionHandler.Process(t)
+		r.VersionHandler.Process(dep)
 
 		// Here, we want to import the package and see what imports it has.
-		pkg, err := r.BuildContext.ImportDir(dep, 0)
+		msg.Info("Trying to open %s", vdep)
+		pkg, err := r.BuildContext.ImportDir(vdep, 0)
 		if err != nil {
-			msg.Error("Not Found %s (1)", dep)
-
-			// FIXME: respond to NotFound
-			r.Handler.NotFound(t)
+			msg.Warn("ImportDir error on %s: %s", vdep, err)
+			if ok, err := r.Handler.NotFound(dep); ok {
+				r.alreadyQ[dep] = true
+				queue.PushBack(dep)
+			} else if err != nil {
+				msg.Warn("Error looking for %s: %s", dep, err)
+			} else {
+				msg.Info("Not found in vendor/: %s (1)", dep)
+			}
 			continue
-			//return nil, err
 		}
 
 		for _, imp := range pkg.Imports {
 			pi := r.FindPkg(imp)
+			if msg.Default.IsDebugging && pi.Loc != LocCgo && pi.Loc != LocGoroot {
+				msg.Debug("Package %s imports %s", dep, imp)
+			}
 			switch pi.Loc {
 			case LocVendor:
-				msg.Info("Already vendored: %s", imp)
+				msg.Info("In vendor: %s", imp)
 				if _, ok := r.alreadyQ[imp]; !ok {
 					r.alreadyQ[imp] = true
 					queue.PushBack(imp)
 				}
 			case LocUnknown:
-				msg.Info("Not found: %s (2)", imp)
-				// FIXME: respond to NotFound
-				r.Handler.NotFound(imp)
+				msg.Debug("Missing %s. Trying to resolve.", imp)
+				if ok, err := r.Handler.NotFound(imp); ok {
+					r.alreadyQ[imp] = true
+					queue.PushBack(imp)
+				} else if err != nil {
+					msg.Warn("Error looking for %s: %s", imp, err)
+				} else {
+					msg.Info("Not found: %s (2)", imp)
+				}
 			case LocGopath:
 				msg.Info("Found on GOPATH, not vendor: %s", imp)
-				// FIXME: respond to NotFound
+				// FIXME: This is not right. We need to get the result of
+				// OnGopath and decide what to do.
 				r.Handler.OnGopath(imp)
 				if _, ok := r.alreadyQ[imp]; !ok {
 					r.alreadyQ[imp] = true
@@ -340,7 +360,7 @@
 
 	// 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))
+		t := r.stripv(e.Value.(string))
 		root, sp := util.NormalizeName(t)
 
 		// TODO(mattfarina): Need to eventually support devImport
@@ -359,7 +379,8 @@
 
 			r.Config.Imports = append(r.Config.Imports, newDep)
 		}
-		res = append(res, e.Value.(string))
+		//res = append(res, e.Value.(string))
+		res = append(res, t)
 	}
 
 	return res, nil