diff --git a/vtree/diff.js b/vtree/diff.js
index b5bccbd..058d6b3 100644
--- a/vtree/diff.js
+++ b/vtree/diff.js
@@ -311,6 +311,38 @@ function reorder(aChildren, bChildren) {
     var inserts = []
     var simulateItem
 
+    // handle prepends without reordering old elements
+    var shift = bChildren.length - aChildren.length
+    if (shift > 0 && simulate.length === bChildren.length) {
+        var prepend = true
+        for (var i = 0; prepend && i < simulate.length; i++) {
+            prepend = simulate[i] && simulate[i].key
+        }
+        for (var i = 0; prepend && i < aChildren.length; i++) {
+            prepend = aChildren[i].key === bChildren[i + shift].key
+        }
+
+        if (prepend) {
+            for (var i = 0; i < shift; i++) {
+                removes.push({
+                    from: aChildren.length,
+                    key: bChildren[i].key
+                })
+                inserts.push({
+                    to: i,
+                    key: bChildren[i].key
+                })
+            }
+            return {
+                children: newChildren,
+                moves: {
+                    removes: removes,
+                    inserts: inserts
+                }
+            }
+        }
+    }
+
     for (var k = 0; k < bChildren.length;) {
         var wantedItem = bChildren[k]
         simulateItem = simulate[simulateIndex]