diff --git a/fetch.go b/fetch.go
index b6b46bf..08af2b1 100644
--- a/fetch.go
+++ b/fetch.go
@@ -81,9 +81,9 @@
 }
 
 var (
-	fetchRoot    string            // where the current session started
-	rootRepo     vendor.RemoteRepo // the repo of the requested package
-	fetchedToday []string          // packages fetched during this session
+	fetchRoot    string   // where the current session started
+	rootRepoURL  string   // the url of the repo from which the root comes from
+	fetchedToday []string // packages fetched during this session
 )
 
 func fetch(path string) error {
@@ -93,13 +93,6 @@
 	}
 
 	fetchRoot = stripscheme(path)
-
-	// Set repo for root of the fetch to keep tag/revision consistent
-	rootRepo, _, err = GlobalDownloader.DeduceRemoteRepo(fetchRoot, insecure)
-	if err != nil {
-		return fmt.Errorf("failed to load repo for: %s: %s", fetchRoot, err)
-	}
-
 	return fetchRecursive(m, path, 0)
 }
 
@@ -141,12 +134,8 @@
 	}
 
 	// Finally, check if we already vendored a subpackage and remove it
-	parentOfRoot := false
 	for _, subp := range m.GetSubpackages(path) {
-		if contains(subp.Importpath, fetchRoot) {
-			// Through dependencies we ended up fetching a parent of the starting package
-			parentOfRoot = true // use the requested tag/branch/revision
-		} else {
+		if !contains(subp.Importpath, fetchRoot) { // ignore parents of the root
 			ignore := false
 			for _, d := range fetchedToday {
 				if contains(d, subp.Importpath) {
@@ -172,8 +161,12 @@
 		return err
 	}
 
+	if level == 0 {
+		rootRepoURL = repo.URL()
+	}
+
 	var wc vendor.WorkingCopy
-	if level == 0 || parentOfRoot || (repo.URL() == rootRepo.URL()) {
+	if repo.URL() == rootRepoURL {
 		wc, err = GlobalDownloader.Get(repo, branch, tag, revision)
 	} else {
 		wc, err = GlobalDownloader.Get(repo, "", "", "")
