diff --git a/rm-community/rm-community-repo/config/alfresco/extension/subsystems/imap/default/default/rm-imap-server-context.xml b/rm-community/rm-community-repo/config/alfresco/extension/subsystems/imap/default/default/rm-imap-server-context.xml
new file mode 100644
index 0000000000..a2520ed653
--- /dev/null
+++ b/rm-community/rm-community-repo/config/alfresco/extension/subsystems/imap/default/default/rm-imap-server-context.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/repo/imap/ExtendedImapServiceImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/repo/imap/ExtendedImapServiceImpl.java
new file mode 100644
index 0000000000..26de83afcf
--- /dev/null
+++ b/rm-community/rm-community-repo/source/java/org/alfresco/repo/imap/ExtendedImapServiceImpl.java
@@ -0,0 +1,108 @@
+/*
+ * #%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.repo.imap;
+
+import org.alfresco.model.ContentModel;
+import org.alfresco.repo.policy.BehaviourFilter;
+import org.alfresco.repo.security.authentication.AuthenticationUtil;
+import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
+import org.alfresco.repo.site.SiteModel;
+import org.alfresco.service.cmr.dictionary.DictionaryService;
+import org.alfresco.service.cmr.repository.NodeRef;
+import org.alfresco.service.cmr.repository.NodeService;
+
+/**
+ * Extends the core service ImapServiceImpl functionality
+ *
+ * @author Ana Bozianu
+ * @since 2.4
+ *
+ */
+public class ExtendedImapServiceImpl extends ImapServiceImpl
+{
+ private NodeService nodeService;
+ private BehaviourFilter policyBehaviourFilter;
+ private DictionaryService dictionaryService;
+
+ public void setDictionaryService(DictionaryService dictionaryService)
+ {
+ this.dictionaryService = dictionaryService;
+ }
+
+ public void setPolicyFilter(BehaviourFilter policyBehaviourFilter)
+ {
+ this.policyBehaviourFilter = policyBehaviourFilter;
+ super.setPolicyFilter(policyBehaviourFilter);
+ }
+
+ public void setNodeService(NodeService nodeService)
+ {
+ this.nodeService = nodeService;
+ super.setNodeService(nodeService);
+ }
+
+ @Override
+ /**
+ * Overwrites the core functionality so we can list RM files in IMAP
+ * @see https://issues.alfresco.com/jira/browse/RM-3216
+ */
+ public String getPathFromSites(final NodeRef ref)
+ {
+ return doAsSystem(new RunAsWork()
+ {
+ @Override
+ public String doWork() throws Exception
+ {
+ String name = ((String) nodeService.getProperty(ref, ContentModel.PROP_NAME)).toLowerCase();
+ if (dictionaryService.isSubClass(nodeService.getType(ref), SiteModel.TYPE_SITE))
+ {
+ return name;
+ }
+ else
+ {
+ NodeRef parent = nodeService.getPrimaryParent(ref).getParentRef();
+ return getPathFromSites(parent) + "/" + name;
+ }
+ }
+ });
+ }
+
+ private R doAsSystem(RunAsWork work)
+ {
+ policyBehaviourFilter.disableBehaviour(ContentModel.ASPECT_AUDITABLE);
+ policyBehaviourFilter.disableBehaviour(ContentModel.ASPECT_VERSIONABLE);
+ try
+ {
+ return AuthenticationUtil.runAs(work, AuthenticationUtil.getSystemUserName());
+ }
+ finally
+ {
+ policyBehaviourFilter.enableBehaviour(ContentModel.ASPECT_AUDITABLE);
+ policyBehaviourFilter.enableBehaviour(ContentModel.ASPECT_VERSIONABLE);
+ }
+ }
+}