diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml
index 79437c28cb..d9b8e146f3 100644
--- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml
+++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml
@@ -359,6 +359,15 @@
+
+
+
+
+
+
+
diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/slingshot/rmsearch/rmsearchproperties.get.desc.xml b/rm-server/config/alfresco/templates/webscripts/org/alfresco/slingshot/rmsearch/rmsearchproperties.get.desc.xml
new file mode 100644
index 0000000000..18105dc400
--- /dev/null
+++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/slingshot/rmsearch/rmsearchproperties.get.desc.xml
@@ -0,0 +1,9 @@
+
+ rmsearchproperties
+ RM Search Properties
+ /slingshot/rmsearchproperties
+ argument
+ user
+ required
+ internal
+
\ No newline at end of file
diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/slingshot/rmsearch/rmsearchproperties.get.json.ftl b/rm-server/config/alfresco/templates/webscripts/org/alfresco/slingshot/rmsearch/rmsearchproperties.get.json.ftl
new file mode 100644
index 0000000000..e5fe1b268d
--- /dev/null
+++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/slingshot/rmsearch/rmsearchproperties.get.json.ftl
@@ -0,0 +1,27 @@
+<#escape x as jsonUtils.encodeJSONString(x)>
+{
+ "data" :
+ {
+ "groups" :
+ [
+ <#list groups as group>
+ {
+ "id" : "${group.id}",
+ "label" : "${group.label}",
+ "properties" :
+ [
+ <#list group.properties as property>
+ {
+ "prefix" : "${property.prefix}",
+ "name" : "${property.shortName}",
+ "label" : "${property.label}",
+ "type" : "${property.type}"
+ }<#if property_has_next>,#if>
+ #list>
+ ]
+ }<#if group_has_next>,#if>
+ #list>
+ ]
+ }
+}
+#escape>
\ No newline at end of file
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/slingshot/RMSearchPropertiesGet.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/slingshot/RMSearchPropertiesGet.java
new file mode 100644
index 0000000000..8948cb0895
--- /dev/null
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/slingshot/RMSearchPropertiesGet.java
@@ -0,0 +1,184 @@
+/*
+ * 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.script.slingshot;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.alfresco.module.org_alfresco_module_rm.RecordsManagementAdminService;
+import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService;
+import org.alfresco.service.cmr.dictionary.AspectDefinition;
+import org.alfresco.service.cmr.dictionary.DictionaryService;
+import org.alfresco.service.cmr.dictionary.PropertyDefinition;
+import org.alfresco.service.namespace.NamespaceService;
+import org.alfresco.service.namespace.QName;
+import org.springframework.extensions.webscripts.Cache;
+import org.springframework.extensions.webscripts.DeclarativeWebScript;
+import org.springframework.extensions.webscripts.Status;
+import org.springframework.extensions.webscripts.WebScriptRequest;
+
+/**
+ * RM serach properties GET web script
+ *
+ * @author Roy Wetherall
+ */
+public class RMSearchPropertiesGet extends DeclarativeWebScript
+{
+ private RecordsManagementAdminService adminService;
+
+ private RecordsManagementService recordsManagementService;
+
+ private DictionaryService dictionaryService;
+
+ private NamespaceService namespaceService;
+
+ public void setAdminService(RecordsManagementAdminService adminService)
+ {
+ this.adminService = adminService;
+ }
+
+ public void setRecordsManagementService(RecordsManagementService recordsManagementService)
+ {
+ this.recordsManagementService = recordsManagementService;
+ }
+
+ public void setDictionaryService(DictionaryService dictionaryService)
+ {
+ this.dictionaryService = dictionaryService;
+ }
+
+ public void setNamespaceService(NamespaceService namespaceService)
+ {
+ this.namespaceService = namespaceService;
+ }
+
+ /*
+ * @see org.alfresco.web.scripts.DeclarativeWebScript#executeImpl(org.alfresco.web.scripts.WebScriptRequest, org.alfresco.web.scripts.Status, org.alfresco.web.scripts.Cache)
+ */
+ @Override
+ protected Map executeImpl(WebScriptRequest req, Status status, Cache cache)
+ {
+ Map model = new HashMap(13);
+
+ List groups = new ArrayList(5);
+
+ Set aspects = recordsManagementService.getRecordMetaDataAspects();
+ for (QName aspect : aspects)
+ {
+ Map properties = dictionaryService.getPropertyDefs(aspect);
+ Property[] propObjs = new Property[properties.size()];
+ int index = 0;
+ for (PropertyDefinition propertyDefinition : properties.values())
+ {
+ Property propObj = new Property(propertyDefinition);
+ propObjs[index] = propObj;
+ index ++;
+ }
+
+ AspectDefinition aspectDefinition = dictionaryService.getAspect(aspect);
+ Group group = new Group(aspect.getLocalName(), aspectDefinition.getTitle(), propObjs);
+ groups.add(group);
+ }
+
+ Map customProps = adminService.getCustomPropertyDefinitions();
+ Property[] propObjs = new Property[customProps.size()];
+ int index = 0;
+ for (PropertyDefinition propertyDefinition : customProps.values())
+ {
+ Property propObj = new Property(propertyDefinition);
+ propObjs[index] = propObj;
+ index ++;
+ }
+
+ Group group = new Group("rmcustom", "Custom", propObjs);
+ groups.add(group);
+
+ model.put("groups", groups);
+ return model;
+ }
+
+ public class Group
+ {
+ private String id;
+ private String label;
+ private Property[] properties;
+
+ public Group(String id, String label, Property[] properties)
+ {
+ this.id = id;
+ this.label = label;
+ this.properties = properties;
+ }
+
+ public String getId()
+ {
+ return id;
+ }
+
+ public String getLabel()
+ {
+ return label;
+ }
+
+ public Property[] getProperties()
+ {
+ return properties;
+ }
+ }
+
+ public class Property
+ {
+ private String prefix;
+ private String shortName;
+ private String label;
+ private String type;
+
+ public Property(PropertyDefinition propertyDefinition)
+ {
+ QName qName = propertyDefinition.getName().getPrefixedQName(namespaceService);
+ this.prefix = QName.splitPrefixedQName(qName.toPrefixString())[0];
+ this.shortName = qName.getLocalName();
+ this.label = propertyDefinition.getTitle();
+ this.type = propertyDefinition.getDataType().getName().getLocalName();
+ }
+
+ public String getPrefix()
+ {
+ return prefix;
+ }
+
+ public String getShortName()
+ {
+ return shortName;
+ }
+
+ public String getLabel()
+ {
+ return label;
+ }
+
+ public String getType()
+ {
+ return type;
+ }
+ }
+}
\ No newline at end of file