Fix issues with sort_key.
diff --git a/pytoml/writer.py b/pytoml/writer.py
index d4a4aa3..20cb80c 100644
--- a/pytoml/writer.py
+++ b/pytoml/writer.py
@@ -92,8 +92,6 @@
     tables = [((), obj, False)]
 
     while tables:
-        if sort_keys:
-            tables.sort(key=lambda tup: tup[0], reverse=True)
         name, table, is_array = tables.pop()
         if name:
             section_name = '.'.join(_escape_id(c) for c in name)
@@ -103,12 +101,13 @@
                 fout.write('[{0}]\n'.format(section_name))
 
         table_keys = sorted(table.keys()) if sort_keys else table.keys()
+        new_tables = []
         for k in table_keys:
             v = table[k]
             if isinstance(v, dict):
-                tables.append((name + (k,), v, False))
+                new_tables.append((name + (k,), v, False))
             elif isinstance(v, list) and v and all(isinstance(o, dict) for o in v):
-                tables.extend((name + (k,), d, True) for d in reversed(v))
+                new_tables.extend((name + (k,), d, True) for d in v)
             elif v is None:
                 # based on mojombo's comment: https://github.com/toml-lang/toml/issues/146#issuecomment-25019344
                 fout.write(
@@ -116,5 +115,7 @@
             else:
                 fout.write('{0} = {1}\n'.format(_escape_id(k), _format_value(v)))
 
+        tables.extend(reversed(new_tables))
+
         if tables:
             fout.write('\n')
diff --git a/test/test.py b/test/test.py
index cc652a9..c1d2a37 100644
--- a/test/test.py
+++ b/test/test.py
@@ -69,10 +69,12 @@
                     parsed = None
                     parse_error = sys.exc_info()
                 else:
-                    dumped = toml.dumps(parsed)
+                    dumped = toml.dumps(parsed, sort_keys=False)
+                    dumped_sorted = toml.dumps(parsed, sort_keys=True)
                     parsed2 = toml.loads(dumped)
-                    if parsed != parsed2:
-                        failed.append((fname, parsed, parsed2, None))
+                    parsed2_sorted = toml.loads(dumped_sorted)
+                    if parsed != parsed2 or parsed != parsed2_sorted:
+                        failed.append((fname, parsed, [parsed2, parsed2_sorted], None))
                         continue
 
                     with open(os.path.join(top, fname), 'rb') as fin: