diff --git a/action/create.go b/action/create.go
index d08857d..5a8d6c4 100644
--- a/action/create.go
+++ b/action/create.go
@@ -121,30 +121,22 @@
 
 	for _, pa := range sortable {
 		n := strings.TrimPrefix(pa, vpath)
-		root := util.GetRootFromPackage(n)
+		root, subpkg := util.NormalizeName(n)
 
 		if !config.HasDependency(root) {
 			msg.Info("Found reference to %s\n", n)
 			d := &cfg.Dependency{
 				Name: root,
 			}
-			subpkg := strings.TrimPrefix(n, root)
-			if len(subpkg) > 0 && subpkg != "/" {
+			if len(subpkg) > 0 {
 				d.Subpackages = []string{subpkg}
 			}
 			config.Imports = append(config.Imports, d)
 		} else {
-			subpkg := strings.TrimPrefix(n, root)
-			if len(subpkg) > 0 && subpkg != "/" {
+			if len(subpkg) > 0 {
 				subpkg = strings.TrimPrefix(subpkg, "/")
 				d := config.Imports.Get(root)
-				f := false
-				for _, v := range d.Subpackages {
-					if v == subpkg {
-						f = true
-					}
-				}
-				if !f {
+				if !d.HasSubpackage(subpkg) {
 					msg.Info("Adding sub-package %s to %s\n", subpkg, root)
 					d.Subpackages = append(d.Subpackages, subpkg)
 				}
diff --git a/action/get.go b/action/get.go
index ce20e84..38e6547 100644
--- a/action/get.go
+++ b/action/get.go
@@ -108,7 +108,7 @@
 			version = parts[1]
 		}
 
-		root := util.GetRootFromPackage(name)
+		root, subpkg := util.NormalizeName(name)
 		if len(root) == 0 {
 			return fmt.Errorf("Package name is required for %q.", name)
 		}
@@ -116,18 +116,9 @@
 		if conf.HasDependency(root) {
 
 			// Check if the subpackage is present.
-			subpkg := strings.TrimPrefix(name, root)
-			subpkg = strings.TrimPrefix(subpkg, "/")
 			if subpkg != "" {
-				found := false
 				dep := conf.Imports.Get(root)
-				for _, s := range dep.Subpackages {
-					if s == subpkg {
-						found = true
-						break
-					}
-				}
-				if found {
+				if dep.HasSubpackage(subpkg) {
 					msg.Warn("Package %q is already in glide.yaml. Skipping", name)
 				} else {
 					dep.Subpackages = append(dep.Subpackages, subpkg)
@@ -158,9 +149,8 @@
 			dep.Repository = "http://" + root
 		}
 
-		subpkg := strings.TrimPrefix(name, root)
-		if len(subpkg) > 0 && subpkg != "/" {
-			dep.Subpackages = []string{strings.TrimPrefix(subpkg, "/")}
+		if len(subpkg) > 0 {
+			dep.Subpackages = []string{subpkg}
 		}
 
 		if dep.Reference != "" {
diff --git a/cfg/config.go b/cfg/config.go
index 2aea716..de189eb 100644
--- a/cfg/config.go
+++ b/cfg/config.go
@@ -366,11 +366,10 @@
 	d.VcsType = filterVcsType(d.VcsType)
 
 	// Get the root name for the package
-	o := d.Name
-	d.Name = util.GetRootFromPackage(d.Name)
-	subpkg := strings.TrimPrefix(o, d.Name)
-	if len(subpkg) > 0 && subpkg != "/" {
-		d.Subpackages = append(d.Subpackages, strings.TrimPrefix(subpkg, "/"))
+	tn, subpkg := util.NormalizeName(d.Name)
+	d.Name = tn
+	if subpkg != "" {
+		d.Subpackages = append(d.Subpackages, subpkg)
 	}
 
 	return nil
diff --git a/godep/godep.go b/godep/godep.go
index b39deca..6785a0d 100644
--- a/godep/godep.go
+++ b/godep/godep.go
@@ -8,7 +8,6 @@
 	"encoding/json"
 	"os"
 	"path/filepath"
-	"strings"
 
 	"github.com/Masterminds/glide/cfg"
 	"github.com/Masterminds/glide/msg"
@@ -74,9 +73,7 @@
 
 	seen := map[string]bool{}
 	for _, d := range godeps.Deps {
-		pkg := util.GetRootFromPackage(d.ImportPath)
-		sub := strings.TrimPrefix(d.ImportPath, pkg)
-		sub = strings.TrimPrefix(sub, "/")
+		pkg, sub := util.NormalizeName(d.ImportPath)
 		if _, ok := seen[pkg]; ok {
 			if len(sub) == 0 {
 				continue
@@ -90,7 +87,7 @@
 		} else {
 			seen[pkg] = true
 			dep := &cfg.Dependency{Name: pkg, Reference: d.Rev}
-			if len(sub) > 0 {
+			if sub != "" {
 				dep.Subpackages = []string{sub}
 			}
 			buf = append(buf, dep)
diff --git a/repo/installer.go b/repo/installer.go
index c3db217..645d490 100644
--- a/repo/installer.go
+++ b/repo/installer.go
@@ -454,14 +454,16 @@
 		} else if v.Reference != "" && dep.Reference != "" && v.Reference != dep.Reference {
 			dest := filepath.Join(d.Destination, filepath.FromSlash(v.Name))
 			dep = determineDependency(v, dep, dest)
+		} else {
+			dep = v
 		}
 
+	} else if v != nil {
+		dep = v
 	} else if dep != nil {
 		// We've got an imported dependency to use and don't already have a
 		// record of it. Append it to the Imports.
 		d.Config.Imports = append(d.Config.Imports, dep)
-	} else if v != nil {
-		dep = v
 	} else {
 		// If we've gotten here we don't have any depenency objects.
 		r, sp := util.NormalizeName(pkg)
diff --git a/util/util.go b/util/util.go
index 502be52..409d400 100644
--- a/util/util.go
+++ b/util/util.go
@@ -287,7 +287,8 @@
 		}
 	}
 
-	root := GetRootFromPackage(filepath.ToSlash(name))
+	name = filepath.ToSlash(name)
+	root := GetRootFromPackage(name)
 	extra := strings.TrimPrefix(name, root)
 	if len(extra) > 0 && extra != "/" {
 		extra = strings.TrimPrefix(extra, "/")
