Adding caching layer when looking up root package.
diff --git a/util/util.go b/util/util.go
index d84b13f..c9c4b78 100644
--- a/util/util.go
+++ b/util/util.go
@@ -53,6 +53,11 @@
 // ?go-get=1 to the url.
 func getRootFromGoGet(pkg string) string {
 
+	p, found := checkRemotePackageCache(pkg)
+	if found {
+		return p
+	}
+
 	vcsURL := "https://" + pkg
 	u, err := url.Parse(vcsURL)
 	if err != nil {
@@ -66,20 +71,42 @@
 	checkURL := u.String()
 	resp, err := http.Get(checkURL)
 	if err != nil {
+		addToRemotePackageCache(pkg)
 		return pkg
 	}
 	defer resp.Body.Close()
 
 	nu, err := parseImportFromBody(u, resp.Body)
 	if err != nil {
+		addToRemotePackageCache(pkg)
 		return pkg
 	} else if nu == "" {
+		addToRemotePackageCache(pkg)
 		return pkg
 	}
 
+	addToRemotePackageCache(pkg)
 	return nu
 }
 
+// The caching is not concurrency safe but should be made to be that way.
+// This implementation is far too much of a hack... rewrite needed.
+var remotePackageCache = make(map[string]bool)
+
+func checkRemotePackageCache(pkg string) (string, bool) {
+	for k := range remotePackageCache {
+		if strings.HasPrefix(pkg, k) {
+			return k, true
+		}
+	}
+
+	return pkg, false
+}
+
+func addToRemotePackageCache(pkg string) {
+	remotePackageCache[pkg] = true
+}
+
 func parseImportFromBody(ur *url.URL, r io.ReadCloser) (u string, err error) {
 	d := xml.NewDecoder(r)
 	d.CharsetReader = charsetReader