diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/RMv21RecordInheritancePatch.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/RMv21RecordInheritancePatch.java
new file mode 100644
index 0000000000..ed2149bf40
--- /dev/null
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/RMv21RecordInheritancePatch.java
@@ -0,0 +1,150 @@
+/*
+ * Copyright (C) 2005-2011 Alfresco Software Limited.
+ *
+ * This file is part of Alfresco
+ *
+ * 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 .
+ */
+package org.alfresco.module.org_alfresco_module_rm.patch;
+
+import java.util.List;
+
+import org.alfresco.module.org_alfresco_module_rm.dod5015.DOD5015Model;
+import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
+import org.alfresco.module.org_alfresco_module_rm.security.FilePlanPermissionServiceImpl;
+import org.alfresco.repo.domain.node.NodeDAO;
+import org.alfresco.repo.domain.patch.PatchDAO;
+import org.alfresco.repo.domain.qname.QNameDAO;
+import org.alfresco.repo.module.AbstractModuleComponent;
+import org.alfresco.service.cmr.repository.ChildAssociationRef;
+import org.alfresco.service.cmr.repository.NodeRef;
+import org.alfresco.service.cmr.repository.NodeService;
+import org.alfresco.service.namespace.QName;
+import org.alfresco.util.Pair;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.beans.factory.BeanNameAware;
+
+/**
+ * RM v2.1 patch to change the record inheritance of permissions.
+ *
+ * @author Roy Wetherall
+ * @since 2.1
+ */
+public class RMv21RecordInheritancePatch extends AbstractModuleComponent
+ implements BeanNameAware, RecordsManagementModel, DOD5015Model
+{
+
+ /** logger */
+ private static Log logger = LogFactory.getLog(RMv21RecordInheritancePatch.class);
+
+ /** file plan permission service */
+ private FilePlanPermissionServiceImpl filePlanPermissionServiceImpl;
+
+ /** node service */
+ private NodeService nodeService;
+
+ /** patch DAO */
+ private PatchDAO patchDAO;
+
+ /** qname DAO */
+ private QNameDAO qnameDAO;
+
+ /** node DAO */
+ private NodeDAO nodeDAO;
+
+ /**
+ * @param patchDAO patch DAO
+ */
+ public void setPatchDAO(PatchDAO patchDAO)
+ {
+ this.patchDAO = patchDAO;
+ }
+
+ /**
+ * @param qnameDAO qname DAO
+ */
+ public void setQnameDAO(QNameDAO qnameDAO)
+ {
+ this.qnameDAO = qnameDAO;
+ }
+
+ /**
+ * @param nodeDAO node DAO
+ */
+ public void setNodeDAO(NodeDAO nodeDAO)
+ {
+ this.nodeDAO = nodeDAO;
+ }
+
+ /**
+ * @param filePlanPermissionServiceImpl file plan permission service implementation
+ */
+ public void setFilePlanPermissionServiceImpl(FilePlanPermissionServiceImpl filePlanPermissionServiceImpl)
+ {
+ this.filePlanPermissionServiceImpl = filePlanPermissionServiceImpl;
+ }
+
+ /**
+ * @param nodeService node service
+ */
+ public void setNodeService(NodeService nodeService)
+ {
+ this.nodeService = nodeService;
+ }
+
+ /**
+ * @see org.alfresco.repo.module.AbstractModuleComponent#executeInternal()
+ */
+ @Override
+ protected void executeInternal() throws Throwable
+ {
+ if (logger.isDebugEnabled() == true)
+ {
+ logger.debug("RM module: RMv21RecordInheritancePatch executing ...");
+ }
+
+ Pair aspectPair = qnameDAO.getQName(ASPECT_RECORD);
+ List records = patchDAO.getNodesByAspectQNameId(aspectPair.getFirst(), 0L, patchDAO.getMaxAdmNodeID());
+
+ if (logger.isDebugEnabled() == true)
+ {
+ logger.debug(" ... updating " + records.size() + " records" );
+ }
+
+ for (Long record : records)
+ {
+ Pair recordPair = nodeDAO.getNodePair(record);
+ NodeRef recordNodeRef = recordPair.getSecond();
+
+ if (logger.isDebugEnabled() == true)
+ {
+ logger.debug(" ... updating record " + recordNodeRef.toString());
+
+ // get the primary parent
+ ChildAssociationRef assoc = nodeService.getPrimaryParent(recordNodeRef);
+ NodeRef parent = assoc.getParentRef();
+ if (parent != null)
+ {
+ filePlanPermissionServiceImpl.initialiseRecordPermissions(recordNodeRef, parent);
+ }
+ }
+ }
+
+ if (logger.isDebugEnabled() == true)
+ {
+ logger.debug(" ... complete");
+ }
+ }
+}