Index: jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/NodeState.java =================================================================== --- jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/NodeState.java (revision 901309) +++ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/NodeState.java (working copy) @@ -387,7 +387,21 @@ childNodeEntries.removeAll(); notifyNodesReplaced(); } + + /** + * Reorder the children according to the list passed in parameter + * @param entries the new list of entries + */ + public synchronized void reorder(List entries) { + if (childNodeEntries.containsAll(entries) && entries.containsAll(childNodeEntries)) { + childNodeEntries.removeAll(); + for (ChildNodeEntry entry : entries) { + childNodeEntries.add(entry.getName(), entry.getId()); + } + } + } + /** * Sets the list of ChildNodeEntry objects denoting the * child nodes of this node. Index: jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionManagerImplMerge.java =================================================================== --- jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionManagerImplMerge.java (revision 901309) +++ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionManagerImplMerge.java (working copy) @@ -203,6 +203,17 @@ } } + + if (state.getEffectiveNodeType().hasOrderableChildNodes()) { + + List src = new ArrayList(srcNode.getState().getChildNodeEntries()); + List current = new ArrayList(state.getState().getChildNodeEntries()); + + if (!src.equals(current)) { + state.getState().reorder(srcNode.getState().getChildNodeEntries()); + state.store(); + } + } } /**