diff --git a/CHANGELOG.md b/CHANGELOG.md
index b4ac772..a2acd25 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+# Release 0.7.2 (2015-11-XX)
+
+- Fixed #139: glide.yaml file imports being reordered when file written.
+
 # Release 0.7.1 (2015-11-10)
 
 - Fixed #136: Fixed infinite recursion in list and tree commands.
diff --git a/cmd/flatten.go b/cmd/flatten.go
index abb3ce8..e9bdcaa 100644
--- a/cmd/flatten.go
+++ b/cmd/flatten.go
@@ -58,9 +58,12 @@
 	err := recFlatten(f, force, home, cache, cacheGopath, skipGopath)
 	flattenSetRefs(f)
 	Info("Project relies on %d dependencies.", len(deps))
-	exportFlattenedDeps(conf, deps)
 
-	return conf, err
+	// A shallow copy should be all that's needed.
+	confcopy := conf.Clone()
+	exportFlattenedDeps(confcopy, deps)
+
+	return confcopy, err
 }
 
 func exportFlattenedDeps(conf *yaml.Config, in map[string]*yaml.Dependency) {
diff --git a/glide.go b/glide.go
index 9e7ad57..565a80a 100644
--- a/glide.go
+++ b/glide.go
@@ -546,7 +546,7 @@
 		Using("cacheGopath").From("cxt:cacheGopath").
 		Using("skipGopath").From("cxt:skipGopath").
 		Does(cmd.VendoredCleanUp, "_").
-		Using("conf").From("cxt:cfg").
+		Using("conf").From("cxt:flattened").
 		Using("update").From("cxt:updateVendoredDeps").
 		Does(cmd.WriteYaml, "out").
 		Using("conf").From("cxt:cfg").
diff --git a/yaml/yaml.go b/yaml/yaml.go
index bbfbd42..fcdfe41 100644
--- a/yaml/yaml.go
+++ b/yaml/yaml.go
@@ -108,6 +108,15 @@
 	return c
 }
 
+// Clone performs a deep clone of the Config instance
+func (c *Config) Clone() *Config {
+	n := &Config{}
+	n.Name = c.Name
+	n.Imports = c.Imports.Clone()
+	n.DevImports = c.DevImports.Clone()
+	return n
+}
+
 // Dependencies is a collection of Dependency
 type Dependencies []*Dependency
 
@@ -158,6 +167,20 @@
 	return vcs.NewRepo(remote, dest)
 }
 
+func (d *Dependency) Clone() *Dependency {
+	return &Dependency{
+		Name:             d.Name,
+		Reference:        d.Reference,
+		Pin:              d.Pin,
+		Repository:       d.Repository,
+		VcsType:          d.VcsType,
+		Subpackages:      d.Subpackages,
+		Arch:             d.Arch,
+		Os:               d.Os,
+		UpdateAsVendored: d.UpdateAsVendored,
+	}
+}
+
 // Get a dependency by name
 func (d Dependencies) Get(name string) *Dependency {
 	for _, dep := range d {
@@ -168,6 +191,14 @@
 	return nil
 }
 
+func (d Dependencies) Clone() Dependencies {
+	n := make(Dependencies, 0, 1)
+	for _, v := range d {
+		n = append(n, v.Clone())
+	}
+	return n
+}
+
 // DeDupe cleans up duplicates on a list of dependencies.
 func (d Dependencies) DeDupe() (Dependencies, error) {
 	checked := map[string]*Dependency{}
