Index: src/main/java/org/apache/jackrabbit/core/version/InternalVersionHistoryImpl.java =================================================================== --- src/main/java/org/apache/jackrabbit/core/version/InternalVersionHistoryImpl.java (revision 1458992) +++ src/main/java/org/apache/jackrabbit/core/version/InternalVersionHistoryImpl.java (working copy) @@ -665,7 +665,8 @@ node.setPropertyValues(NameConstants.JCR_FROZENMIXINTYPES, PropertyType.NAME, ivalues); } - parent.store(); + parent.store(false); + pNode.store(true); return pNode; } Index: src/main/java/org/apache/jackrabbit/core/version/InternalVersionManagerBase.java =================================================================== --- src/main/java/org/apache/jackrabbit/core/version/InternalVersionManagerBase.java (revision 1458992) +++ src/main/java/org/apache/jackrabbit/core/version/InternalVersionManagerBase.java (working copy) @@ -576,7 +576,8 @@ n = childn; } else if (interNT != null) { childn = n.addNode(name, interNT, null, false); - n.store(); + n.store(false); + childn.store(true); n = childn; } else { return null; Index: src/main/java/org/apache/jackrabbit/core/version/NodeStateEx.java =================================================================== --- src/main/java/org/apache/jackrabbit/core/version/NodeStateEx.java (revision 1458992) +++ src/main/java/org/apache/jackrabbit/core/version/NodeStateEx.java (working copy) @@ -111,7 +111,11 @@ } } + public void store() throws RepositoryException { + store(true); + } + /** * returns the name of this node * @@ -709,9 +713,9 @@ * * @throws RepositoryException if an error occurs */ - public void store() throws RepositoryException { + public void store(boolean recurse) throws RepositoryException { try { - store(nodeState); + store(nodeState,recurse); } catch (ItemStateException e) { throw new RepositoryException(e); } @@ -723,7 +727,7 @@ * @param state node state to store * @throws ItemStateException if an error occurs */ - private void store(NodeState state) + private void store(NodeState state,boolean recurse) throws ItemStateException { if (state.getStatus() != ItemState.STATUS_EXISTING) { @@ -735,11 +739,13 @@ stateMgr.store(pstate); } } - // now store all child node entries - for (ChildNodeEntry entry : state.getChildNodeEntries()) { - NodeState nstate = (NodeState) stateMgr.getItemState(entry.getId()); - store(nstate); - } + if (recurse) { + // now store all child node entries + for (ChildNodeEntry entry : state.getChildNodeEntries()) { + NodeState nstate = (NodeState) stateMgr.getItemState(entry.getId()); + store(nstate, true); + } + } // and store itself stateMgr.store(state); }