Fixes #140: packages in glide.yaml were no longer being deduped.
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
 }