At the moment at commit time parent nodes in a workspace have their child maps used to overwrite the underlying data nodes. As such, version increments are necessary on the parents, very bad for concurrency.
A more sophisticated merging mechanism is needed here, perhaps along the lines of:
1) Children added placed in an addedChildren map
2) Children removed placed in a childrenRemoved map
at commit time, use these 2 maps to look at what exists in the underlying node and merge in accordingly.