Index: modeshape-jcr/src/main/java/org/modeshape/jcr/JcrVersionManager.java =================================================================== --- modeshape-jcr/src/main/java/org/modeshape/jcr/JcrVersionManager.java (revision 1897) +++ modeshape-jcr/src/main/java/org/modeshape/jcr/JcrVersionManager.java (working copy) @@ -282,7 +282,6 @@ final class JcrVersionManager implements VersionManager { jcrUuid).and(JcrLexicon.FROZEN_PRIMARY_TYPE, primaryTypeName).and(JcrLexicon.FROZEN_MIXIN_TYPES, mixinTypeNames).and(versionedPropertiesFor(node)).and(); - int onParentVersion = node.getDefinition().getOnParentVersion(); for (NodeIterator childNodes = node.getNodes(); childNodes.hasNext();) { AbstractJcrNode childNode = (AbstractJcrNode)childNodes.nextNode(); @@ -401,6 +400,10 @@ final class JcrVersionManager implements VersionManager { Collection props = new LinkedList(); + // Have to add this directly as it's not returned by AbstractJcrNode.getProperties + AbstractJcrProperty multiValuedProperties = node.getProperty(ModeShapeIntLexicon.MULTI_VALUED_PROPERTIES); + if (multiValuedProperties != null) props.add(multiValuedProperties.property()); + for (PropertyIterator iter = node.getProperties(); iter.hasNext();) { AbstractJcrProperty property = (AbstractJcrProperty)iter.nextProperty(); Index: modeshape-jcr/src/test/java/org/modeshape/jcr/ModeShapeTckTest.java =================================================================== --- modeshape-jcr/src/test/java/org/modeshape/jcr/ModeShapeTckTest.java (revision 1897) +++ modeshape-jcr/src/test/java/org/modeshape/jcr/ModeShapeTckTest.java (working copy) @@ -1122,4 +1122,24 @@ public class ModeShapeTckTest extends AbstractJCRTest { assertEquals(parentNode.getProperty("foo").getString(), "bar"); } + + @FixFor( "MODE-793" ) + public void testPropertyCardinalityShouldPropagateToFrozenNode() throws Exception { + session = getHelper().getReadWriteSession(); + VersionManager versionManager = session.getWorkspace().getVersionManager(); + + Node root = session.getRootNode(); + Node parentNode = root.addNode("checkedOutNodeNopTest"); + parentNode.addMixin("mix:versionable"); + parentNode.setProperty("foo", new String[] {"bar", "baz"}); + session.save(); + + assertEquals(true, parentNode.getProperty("foo").getDefinition().isMultiple()); + + Version version = versionManager.checkin(parentNode.getPath()); + + Node frozenNode = version.getFrozenNode(); + + assertEquals(true, frozenNode.getProperty("foo").getDefinition().isMultiple()); + } }