diff -r 10861094198f lib/sqlalchemy/orm/mapper.py
--- a/lib/sqlalchemy/orm/mapper.py	Thu Jul 21 11:44:31 2011 -0400
+++ b/lib/sqlalchemy/orm/mapper.py	Fri Jul 22 10:12:31 2011 -0400
@@ -2819,9 +2819,13 @@
 
 
 def _sort_states(states):
-    return sorted(states, key=operator.attrgetter('sort_key'))
-
-
+    ret = []
+    for haskey, g in groupby(states, key=lambda s:s.key is not None):
+        if haskey:
+            ret = sorted(g, key=lambda st: st.key[1]) + ret
+        else:
+            ret.extend(sorted(g, key=operator.attrgetter("insert_order")))
+    return ret
 
 class _ColumnMapping(util.py25_dict):
     """Error reporting helper for mapper._columntoproperty."""
diff -r 10861094198f lib/sqlalchemy/orm/state.py
--- a/lib/sqlalchemy/orm/state.py	Thu Jul 21 11:44:31 2011 -0400
+++ b/lib/sqlalchemy/orm/state.py	Fri Jul 22 10:12:31 2011 -0400
@@ -85,10 +85,6 @@
         else:
             return {}
 
-    @property
-    def sort_key(self):
-        return self.key and self.key[1] or (self.insert_order, )
-
     def initialize_instance(*mixed, **kwargs):
         self, instance, args = mixed[0], mixed[1], mixed[2:]
         manager = self.manager
