diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml
index cc0af7b9d8..16dd447fe6 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml
@@ -87,6 +87,8 @@
+
+
diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/UnfiledRecordFolderType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/UnfiledRecordFolderType.java
new file mode 100644
index 0000000000..e9fca65542
--- /dev/null
+++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/UnfiledRecordFolderType.java
@@ -0,0 +1,61 @@
+/*
+ * #%L
+ * Alfresco Records Management Module
+ * %%
+ * Copyright (C) 2005 - 2016 Alfresco Software Limited
+ * %%
+ * This file is part of the Alfresco software.
+ * -
+ * If the software was purchased under a paid Alfresco license, the terms of
+ * the paid license agreement will prevail. Otherwise, the software is
+ * provided under the following open source license terms:
+ * -
+ * Alfresco is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * -
+ * Alfresco is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ * -
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with Alfresco. If not, see .
+ * #L%
+ */
+
+package org.alfresco.module.org_alfresco_module_rm.model.rma.type;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.alfresco.model.ContentModel;
+import org.alfresco.module.org_alfresco_module_rm.model.BaseBehaviourBean;
+import org.alfresco.repo.node.NodeServicePolicies;
+import org.alfresco.repo.policy.annotation.Behaviour;
+import org.alfresco.repo.policy.annotation.BehaviourBean;
+import org.alfresco.repo.policy.annotation.BehaviourKind;
+import org.alfresco.service.cmr.repository.ChildAssociationRef;
+import org.alfresco.service.namespace.QName;
+
+/**
+ * rma:unfiledRecordFolder behaviour bean
+ *
+ * @author Silviu Dinuta
+ * @since 2.6
+ */
+@BehaviourBean(defaultType = "rma:unfiledRecordFolder")
+public class UnfiledRecordFolderType extends BaseBehaviourBean
+ implements NodeServicePolicies.OnCreateChildAssociationPolicy
+{
+ private final static List ACCEPTED_NON_UNIQUE_CHILD_TYPES = Arrays.asList(TYPE_UNFILED_RECORD_FOLDER, ContentModel.TYPE_CONTENT, TYPE_NON_ELECTRONIC_DOCUMENT);
+
+ @Override
+ @Behaviour(kind = BehaviourKind.ASSOCIATION)
+ public void onCreateChildAssociation(ChildAssociationRef childAssocRef, boolean isNewNode)
+ {
+ // check the created child is of an accepted type
+ validateNewChildAssociationSubTypesIncluded(childAssocRef.getChildRef(), ACCEPTED_NON_UNIQUE_CHILD_TYPES);
+ }
+}
diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/UnfiledRecordFolderTypeUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/UnfiledRecordFolderTypeUnitTest.java
new file mode 100644
index 0000000000..18efc7ecde
--- /dev/null
+++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/UnfiledRecordFolderTypeUnitTest.java
@@ -0,0 +1,138 @@
+/*
+ * #%L
+ * Alfresco Records Management Module
+ * %%
+ * Copyright (C) 2005 - 2016 Alfresco Software Limited
+ * %%
+ * This file is part of the Alfresco software.
+ * -
+ * If the software was purchased under a paid Alfresco license, the terms of
+ * the paid license agreement will prevail. Otherwise, the software is
+ * provided under the following open source license terms:
+ * -
+ * Alfresco is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * -
+ * Alfresco is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ * -
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with Alfresco. If not, see .
+ * #L%
+ */
+
+package org.alfresco.module.org_alfresco_module_rm.model.rma.type;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.security.InvalidParameterException;
+
+import org.alfresco.model.ContentModel;
+import org.alfresco.module.org_alfresco_module_rm.test.util.AlfMock;
+import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest;
+import org.alfresco.service.cmr.repository.ChildAssociationRef;
+import org.alfresco.service.cmr.repository.NodeRef;
+import org.alfresco.service.namespace.QName;
+import org.junit.Test;
+import org.mockito.InjectMocks;
+
+/**
+ * Unit test for UnfiledRecordFolderType
+ *
+ * @author Silviu Dinuta
+ * @since 2.6
+ */
+public class UnfiledRecordFolderTypeUnitTest extends BaseUnitTest
+{
+ @InjectMocks
+ private UnfiledRecordFolderType unfiledRecordFolderType;
+
+ /**
+ * Given that we try to add a type that is not one of "rma:unfiledRecordFolder", "cm:content" or "rma:nonElectronicDocument" types to unfiled record folder,
+ * Then InvalidParameterException is thrown.
+ */
+ @Test(expected = InvalidParameterException.class)
+ public void testAddNonAcceptedTypeToUnfiledRecordFolder()
+ {
+ QName type = AlfMock.generateQName();
+ when(mockedDictionaryService.isSubClass(type, TYPE_UNFILED_RECORD_FOLDER)).thenReturn(false);
+ when(mockedDictionaryService.isSubClass(type, ContentModel.TYPE_CONTENT)).thenReturn(false);
+ when(mockedDictionaryService.isSubClass(type, TYPE_NON_ELECTRONIC_DOCUMENT)).thenReturn(false);
+
+ NodeRef nodeRef= AlfMock.generateNodeRef(mockedNodeService, type);
+
+ NodeRef unfiledRecordFolder = generateNodeRef(TYPE_UNFILED_RECORD_FOLDER, true);
+ ChildAssociationRef mockedChildAssoc = mock(ChildAssociationRef.class);
+ when(mockedChildAssoc.getChildRef()).thenReturn(nodeRef);
+ when(mockedChildAssoc.getParentRef()).thenReturn(unfiledRecordFolder);
+ unfiledRecordFolderType.onCreateChildAssociation(mockedChildAssoc, true);
+ }
+
+ /**
+ * Given that we try to add "rma:unfiledRecordFolder" sub-type to unfiled record folder,
+ * Then the operation is successful.
+ */
+ @Test
+ public void testAddUnfiledRecordFolderTypeToUnfiledRecordFolder()
+ {
+ QName type = AlfMock.generateQName();
+ when(mockedDictionaryService.isSubClass(type, TYPE_UNFILED_RECORD_FOLDER)).thenReturn(true);
+ when(mockedDictionaryService.isSubClass(type, ContentModel.TYPE_CONTENT)).thenReturn(false);
+ when(mockedDictionaryService.isSubClass(type, TYPE_NON_ELECTRONIC_DOCUMENT)).thenReturn(false);
+
+ NodeRef nodeRef= AlfMock.generateNodeRef(mockedNodeService, type);
+
+ NodeRef unfiledRecordFolder = generateNodeRef(TYPE_UNFILED_RECORD_FOLDER, true);
+ ChildAssociationRef mockedChildAssoc = mock(ChildAssociationRef.class);
+ when(mockedChildAssoc.getChildRef()).thenReturn(nodeRef);
+ when(mockedChildAssoc.getParentRef()).thenReturn(unfiledRecordFolder);
+ unfiledRecordFolderType.onCreateChildAssociation(mockedChildAssoc, true);
+ }
+
+ /**
+ * Given that we try to add "cm:content" sub-type to unfiled record folder,
+ * Then the operation is successful.
+ */
+ @Test
+ public void testAddContentTypeToUnfiledRecordFolder()
+ {
+ QName type = AlfMock.generateQName();
+ when(mockedDictionaryService.isSubClass(type, TYPE_UNFILED_RECORD_FOLDER)).thenReturn(false);
+ when(mockedDictionaryService.isSubClass(type, ContentModel.TYPE_CONTENT)).thenReturn(true);
+ when(mockedDictionaryService.isSubClass(type, TYPE_NON_ELECTRONIC_DOCUMENT)).thenReturn(false);
+
+ NodeRef nodeRef= AlfMock.generateNodeRef(mockedNodeService, type);
+
+ NodeRef unfiledRecordFolder = generateNodeRef(TYPE_UNFILED_RECORD_FOLDER, true);
+ ChildAssociationRef mockedChildAssoc = mock(ChildAssociationRef.class);
+ when(mockedChildAssoc.getChildRef()).thenReturn(nodeRef);
+ when(mockedChildAssoc.getParentRef()).thenReturn(unfiledRecordFolder);
+ unfiledRecordFolderType.onCreateChildAssociation(mockedChildAssoc, true);
+ }
+
+ /**
+ * Given that we try to add "rma:nonElectronicDocument" sub-type to unfiled record folder,
+ * Then the operation is successful.
+ */
+ @Test
+ public void testNonElectronicDocumentTypeToUnfiledRecordFolder()
+ {
+ QName type = AlfMock.generateQName();
+ when(mockedDictionaryService.isSubClass(type, TYPE_UNFILED_RECORD_FOLDER)).thenReturn(false);
+ when(mockedDictionaryService.isSubClass(type, ContentModel.TYPE_CONTENT)).thenReturn(false);
+ when(mockedDictionaryService.isSubClass(type, TYPE_NON_ELECTRONIC_DOCUMENT)).thenReturn(true);
+
+ NodeRef nodeRef= AlfMock.generateNodeRef(mockedNodeService, type);
+
+ NodeRef unfiledRecordFolder = generateNodeRef(TYPE_UNFILED_RECORD_FOLDER, true);
+ ChildAssociationRef mockedChildAssoc = mock(ChildAssociationRef.class);
+ when(mockedChildAssoc.getChildRef()).thenReturn(nodeRef);
+ when(mockedChildAssoc.getParentRef()).thenReturn(unfiledRecordFolder);
+ unfiledRecordFolderType.onCreateChildAssociation(mockedChildAssoc, true);
+ }
+}
\ No newline at end of file