diff --git a/CHANGELOG.md b/CHANGELOG.md
index a2acd25..7b82b38 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,7 @@
 # Release 0.7.2 (2015-11-XX)
 
 - Fixed #139: glide.yaml file imports being reordered when file written.
+- Fixed #140: packages in glide.yaml were no longer being deduped.
 
 # Release 0.7.1 (2015-11-10)
 
diff --git a/yaml/yaml.go b/yaml/yaml.go
index fcdfe41..d88ac65 100644
--- a/yaml/yaml.go
+++ b/yaml/yaml.go
@@ -55,6 +55,16 @@
 			v.Subpackages = append(v.Subpackages, subpkg)
 		}
 	}
+
+	c.Imports, err = c.Imports.DeDupe()
+	if err != nil {
+		return c, err
+	}
+	c.DevImports, err = c.DevImports.DeDupe()
+	if err != nil {
+		return c, err
+	}
+
 	return c, nil
 }
 
@@ -201,32 +211,32 @@
 
 // DeDupe cleans up duplicates on a list of dependencies.
 func (d Dependencies) DeDupe() (Dependencies, error) {
-	checked := map[string]*Dependency{}
+	checked := map[string]int{}
+	imports := make(Dependencies, 0, 1)
+	i := 0
 	for _, dep := range d {
 		// The first time we encounter a dependency add it to the list
 		if val, ok := checked[dep.Name]; !ok {
-			checked[dep.Name] = dep
+			checked[dep.Name] = i
+			imports = append(imports, dep)
+			i++
 		} else {
 			// In here we've encountered a dependency for the second time.
 			// Make sure the details are the same or return an error.
-			if dep.Reference != val.Reference {
-				return d, fmt.Errorf("Import %s repeated with different versions '%s' and '%s'", dep.Name, dep.Reference, val.Reference)
+			v := imports[val]
+			if dep.Reference != v.Reference {
+				return d, fmt.Errorf("Import %s repeated with different versions '%s' and '%s'", dep.Name, dep.Reference, v.Reference)
 			}
-			if dep.Repository != val.Repository || dep.VcsType != val.VcsType {
+			if dep.Repository != v.Repository || dep.VcsType != v.VcsType {
 				return d, fmt.Errorf("Import %s repeated with different Repository details", dep.Name)
 			}
-			if !reflect.DeepEqual(dep.Os, val.Os) || !reflect.DeepEqual(dep.Arch, val.Arch) {
+			if !reflect.DeepEqual(dep.Os, v.Os) || !reflect.DeepEqual(dep.Arch, v.Arch) {
 				return d, fmt.Errorf("Import %s repeated with different OS or Architecture filtering", dep.Name)
 			}
-			checked[dep.Name].Subpackages = stringArrayDeDupe(checked[dep.Name].Subpackages, dep.Subpackages...)
+			imports[checked[dep.Name]].Subpackages = stringArrayDeDupe(v.Subpackages, dep.Subpackages...)
 		}
 	}
 
-	imports := make(Dependencies, 0, 1)
-	for _, dep := range checked {
-		imports = append(imports, dep)
-	}
-
 	return imports, nil
 }
 
