Index: jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/DavPropertyName.java
===================================================================
--- jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/DavPropertyName.java	(revision 896818)
+++ jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/DavPropertyName.java	(working copy)
@@ -52,6 +52,54 @@
     /* property use by microsoft that are not specified in the RFC 2518 */
     public static final DavPropertyName ISCOLLECTION = DavPropertyName.create("iscollection");
 
+    // Property names used by the JCR extensions:
+
+    private static final DavPropertyName jcr(String name) {
+        return create(name, Namespace.JCR);
+    }
+
+    public static final DavPropertyName JCR_NAME = jcr("name");
+    public static final DavPropertyName JCR_PATH = jcr("path");
+    public static final DavPropertyName JCR_DEPTH = jcr("depth");
+    public static final DavPropertyName JCR_PARENT = jcr("parent");
+    public static final DavPropertyName JCR_ISNEW = jcr("isnew");
+    public static final DavPropertyName JCR_ISMODIFIED = jcr("ismodified");
+    public static final DavPropertyName JCR_DEFINITION = jcr("definition");
+
+    public static final DavPropertyName JCR_SELECTOR_NAME = jcr("selectorName");
+
+    /**
+     * Name of the workspace for which the repository session has been created.
+     */
+    public static final DavPropertyName JCR_WORKSPACE_NAME = jcr("workspaceName");
+
+    // property names used for resources representing jcr-nodes
+    public static final DavPropertyName JCR_PRIMARYNODETYPE = jcr("primarynodetype");
+    public static final DavPropertyName JCR_MIXINNODETYPES = jcr("mixinnodetypes");
+    public static final DavPropertyName JCR_INDEX = jcr("index");
+    public static final DavPropertyName JCR_REFERENCES = jcr("references");
+
+    // @since JCR 2.0
+    public static final DavPropertyName JCR_WEAK_REFERENCES = jcr("weakreferences");
+    public static final DavPropertyName JCR_UUID = jcr("uuid");
+
+    public static final DavPropertyName JCR_PRIMARYITEM = jcr("primaryitem");
+
+    // property names used for resources representing jcr-properties
+    public static final DavPropertyName JCR_TYPE = jcr("type");
+    public static final DavPropertyName JCR_VALUE = jcr("value");
+    public static final DavPropertyName JCR_VALUES = jcr("values");
+    public static final DavPropertyName JCR_LENGTH = jcr("length");
+    public static final DavPropertyName JCR_LENGTHS = jcr("lengths");
+
+    // property names used for resource representing a workspace
+    public static final DavPropertyName JCR_NAMESPACES = jcr("namespaces");
+
+    // property names used for resource representing a version history
+    public static final DavPropertyName JCR_VERSIONABLEUUID = jcr("versionableuuid");
+
+    public static final DavPropertyName JCR_SEARCH_RESULT_PROPERTY = jcr("search-result-property");
+
     /** the name of the property */
     private final String name;
 
Index: jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavConstants.java
===================================================================
--- jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavConstants.java	(revision 896818)
+++ jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavConstants.java	(working copy)
@@ -149,4 +149,176 @@
      * Simple date format for the creation date ISO representation (partial).
      */
     public static DateFormat creationDateFormat = new HttpDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
+
+    //---------------------------------------< Constants for JCR extensions >---
+
+    /** Placeholder resource path for the JCR root node. */
+    String JCR_ROOT_ITEM_RESOURCEPATH = "/jcr:root";
+
+    String IMPORT_UUID_BEHAVIOR = "ImportUUIDBehavior";
+
+    /** Name of the node type definition root element. */
+    String NODETYPES_ELEMENT = "nodeTypes";
+
+    /** Name of the node type definition element. */
+    String NODETYPE_ELEMENT = "nodeType";
+
+    /** Name of the child node definition element. */
+    String CHILDNODEDEFINITION_ELEMENT = "childNodeDefinition";
+
+    /** Name of the property definition element. */
+    String PROPERTYDEFINITION_ELEMENT = "propertyDefinition";
+
+    /** Name of the <code>isMixin</code> attribute. */
+    String ISMIXIN_ATTRIBUTE = "isMixin";
+
+    /** Name of the <code>hasOrderableChildNodes</code> attribute. */
+    String HASORDERABLECHILDNODES_ATTRIBUTE = "hasOrderableChildNodes";
+
+    /**
+     * Name of the <code>isAbstract</code> attribute.
+     * @since JCR 2.0
+     */
+    String ISABSTRACT_ATTRIBUTE = "isAbstract";
+
+    /**
+     * Name of the <code>isQueryable</code> attribute.
+     * @since JCR 2.0
+     */
+    String ISQUERYABLE_ATTRIBUTE = "isQueryable";
+
+    /** Name of the primary item name attribute. */
+    String PRIMARYITEMNAME_ATTRIBUTE = "primaryItemName";
+
+    /** Name of the supertypes element. */
+    String SUPERTYPES_ELEMENT = "supertypes";
+
+    /** Name of the supertype element. */
+    String SUPERTYPE_ELEMENT = "supertype";
+
+    /** Name of the <code>name</code> attribute. */
+    String NAME_ATTRIBUTE = "name";
+
+    /** Name of the <code>autoCreated</code> attribute. */
+    String AUTOCREATED_ATTRIBUTE = "autoCreated";
+
+    /** Name of the <code>mandatory</code> attribute. */
+    String MANDATORY_ATTRIBUTE = "mandatory";
+
+    /** Name of the <code>onParentVersion</code> attribute. */
+    String ONPARENTVERSION_ATTRIBUTE = "onParentVersion";
+
+    /** Name of the <code>protected</code> attribute. */
+    String PROTECTED_ATTRIBUTE = "protected";
+
+    /** Name of the required type attribute. */
+    String REQUIREDTYPE_ATTRIBUTE = "requiredType";
+
+    /** Name of the value constraints element. */
+    String VALUECONSTRAINTS_ELEMENT = "valueConstraints";
+
+    /** Name of the value constraint element. */
+    String VALUECONSTRAINT_ELEMENT = "valueConstraint";
+
+    /** Name of the default values element. */
+    String DEFAULTVALUES_ELEMENT = "defaultValues";
+
+    /** Name of the default value element. */
+    String DEFAULTVALUE_ELEMENT = "defaultValue";
+
+    /** Name of the <code>multiple</code> attribute. */
+    String MULTIPLE_ATTRIBUTE = "multiple";
+
+    /** Name of the required primary types element. */
+    String REQUIREDPRIMARYTYPES_ELEMENT = "requiredPrimaryTypes";
+
+    /** Name of the required primary type element. */
+    String REQUIREDPRIMARYTYPE_ELEMENT = "requiredPrimaryType";
+
+    /** Name of the default primary type attribute. */
+    String DEFAULTPRIMARYTYPE_ATTRIBUTE = "defaultPrimaryType";
+
+    /** Name of the <code>sameNameSiblings</code> attribute. */
+    String SAMENAMESIBLINGS_ATTRIBUTE = "sameNameSiblings";
+
+    /**
+     * Name of the availableQueryOperators element.
+     * @since JCR 2.0
+     */
+    String AVAILABLE_QUERY_OPERATORS_ELEMENT = "availableQueryOperators";
+
+    /**
+     * Name of the availableQueryOperator element.
+     * @since JCR 2.0
+     */
+    String AVAILABLE_QUERY_OPERATOR_ELEMENT = "availableQueryOperator";
+
+    /**
+     * Name of the fullTextSearchable attribute.
+     * @since JCR 2.0
+     */
+    String FULL_TEXT_SEARCHABLE_ATTRIBUTE = "fullTextSearchable";
+
+    /**
+     * Name of the queryOrderable attribute.
+     * @since JCR 2.0
+     */
+    String QUERY_ORDERABLE_ATTRIBUTE = "queryOrderable";
+
+    //----------< attr. not defined by copied from o.a.j.core.n.x.Constants >---
+    /**
+     * Name of the declaring nodetype. This value is not needed during
+     * discovery of nodetype definitions. However if the definition of an item is
+     * retrieved (instead of being calculated on the client), this information is
+     * needed
+     */
+    String DECLARINGNODETYPE_ATTRIBUTE = "declaringNodeType";
+
+    String XML_REPORT_ALLNODETYPES = "all-nodetypes";
+
+    String XML_REPORT_MIXINNODETYPES = "mixin-nodetypes";
+
+    String XML_REPORT_PRIMARYNODETYPES = "primary-nodetypes";
+
+    String XML_NODETYPES = "nodetypes";
+
+    String XML_NODETYPE = "nodetype";
+
+    String XML_NODETYPENAME = "nodetypename";
+
+    // xml element names
+    String XML_VALUE = "value";
+
+    /**
+     * 'type' attribute for the {@link #XML_VALUE value} element, reflecting
+     * the JCR property type of the value being transported.
+     */
+    String ATTR_VALUE_TYPE = "type";
+    String XML_LENGTH = "length";
+
+    // xml elements used to reflect the workspaces ns-registry
+    // TODO: to be reviewed...
+    String XML_NAMESPACE = "namespace";
+    String XML_PREFIX = "prefix";
+    String XML_URI = "uri";
+
+    // xml elements used for repository-descritors report
+    String XML_DESCRIPTOR = "descriptor";
+    String XML_DESCRIPTORKEY = "descriptorkey";
+    String XML_DESCRIPTORVALUE = "descriptorvalue";
+
+    /**
+     * The 'removeexisting' element is not defined by RFC 3253. If it is present
+     * in the UPDATE request body, uuid conflicts should be solved by removing
+     * the existing nodes.
+     */
+    String XML_REMOVEEXISTING = "removeexisting";
+
+    // Report names
+    String JCR_REPOSITORYDESCRIPTORS = "repositorydescriptors";
+    String JCR_PRIVILEGES = "privileges";
+    String JCR_REGISTEREDNAMESPACES = "registerednamespaces";
+    String JCR_NODETYPES = "nodetypes";
+    String JCR_LOCATE_BY_UUID = "locate-by-uuid";
+
 }
Index: jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/lock/Scope.java
===================================================================
--- jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/lock/Scope.java	(revision 896818)
+++ jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/lock/Scope.java	(working copy)
@@ -36,6 +36,13 @@
     public static final Scope EXCLUSIVE = Scope.create(DavConstants.XML_EXCLUSIVE, DavConstants.NAMESPACE);
     public static final Scope SHARED = Scope.create(DavConstants.XML_SHARED, DavConstants.NAMESPACE);
 
+    /**
+     * Extension to the WebDAV 'exclusive' lock, that allows to distinguish
+     * the session-scoped and open-scoped locks on a JCR node.
+     */
+    public static final Scope JCR_EXCLUSIVE_SESSION =
+        Scope.create("exclusive-session-scoped", Namespace.JCR);
+
     private final String localName;
     private final Namespace namespace;
 
Index: jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/ReportInfo.java
===================================================================
--- jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/ReportInfo.java	(revision 896818)
+++ jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/ReportInfo.java	(working copy)
@@ -59,6 +59,10 @@
         this(type, DavConstants.DEPTH_0, null);
     }
 
+    public ReportInfo(String name, Namespace namespace) {
+        this(name, namespace, DavConstants.DEPTH_0, null);
+    }
+
     /**
      * Create a new <code>ReportInfo</code>
      *
@@ -69,6 +73,10 @@
         this(type, depth, null);
     }
 
+    public ReportInfo(String name, Namespace namespace, int depth) {
+        this(name, namespace, depth, null);
+    }
+
     /**
      * Create a new <code>ReportInfo</code>
      *
@@ -76,9 +84,16 @@
      * @param depth
      * @param propertyNames
      */
-    public ReportInfo(ReportType type, int depth, DavPropertyNameSet propertyNames) {
-        this.typeLocalName = type.getLocalName();
-        this.typeNamespace = type.getNamespace();
+    public ReportInfo(
+            ReportType type, int depth, DavPropertyNameSet propertyNames) {
+        this(type.getLocalName(), type.getNamespace(), depth, propertyNames);
+    }
+
+    public ReportInfo(
+            String name, Namespace namespace, int depth,
+            DavPropertyNameSet propertyNames) {
+        this.typeLocalName = name;
+        this.typeNamespace = namespace;
         this.depth = depth;
         if (propertyNames != null) {
             this.propertyNames = new DavPropertyNameSet(propertyNames);
Index: jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/observation/SubscriptionInfo.java
===================================================================
--- jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/observation/SubscriptionInfo.java	(revision 896818)
+++ jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/observation/SubscriptionInfo.java	(working copy)
@@ -113,11 +113,11 @@
      * @throws IllegalArgumentException if the reqInfo element does not contain the mandatory elements.
      */
     public SubscriptionInfo(Element reqInfo, long timeout, boolean isDeep) throws DavException {
-        if (!DomUtil.matches(reqInfo, XML_SUBSCRIPTIONINFO, NAMESPACE)) {
+        if (!DomUtil.matches(reqInfo, XML_SUBSCRIPTIONINFO, Namespace.JCR)) {
             log.warn("Element with name 'subscriptioninfo' expected");
             throw new DavException(DavServletResponse.SC_BAD_REQUEST);
         }
-        Element el = DomUtil.getChildElement(reqInfo, XML_EVENTTYPE, NAMESPACE);
+        Element el = DomUtil.getChildElement(reqInfo, XML_EVENTTYPE, Namespace.JCR);
         if (el != null) {
             eventTypes = DefaultEventType.createFromXml(el);
             if (eventTypes.length == 0) {
@@ -130,7 +130,7 @@
         }
 
         List filters = new ArrayList();
-        el = DomUtil.getChildElement(reqInfo, XML_FILTER, NAMESPACE);
+        el = DomUtil.getChildElement(reqInfo, XML_FILTER, Namespace.JCR);
         if (el != null) {
             ElementIterator it = DomUtil.getChildren(el);
             while (it.hasNext()) {
@@ -140,7 +140,7 @@
         }
         this.filters = (Filter[])filters.toArray(new Filter[filters.size()]);
 
-        this.noLocal = DomUtil.hasChildElement(reqInfo, XML_NOLOCAL, NAMESPACE);
+        this.noLocal = DomUtil.hasChildElement(reqInfo, XML_NOLOCAL, Namespace.JCR);
         this.isDeep = isDeep;
         this.timeout = timeout;
     }
@@ -221,21 +221,21 @@
      * @param document
      */
     public Element toXml(Document document) {
-        Element subscrInfo = DomUtil.createElement(document, XML_SUBSCRIPTIONINFO, NAMESPACE);
-        Element eventType = DomUtil.addChildElement(subscrInfo, XML_EVENTTYPE, NAMESPACE);
+        Element subscrInfo = DomUtil.createElement(document, XML_SUBSCRIPTIONINFO, Namespace.JCR);
+        Element eventType = DomUtil.addChildElement(subscrInfo, XML_EVENTTYPE, Namespace.JCR);
         for (int i = 0; i < eventTypes.length; i++) {
             eventType.appendChild(eventTypes[i].toXml(document));
         }
 
         if (filters.length > 0) {
-            Element filter = DomUtil.addChildElement(subscrInfo, XML_FILTER, NAMESPACE);
+            Element filter = DomUtil.addChildElement(subscrInfo, XML_FILTER, Namespace.JCR);
             for (int i = 0; i < filters.length; i++) {
                 filter.appendChild(filters[i].toXml(document));
             }
         }
 
         if (noLocal) {
-            DomUtil.addChildElement(subscrInfo, XML_NOLOCAL, NAMESPACE);
+            DomUtil.addChildElement(subscrInfo, XML_NOLOCAL, Namespace.JCR);
         }
         return subscrInfo;
     }
Index: jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/observation/DefaultEventType.java
===================================================================
--- jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/observation/DefaultEventType.java	(revision 896818)
+++ jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/observation/DefaultEventType.java	(working copy)
@@ -84,7 +84,7 @@
      * @return
      */
     public static EventType[] createFromXml(Element eventType) {
-        if (!DomUtil.matches(eventType, ObservationConstants.XML_EVENTTYPE, ObservationConstants.NAMESPACE)) {
+        if (!DomUtil.matches(eventType, ObservationConstants.XML_EVENTTYPE, Namespace.JCR)) {
             throw new IllegalArgumentException("'eventtype' element expected which contains a least a single child element.");
         }
 
Index: jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/observation/ObservationConstants.java
===================================================================
--- jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/observation/ObservationConstants.java	(revision 896818)
+++ jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/observation/ObservationConstants.java	(working copy)
@@ -27,11 +27,6 @@
  */
 public interface ObservationConstants {
 
-    /**
-     * The namespace
-     */
-    public static final Namespace NAMESPACE = Namespace.getNamespace("dcr", "http://www.day.com/jcr/webdav/1.0");
-
     //---< Headers >------------------------------------------------------------
     /**
      * The SubscriptionId request header<br>
@@ -79,5 +74,6 @@
      * The protected subscription discovery property is used to find out about
      * existing subscriptions present on the specified resource.
      */
-    public static final DavPropertyName SUBSCRIPTIONDISCOVERY = DavPropertyName.create("subscriptiondiscovery", NAMESPACE);
+    public static final DavPropertyName SUBSCRIPTIONDISCOVERY =
+        DavPropertyName.create("subscriptiondiscovery", Namespace.JCR);
 }
Index: jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/observation/EventDiscovery.java
===================================================================
--- jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/observation/EventDiscovery.java	(revision 896818)
+++ jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/observation/EventDiscovery.java	(working copy)
@@ -17,6 +17,7 @@
 package org.apache.jackrabbit.webdav.observation;
 
 import org.apache.jackrabbit.webdav.xml.DomUtil;
+import org.apache.jackrabbit.webdav.xml.Namespace;
 import org.apache.jackrabbit.webdav.xml.XmlSerializable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -83,7 +84,7 @@
      * @param document
      */
     public Element toXml(Document document) {
-        Element ed = DomUtil.createElement(document, XML_EVENTDISCOVERY, NAMESPACE);
+        Element ed = DomUtil.createElement(document, XML_EVENTDISCOVERY, Namespace.JCR);
         Iterator it = getEventBundles();
         while (it.hasNext()) {
             EventBundle bundle = (EventBundle)it.next();
Index: jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/observation/SubscriptionDiscovery.java
===================================================================
--- jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/observation/SubscriptionDiscovery.java	(revision 896818)
+++ jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/observation/SubscriptionDiscovery.java	(working copy)
@@ -19,6 +19,7 @@
 import org.apache.jackrabbit.webdav.property.AbstractDavProperty;
 import org.apache.jackrabbit.webdav.xml.DomUtil;
 import org.apache.jackrabbit.webdav.xml.ElementIterator;
+import org.apache.jackrabbit.webdav.xml.Namespace;
 import org.apache.jackrabbit.webdav.xml.XmlSerializable;
 import org.apache.jackrabbit.webdav.DavConstants;
 import org.w3c.dom.Document;
@@ -97,7 +98,7 @@
         }
 
         List subscriptions = new ArrayList();
-        ElementIterator it = DomUtil.getChildren(sDiscoveryElement, ObservationConstants.XML_SUBSCRIPTION, ObservationConstants.NAMESPACE);
+        ElementIterator it = DomUtil.getChildren(sDiscoveryElement, ObservationConstants.XML_SUBSCRIPTION, Namespace.JCR);
         while (it.hasNext()) {
             final Element sb = it.nextElement();
             // anonymous inner class: Subscription interface
@@ -106,7 +107,7 @@
                  * @see Subscription#getSubscriptionId()
                  */
                 public String getSubscriptionId() {
-                    Element ltEl = DomUtil.getChildElement(sb, ObservationConstants.XML_SUBSCRIPTIONID, ObservationConstants.NAMESPACE);
+                    Element ltEl = DomUtil.getChildElement(sb, ObservationConstants.XML_SUBSCRIPTIONID, Namespace.JCR);
                     if (ltEl != null) {
                         return DomUtil.getChildText(sb, DavConstants.XML_HREF, DavConstants.NAMESPACE);
                     }
Index: jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/Namespace.java
===================================================================
--- jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/Namespace.java	(revision 896818)
+++ jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/Namespace.java	(working copy)
@@ -30,6 +30,12 @@
     public static final Namespace XML_NAMESPACE = Namespace.getNamespace("xml", "http://www.w3.org/XML/1998/namespace");
     public static final Namespace XMLNS_NAMESPACE = Namespace.getNamespace("xmlns", "http://www.w3.org/2000/xmlns/");
 
+    /**
+     * The namespace for all JCR specific extensions.
+     */
+    public static final Namespace JCR =
+        getNamespace("dcr", "http://www.day.com/jcr/webdav/1.0");
+
     private final String prefix;
     private final String uri;
 
Index: jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/security/Privilege.java
===================================================================
--- jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/security/Privilege.java	(revision 896818)
+++ jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/security/Privilege.java	(working copy)
@@ -126,6 +126,32 @@
      */
     public static final Privilege PRIVILEGE_ALL = getPrivilege("all", SecurityConstants.NAMESPACE);
 
+    //-----------------------------------------< JSR170 specific privileges >---
+
+    private static final Privilege jcr(String name) {
+        return getPrivilege(name, Namespace.JCR);
+    }
+
+    /**
+     * Privilege representing the JSR170 'read' action.
+     */
+    public static final Privilege JCR_READ = jcr("read");
+
+    /**
+     * Privilege representing the JSR170 'add_node' action.
+     */
+    public static final Privilege JCR_ADD_NODE = jcr("add_node");
+
+    /**
+     * Privilege representing the JSR170 'set_property' action.
+     */
+    public static final Privilege JCR_SET_PROPERTY = jcr("set_property");
+
+    /**
+     * Privilege representing the JSR170 'remove' action.
+     */
+    public static final Privilege JCR_REMOVE = jcr("remove");
+
     private final String privilege;
     private final Namespace namespace;
 
Index: jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/PollMethod.java
===================================================================
--- jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/PollMethod.java	(revision 896818)
+++ jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/PollMethod.java	(working copy)
@@ -23,6 +23,7 @@
 import org.apache.jackrabbit.webdav.header.PollTimeoutHeader;
 import org.apache.jackrabbit.webdav.xml.DomUtil;
 import org.apache.jackrabbit.webdav.xml.ElementIterator;
+import org.apache.jackrabbit.webdav.xml.Namespace;
 import org.apache.jackrabbit.webdav.observation.ObservationConstants;
 import org.apache.jackrabbit.webdav.observation.EventDiscovery;
 import org.apache.jackrabbit.webdav.observation.EventBundle;
@@ -110,9 +111,9 @@
       * @return
       */
      private boolean buildDiscoveryFromRoot(Element root) {
-         if (DomUtil.matches(root, XML_EVENTDISCOVERY, ObservationConstants.NAMESPACE)) {
+         if (DomUtil.matches(root, XML_EVENTDISCOVERY, Namespace.JCR)) {
              eventDiscovery = new EventDiscovery();
-             ElementIterator it = DomUtil.getChildren(root, XML_EVENTBUNDLE, ObservationConstants.NAMESPACE);
+             ElementIterator it = DomUtil.getChildren(root, XML_EVENTBUNDLE, Namespace.JCR);
              while (it.hasNext()) {
                  final Element ebElement = it.nextElement();
                  EventBundle eb = new EventBundle() {
Index: jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/RepositoryServiceImpl.java
===================================================================
--- jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/RepositoryServiceImpl.java	(revision 896818)
+++ jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/RepositoryServiceImpl.java	(working copy)
@@ -45,12 +45,12 @@
 import org.apache.jackrabbit.spi.commons.name.PathFactoryImpl;
 import org.apache.jackrabbit.spi.commons.name.NameConstants;
 import org.apache.jackrabbit.spi2dav.ExceptionConverter;
+import org.apache.jackrabbit.spi2dav.server.JcrValueType;
 import org.apache.jackrabbit.util.Text;
+import org.apache.jackrabbit.webdav.DavConstants;
 import org.apache.jackrabbit.webdav.DavException;
 import org.apache.jackrabbit.webdav.DavServletResponse;
 import org.apache.jackrabbit.webdav.header.IfHeader;
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
-import org.apache.jackrabbit.webdav.jcr.JcrValueType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -150,7 +150,7 @@
                     // fallback:
                     // calculated uri does not start with the rootURI
                     // -> search /jcr:root and start substring behind.
-                    String rootSegment = Text.escapePath(ItemResourceConstants.ROOT_ITEM_RESOURCEPATH);
+                    String rootSegment = Text.escapePath(DavConstants.JCR_ROOT_ITEM_RESOURCEPATH);
                     jcrPath = uri.substring(uri.indexOf(rootSegment) + rootSegment.length());
                 }
                 jcrPath = Text.unescape(jcrPath);
@@ -181,7 +181,7 @@
 
     private String getRootURI(SessionInfo sessionInfo) {
         StringBuffer sb = new StringBuffer(getWorkspaceURI(sessionInfo));
-        sb.append(Text.escapePath(ItemResourceConstants.ROOT_ITEM_RESOURCEPATH));
+        sb.append(Text.escapePath(DavConstants.JCR_ROOT_ITEM_RESOURCEPATH));
         return sb.toString();
     }
 
Index: jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/ValueLoader.java
===================================================================
--- jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/ValueLoader.java	(revision 896818)
+++ jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/ValueLoader.java	(working copy)
@@ -25,8 +25,8 @@
 import org.apache.jackrabbit.webdav.MultiStatusResponse;
 import org.apache.jackrabbit.webdav.client.methods.DavMethodBase;
 import org.apache.jackrabbit.webdav.client.methods.PropFindMethod;
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
 import org.apache.jackrabbit.webdav.property.DavProperty;
+import org.apache.jackrabbit.webdav.property.DavPropertyName;
 import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
 import org.apache.jackrabbit.webdav.property.DavPropertySet;
 
@@ -63,7 +63,7 @@
 
     int loadType(String uri) throws RepositoryException, IOException {
         DavPropertyNameSet nameSet = new DavPropertyNameSet();
-        nameSet.add(ItemResourceConstants.JCR_TYPE);
+        nameSet.add(DavPropertyName.JCR_TYPE);
 
         DavMethodBase method = null;
         try {
@@ -74,7 +74,7 @@
             MultiStatusResponse[] responses = method.getResponseBodyAsMultiStatus().getResponses();
             if (responses.length == 1) {
                 DavPropertySet props = responses[0].getProperties(DavServletResponse.SC_OK);
-                DavProperty type = props.get(ItemResourceConstants.JCR_TYPE);
+                DavProperty type = props.get(DavPropertyName.JCR_TYPE);
                 if (type != null) {
                     return PropertyType.valueFromName(type.getValue().toString());
                 } else {
Index: jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/QValueFactoryImpl.java
===================================================================
--- jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/QValueFactoryImpl.java	(revision 896818)
+++ jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/QValueFactoryImpl.java	(working copy)
@@ -22,11 +22,11 @@
 import org.apache.jackrabbit.spi.commons.conversion.NamePathResolver;
 import org.apache.jackrabbit.spi.commons.value.ValueFactoryQImpl;
 import org.apache.jackrabbit.spi.commons.value.AbstractQValue;
+import org.apache.jackrabbit.spi2dav.server.ValuesProperty;
 import org.apache.jackrabbit.util.TransientFileFactory;
 import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
-import org.apache.jackrabbit.webdav.jcr.property.ValuesProperty;
 import org.apache.jackrabbit.webdav.property.DavProperty;
+import org.apache.jackrabbit.webdav.property.DavPropertyName;
 import org.apache.jackrabbit.webdav.property.DefaultDavProperty;
 import org.apache.jackrabbit.webdav.xml.DomUtil;
 import org.w3c.dom.Document;
@@ -449,7 +449,7 @@
                 try {
                     DocumentBuilder db = DomUtil.BUILDER_FACTORY.newDocumentBuilder();
                     Document doc = db.parse(in);
-                    Element prop = DomUtil.getChildElement(doc, ItemResourceConstants.JCR_VALUES.getName(), ItemResourceConstants.JCR_VALUES.getNamespace());
+                    Element prop = DomUtil.getChildElement(doc, DavPropertyName.JCR_VALUES.getName(), DavPropertyName.JCR_VALUES.getNamespace());
                     DavProperty p = DefaultDavProperty.createFromXml(prop);
                     ValuesProperty vp = new ValuesProperty(p, PropertyType.BINARY, vf);
 
Index: jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/QPropertyDefinitionImpl.java
===================================================================
--- jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/QPropertyDefinitionImpl.java	(revision 896818)
+++ jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/QPropertyDefinitionImpl.java	(working copy)
@@ -25,6 +25,7 @@
 import org.apache.jackrabbit.spi.commons.value.ValueFactoryQImpl;
 import org.apache.jackrabbit.spi.commons.value.ValueFormat;
 import org.apache.jackrabbit.spi.commons.nodetype.constraint.ValueConstraint;
+import org.apache.jackrabbit.webdav.DavConstants;
 import org.apache.jackrabbit.webdav.xml.DomUtil;
 import org.apache.jackrabbit.webdav.xml.ElementIterator;
 import org.w3c.dom.Element;
@@ -78,36 +79,23 @@
         // NOTE: the server should send the namespace-mappings as addition ns-defininitions
         super(declaringNodeType, pdefElement, resolver);
 
-        if (pdefElement.hasAttribute(REQUIREDTYPE_ATTRIBUTE)) {
-            requiredType = PropertyType.valueFromName(pdefElement.getAttribute(REQUIREDTYPE_ATTRIBUTE));
+        if (pdefElement.hasAttribute(DavConstants.REQUIREDTYPE_ATTRIBUTE)) {
+            requiredType = PropertyType.valueFromName(pdefElement.getAttribute(DavConstants.REQUIREDTYPE_ATTRIBUTE));
         } else {
             requiredType = PropertyType.UNDEFINED;
         }
 
-        if (pdefElement.hasAttribute(MULTIPLE_ATTRIBUTE)) {
-            multiple = Boolean.valueOf(pdefElement.getAttribute(MULTIPLE_ATTRIBUTE)).booleanValue();
-        } else {
-            multiple = false;
-        }
+        multiple = getBoolean(pdefElement, DavConstants.MULTIPLE_ATTRIBUTE);
+        fullTextSearcheable = getBoolean(pdefElement, DavConstants.FULL_TEXT_SEARCHABLE_ATTRIBUTE);
+        queryOrderable = getBoolean(pdefElement, DavConstants.QUERY_ORDERABLE_ATTRIBUTE);
 
-        if (pdefElement.hasAttribute(FULL_TEXT_SEARCHABLE_ATTRIBUTE)) {
-            fullTextSearcheable = Boolean.valueOf(pdefElement.getAttribute(FULL_TEXT_SEARCHABLE_ATTRIBUTE)).booleanValue();
-        } else {
-            fullTextSearcheable = false;
-        }
-        if (pdefElement.hasAttribute(QUERY_ORDERABLE_ATTRIBUTE)) {
-            queryOrderable = Boolean.valueOf(pdefElement.getAttribute(QUERY_ORDERABLE_ATTRIBUTE)).booleanValue();
-        } else {
-            queryOrderable = false;
-        }
-
-        Element child = DomUtil.getChildElement(pdefElement, DEFAULTVALUES_ELEMENT, null);
+        Element child = DomUtil.getChildElement(pdefElement, DavConstants.DEFAULTVALUES_ELEMENT, null);
         if (child == null) {
             // No default value defined at all.
             defaultValues = null;
         } else {
-            List vs = new ArrayList();
-            ElementIterator it = DomUtil.getChildren(child, DEFAULTVALUE_ELEMENT, null);
+            List<QValue> vs = new ArrayList<QValue>();
+            ElementIterator it = DomUtil.getChildren(child, DavConstants.DEFAULTVALUE_ELEMENT, null);
             while (it.hasNext()) {
                 String jcrVal = DomUtil.getText(it.nextElement());
                 if (jcrVal == null) {
@@ -123,15 +111,15 @@
                 }
                 vs.add(qValue);
             }
-            defaultValues = (QValue[]) vs.toArray(new QValue[vs.size()]);
+            defaultValues = vs.toArray(new QValue[vs.size()]);
         }
 
-        child = DomUtil.getChildElement(pdefElement, VALUECONSTRAINTS_ELEMENT, null);
+        child = DomUtil.getChildElement(pdefElement, DavConstants.VALUECONSTRAINTS_ELEMENT, null);
         if (child == null) {
             valueConstraints = QValueConstraint.EMPTY_ARRAY;
         } else {
             List<QValueConstraint> vc = new ArrayList<QValueConstraint>();
-            ElementIterator it = DomUtil.getChildren(child, VALUECONSTRAINT_ELEMENT, null);
+            ElementIterator it = DomUtil.getChildren(child, DavConstants.VALUECONSTRAINT_ELEMENT, null);
             while (it.hasNext()) {
                 String qValue = DomUtil.getText(it.nextElement());
                 // in case of name and path constraint, the value must be
@@ -142,12 +130,12 @@
             valueConstraints = vc.toArray(new QValueConstraint[vc.size()]);
         }
 
-        child = DomUtil.getChildElement(pdefElement, AVAILABLE_QUERY_OPERATORS_ELEMENT, null);
+        child = DomUtil.getChildElement(pdefElement, DavConstants.AVAILABLE_QUERY_OPERATORS_ELEMENT, null);
         if (child == null) {
             availableQueryOperators = new String[0];
         } else {
             List<String> names = new ArrayList<String>();
-            ElementIterator it = DomUtil.getChildren(child, AVAILABLE_QUERY_OPERATOR_ELEMENT, null);
+            ElementIterator it = DomUtil.getChildren(child, DavConstants.AVAILABLE_QUERY_OPERATOR_ELEMENT, null);
             while (it.hasNext()) {
                 String str = DomUtil.getText(it.nextElement());
                 names.add(str);
Index: jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/QNodeDefinitionImpl.java
===================================================================
--- jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/QNodeDefinitionImpl.java	(revision 896818)
+++ jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/QNodeDefinitionImpl.java	(working copy)
@@ -22,6 +22,7 @@
 import org.apache.jackrabbit.spi.QNodeDefinition;
 import org.apache.jackrabbit.spi.Name;
 import org.apache.jackrabbit.spi.commons.name.NameConstants;
+import org.apache.jackrabbit.webdav.DavConstants;
 import org.apache.jackrabbit.webdav.xml.DomUtil;
 import org.apache.jackrabbit.webdav.xml.ElementIterator;
 
@@ -66,30 +67,22 @@
         // TODO: webdav server sends jcr names -> nsResolver required. improve this.
         // NOTE: the server should send the namespace-mappings as addition ns-defininitions
         try {
+            defaultPrimaryType = getName(ndefElement, DavConstants.DEFAULTPRIMARYTYPE_ATTRIBUTE, resolver);
 
-            if (ndefElement.hasAttribute(DEFAULTPRIMARYTYPE_ATTRIBUTE)) {
-                defaultPrimaryType = resolver.getQName(ndefElement.getAttribute(DEFAULTPRIMARYTYPE_ATTRIBUTE));
-            } else {
-                defaultPrimaryType = null;
-            }
-
-            Element reqPrimaryTypes = DomUtil.getChildElement(ndefElement, REQUIREDPRIMARYTYPES_ELEMENT, null);
+            Element reqPrimaryTypes = DomUtil.getChildElement(ndefElement, DavConstants.REQUIREDPRIMARYTYPES_ELEMENT, null);
             if (reqPrimaryTypes != null) {
-                List qNames = new ArrayList();
-                ElementIterator it = DomUtil.getChildren(reqPrimaryTypes, REQUIREDPRIMARYTYPE_ELEMENT, null);
+                List<Name> qNames = new ArrayList<Name>();
+                ElementIterator it = DomUtil.getChildren(reqPrimaryTypes, DavConstants.REQUIREDPRIMARYTYPE_ELEMENT, null);
                 while (it.hasNext()) {
                     qNames.add(resolver.getQName(DomUtil.getTextTrim(it.nextElement())));
                 }
-                requiredPrimaryTypes = (Name[]) qNames.toArray(new Name[qNames.size()]);
+                requiredPrimaryTypes = qNames.toArray(new Name[qNames.size()]);
             } else {
                 requiredPrimaryTypes = new Name[] { NameConstants.NT_BASE };
             }
 
-            if (ndefElement.hasAttribute(SAMENAMESIBLINGS_ATTRIBUTE)) {
-                allowsSameNameSiblings = Boolean.valueOf(ndefElement.getAttribute(SAMENAMESIBLINGS_ATTRIBUTE)).booleanValue();
-            } else {
-                allowsSameNameSiblings = false;
-            }
+            allowsSameNameSiblings =
+                getBoolean(ndefElement, DavConstants.SAMENAMESIBLINGS_ATTRIBUTE);
         } catch (NameException e) {
             throw new RepositoryException(e);
         }
@@ -174,7 +167,7 @@
             }
             sb.append('/');
             // set of required node type names, sorted in ascending order
-            TreeSet set = new TreeSet();
+            TreeSet<Name> set = new TreeSet<Name>();
             Name[] names = getRequiredPrimaryTypes();
             for (int i = 0; i < names.length; i++) {
                 set.add(names[i]);
Index: jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/QNodeTypeDefinitionImpl.java
===================================================================
--- jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/QNodeTypeDefinitionImpl.java	(revision 896818)
+++ jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/QNodeTypeDefinitionImpl.java	(working copy)
@@ -17,11 +17,13 @@
 package org.apache.jackrabbit.spi2dav;
 
 import org.w3c.dom.Element;
-import org.apache.jackrabbit.webdav.jcr.nodetype.NodeTypeConstants;
+import org.apache.jackrabbit.webdav.DavConstants;
 import org.apache.jackrabbit.webdav.xml.DomUtil;
 import org.apache.jackrabbit.webdav.xml.ElementIterator;
+import org.apache.jackrabbit.spi.commons.conversion.IllegalNameException;
 import org.apache.jackrabbit.spi.commons.conversion.NameException;
 import org.apache.jackrabbit.spi.commons.conversion.NamePathResolver;
+import org.apache.jackrabbit.spi.commons.conversion.NameResolver;
 import org.apache.jackrabbit.spi.QNodeTypeDefinition;
 import org.apache.jackrabbit.spi.commons.name.NameConstants;
 import org.apache.jackrabbit.spi.commons.name.NameFactoryImpl;
@@ -33,6 +35,7 @@
 import org.slf4j.LoggerFactory;
 import org.slf4j.Logger;
 
+import javax.jcr.NamespaceException;
 import javax.jcr.RepositoryException;
 import javax.jcr.PropertyType;
 import java.util.Arrays;
@@ -45,7 +48,7 @@
 /**
  * A <code>QNodeTypeDefinitionImpl</code> holds the definition of a node type.
  */
-public class QNodeTypeDefinitionImpl implements QNodeTypeDefinition, NodeTypeConstants {
+public class QNodeTypeDefinitionImpl implements QNodeTypeDefinition {
 
     private static Logger log = LoggerFactory.getLogger(QNodeTypeDefinitionImpl.class);
 
@@ -70,73 +73,63 @@
         // TODO: webdav-server currently sends jcr-names -> conversion needed
         // NOTE: the server should send the namespace-mappings as addition ns-defininitions
         try {
-        if (ntdElement.hasAttribute(NAME_ATTRIBUTE)) {
-            name = resolver.getQName(ntdElement.getAttribute(NAME_ATTRIBUTE));
-        } else {
-            name = null;
-        }
+            name = getName(ntdElement, DavConstants.NAME_ATTRIBUTE, resolver);
 
-        if (ntdElement.hasAttribute(PRIMARYITEMNAME_ATTRIBUTE)) {
-            primaryItemName = resolver.getQName(ntdElement.getAttribute(PRIMARYITEMNAME_ATTRIBUTE));
-        } else {
-            primaryItemName = null;
-        }
+            primaryItemName = getName(ntdElement, DavConstants.PRIMARYITEMNAME_ATTRIBUTE, resolver);
 
-        Element child = DomUtil.getChildElement(ntdElement, SUPERTYPES_ELEMENT, null);
-        if (child != null) {
-            ElementIterator stIter = DomUtil.getChildren(child, SUPERTYPE_ELEMENT, null);
-            List qNames = new ArrayList();
-            while (stIter.hasNext()) {
-                Name st = resolver.getQName(DomUtil.getTextTrim(stIter.nextElement()));
-                qNames.add(st);
+            Element child = DomUtil.getChildElement(ntdElement, DavConstants.SUPERTYPES_ELEMENT, null);
+            if (child != null) {
+                ElementIterator stIter = DomUtil.getChildren(child, DavConstants.SUPERTYPE_ELEMENT, null);
+                List<Name> qNames = new ArrayList<Name>();
+                while (stIter.hasNext()) {
+                    Name st = resolver.getQName(DomUtil.getTextTrim(stIter.nextElement()));
+                    qNames.add(st);
+                }
+                supertypes = (Name[]) qNames.toArray(new Name[qNames.size()]);
+            } else {
+                supertypes = Name.EMPTY_ARRAY;
             }
-            supertypes = (Name[]) qNames.toArray(new Name[qNames.size()]);
-        } else {
-            supertypes = Name.EMPTY_ARRAY;
-        }
-        if (ntdElement.hasAttribute(ISMIXIN_ATTRIBUTE)) {
-            mixin = Boolean.valueOf(ntdElement.getAttribute(ISMIXIN_ATTRIBUTE)).booleanValue();
-        } else {
-            mixin = false;
-        }
-        if (ntdElement.hasAttribute(HASORDERABLECHILDNODES_ATTRIBUTE)) {
-            orderableChildNodes = Boolean.valueOf(ntdElement.getAttribute(HASORDERABLECHILDNODES_ATTRIBUTE)).booleanValue();
-        } else {
-            orderableChildNodes = false;
-        }
-        if (ntdElement.hasAttribute(ISABSTRACT_ATTRIBUTE)) {
-            isAbstract = Boolean.valueOf(ntdElement.getAttribute(ISABSTRACT_ATTRIBUTE)).booleanValue();
-        } else {
-            isAbstract = false;
-        }
-        if (ntdElement.hasAttribute(ISQUERYABLE_ATTRIBUTE)) {
-            isQueryable = Boolean.valueOf(ntdElement.getAttribute(ISQUERYABLE_ATTRIBUTE)).booleanValue();
-        } else {
-            isQueryable = false;
-        }
 
-        // nodeDefinitions
-        ElementIterator it = DomUtil.getChildren(ntdElement, CHILDNODEDEFINITION_ELEMENT, null);
-        List itemDefs = new ArrayList();
-        while (it.hasNext()) {
-            itemDefs.add(new QNodeDefinitionImpl(name, it.nextElement(), resolver));
-        }
-        nodeDefs = (QNodeDefinition[]) itemDefs.toArray(new QNodeDefinition[itemDefs.size()]);
+            mixin = getBoolean(ntdElement, DavConstants.ISMIXIN_ATTRIBUTE);
+            orderableChildNodes = getBoolean(ntdElement, DavConstants.HASORDERABLECHILDNODES_ATTRIBUTE);
+            isAbstract = getBoolean(ntdElement, DavConstants.ISABSTRACT_ATTRIBUTE);
+            isQueryable = getBoolean(ntdElement, DavConstants.ISQUERYABLE_ATTRIBUTE);
 
+            // nodeDefinitions
+            ElementIterator it = DomUtil.getChildren(ntdElement, DavConstants.CHILDNODEDEFINITION_ELEMENT, null);
+            List<QNodeDefinition> nDefs = new ArrayList<QNodeDefinition>();
+            while (it.hasNext()) {
+                nDefs.add(new QNodeDefinitionImpl(name, it.nextElement(), resolver));
+            }
+            nodeDefs = nDefs.toArray(new QNodeDefinition[nDefs.size()]);
 
-        // propertyDefinitions
-        it = DomUtil.getChildren(ntdElement, PROPERTYDEFINITION_ELEMENT, null);
-        itemDefs = new ArrayList();
-        while (it.hasNext()) {
-            itemDefs.add(new QPropertyDefinitionImpl(name, it.nextElement(), resolver, qValueFactory));
-        }
-        propDefs = (QPropertyDefinition[]) itemDefs.toArray(new QPropertyDefinition[itemDefs.size()]);
+            // propertyDefinitions
+            it = DomUtil.getChildren(ntdElement, DavConstants.PROPERTYDEFINITION_ELEMENT, null);
+            List<QPropertyDefinition> pDefs = new ArrayList<QPropertyDefinition>();
+            while (it.hasNext()) {
+                pDefs.add(new QPropertyDefinitionImpl(name, it.nextElement(), resolver, qValueFactory));
+            }
+            propDefs = pDefs.toArray(new QPropertyDefinition[pDefs.size()]);
         } catch (NameException e) {
             log.error(e.getMessage());
             throw new RepositoryException(e);
         }
     }
 
+    protected Name getName(Element element, String name, NameResolver resolver)
+            throws IllegalNameException, NamespaceException {
+        if (element.hasAttribute(name)) {
+            return resolver.getQName(element.getAttribute(name));
+        } else {
+            return null;
+        }
+    }
+
+    protected boolean getBoolean(Element element, String name) {
+        return element.hasAttribute(name)
+            && Boolean.valueOf(element.getAttribute(name)).booleanValue();
+    }
+
     //------------------------------------------------< QNodeTypeDefinition >---
     /**
      * @see QNodeTypeDefinition#getName()
Index: jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/EventImpl.java
===================================================================
--- jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/EventImpl.java	(revision 896818)
+++ jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/EventImpl.java	(working copy)
@@ -30,6 +30,7 @@
 import org.apache.jackrabbit.webdav.observation.ObservationConstants;
 import org.apache.jackrabbit.webdav.xml.DomUtil;
 import org.apache.jackrabbit.webdav.xml.ElementIterator;
+import org.apache.jackrabbit.webdav.xml.Namespace;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Element;
@@ -56,10 +57,10 @@
         super(getSpiEventType(eventType), eventPath, eventId, parentId,
                 null, // TODO not available from XML_EVENT element
                 null, // TODO not available from XML_EVENT element
-                DomUtil.getChildTextTrim(eventElement, XML_EVENTUSERID, NAMESPACE),
-                DomUtil.getChildTextTrim(eventElement, XML_EVENTUSERDATA, NAMESPACE),
-                Long.parseLong(DomUtil.getChildTextTrim(eventElement, XML_EVENTDATE, NAMESPACE)),
-                getEventInfo(DomUtil.getChildElement(eventElement, XML_EVENTINFO, NAMESPACE), resolver, qvFactory));
+                DomUtil.getChildTextTrim(eventElement, XML_EVENTUSERID, Namespace.JCR),
+                DomUtil.getChildTextTrim(eventElement, XML_EVENTUSERDATA, Namespace.JCR),
+                Long.parseLong(DomUtil.getChildTextTrim(eventElement, XML_EVENTDATE, Namespace.JCR)),
+                getEventInfo(DomUtil.getChildElement(eventElement, XML_EVENTINFO, Namespace.JCR), resolver, qvFactory));
     }
 
     //--------------------------------------------------------------------------
Index: jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolverImpl.java
===================================================================
--- jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolverImpl.java	(revision 896818)
+++ jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolverImpl.java	(working copy)
@@ -35,12 +35,12 @@
 import org.apache.jackrabbit.webdav.client.methods.DavMethodBase;
 import org.apache.jackrabbit.webdav.client.methods.PropFindMethod;
 import org.apache.jackrabbit.webdav.client.methods.ReportMethod;
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
-import org.apache.jackrabbit.webdav.jcr.version.report.LocateByUuidReport;
+import org.apache.jackrabbit.webdav.property.DavPropertyName;
 import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
 import org.apache.jackrabbit.webdav.property.DavPropertySet;
 import org.apache.jackrabbit.webdav.version.report.ReportInfo;
 import org.apache.jackrabbit.webdav.xml.DomUtil;
+import org.apache.jackrabbit.webdav.xml.Namespace;
 import org.w3c.dom.Document;
 
 import javax.jcr.ItemNotFoundException;
@@ -60,7 +60,8 @@
 
     // TODO: to-be-fixed. uri/id-caches don't get updated
     // for each workspace a separate idUri-cache is created
-    private final Map idURICaches = new HashMap();
+    private final Map<String, IdURICache> idURICaches =
+        new HashMap<String, IdURICache>();
 
     URIResolverImpl(URI repositoryUri, RepositoryServiceImpl service, Document domFactory) {
         this.repositoryUri = repositoryUri;
@@ -91,7 +92,7 @@
     }
 
     String getRootItemUri(String workspaceName) {
-        return getWorkspaceUri(workspaceName) + Text.escapePath(ItemResourceConstants.ROOT_ITEM_RESOURCEPATH);
+        return getWorkspaceUri(workspaceName) + Text.escapePath(DavConstants.JCR_ROOT_ITEM_RESOURCEPATH);
     }
 
     String getItemUri(ItemId itemId, String workspaceName, SessionInfo sessionInfo)
@@ -114,7 +115,9 @@
                     uriBuffer.append(cache.getUri(uuidId));
                 } else {
                     // try to request locate-by-uuid report to build the uri
-                    ReportInfo rInfo = new ReportInfo(LocateByUuidReport.LOCATE_BY_UUID_REPORT);
+                    ReportInfo rInfo = new ReportInfo(
+                            DavConstants.JCR_LOCATE_BY_UUID,
+                            Namespace.JCR);
                     rInfo.setContentElement(DomUtil.hrefToXml(uniqueID, domFactory));
 
                     ReportMethod rm = null;
@@ -198,7 +201,7 @@
 
         try {
             DavPropertySet propSet = response.getProperties(DavServletResponse.SC_OK);
-            Name name = resolver.getQName(propSet.get(ItemResourceConstants.JCR_NAME).getValue().toString());
+            Name name = resolver.getQName(propSet.get(DavPropertyName.JCR_NAME).getValue().toString());
             PropertyId propertyId = service.getIdFactory().createPropertyId(parentId, name);
 
             cache.add(response.getHref(), propertyId);
@@ -270,9 +273,9 @@
         }
 
         DavPropertyNameSet nameSet = new DavPropertyNameSet();
-        nameSet.add(ItemResourceConstants.JCR_UUID);
-        nameSet.add(ItemResourceConstants.JCR_NAME);
-        nameSet.add(ItemResourceConstants.JCR_INDEX);
+        nameSet.add(DavPropertyName.JCR_UUID);
+        nameSet.add(DavPropertyName.JCR_NAME);
+        nameSet.add(DavPropertyName.JCR_INDEX);
         DavMethodBase method = null;
         try {
             method = new PropFindMethod(uri, nameSet, DavConstants.DEPTH_0);
Index: jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/QItemDefinitionImpl.java
===================================================================
--- jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/QItemDefinitionImpl.java	(revision 896818)
+++ jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/QItemDefinitionImpl.java	(working copy)
@@ -17,17 +17,20 @@
 package org.apache.jackrabbit.spi2dav;
 
 import org.w3c.dom.Element;
+import org.apache.jackrabbit.spi.commons.conversion.IllegalNameException;
 import org.apache.jackrabbit.spi.commons.conversion.NameException;
 import org.apache.jackrabbit.spi.commons.conversion.NamePathResolver;
+import org.apache.jackrabbit.spi.commons.conversion.NameResolver;
 import org.apache.jackrabbit.spi.commons.name.NameFactoryImpl;
 import org.apache.jackrabbit.spi.commons.name.NameConstants;
 import org.apache.jackrabbit.spi.QItemDefinition;
 import org.apache.jackrabbit.spi.QNodeDefinition;
 import org.apache.jackrabbit.spi.QPropertyDefinition;
 import org.apache.jackrabbit.spi.Name;
-import org.apache.jackrabbit.webdav.jcr.nodetype.NodeTypeConstants;
+import org.apache.jackrabbit.webdav.DavConstants;
 
 import javax.jcr.version.OnParentVersionAction;
+import javax.jcr.NamespaceException;
 import javax.jcr.RepositoryException;
 
 /**
@@ -35,7 +38,7 @@
  * interface and additionally provides setter methods for the
  * various item definition attributes.
  */
-public abstract class QItemDefinitionImpl implements QItemDefinition, NodeTypeConstants {
+public abstract class QItemDefinitionImpl implements QItemDefinition {
 
     /**
      * The special wildcard name used as the name of residual item definitions.
@@ -87,9 +90,8 @@
     QItemDefinitionImpl(Name declaringNodeType, Element itemDefElement, NamePathResolver resolver)
         throws RepositoryException {
         try {
-            String attr = itemDefElement.getAttribute(DECLARINGNODETYPE_ATTRIBUTE);
-            if (attr != null) {
-                Name dnt = resolver.getQName(attr);
+            Name dnt = getName(itemDefElement, DavConstants.DECLARINGNODETYPE_ATTRIBUTE, resolver);
+            if (dnt != null) {
                 if (declaringNodeType != null && !declaringNodeType.equals(dnt)) {
                     throw new RepositoryException("Declaring nodetype mismatch: In element = '" + dnt + "', Declaring nodetype = '" + declaringNodeType + "'");
                 }
@@ -98,8 +100,8 @@
                 this.declaringNodeType = declaringNodeType;
             }
 
-            if (itemDefElement.hasAttribute(NAME_ATTRIBUTE)) {
-                String nAttr = itemDefElement.getAttribute(NAME_ATTRIBUTE);
+            if (itemDefElement.hasAttribute(DavConstants.NAME_ATTRIBUTE)) {
+                String nAttr = itemDefElement.getAttribute(DavConstants.NAME_ATTRIBUTE);
                 if (nAttr.length() > 0) {
                     name = (isAnyName(nAttr)) ? ANY_NAME : resolver.getQName(nAttr);
                 } else {
@@ -113,29 +115,34 @@
             throw new RepositoryException(e);
         }
 
-        if (itemDefElement.hasAttribute(AUTOCREATED_ATTRIBUTE)) {
-            autoCreated = Boolean.valueOf(itemDefElement.getAttribute(AUTOCREATED_ATTRIBUTE)).booleanValue();
+        autoCreated =
+            getBoolean(itemDefElement, DavConstants.AUTOCREATED_ATTRIBUTE);
+        mandatory =
+            getBoolean(itemDefElement, DavConstants.MANDATORY_ATTRIBUTE);
+        writeProtected =
+            getBoolean(itemDefElement, DavConstants.PROTECTED_ATTRIBUTE);
+
+        if (itemDefElement.hasAttribute(DavConstants.ONPARENTVERSION_ATTRIBUTE)) {
+            onParentVersion = OnParentVersionAction.valueFromName(itemDefElement.getAttribute(DavConstants.ONPARENTVERSION_ATTRIBUTE));
         } else {
-            autoCreated = false;
+            onParentVersion = OnParentVersionAction.COPY;
         }
-        if (itemDefElement.hasAttribute(MANDATORY_ATTRIBUTE)) {
-            mandatory = Boolean.valueOf(itemDefElement.getAttribute(MANDATORY_ATTRIBUTE)).booleanValue();
-        } else {
-            mandatory = false;
-        }
-        if (itemDefElement.hasAttribute(PROTECTED_ATTRIBUTE)) {
-            writeProtected = Boolean.valueOf(itemDefElement.getAttribute(PROTECTED_ATTRIBUTE)).booleanValue();
-        } else {
-            writeProtected = false;
-        }
+    }
 
-        if (itemDefElement.hasAttribute(ONPARENTVERSION_ATTRIBUTE)) {
-            onParentVersion = OnParentVersionAction.valueFromName(itemDefElement.getAttribute(ONPARENTVERSION_ATTRIBUTE));
+    protected Name getName(Element element, String name, NameResolver resolver)
+            throws IllegalNameException, NamespaceException {
+        if (element.hasAttribute(name)) {
+            return resolver.getQName(element.getAttribute(name));
         } else {
-            onParentVersion = OnParentVersionAction.COPY;
+            return null;
         }
     }
 
+    protected boolean getBoolean(Element element, String name) {
+        return element.hasAttribute(name)
+            && Boolean.valueOf(element.getAttribute(name)).booleanValue();
+    }
+
     //--------------------------------------------------------------< QItemDefinition >
     /**
      * {@inheritDoc}
Index: jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/QueryResultRowImpl.java
===================================================================
--- jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/QueryResultRowImpl.java	(revision 896818)
+++ jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/QueryResultRowImpl.java	(working copy)
@@ -32,11 +32,12 @@
 import org.apache.jackrabbit.spi.commons.value.ValueFormat;
 import org.apache.jackrabbit.spi.commons.conversion.NamePathResolver;
 import org.apache.jackrabbit.spi.commons.name.NameConstants;
+import org.apache.jackrabbit.spi2dav.server.SearchResultProperty;
+import org.apache.jackrabbit.webdav.property.DavPropertyName;
 import org.apache.jackrabbit.webdav.property.DavPropertySet;
 import org.apache.jackrabbit.webdav.property.DavProperty;
 import org.apache.jackrabbit.webdav.DavServletResponse;
 import org.apache.jackrabbit.webdav.MultiStatusResponse;
-import org.apache.jackrabbit.webdav.jcr.search.SearchResultProperty;
 import org.slf4j.LoggerFactory;
 import org.slf4j.Logger;
 
@@ -70,7 +71,7 @@
 
         String jcrPath = resolver.getJCRName(NameConstants.JCR_PATH);
         String jcrScore = resolver.getJCRName(NameConstants.JCR_SCORE);
-        DavProperty davProp = okSet.get(SearchResultProperty.SEARCH_RESULT_PROPERTY);
+        DavProperty davProp = okSet.get(DavPropertyName.JCR_SEARCH_RESULT_PROPERTY);
         SearchResultProperty resultProp = new SearchResultProperty(davProp, valueFactory);
         Value[] values = resultProp.getValues();
         String[] names = resultProp.getColumnNames();
Index: jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/PropertyInfoImpl.java
===================================================================
--- jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/PropertyInfoImpl.java	(revision 896818)
+++ jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/PropertyInfoImpl.java	(working copy)
@@ -24,9 +24,9 @@
 import org.apache.jackrabbit.spi.commons.conversion.NameException;
 import org.apache.jackrabbit.spi.commons.conversion.NamePathResolver;
 import org.apache.jackrabbit.spi.commons.value.ValueFormat;
+import org.apache.jackrabbit.spi2dav.server.ValuesProperty;
 import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
-import org.apache.jackrabbit.webdav.jcr.property.ValuesProperty;
+import org.apache.jackrabbit.webdav.property.DavPropertyName;
 import org.apache.jackrabbit.webdav.property.DavPropertySet;
 
 import javax.jcr.PropertyType;
@@ -65,12 +65,12 @@
         this.id = id;
 
         // retrieve properties
-        String typeName = propSet.get(ItemResourceConstants.JCR_TYPE).getValue().toString();
+        String typeName = propSet.get(DavPropertyName.JCR_TYPE).getValue().toString();
         type = PropertyType.valueFromName(typeName);
 
         // values from jcr-server must be converted to SPI values.
-        if (propSet.contains(ItemResourceConstants.JCR_VALUE)) {
-            ValuesProperty vp = new ValuesProperty(propSet.get(ItemResourceConstants.JCR_VALUE), type, valueFactory);
+        if (propSet.contains(DavPropertyName.JCR_VALUE)) {
+            ValuesProperty vp = new ValuesProperty(propSet.get(DavPropertyName.JCR_VALUE), type, valueFactory);
             Value jcrValue = vp.getJcrValue(type, valueFactory);
             if (jcrValue == null) {
                 // TODO: should never occur. since 'null' single values are not allowed. rather throw?
@@ -86,7 +86,7 @@
             }
         } else {
             isMultiValued = true;
-            ValuesProperty vp = new ValuesProperty(propSet.get(ItemResourceConstants.JCR_VALUES), type, valueFactory);
+            ValuesProperty vp = new ValuesProperty(propSet.get(DavPropertyName.JCR_VALUES), type, valueFactory);
             Value[] jcrValues = vp.getJcrValues(type, valueFactory);
             values = new QValue[jcrValues.length];
             for (int i = 0; i < jcrValues.length; i++) {
Index: jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java
===================================================================
--- jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java	(revision 896818)
+++ jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java	(working copy)
@@ -67,11 +67,16 @@
 import org.apache.jackrabbit.spi.commons.conversion.PathResolver;
 import org.apache.jackrabbit.spi.commons.conversion.IdentifierResolver;
 import org.apache.jackrabbit.spi.commons.name.NameConstants;
-import org.apache.jackrabbit.spi.commons.namespace.AbstractNamespaceResolver;
 import org.apache.jackrabbit.spi.commons.namespace.NamespaceResolver;
+import org.apache.jackrabbit.spi.commons.namespace.AbstractNamespaceResolver;
 import org.apache.jackrabbit.spi.commons.value.QValueValue;
 import org.apache.jackrabbit.spi.commons.value.ValueFactoryQImpl;
 import org.apache.jackrabbit.spi.commons.value.ValueFormat;
+import org.apache.jackrabbit.spi2dav.server.JcrValueType;
+import org.apache.jackrabbit.spi2dav.server.NamespacesProperty;
+import org.apache.jackrabbit.spi2dav.server.NodeTypeProperty;
+import org.apache.jackrabbit.spi2dav.server.SubscriptionImpl;
+import org.apache.jackrabbit.spi2dav.server.ValuesProperty;
 import org.apache.jackrabbit.util.Text;
 import org.apache.jackrabbit.webdav.DavConstants;
 import org.apache.jackrabbit.webdav.DavException;
@@ -104,17 +109,6 @@
 import org.apache.jackrabbit.webdav.client.methods.UpdateMethod;
 import org.apache.jackrabbit.webdav.header.CodedUrlHeader;
 import org.apache.jackrabbit.webdav.header.IfHeader;
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
-import org.apache.jackrabbit.webdav.jcr.JcrValueType;
-import org.apache.jackrabbit.webdav.jcr.nodetype.NodeTypeConstants;
-import org.apache.jackrabbit.webdav.jcr.nodetype.NodeTypeProperty;
-import org.apache.jackrabbit.webdav.jcr.observation.SubscriptionImpl;
-import org.apache.jackrabbit.webdav.jcr.property.NamespacesProperty;
-import org.apache.jackrabbit.webdav.jcr.property.ValuesProperty;
-import org.apache.jackrabbit.webdav.jcr.version.report.JcrPrivilegeReport;
-import org.apache.jackrabbit.webdav.jcr.version.report.NodeTypesReport;
-import org.apache.jackrabbit.webdav.jcr.version.report.RegisteredNamespacesReport;
-import org.apache.jackrabbit.webdav.jcr.version.report.RepositoryDescriptorsReport;
 import org.apache.jackrabbit.webdav.lock.ActiveLock;
 import org.apache.jackrabbit.webdav.lock.LockDiscovery;
 import org.apache.jackrabbit.webdav.lock.Scope;
@@ -399,8 +393,8 @@
     private NodeId getParentId(DavPropertySet propSet, SessionInfo sessionInfo)
         throws RepositoryException {
         NodeId parentId = null;
-        if (propSet.contains(ItemResourceConstants.JCR_PARENT)) {
-            HrefProperty parentProp = new HrefProperty(propSet.get(ItemResourceConstants.JCR_PARENT));
+        if (propSet.contains(DavPropertyName.JCR_PARENT)) {
+            HrefProperty parentProp = new HrefProperty(propSet.get(DavPropertyName.JCR_PARENT));
             String parentHref = parentProp.getHrefs().get(0).toString();
             if (parentHref != null && parentHref.length() > 0) {
                 parentId = uriResolver.getNodeId(parentHref, sessionInfo);
@@ -410,15 +404,15 @@
     }
 
     String getUniqueID(DavPropertySet propSet) {
-        if (propSet.contains(ItemResourceConstants.JCR_UUID)) {
-            return propSet.get(ItemResourceConstants.JCR_UUID).getValue().toString();
+        if (propSet.contains(DavPropertyName.JCR_UUID)) {
+            return propSet.get(DavPropertyName.JCR_UUID).getValue().toString();
         } else {
             return null;
         }
     }
 
     Name getQName(DavPropertySet propSet, NamePathResolver resolver) throws RepositoryException {
-        DavProperty nameProp = propSet.get(ItemResourceConstants.JCR_NAME);
+        DavProperty nameProp = propSet.get(DavPropertyName.JCR_NAME);
         if (nameProp != null && nameProp.getValue() != null) {
             // not root node. Note that 'unespacing' is not required since
             // the jcr:name property does not provide the value in escaped form.
@@ -435,7 +429,7 @@
 
     int getIndex(DavPropertySet propSet) {
         int index = Path.INDEX_UNDEFINED;
-        DavProperty indexProp = propSet.get(ItemResourceConstants.JCR_INDEX);
+        DavProperty indexProp = propSet.get(DavPropertyName.JCR_INDEX);
         if (indexProp != null && indexProp.getValue() != null) {
             index = Integer.parseInt(indexProp.getValue().toString());
         }
@@ -499,7 +493,9 @@
      */
     public Map<String, QValue[]> getRepositoryDescriptors() throws RepositoryException {
         if (descriptors == null) {
-            ReportInfo info = new ReportInfo(RepositoryDescriptorsReport.REPOSITORY_DESCRIPTORS_REPORT, DEPTH_0);
+            ReportInfo info = new ReportInfo(
+                    DavConstants.JCR_REPOSITORYDESCRIPTORS,
+                    Namespace.JCR);
             ReportMethod method = null;
             try {
                 method = new ReportMethod(uriResolver.getRepositoryUri(), info);
@@ -510,17 +506,17 @@
                 descriptors = new HashMap();
                 if (doc != null) {
                     Element rootElement = doc.getDocumentElement();
-                    ElementIterator nsElems = DomUtil.getChildren(rootElement, ItemResourceConstants.XML_DESCRIPTOR, ItemResourceConstants.NAMESPACE);
+                    ElementIterator nsElems = DomUtil.getChildren(rootElement, DavConstants.XML_DESCRIPTOR, Namespace.JCR);
                     while (nsElems.hasNext()) {
                         Element elem = nsElems.nextElement();
-                        String key = DomUtil.getChildText(elem, ItemResourceConstants.XML_DESCRIPTORKEY, ItemResourceConstants.NAMESPACE);
-                        ElementIterator it = DomUtil.getChildren(elem, ItemResourceConstants.XML_DESCRIPTORVALUE, ItemResourceConstants.NAMESPACE);
+                        String key = DomUtil.getChildText(elem, DavConstants.XML_DESCRIPTORKEY, Namespace.JCR);
+                        ElementIterator it = DomUtil.getChildren(elem, DavConstants.XML_DESCRIPTORVALUE, Namespace.JCR);
                         List<QValue> vs = new ArrayList();
                         while (it.hasNext()) {
                             Element dv = it.nextElement();
                             String descriptor = DomUtil.getText(dv);
                             if (key != null && descriptor != null) {
-                                String typeStr = (DomUtil.getAttribute(dv, ItemResourceConstants.ATTR_VALUE_TYPE, null));
+                                String typeStr = (DomUtil.getAttribute(dv, DavConstants.ATTR_VALUE_TYPE, null));
                                 int type = (typeStr == null) ? PropertyType.STRING : PropertyType.valueFromName(typeStr);
                                 vs.add(getQValueFactory().create(descriptor, type));
                             } else {
@@ -573,7 +569,7 @@
             // for backwards compat. -> retrieve DAV:workspace if the newly
             // added property (workspaceName) is not supported by the server.
             nameSet.add(DeltaVConstants.WORKSPACE);
-            nameSet.add(ItemResourceConstants.JCR_WORKSPACE_NAME);
+            nameSet.add(DavPropertyName.JCR_WORKSPACE_NAME);
 
             method = new PropFindMethod(uriResolver.getWorkspaceUri(workspaceName), nameSet, DEPTH_0);
             getClient(sessionInfo).executeMethod(method);
@@ -584,8 +580,8 @@
             }
 
             DavPropertySet props = responses[0].getProperties(DavServletResponse.SC_OK);
-            if (props.contains(ItemResourceConstants.JCR_WORKSPACE_NAME)) {
-                String wspName = props.get(ItemResourceConstants.JCR_WORKSPACE_NAME).getValue().toString();
+            if (props.contains(DavPropertyName.JCR_WORKSPACE_NAME)) {
+                String wspName = props.get(DavPropertyName.JCR_WORKSPACE_NAME).getValue().toString();
                 if (workspaceName == null) {
                     // login with 'null' workspace name -> retrieve the effective
                     // workspace name from the property and recreate the SessionInfo.
@@ -672,7 +668,8 @@
         ReportMethod method = null;
         try {
             String uri = getItemUri(itemId, sessionInfo);
-            ReportInfo reportInfo = new ReportInfo(JcrPrivilegeReport.PRIVILEGES_REPORT);
+            ReportInfo reportInfo = new ReportInfo(
+                    DavConstants.JCR_PRIVILEGES, Namespace.JCR);
             reportInfo.setContentElement(DomUtil.hrefToXml(uri, domFactory));
 
             method = new ReportMethod(uriResolver.getWorkspaceUri(sessionInfo.getWorkspaceName()), reportInfo);
@@ -692,7 +689,7 @@
             // is used.
             Set requiredPrivileges = new HashSet();
             for (int i = 0; i < actions.length; i++) {
-               requiredPrivileges.add(Privilege.getPrivilege(actions[i], ItemResourceConstants.NAMESPACE));
+               requiredPrivileges.add(Privilege.getPrivilege(actions[i], Namespace.JCR));
             }
             // build set of privileges granted to the current user.
             CurrentUserPrivilegeSetProperty privSet = new CurrentUserPrivilegeSetProperty(p);
@@ -735,7 +732,7 @@
     private QItemDefinition getItemDefinition(SessionInfo sessionInfo, ItemId itemId) throws RepositoryException {
         // set of properties to be retrieved
         DavPropertyNameSet nameSet = new DavPropertyNameSet();
-        nameSet.add(ItemResourceConstants.JCR_DEFINITION);
+        nameSet.add(DavPropertyName.JCR_DEFINITION);
         nameSet.add(DavPropertyName.RESOURCETYPE);
 
         DavMethodBase method = null;
@@ -763,8 +760,8 @@
 
             // build the definition
             QItemDefinition definition = null;
-            if (propertySet.contains(ItemResourceConstants.JCR_DEFINITION)) {
-                DavProperty prop = propertySet.get(ItemResourceConstants.JCR_DEFINITION);
+            if (propertySet.contains(DavPropertyName.JCR_DEFINITION)) {
+                DavProperty prop = propertySet.get(DavPropertyName.JCR_DEFINITION);
                 Object value = prop.getValue();
                 if (value != null && value instanceof Element) {
                     Element idfElem = (Element) value;
@@ -796,14 +793,14 @@
     public NodeInfo getNodeInfo(SessionInfo sessionInfo, NodeId nodeId) throws RepositoryException {
         // set of properties to be retrieved
         DavPropertyNameSet nameSet = new DavPropertyNameSet();
-        nameSet.add(ItemResourceConstants.JCR_INDEX);
-        nameSet.add(ItemResourceConstants.JCR_PARENT);
-        nameSet.add(ItemResourceConstants.JCR_NAME);
-        nameSet.add(ItemResourceConstants.JCR_PRIMARYNODETYPE);
-        nameSet.add(ItemResourceConstants.JCR_MIXINNODETYPES);
-        nameSet.add(ItemResourceConstants.JCR_REFERENCES);
-        nameSet.add(ItemResourceConstants.JCR_UUID);
-        nameSet.add(ItemResourceConstants.JCR_PATH);
+        nameSet.add(DavPropertyName.JCR_INDEX);
+        nameSet.add(DavPropertyName.JCR_PARENT);
+        nameSet.add(DavPropertyName.JCR_NAME);
+        nameSet.add(DavPropertyName.JCR_PRIMARYNODETYPE);
+        nameSet.add(DavPropertyName.JCR_MIXINNODETYPES);
+        nameSet.add(DavPropertyName.JCR_REFERENCES);
+        nameSet.add(DavPropertyName.JCR_UUID);
+        nameSet.add(DavPropertyName.JCR_PATH);
         nameSet.add(DavPropertyName.RESOURCETYPE);
 
         DavMethodBase method = null;
@@ -893,8 +890,8 @@
                                        NamePathResolver resolver) throws NameException, RepositoryException {
         NodeId id = uriResolver.buildNodeId(parentId, nodeResponse, sessionInfo.getWorkspaceName(), getNamePathResolver(sessionInfo));
         NodeInfoImpl nInfo = new NodeInfoImpl(id, propSet, resolver);
-        if (propSet.contains(ItemResourceConstants.JCR_REFERENCES)) {
-            HrefProperty refProp = new HrefProperty(propSet.get(ItemResourceConstants.JCR_REFERENCES));
+        if (propSet.contains(DavPropertyName.JCR_REFERENCES)) {
+            HrefProperty refProp = new HrefProperty(propSet.get(DavPropertyName.JCR_REFERENCES));
             Iterator hrefIter = refProp.getHrefs().iterator();
             while(hrefIter.hasNext()) {
                 String propertyHref = hrefIter.next().toString();
@@ -946,10 +943,10 @@
     public Iterator getChildInfos(SessionInfo sessionInfo, NodeId parentId) throws RepositoryException {
         // set of properties to be retrieved
         DavPropertyNameSet nameSet = new DavPropertyNameSet();
-        nameSet.add(ItemResourceConstants.JCR_NAME);
-        nameSet.add(ItemResourceConstants.JCR_INDEX);
-        nameSet.add(ItemResourceConstants.JCR_PARENT);
-        nameSet.add(ItemResourceConstants.JCR_UUID);
+        nameSet.add(DavPropertyName.JCR_NAME);
+        nameSet.add(DavPropertyName.JCR_INDEX);
+        nameSet.add(DavPropertyName.JCR_PARENT);
+        nameSet.add(DavPropertyName.JCR_UUID);
         nameSet.add(DavPropertyName.RESOURCETYPE);
 
         DavMethodBase method = null;
@@ -1005,9 +1002,9 @@
         // set of properties to be retrieved
         DavPropertyNameSet nameSet = new DavPropertyNameSet();
         if (weakReferences) {
-            nameSet.add(ItemResourceConstants.JCR_WEAK_REFERENCES);
+            nameSet.add(DavPropertyName.JCR_WEAK_REFERENCES);
         } else {
-            nameSet.add(ItemResourceConstants.JCR_REFERENCES);
+            nameSet.add(DavPropertyName.JCR_REFERENCES);
         }
 
         DavMethodBase method = null;
@@ -1029,9 +1026,9 @@
                     DavPropertySet props = resp.getProperties(DavServletResponse.SC_OK);
                     DavProperty p;
                     if (weakReferences) {
-                        p = props.get(ItemResourceConstants.JCR_WEAK_REFERENCES);
+                        p = props.get(DavPropertyName.JCR_WEAK_REFERENCES);
                     } else {
-                        p = props.get(ItemResourceConstants.JCR_REFERENCES);
+                        p = props.get(DavPropertyName.JCR_REFERENCES);
                     }
 
                     if (p == null) {
@@ -1136,7 +1133,7 @@
         try {
             DocumentBuilder db = DomUtil.BUILDER_FACTORY.newDocumentBuilder();
             Document doc = db.parse(response);
-            Element prop = DomUtil.getChildElement(doc, ItemResourceConstants.JCR_VALUES.getName(), ItemResourceConstants.JCR_VALUES.getNamespace());
+            Element prop = DomUtil.getChildElement(doc, DavPropertyName.JCR_VALUES.getName(), DavPropertyName.JCR_VALUES.getNamespace());
             if (prop == null) {
                 // no jcr-values present in the response body -> apparently
                 // not representation of a jcr-property
@@ -1176,7 +1173,7 @@
 
     private int loadType(String propertyURI, HttpClient client, PropertyId propertyId, NamePathResolver resolver) throws IOException, DavException, RepositoryException {
         DavPropertyNameSet nameSet = new DavPropertyNameSet();
-        nameSet.add(ItemResourceConstants.JCR_TYPE);
+        nameSet.add(DavPropertyName.JCR_TYPE);
 
         DavMethodBase method = null;
         try {
@@ -1187,7 +1184,7 @@
             MultiStatusResponse[] responses = method.getResponseBodyAsMultiStatus().getResponses();
             if (responses.length == 1) {
                 DavPropertySet props = responses[0].getProperties(DavServletResponse.SC_OK);
-                DavProperty type = props.get(ItemResourceConstants.JCR_TYPE);
+                DavProperty type = props.get(DavPropertyName.JCR_TYPE);
                 if (type != null) {
                     return PropertyType.valueFromName(type.getValue().toString());
                 } else {
@@ -1261,7 +1258,7 @@
         Name nodeName = getNameFactory().create(Name.NS_DEFAULT_URI, UUID.randomUUID().toString());
         String uri = getItemUri(parentId, nodeName, sessionInfo);
         MkColMethod method = new MkColMethod(uri);
-        method.addRequestHeader(ItemResourceConstants.IMPORT_UUID_BEHAVIOR, new Integer(uuidBehaviour).toString());
+        method.addRequestHeader(DavConstants.IMPORT_UUID_BEHAVIOR, new Integer(uuidBehaviour).toString());
         method.setRequestEntity(new InputStreamRequestEntity(xmlStream, "text/xml"));
         execute(method, sessionInfo);
     }
@@ -1311,7 +1308,7 @@
         // set of Dav-properties to be retrieved
         DavPropertyNameSet nameSet = new DavPropertyNameSet();
         nameSet.add(DavPropertyName.LOCKDISCOVERY);
-        nameSet.add(ItemResourceConstants.JCR_PARENT);
+        nameSet.add(DavPropertyName.JCR_PARENT);
 
         PropFindMethod method = null;
         try {
@@ -1368,7 +1365,7 @@
             String ownerInfo = (ownerHint == null) ? sessionInfo.getUserID() : ownerHint;
 
             String uri = getItemUri(nodeId, sessionInfo);
-            Scope scope = (sessionScoped) ? ItemResourceConstants.EXCLUSIVE_SESSION : Scope.EXCLUSIVE;
+            Scope scope = (sessionScoped) ? Scope.JCR_EXCLUSIVE_SESSION : Scope.EXCLUSIVE;
             LockMethod method = new LockMethod(uri, scope, Type.WRITE, ownerInfo, davTimeout , deep);
             execute(method, sessionInfo);
 
@@ -1427,7 +1424,7 @@
         while (it.hasNext()) {
             ActiveLock l = (ActiveLock) it.next();
             Scope sc = l.getScope();
-            if (l.getType() == Type.WRITE && (sc == Scope.EXCLUSIVE || sc == ItemResourceConstants.EXCLUSIVE_SESSION)) {
+            if (l.getType() == Type.WRITE && (sc == Scope.EXCLUSIVE || sc == Scope.JCR_EXCLUSIVE_SESSION)) {
                 if (activeLock != null) {
                     throw new RepositoryException("Node " + saveGetIdString(nodeId, sessionInfo) + " contains multiple exclusive write locks.");
                 } else {
@@ -1524,7 +1521,7 @@
             UpdateInfo uInfo;
             if (removeExisting) {
                 Element uElem = UpdateInfo.createUpdateElement(updateSource, updateType, domFactory);
-                DomUtil.addChildElement(uElem, ItemResourceConstants.XML_REMOVEEXISTING, ItemResourceConstants.NAMESPACE);
+                DomUtil.addChildElement(uElem, DavConstants.XML_REMOVEEXISTING, Namespace.JCR);
                 uInfo = new UpdateInfo(uElem);
             } else {
                 uInfo = new UpdateInfo(updateSource, updateType, new DavPropertyNameSet());
@@ -1895,13 +1892,13 @@
                 Element discEl = disc.toXml(domFactory);
                 ElementIterator it = DomUtil.getChildren(discEl,
                         ObservationConstants.XML_EVENTBUNDLE,
-                        ObservationConstants.NAMESPACE);
+                        Namespace.JCR);
                 List bundles = new ArrayList();
                 while (it.hasNext()) {
                     Element bundleElement = it.nextElement();
                     String value = DomUtil.getAttribute(bundleElement,
                             ObservationConstants.XML_EVENT_TRANSACTION_ID,
-                            ObservationConstants.NAMESPACE);
+                            Namespace.JCR);
                     // check if it matches a batch id recently submitted
                     boolean isLocal = false;
                     if (value != null) {
@@ -1927,10 +1924,10 @@
 
     private List buildEventList(Element bundleElement, SessionInfoImpl sessionInfo) {
         List events = new ArrayList();
-        ElementIterator eventElementIterator = DomUtil.getChildren(bundleElement, ObservationConstants.XML_EVENT, ObservationConstants.NAMESPACE);
+        ElementIterator eventElementIterator = DomUtil.getChildren(bundleElement, ObservationConstants.XML_EVENT, Namespace.JCR);
         while (eventElementIterator.hasNext()) {
             Element evElem = eventElementIterator.nextElement();
-            Element typeEl = DomUtil.getChildElement(evElem, ObservationConstants.XML_EVENTTYPE, ObservationConstants.NAMESPACE);
+            Element typeEl = DomUtil.getChildElement(evElem, ObservationConstants.XML_EVENTTYPE, Namespace.JCR);
             EventType[] et = DefaultEventType.createFromXml(typeEl);
             if (et.length == 0 || et.length > 1) {
                 // should not occur.
@@ -1984,7 +1981,8 @@
      * @see RepositoryService#getRegisteredNamespaces(SessionInfo)
      */
     public Map getRegisteredNamespaces(SessionInfo sessionInfo) throws RepositoryException {
-        ReportInfo info = new ReportInfo(RegisteredNamespacesReport.REGISTERED_NAMESPACES_REPORT, DEPTH_0);
+        ReportInfo info = new ReportInfo(
+                DavConstants.JCR_REGISTEREDNAMESPACES, Namespace.JCR);
         ReportMethod method = null;
         try {
             method = new ReportMethod(uriResolver.getWorkspaceUri(sessionInfo.getWorkspaceName()), info);
@@ -1995,11 +1993,11 @@
             Map namespaces = new HashMap();
             if (doc != null) {
                 Element rootElement = doc.getDocumentElement();
-                ElementIterator nsElems = DomUtil.getChildren(rootElement, ItemResourceConstants.XML_NAMESPACE, ItemResourceConstants.NAMESPACE);
+                ElementIterator nsElems = DomUtil.getChildren(rootElement, DavConstants.XML_NAMESPACE, Namespace.JCR);
                 while (nsElems.hasNext()) {
                     Element elem = nsElems.nextElement();
-                    String prefix = DomUtil.getChildText(elem, ItemResourceConstants.XML_PREFIX, ItemResourceConstants.NAMESPACE);
-                    String uri = DomUtil.getChildText(elem, ItemResourceConstants.XML_URI, ItemResourceConstants.NAMESPACE);
+                    String prefix = DomUtil.getChildText(elem, DavConstants.XML_PREFIX, Namespace.JCR);
+                    String uri = DomUtil.getChildText(elem, DavConstants.XML_URI, Namespace.JCR);
                     // default namespace
                     if (prefix == null && uri == null) {
                         prefix = uri = "";
@@ -2125,8 +2123,8 @@
      * @see RepositoryService#getQNodeTypeDefinitions(SessionInfo)
      */
     public Iterator getQNodeTypeDefinitions(SessionInfo sessionInfo) throws RepositoryException {
-        ReportInfo info = new ReportInfo(NodeTypesReport.NODETYPES_REPORT, DEPTH_0);
-        info.setContentElement(DomUtil.createElement(domFactory, NodeTypeConstants.XML_REPORT_ALLNODETYPES, NodeTypeConstants.NAMESPACE));
+        ReportInfo info = new ReportInfo(DavConstants.JCR_NODETYPES, Namespace.JCR);
+        info.setContentElement(DomUtil.createElement(domFactory, DavConstants.XML_REPORT_ALLNODETYPES, Namespace.JCR));
 
         ReportMethod method = null;
         try {
@@ -2197,7 +2195,7 @@
      * @throws RepositoryException
      */
     private Iterator retrieveQNodeTypeDefinitions(SessionInfo sessionInfo, Document reportDoc) throws RepositoryException {
-        ElementIterator it = DomUtil.getChildren(reportDoc.getDocumentElement(), NodeTypeConstants.NODETYPE_ELEMENT, null);
+        ElementIterator it = DomUtil.getChildren(reportDoc.getDocumentElement(), DavConstants.NODETYPE_ELEMENT, null);
             List ntDefs = new ArrayList();
             NamePathResolver resolver = getNamePathResolver(sessionInfo);
             while (it.hasNext()) {
@@ -2521,14 +2519,14 @@
                 if (mixinNodeTypeIds == null || mixinNodeTypeIds.length == 0) {
                     setProperties = new DavPropertySet();
                     removeProperties = new DavPropertyNameSet();
-                    removeProperties.add(ItemResourceConstants.JCR_MIXINNODETYPES);
+                    removeProperties.add(DavPropertyName.JCR_MIXINNODETYPES);
                 } else {
                     String[] ntNames = new String[mixinNodeTypeIds.length];
                     for (int i = 0; i < mixinNodeTypeIds.length; i++) {
                         ntNames[i] = resolver.getJCRName(mixinNodeTypeIds[i]);
                     }
                     setProperties = new DavPropertySet();
-                    setProperties.add(new NodeTypeProperty(ItemResourceConstants.JCR_MIXINNODETYPES, ntNames, false));
+                    setProperties.add(new NodeTypeProperty(DavPropertyName.JCR_MIXINNODETYPES, ntNames, false));
                     removeProperties = new DavPropertyNameSet();
                 }
 
@@ -2548,7 +2546,7 @@
             checkConsumed();
             try {
                 DavPropertySet setProperties = new DavPropertySet();
-                setProperties.add(new NodeTypeProperty(ItemResourceConstants.JCR_PRIMARYNODETYPE, new String[] {resolver.getJCRName(primaryNodeTypeName)}, false));
+                setProperties.add(new NodeTypeProperty(DavPropertyName.JCR_PRIMARYNODETYPE, new String[] {resolver.getJCRName(primaryNodeTypeName)}, false));
 
                 String uri = getItemUri(nodeId, sessionInfo);
                 PropPatchMethod method = new PropPatchMethod(uri, setProperties, new DavPropertyNameSet());
Index: jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/NodeInfoImpl.java
===================================================================
--- jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/NodeInfoImpl.java	(revision 896818)
+++ jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/NodeInfoImpl.java	(working copy)
@@ -16,12 +16,12 @@
  */
 package org.apache.jackrabbit.spi2dav;
 
-import org.apache.jackrabbit.webdav.jcr.nodetype.NodeTypeProperty;
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
+import org.apache.jackrabbit.webdav.property.DavPropertyName;
 import org.apache.jackrabbit.webdav.property.DavPropertySet;
 import org.apache.jackrabbit.webdav.property.DavProperty;
 import org.apache.jackrabbit.spi.commons.conversion.NameException;
 import org.apache.jackrabbit.spi.commons.conversion.NamePathResolver;
+import org.apache.jackrabbit.spi2dav.server.NodeTypeProperty;
 import org.apache.jackrabbit.spi.NodeInfo;
 import org.apache.jackrabbit.spi.NodeId;
 import org.apache.jackrabbit.spi.PropertyId;
@@ -61,7 +61,7 @@
         // set id
         this.id = id;
 
-        DavProperty indexProp = propSet.get(ItemResourceConstants.JCR_INDEX);
+        DavProperty indexProp = propSet.get(DavPropertyName.JCR_INDEX);
         if (indexProp != null && indexProp.getValue() != null) {
             index = Integer.parseInt(indexProp.getValue().toString());
         } else {
@@ -70,8 +70,8 @@
 
         // retrieve properties
         try {
-            if (propSet.contains(ItemResourceConstants.JCR_PRIMARYNODETYPE)) {
-                Iterator it = new NodeTypeProperty(propSet.get(ItemResourceConstants.JCR_PRIMARYNODETYPE)).getNodeTypeNames().iterator();
+            if (propSet.contains(DavPropertyName.JCR_PRIMARYNODETYPE)) {
+                Iterator it = new NodeTypeProperty(propSet.get(DavPropertyName.JCR_PRIMARYNODETYPE)).getNodeTypeNames().iterator();
                 if (it.hasNext()) {
                     String jcrName = it.next().toString();
                     primaryNodeTypeName = resolver.getQName(jcrName);
@@ -81,8 +81,8 @@
             } else {
                 throw new RepositoryException("Missing primary nodetype for node " + id);
             }
-            if (propSet.contains(ItemResourceConstants.JCR_MIXINNODETYPES)) {
-                Set mixinNames = new NodeTypeProperty(propSet.get(ItemResourceConstants.JCR_MIXINNODETYPES)).getNodeTypeNames();
+            if (propSet.contains(DavPropertyName.JCR_MIXINNODETYPES)) {
+                Set mixinNames = new NodeTypeProperty(propSet.get(DavPropertyName.JCR_MIXINNODETYPES)).getNodeTypeNames();
                 mixinNodeTypeNames = new Name[mixinNames.size()];
                 Iterator it = mixinNames.iterator();
                 int i = 0;
Index: jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/LockInfoImpl.java
===================================================================
--- jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/LockInfoImpl.java	(revision 896818)
+++ jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/LockInfoImpl.java	(working copy)
@@ -16,7 +16,7 @@
 package org.apache.jackrabbit.spi2dav;
 
 import org.apache.jackrabbit.webdav.lock.ActiveLock;
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
+import org.apache.jackrabbit.webdav.lock.Scope;
 import org.apache.jackrabbit.webdav.DavConstants;
 import org.apache.jackrabbit.spi.LockInfo;
 import org.apache.jackrabbit.spi.NodeId;
@@ -56,7 +56,7 @@
     }
 
     public boolean isSessionScoped() {
-        return activeLock.getScope() == ItemResourceConstants.EXCLUSIVE_SESSION;
+        return activeLock.getScope() == Scope.JCR_EXCLUSIVE_SESSION;
     }
 
     public long getSecondsRemaining() {
Index: jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/server/NamespacesProperty.java
===================================================================
--- jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/server/NamespacesProperty.java	(revision 0)
+++ jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/server/NamespacesProperty.java	(revision 0)
@@ -0,0 +1,112 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.spi2dav.server;
+
+import org.apache.jackrabbit.webdav.DavException;
+import org.apache.jackrabbit.webdav.DavServletResponse;
+import org.apache.jackrabbit.webdav.property.AbstractDavProperty;
+import org.apache.jackrabbit.webdav.property.DavProperty;
+import org.apache.jackrabbit.webdav.property.DavPropertyName;
+import org.apache.jackrabbit.webdav.xml.DomUtil;
+import org.apache.jackrabbit.webdav.xml.Namespace;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import javax.jcr.NamespaceRegistry;
+import javax.jcr.RepositoryException;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Collections;
+
+/**
+ * <code>NamespacesProperty</code>...
+ */
+public class NamespacesProperty extends AbstractDavProperty {
+
+    private static Logger log = LoggerFactory.getLogger(NamespacesProperty.class);
+
+    private final Map value = new HashMap();
+
+    public NamespacesProperty(NamespaceRegistry nsReg) throws RepositoryException {
+        super(DavPropertyName.JCR_NAMESPACES, false);
+        if (nsReg != null) {
+            String[] prefixes = nsReg.getPrefixes();
+            for (int i = 0; i < prefixes.length; i++) {
+                value.put(prefixes[i], nsReg.getURI(prefixes[i]));
+            }
+        }
+    }
+
+    public NamespacesProperty(Map namespaces) {
+        super(DavPropertyName.JCR_NAMESPACES, false);
+        value.putAll(namespaces);
+    }
+
+    public NamespacesProperty(DavProperty property) throws DavException {
+        super(DavPropertyName.JCR_NAMESPACES, false);
+        Object v = property.getValue();
+        if (!(v instanceof List)) {
+            log.warn("Unexpected structure of dcr:namespace property.");
+            throw new DavException(DavServletResponse.SC_INTERNAL_SERVER_ERROR);
+        }
+        // retrieve list of prefix/uri pairs that build the new values of
+        // the ns-registry
+        Iterator it = ((List)v).iterator();
+        while (it.hasNext()) {
+            Object listEntry = it.next();
+            if (listEntry instanceof Element) {
+                Element e = (Element)listEntry;
+                if (XML_NAMESPACE.equals(e.getLocalName())) {
+                    Element pElem = DomUtil.getChildElement(e, XML_PREFIX, Namespace.JCR);
+                    String prefix = DomUtil.getText(pElem, Namespace.EMPTY_NAMESPACE.getPrefix());
+                    Element uElem = DomUtil.getChildElement(e, XML_URI, Namespace.JCR);
+                    String uri = DomUtil.getText(uElem, Namespace.EMPTY_NAMESPACE.getURI());
+                    value.put(prefix, uri);
+                }
+            }
+        }
+    }
+
+    public Map getNamespaces() {
+        return Collections.unmodifiableMap(value);
+    }
+
+    public Object getValue() {
+        return Collections.unmodifiableMap(value);
+    }
+
+    /**
+     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
+     */
+    public Element toXml(Document document) {
+        Element elem = getName().toXml(document);
+        Iterator prefixes = value.keySet().iterator();
+        while (prefixes.hasNext()) {
+            String prefix = (String) prefixes.next();
+            String uri = (String) value.get(prefix);
+            Element nsElem = DomUtil.addChildElement(elem, XML_NAMESPACE, Namespace.JCR);
+            DomUtil.addChildElement(nsElem, XML_PREFIX, Namespace.JCR, prefix);
+            DomUtil.addChildElement(nsElem, XML_URI, Namespace.JCR, uri);
+        }
+        return elem;
+    }
+
+}
\ No newline at end of file

Property changes on: jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/server/NamespacesProperty.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/server/ValuesProperty.java
===================================================================
--- jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/server/ValuesProperty.java	(revision 0)
+++ jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/server/ValuesProperty.java	(revision 0)
@@ -0,0 +1,251 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.spi2dav.server;
+
+import org.apache.jackrabbit.value.ValueHelper;
+import org.apache.jackrabbit.webdav.DavConstants;
+import org.apache.jackrabbit.webdav.DavException;
+import org.apache.jackrabbit.webdav.DavServletResponse;
+import org.apache.jackrabbit.webdav.property.AbstractDavProperty;
+import org.apache.jackrabbit.webdav.property.DavProperty;
+import org.apache.jackrabbit.webdav.property.DavPropertyName;
+import org.apache.jackrabbit.webdav.xml.DomUtil;
+import org.apache.jackrabbit.webdav.xml.Namespace;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import javax.jcr.PropertyType;
+import javax.jcr.RepositoryException;
+import javax.jcr.Value;
+import javax.jcr.ValueFormatException;
+import javax.jcr.ValueFactory;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * <code>ValuesProperty</code> extends {@link org.apache.jackrabbit.webdav.property.DavProperty} providing
+ * utilities to handle the multiple values of the property item represented
+ * by this resource.
+ */
+public class ValuesProperty extends AbstractDavProperty {
+
+    private static Logger log = LoggerFactory.getLogger(ValuesProperty.class);
+
+    private final Value[] jcrValues;
+
+    /**
+     * Create a new <code>ValuesProperty</code> from the given single {@link Value}.
+     *
+     * @param value Array of Value objects as obtained from the JCR property.
+     */
+    public ValuesProperty(Value value) {
+        super(DavPropertyName.JCR_VALUE, false);
+        // finally set the value to the DavProperty
+        jcrValues = (value == null) ? new Value[0] : new Value[] {value};
+    }
+
+    /**
+     * Create a new <code>ValuesProperty</code> from the given {@link javax.jcr.Value Value
+     * array}.
+     *
+     * @param values Array of Value objects as obtained from the JCR property.
+     */
+    public ValuesProperty(Value[] values) {
+        super(DavPropertyName.JCR_VALUES, false);
+        // finally set the value to the DavProperty
+        jcrValues = (values == null) ? new Value[0] : values;
+    }
+
+    /**
+     * Wrap the specified <code>DavProperty</code> in a new <code>ValuesProperty</code>.
+     *
+     * @param property
+     * @param defaultType default type of the values to be deserialized. If however
+     * the {@link #XML_VALUE 'value'} elements provide a {@link #ATTR_VALUE_TYPE 'type'}
+     * attribute, the default value is ignored.
+     * @param valueFactory Factory used to retrieve JCR values from the value
+     * of the given <code>DavProperty</code>.
+     */
+    public ValuesProperty(DavProperty property, int defaultType,
+                          ValueFactory valueFactory)
+        throws RepositoryException, DavException {
+        super(property.getName(), false);
+
+        if (!(DavPropertyName.JCR_VALUES.equals(property.getName()) || DavPropertyName.JCR_VALUE.equals(getName()))) {
+            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "ValuesProperty may only be created with a property that has name="+DavPropertyName.JCR_VALUES.getName());
+        }
+
+        // retrieve jcr-values from child 'value'-element(s)
+        List valueElements = new ArrayList();
+        Object propValue = property.getValue();
+        if (propValue == null) {
+            jcrValues = new Value[0];
+        } else { /* not null propValue */
+            if (isValueElement(propValue)) {
+                valueElements.add(propValue);
+            } else if (propValue instanceof List) {
+                Iterator elemIt = ((List)property.getValue()).iterator();
+                while (elemIt.hasNext()) {
+                    Object el = elemIt.next();
+                    /* make sure, only Elements with name 'value' are used for
+                    * the 'value' field. any other content (other elements, text,
+                    * comment etc.) is ignored. NO bad-request/conflict error is
+                    * thrown.
+                    */
+                    if (isValueElement(el)) {
+                        valueElements.add(el);
+                    }
+                }
+            }
+            /* fill the 'value' with the valid 'value' elements found before */
+            Element[] elems = (Element[])valueElements.toArray(new Element[valueElements.size()]);
+            jcrValues = new Value[elems.length];
+            for (int i = 0; i < elems.length; i++) {
+                jcrValues[i] = getJcrValue(elems[i], defaultType, valueFactory);
+            }
+        }
+    }
+
+    private static boolean isValueElement(Object obj) {
+        return obj instanceof Element && DavConstants.XML_VALUE.equals(((Element)obj).getLocalName());
+    }
+
+    private void checkPropertyName(DavPropertyName reqName) throws ValueFormatException {
+        if (!reqName.equals(getName())) {
+            throw new ValueFormatException("Attempt to retrieve mulitple values from single property '" + getName() + "'.");
+        }
+    }
+
+    /**
+     *
+     * @param valueElement
+     * @param defaultType
+     * @return
+     * @throws ValueFormatException
+     * @throws RepositoryException
+     */
+    private static Value getJcrValue(Element valueElement, int defaultType,
+                                     ValueFactory valueFactory)
+        throws ValueFormatException, RepositoryException {
+        if (valueElement == null) {
+            return null;
+        }
+        // make sure the value is never 'null'
+        String value = DomUtil.getText(valueElement, "");
+        String typeStr = DomUtil.getAttribute(valueElement, DavConstants.ATTR_VALUE_TYPE, Namespace.JCR);
+        int type = (typeStr == null) ? defaultType : PropertyType.valueFromName(typeStr);
+        // deserialize value ->> see #toXml where values are serialized
+        return ValueHelper.deserialize(value, type, true, valueFactory);
+    }
+
+    /**
+     * Converts the value of this property to a {@link javax.jcr.Value value array}.
+     *
+     * @return Array of Value objects
+     * @throws ValueFormatException if convertion of the internal jcr values to
+     * the specified value type fails.
+     */
+    public Value[] getJcrValues(int propertyType, ValueFactory valueFactory) throws ValueFormatException {
+        checkPropertyName(DavPropertyName.JCR_VALUES);
+        Value[] vs = new Value[jcrValues.length];
+        for (int i = 0; i < jcrValues.length; i++) {
+            vs[i] = ValueHelper.convert(jcrValues[i], propertyType, valueFactory);
+        }
+        return jcrValues;
+    }
+
+    /**
+     * Returns the internal property value as jcr <code>Value</code> array
+     *
+     * @return the internal property value as jcr <code>Value</code> array
+     */
+    public Value[] getJcrValues() throws ValueFormatException {
+        checkPropertyName(DavPropertyName.JCR_VALUES);
+        return jcrValues;
+    }
+
+    /**
+     *
+     * @param propertyType
+     * @return
+     * @throws ValueFormatException
+     */
+    public Value getJcrValue(int propertyType, ValueFactory valueFactory) throws ValueFormatException {
+        checkPropertyName(DavPropertyName.JCR_VALUE);
+        return (jcrValues.length == 0)
+                ? null
+                : ValueHelper.convert(jcrValues[0], propertyType, valueFactory);
+    }
+
+    /**
+     *
+     * @return
+     * @throws ValueFormatException
+     */
+    public Value getJcrValue() throws ValueFormatException {
+        checkPropertyName(DavPropertyName.JCR_VALUE);
+        return (jcrValues.length == 0) ? null : jcrValues[0];
+    }
+
+    /**
+     * Returns the type of the {@link Value value}s present in this property
+     * or {@link PropertyType#UNDEFINED} if no values are available.
+     *
+     * @return type of values or {@link PropertyType#UNDEFINED}
+     */
+    public int getValueType() {
+        // TODO: check if correct behaviour if values array is empty
+        return (jcrValues.length > 0) ? jcrValues[0].getType() : PropertyType.UNDEFINED;
+    }
+
+    /**
+     * Returns an array of {@link Value}s representing the value of this
+     * property.
+     *
+     * @return an array of {@link Value}s
+     * @see #getJcrValues()
+     * @see #getJcrValue()
+     */
+    public Object getValue() {
+        return jcrValues;
+    }
+
+    /**
+     *
+     * @param document
+     * @return the xml element
+     */
+    public Element toXml(Document document) {
+        Element elem = getName().toXml(document);
+        try {
+            for (int i = 0; i < jcrValues.length; i++) {
+                Value v = jcrValues[i];
+                String type = PropertyType.nameFromValue(v.getType());
+                String serializedValue = ValueHelper.serialize(v, true);
+                Element xmlValue = DomUtil.createElement(document, DavConstants.XML_VALUE, Namespace.JCR, serializedValue);
+                DomUtil.setAttribute(xmlValue, DavConstants.ATTR_VALUE_TYPE, Namespace.JCR, type);
+                elem.appendChild(xmlValue);
+            }
+        } catch (RepositoryException e) {
+            log.error("Unexpected Error while converting jcr value to String: " + e.getMessage());
+        }
+        return elem;
+    }
+}
\ No newline at end of file

Property changes on: jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/server/ValuesProperty.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/server/SubscriptionImpl.java
===================================================================
--- jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/server/SubscriptionImpl.java	(revision 0)
+++ jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/server/SubscriptionImpl.java	(revision 0)
@@ -0,0 +1,177 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.spi2dav.server;
+
+import javax.jcr.observation.Event;
+
+import org.apache.jackrabbit.webdav.DavException;
+import org.apache.jackrabbit.webdav.DavServletResponse;
+import org.apache.jackrabbit.webdav.observation.DefaultEventType;
+import org.apache.jackrabbit.webdav.observation.EventType;
+import org.apache.jackrabbit.webdav.xml.Namespace;
+
+/**
+ * The <code>Subscription</code> class encapsulates a single subscription with
+ * the following responsibilities:<ul>
+ * <li>Providing access to the subscription info,</li>
+ * <li>Recording events this subscription is interested in,</li>
+ * <li>Providing access to the events.</li>
+ * </ul>
+ */
+public class SubscriptionImpl {
+
+    /**
+     * Element representing the 'nodeadded' event type.
+     * @see javax.jcr.observation.Event#NODE_ADDED
+     */
+    private static final String EVENT_NODEADDED = "nodeadded";
+
+    /**
+     * Element representing the 'noderemoved' event type.
+     * @see javax.jcr.observation.Event#NODE_REMOVED
+     */
+    private static final String EVENT_NODEREMOVED = "noderemoved";
+
+    /**
+     * Element representing the 'propertyadded' event type.
+     * @see javax.jcr.observation.Event#PROPERTY_ADDED
+     */
+    private static final String EVENT_PROPERTYADDED = "propertyadded";
+
+    /**
+     * Element representing the 'propertyremoved' event type.
+     * @see javax.jcr.observation.Event#PROPERTY_REMOVED
+     */
+    private static final String EVENT_PROPERTYREMOVED = "propertyremoved";
+
+    /**
+     * Element representing the 'propertychanged' event type.
+     * @see javax.jcr.observation.Event#PROPERTY_CHANGED
+     */
+    private static final String EVENT_PROPERTYCHANGED = "propertychanged";
+
+    /**
+     * Element representing the 'nodemoved' event type.
+     * @see javax.jcr.observation.Event#NODE_MOVED
+     */
+    private static final String EVENT_NODEMOVED = "nodemoved";
+
+    /**
+     * Element representing the 'persist' event type.
+     * @see javax.jcr.observation.Event#PERSIST
+     */
+    private static final String EVENT_PERSIST = "persist";
+
+
+    //--------------------------------------------------------------------------
+    /**
+     * Static utility method to convert the type defined by a
+     * {@link javax.jcr.observation.Event JCR event} into an <code>EventType</code>
+     * object.
+     *
+     * @param jcrEventType
+     * @return <code>EventType</code> representation of the given JCR event type.
+     * @throws IllegalArgumentException if the given int does not represent a
+     * valid type constants as defined by {@link Event}.<br>
+     * Valid values are
+     * <ul>
+     * <li>{@link Event#NODE_ADDED}</li>
+     * <li>{@link Event#NODE_REMOVED}</li>
+     * <li>{@link Event#PROPERTY_ADDED}</li>
+     * <li>{@link Event#PROPERTY_REMOVED}</li>
+     * <li>{@link Event#PROPERTY_CHANGED}</li>
+     * <li>{@link Event#NODE_MOVED}</li>
+     * <li>{@link Event#PERSIST}</li>
+     * </ul>
+     */
+    public static EventType getEventType(int jcrEventType) {
+        String localName;
+        switch (jcrEventType) {
+            case Event.NODE_ADDED:
+                localName = EVENT_NODEADDED;
+                break;
+            case Event.NODE_REMOVED:
+                localName = EVENT_NODEREMOVED;
+                break;
+            case Event.PROPERTY_ADDED:
+                localName = EVENT_PROPERTYADDED;
+                break;
+            case Event.PROPERTY_CHANGED:
+                localName = EVENT_PROPERTYCHANGED;
+                break;
+            case Event.PROPERTY_REMOVED:
+                localName = EVENT_PROPERTYREMOVED;
+                break;
+            case Event.NODE_MOVED:
+                localName = EVENT_NODEMOVED;
+                break;
+            case Event.PERSIST:
+                localName = EVENT_PERSIST;
+                break;
+            default: // no default
+                throw new IllegalArgumentException("Invalid JCR event type: " + jcrEventType);
+        }
+        return DefaultEventType.create(localName, Namespace.JCR);
+    }
+
+    /**
+     * Static utility method to convert an <code>EventType</code> as present in
+     * the Xml body into the corresponding JCR event constant defined by
+     * {@link javax.jcr.observation.Event}.
+     *
+     * @param eventType
+     * @return Any of the event types defined by {@link Event}.<br>
+     * Possible values are
+     * <ul>
+     * <li>{@link Event#NODE_ADDED}</li>
+     * <li>{@link Event#NODE_REMOVED}</li>
+     * <li>{@link Event#PROPERTY_ADDED}</li>
+     * <li>{@link Event#PROPERTY_REMOVED}</li>
+     * <li>{@link Event#PROPERTY_CHANGED}</li>
+     * <li>{@link Event#NODE_MOVED}</li>
+     * <li>{@link Event#PERSIST}</li>
+     * </ul>
+     * @throws DavException if the given event type does not define a valid
+     * JCR event type, such as returned by {@link #getEventType(int)}.
+     */
+    public static int getJcrEventType(EventType eventType) throws DavException {
+        if (eventType == null || !Namespace.JCR.equals(eventType.getNamespace())) {
+            throw new DavException(DavServletResponse.SC_UNPROCESSABLE_ENTITY, "Invalid JCR event type: "+ eventType + ": Namespace mismatch.");
+        }
+        int eType;
+        String eventName = eventType.getName();
+        if (EVENT_NODEADDED.equals(eventName)) {
+            eType = Event.NODE_ADDED;
+        } else if (EVENT_NODEREMOVED.equals(eventName)) {
+            eType = Event.NODE_REMOVED;
+        } else if (EVENT_PROPERTYADDED.equals(eventName)) {
+            eType = Event.PROPERTY_ADDED;
+        } else if (EVENT_PROPERTYCHANGED.equals(eventName)) {
+            eType = Event.PROPERTY_CHANGED;
+        } else if (EVENT_PROPERTYREMOVED.equals(eventName)) {
+            eType = Event.PROPERTY_REMOVED;
+        } else if (EVENT_NODEMOVED.equals(eventName)) {
+            eType = Event.NODE_MOVED;
+        } else if (EVENT_PERSIST.equals(eventName)) {
+            eType = Event.PERSIST;
+        } else {
+            throw new DavException(DavServletResponse.SC_UNPROCESSABLE_ENTITY, "Invalid event type: "+eventName);
+        }
+        return eType;
+    }
+
+}

Property changes on: jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/server/SubscriptionImpl.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/server/SearchResultProperty.java
===================================================================
--- jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/server/SearchResultProperty.java	(revision 0)
+++ jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/server/SearchResultProperty.java	(revision 0)
@@ -0,0 +1,235 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.spi2dav.server;
+
+import org.apache.jackrabbit.value.ValueHelper;
+import org.apache.jackrabbit.webdav.property.AbstractDavProperty;
+import org.apache.jackrabbit.webdav.property.DavProperty;
+import org.apache.jackrabbit.webdav.property.DavPropertyName;
+import org.apache.jackrabbit.webdav.xml.DomUtil;
+import org.apache.jackrabbit.webdav.xml.Namespace;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import javax.jcr.PropertyType;
+import javax.jcr.RepositoryException;
+import javax.jcr.Value;
+import javax.jcr.ValueFormatException;
+import javax.jcr.ValueFactory;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <code>SearchResultProperty</code>...
+ */
+// todo: find proper solution for transporting search results...
+public class SearchResultProperty extends AbstractDavProperty {
+
+    private static Logger log = LoggerFactory.getLogger(SearchResultProperty.class);
+
+    private static final String COLUMN = "column";
+
+    private final String[] columnNames;
+    private final String[] selectorNames;
+    private final Value[] values;
+
+    /**
+     * Creates a new <code>SearchResultProperty</code>.
+     *
+     * @param columnNames   the column names of the search row represented by
+     *                      this dav property.
+     * @param selectorNames the selecotr names of the row represented by this
+     *                      dav property.
+     * @param values        the values present in the columns
+     */
+    public SearchResultProperty(String[] columnNames,
+                                String[] selectorNames,
+                                Value[] values) {
+        super(DavPropertyName.JCR_SEARCH_RESULT_PROPERTY, true);
+        this.columnNames = columnNames;
+        this.selectorNames = selectorNames;
+        this.values = values;
+    }
+
+    /**
+     * Wrap the specified <code>DavProperty</code> in a new <code>SearchResultProperty</code>.
+     *
+     * @param property
+     * @param valueFactory factory used to deserialize the xml value to a JCR value.
+     * @throws RepositoryException if an error occurs while build the property value
+     * @throws IllegalArgumentException if the specified property does have the
+     * required form.
+     * @see #getValues()
+     */
+    public SearchResultProperty(DavProperty property, ValueFactory valueFactory) throws RepositoryException {
+        super(property.getName(), true);
+        if (!DavPropertyName.JCR_SEARCH_RESULT_PROPERTY.equals(getName())) {
+	    throw new IllegalArgumentException("SearchResultProperty may only be created from a property named " + DavPropertyName.JCR_SEARCH_RESULT_PROPERTY.toString());
+	}
+
+        List<String> colList = new ArrayList<String>();
+        List<String> selList = new ArrayList<String>();
+        List<Value> valList = new ArrayList<Value>();
+        Object propValue = property.getValue();
+        if (propValue instanceof List) {
+            for (Object o : ((List) propValue)) {
+                if (o instanceof Element) {
+                    parseColumnElement((Element) o, colList, selList, valList, valueFactory);
+                }
+            }
+        } else if (propValue instanceof Element) {
+            parseColumnElement((Element)property.getValue(), colList, selList, valList, valueFactory);
+        } else {
+            throw new IllegalArgumentException("SearchResultProperty requires a list of 'dcr:column' xml elements.");
+        }
+
+        columnNames = colList.toArray(new String[colList.size()]);
+        selectorNames = selList.toArray(new String[selList.size()]);
+        values = valList.toArray(new Value[valList.size()]);
+    }
+
+    private void parseColumnElement(Element columnElement,
+                                    List<String> columnNames,
+                                    List<String> selectorNames,
+                                    List<Value> values,
+                                    ValueFactory valueFactory)
+        throws ValueFormatException, RepositoryException {
+        if (!DomUtil.matches(columnElement, COLUMN, Namespace.JCR)) {
+            log.debug("dcr:column element expected within search result.");
+            return;
+        }
+        columnNames.add(DomUtil.getChildText(columnElement, DavPropertyName.JCR_NAME.getName(), DavPropertyName.JCR_NAME.getNamespace()));
+        selectorNames.add(DomUtil.getChildText(columnElement, DavPropertyName.JCR_SELECTOR_NAME.getName(), DavPropertyName.JCR_SELECTOR_NAME.getNamespace()));
+
+        Value jcrValue;
+        Element valueElement = DomUtil.getChildElement(columnElement, DavPropertyName.JCR_VALUE.getName(), DavPropertyName.JCR_VALUE.getNamespace());
+        if (valueElement != null) {
+            String typeStr = DomUtil.getAttribute(valueElement, ATTR_VALUE_TYPE, Namespace.JCR);
+            jcrValue = ValueHelper.deserialize(DomUtil.getText(valueElement),
+                    PropertyType.valueFromName(typeStr), true, valueFactory);
+        } else {
+            jcrValue = null;
+        }
+        values.add(jcrValue);
+    }
+
+    /**
+     * Return the column names representing the names of the properties present
+     * in the {@link #getValues() values}.
+     *
+     * @return columnNames
+     */
+    public String[] getColumnNames() {
+        return columnNames;
+    }
+
+    /**
+     * @return the selector name for each of the columns in the result property.
+     */
+    public String[] getSelectorNames() {
+        return selectorNames;
+    }
+
+    /**
+     * Return the values representing the values of that row in the search
+     * result table.
+     *
+     * @return values
+     * @see javax.jcr.query.Row#getValues()
+     */
+    public Value[] getValues() {
+        return values;
+    }
+
+
+    /**
+     * Same as {@link #getValues()}
+     *
+     * @return Array of JCR Value object
+     */
+    public Object getValue() {
+        return values;
+    }
+
+    /**
+     * Return the xml representation of this webdav property. For every value in
+     * the query result row a dcr:name, dcr:value, dcr:type and an optional
+     * dcr:selectorName element is created.
+     * Example:
+     * <pre>
+     * -----------------------------------------------------------
+     *   col-name  |   bla   |   bli   |  jcr:path  |  jcr:score
+     * -----------------------------------------------------------
+     *   value     |   xxx   |   111   |  /aNode    |    1
+     *   type      |    1    |    3    |     8      |    3
+     *   sel-name  |         |         |     S      |    S
+     * -----------------------------------------------------------
+     * </pre>
+     * results in:
+     * <pre>
+     * &lt;dcr:search-result-property xmlns:dcr="http://www.day.com/jcr/webdav/1.0"&gt;
+     *    &lt;dcr:column&gt;
+     *       &lt;dcr:name&gt;bla&lt;dcr:name/&gt;
+     *       &lt;dcr:value dcr:type="String"&gt;xxx&lt;dcr:value/&gt;
+     *    &lt;/dcr:column&gt;
+     *    &lt;dcr:column&gt;
+     *       &lt;dcr:name&gt;bli&lt;dcr:name/&gt;
+     *       &lt;dcr:value dcr:type="Long"&gt;111&lt;dcr:value/&gt;
+     *    &lt;/dcr:column&gt;
+     *    &lt;dcr:column&gt;
+     *       &lt;dcr:name&gt;jcr:path&lt;dcr:name/&gt;
+     *       &lt;dcr:value dcr:type="Path"&gt;/aNode&lt;dcr:value/&gt;
+     *       &lt;dcr:selectorName&gt;S&lt;dcr:selectorName/&gt;
+     *    &lt;/dcr:column&gt;
+     *    &lt;dcr:column&gt;
+     *       &lt;dcr:name&gt;jcr:score&lt;dcr:name/&gt;
+     *       &lt;dcr:value dcr:type="Long"&gt;1&lt;dcr:value/&gt;
+     *       &lt;dcr:selectorName&gt;S&lt;dcr:selectorName/&gt;
+     *    &lt;/dcr:column&gt;
+     * &lt;/dcr:search-result-property&gt;
+     * </pre>
+     *
+     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(org.w3c.dom.Document)
+     */
+    public Element toXml(Document document) {
+        Element elem = getName().toXml(document);
+        for (int i = 0; i < columnNames.length; i++) {
+            String propertyName = columnNames[i];
+            String selectorName = selectorNames[i];
+            Value propertyValue = values[i];
+
+            Element columnEl = DomUtil.addChildElement(elem, COLUMN, Namespace.JCR);
+            DomUtil.addChildElement(columnEl, DavPropertyName.JCR_NAME.getName(), DavPropertyName.JCR_NAME.getNamespace(), propertyName);
+            if (propertyValue != null) {
+                try {
+                    String serializedValue = ValueHelper.serialize(propertyValue, true);
+                    Element xmlValue = DomUtil.addChildElement(columnEl, XML_VALUE, Namespace.JCR, serializedValue);
+                    String type = PropertyType.nameFromValue(propertyValue.getType());
+                    DomUtil.setAttribute(xmlValue, ATTR_VALUE_TYPE, Namespace.JCR, type);
+                } catch (RepositoryException e) {
+                    log.error(e.toString());
+                }
+            }
+            if (selectorName != null) {
+                DomUtil.addChildElement(columnEl, DavPropertyName.JCR_SELECTOR_NAME.getName(), DavPropertyName.JCR_SELECTOR_NAME.getNamespace(), selectorName);
+            }
+        }
+        return elem;
+    }
+}

Property changes on: jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/server/SearchResultProperty.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/server/NodeTypeProperty.java
===================================================================
--- jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/server/NodeTypeProperty.java	(revision 0)
+++ jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/server/NodeTypeProperty.java	(revision 0)
@@ -0,0 +1,143 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.spi2dav.server;
+
+import org.apache.jackrabbit.webdav.property.AbstractDavProperty;
+import org.apache.jackrabbit.webdav.property.DavProperty;
+import org.apache.jackrabbit.webdav.property.DavPropertyName;
+import org.apache.jackrabbit.webdav.xml.DomUtil;
+import org.apache.jackrabbit.webdav.xml.Namespace;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import javax.jcr.nodetype.NodeType;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * <code>NodeTypeProperty</code>...
+ */
+public class NodeTypeProperty extends AbstractDavProperty {
+
+    private static Logger log = LoggerFactory.getLogger(NodeTypeProperty.class);
+
+    private final Set nodetypeNames = new HashSet();
+
+    public NodeTypeProperty(DavPropertyName name, NodeType nodeType, boolean isProtected) {
+        this(name, new NodeType[]{nodeType}, isProtected);
+    }
+
+    public NodeTypeProperty(DavPropertyName name, NodeType[] nodeTypes, boolean isProtected) {
+        super(name, isProtected);
+        for (int i = 0; i < nodeTypes.length; i++) {
+            NodeType nt = nodeTypes[i];
+            if (nt != null) {
+                nodetypeNames.add(nodeTypes[i].getName());
+            }
+        }
+    }
+
+    public NodeTypeProperty(DavPropertyName name, String[] nodeTypeNames, boolean isProtected) {
+        super(name, isProtected);
+        for (int i = 0; i < nodeTypeNames.length; i++) {
+            if (nodeTypeNames[i] != null) {
+                nodetypeNames.add(nodeTypeNames[i]);
+            }
+        }
+    }
+
+    /**
+     * Create a new <code>NodeTypeProperty</code> from the specified general
+     * DavProperty object.
+     *
+     * @param property
+     */
+    public NodeTypeProperty(DavProperty property) {
+        super(property.getName(), property.isInvisibleInAllprop());
+        if (property instanceof NodeTypeProperty) {
+            nodetypeNames.addAll(((NodeTypeProperty)property).nodetypeNames);
+        } else {
+            // assume property has be built from xml
+            Object propValue = property.getValue();
+            if (propValue instanceof List) {
+                retrieveNodeTypeNames(((List)propValue));
+            } else if (propValue instanceof Element) {
+                List l = new ArrayList();
+                l.add(propValue);
+                retrieveNodeTypeNames(l);
+            } else {
+                log.debug("NodeTypeProperty '" + property.getName() + "' has no/unparsable value.");
+            }
+        }
+    }
+
+    private void retrieveNodeTypeNames(List elementList) {
+        Iterator it = elementList.iterator();
+        while (it.hasNext()) {
+            Object content = it.next();
+            if (!(content instanceof Element)) {
+                continue;
+            }
+            Element el = (Element)content;
+            if (XML_NODETYPE.equals(el.getLocalName()) && Namespace.JCR.isSame(el.getNamespaceURI())) {
+                String nodetypeName = DomUtil.getChildText(el, XML_NODETYPENAME, Namespace.JCR);
+                if (nodetypeName != null && !"".equals(nodetypeName)) {
+                    nodetypeNames.add(nodetypeName);
+                }
+            } else {
+                log.debug("'dcr:nodetype' element expected -> ignoring element '" + ((Element)content).getNodeName() + "'");
+            }
+        }
+    }
+
+    /**
+     * Return a set of nodetype names present in this property.
+     *
+     * @return set of nodetype names
+     */
+    public Set getNodeTypeNames() {
+        return nodetypeNames;
+    }
+
+    /**
+     * Returns the value of this property which is a Set of nodetype names.
+     *
+     * @return a Set of nodetype names (String).
+     */
+    public Object getValue() {
+        return nodetypeNames;
+    }
+
+    /**
+     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
+     */
+    public Element toXml(Document document) {
+        Element elem = getName().toXml(document);
+        Iterator it = getNodeTypeNames().iterator();
+        while (it.hasNext()) {
+            String name = it.next().toString();
+            Element ntElem = DomUtil.addChildElement(elem, XML_NODETYPE, Namespace.JCR);
+            DomUtil.addChildElement(ntElem, XML_NODETYPENAME, Namespace.JCR, name);
+        }
+        return elem;
+    }
+}
\ No newline at end of file

Property changes on: jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/server/NodeTypeProperty.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/server/JcrValueType.java
===================================================================
--- jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/server/JcrValueType.java	(revision 0)
+++ jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/server/JcrValueType.java	(revision 0)
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.spi2dav.server;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.jcr.PropertyType;
+
+/** <code>JcrValueType</code>... */
+public final class JcrValueType {
+
+    private static Logger log = LoggerFactory.getLogger(JcrValueType.class);
+
+    /**
+     * Fragment for build the content type of request entities representing
+     * a JCR-value. The fragment must be completed as follows:
+     * <pre>
+     * jcr-value/ + Value.getType().toLowerCase()
+     * </pre>
+     *
+     * resulting in the following types:
+     * <pre>
+     * jcr-value/string
+     * jcr-value/boolean
+     * jcr-value/long
+     * jcr-value/double
+     * jcr-value/date
+     * jcr-value/binary
+     * jcr-value/date
+     * jcr-value/name
+     * jcr-value/path
+     * </pre>
+     */
+    private static final String VALUE_CONTENT_TYPE_FRAGMENT = "jcr-value/";
+
+    public static String contentTypeFromType(int propertyType) {
+        return VALUE_CONTENT_TYPE_FRAGMENT + PropertyType.nameFromValue(propertyType).toLowerCase();
+    }
+
+    public static int typeFromContentType(String contentType) {
+        if (contentType != null && contentType.startsWith(VALUE_CONTENT_TYPE_FRAGMENT)) {
+            // no need to create value/values property. instead
+            // prop-value can be retrieved directly:
+            int pos = contentType.indexOf('/');
+            int pos2 = contentType.indexOf(';');
+
+            String typename = contentType.substring(pos+1, pos+2).toUpperCase() + contentType.substring(pos+2, (pos2 > -1) ? pos2 : contentType.length());
+            return PropertyType.valueFromName(typename);
+        }
+        return PropertyType.UNDEFINED;
+    }
+}
\ No newline at end of file

Property changes on: jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/server/JcrValueType.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/ItemInfoImpl.java
===================================================================
--- jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/ItemInfoImpl.java	(revision 896818)
+++ jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/ItemInfoImpl.java	(working copy)
@@ -18,9 +18,9 @@
 
 import org.apache.jackrabbit.spi.ItemInfo;
 import org.apache.jackrabbit.spi.Path;
+import org.apache.jackrabbit.webdav.property.DavPropertyName;
 import org.apache.jackrabbit.webdav.property.DavPropertySet;
 import org.apache.jackrabbit.webdav.property.DavProperty;
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
 import org.apache.jackrabbit.spi.commons.conversion.NamePathResolver;
 import org.apache.jackrabbit.spi.commons.conversion.NameException;
 import org.slf4j.LoggerFactory;
@@ -44,7 +44,7 @@
     ItemInfoImpl(DavPropertySet propSet, NamePathResolver resolver)
             throws NameException, NamespaceException {
 
-        DavProperty pathProp = propSet.get(ItemResourceConstants.JCR_PATH);
+        DavProperty pathProp = propSet.get(DavPropertyName.JCR_PATH);
         String jcrPath = pathProp.getValue().toString();
         path = resolver.getQPath(jcrPath);
     }
Index: jackrabbit-spi2dav/pom.xml
===================================================================
--- jackrabbit-spi2dav/pom.xml	(revision 896818)
+++ jackrabbit-spi2dav/pom.xml	(working copy)
@@ -72,17 +72,6 @@
       <version>2.1-SNAPSHOT</version>
     </dependency>
     <dependency>
-      <groupId>org.apache.jackrabbit</groupId>
-      <artifactId>jackrabbit-jcr-server</artifactId>
-      <version>2.1-SNAPSHOT</version>
-      <exclusions>
-        <exclusion>
-          <groupId>xerces</groupId>
-          <artifactId>xercesImpl</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
       <groupId>javax.jcr</groupId>
       <artifactId>jcr</artifactId>
     </dependency>
Index: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/ItemResourceConstants.java
===================================================================
--- jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/ItemResourceConstants.java	(revision 896818)
+++ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/ItemResourceConstants.java	(working copy)
@@ -17,16 +17,10 @@
 package org.apache.jackrabbit.webdav.jcr;
 
 import org.apache.jackrabbit.webdav.DavResource;
-import org.apache.jackrabbit.webdav.lock.Scope;
 import org.apache.jackrabbit.webdav.observation.ObservationResource;
-import org.apache.jackrabbit.webdav.property.DavPropertyName;
 import org.apache.jackrabbit.webdav.search.SearchResource;
-import org.apache.jackrabbit.webdav.security.Privilege;
 import org.apache.jackrabbit.webdav.version.DeltaVResource;
-import org.apache.jackrabbit.webdav.xml.Namespace;
 
-import javax.jcr.PropertyType;
-
 /**
  * <code>ItemResourceConstants</code> provides constants for any resources
  * representing repository items.
@@ -43,64 +37,11 @@
      */
     public static final String ROOT_ITEM_PATH = "/";
     /**
-     * Placeholder resource path for the JCR root node.
-     */
-    public static final String ROOT_ITEM_RESOURCEPATH = "/jcr:root";
-
-    /**
      * The version storage item resource path.
      */
     public static final String VERSIONSTORAGE_PATH = "/jcr:system/jcr:versionStorage";
 
     /**
-     * The namespace for all jcr specific extensions.
-     */
-    public static final Namespace NAMESPACE = Namespace.getNamespace("dcr", "http://www.day.com/jcr/webdav/1.0");
-
-    public static final String IMPORT_UUID_BEHAVIOR = "ImportUUIDBehavior";
-
-    // xml element names
-    public static final String XML_PRIMARYNODETYPE = "primarynodetype";
-    public static final String XML_VALUE = "value";
-    /**
-     * 'type' attribute for the {@link #XML_VALUE value} element, reflecting the
-     * {@link PropertyType type} of the value being transported.
-     */
-    public static final String ATTR_VALUE_TYPE = "type";
-    public static final String XML_LENGTH = "length";
-    public static final String XML_EXCLUSIVE_SESSION_SCOPED = "exclusive-session-scoped";
-
-    // xml elements used to reflect the workspaces ns-registry
-    // TODO: to be reviewed...
-    public static final String XML_NAMESPACE = "namespace";
-    public static final String XML_PREFIX = "prefix";
-    public static final String XML_URI = "uri";
-
-    // xml elements used for repository-descritors report
-    public static final String XML_DESCRIPTOR = "descriptor";
-    public static final String XML_DESCRIPTORKEY = "descriptorkey";
-    public static final String XML_DESCRIPTORVALUE = "descriptorvalue";
-
-    /**
-     * Extension to the WebDAV 'exclusive' lock, that allows to distinguish
-     * the session-scoped and open-scoped locks on a JCR node.
-     *
-     * @see javax.jcr.Node#lock(boolean, boolean)
-     */
-    public static final Scope EXCLUSIVE_SESSION = Scope.create(XML_EXCLUSIVE_SESSION_SCOPED, NAMESPACE);
-
-    /**
-     * The 'removeexisting' element is not defined by RFC 3253. If it is present
-     * in the UPDATE request body, uuid conflicts should be solved by removing
-     * the existing nodes.
-     *
-     * @see javax.jcr.Node#restore(javax.jcr.version.Version, boolean)
-     * @see javax.jcr.Workspace#restore(javax.jcr.version.Version[], boolean)
-     * @see org.apache.jackrabbit.webdav.version.UpdateInfo
-     */
-    public static final String XML_REMOVEEXISTING = "removeexisting";
-
-    /**
      * The 'relpath' element is not defined by RFC 3253. If it is present
      * in the UPDATE request body, the server is forced to used the text contained
      * as 'relPath' argument for the {@link javax.jcr.Node#restore(javax.jcr.version.Version, String, boolean)
@@ -110,60 +51,4 @@
      * @see org.apache.jackrabbit.webdav.version.UpdateInfo
      */
     public static final String XML_RELPATH = "relpath";
-
-    // name of the workspace for which the repository session has been created.
-    public static final DavPropertyName JCR_WORKSPACE_NAME = DavPropertyName.create("workspaceName", NAMESPACE);
-
-    // general property names
-    public static final DavPropertyName JCR_NAME = DavPropertyName.create("name", NAMESPACE);
-    public static final DavPropertyName JCR_PATH = DavPropertyName.create("path", NAMESPACE);
-    public static final DavPropertyName JCR_DEPTH = DavPropertyName.create("depth", NAMESPACE);
-    public static final DavPropertyName JCR_PARENT = DavPropertyName.create("parent", NAMESPACE);
-    public static final DavPropertyName JCR_ISNEW = DavPropertyName.create("isnew", NAMESPACE);
-    public static final DavPropertyName JCR_ISMODIFIED = DavPropertyName.create("ismodified", NAMESPACE);
-    public static final DavPropertyName JCR_DEFINITION = DavPropertyName.create("definition", NAMESPACE);
-    public static final DavPropertyName JCR_SELECTOR_NAME = DavPropertyName.create("selectorName", NAMESPACE);
-
-    // property names used for resources representing jcr-nodes
-    public static final DavPropertyName JCR_PRIMARYNODETYPE = DavPropertyName.create(XML_PRIMARYNODETYPE, NAMESPACE);
-    public static final DavPropertyName JCR_MIXINNODETYPES = DavPropertyName.create("mixinnodetypes", NAMESPACE);
-    public static final DavPropertyName JCR_INDEX = DavPropertyName.create("index", NAMESPACE);
-    public static final DavPropertyName JCR_REFERENCES = DavPropertyName.create("references", NAMESPACE);
-    /**
-     * @since JCR 2.0
-     */
-    public static final DavPropertyName JCR_WEAK_REFERENCES = DavPropertyName.create("weakreferences", NAMESPACE);
-    public static final DavPropertyName JCR_UUID = DavPropertyName.create("uuid", NAMESPACE);
-    public static final DavPropertyName JCR_PRIMARYITEM = DavPropertyName.create("primaryitem", NAMESPACE);
-
-    // property names used for resources representing jcr-properties
-    public static final DavPropertyName JCR_TYPE = DavPropertyName.create("type", NAMESPACE);
-    public static final DavPropertyName JCR_VALUE = DavPropertyName.create("value", NAMESPACE);
-    public static final DavPropertyName JCR_VALUES = DavPropertyName.create("values", NAMESPACE);
-    public static final DavPropertyName JCR_LENGTH = DavPropertyName.create("length", NAMESPACE);
-    public static final DavPropertyName JCR_LENGTHS = DavPropertyName.create("lengths", NAMESPACE);
-
-    // property names used for resource representing a workspace
-    public static final DavPropertyName JCR_NAMESPACES = DavPropertyName.create("namespaces", NAMESPACE);
-
-    // property names used for resource representing a version hisotry
-    public static final DavPropertyName JCR_VERSIONABLEUUID = DavPropertyName.create("versionableuuid", NAMESPACE);
-
-    //-----------------------------------------< JSR170 specific privileges >---
-    /**
-     * Privilege representing the JSR170 'read' action.
-     */
-    public static final Privilege PRIVILEGE_JCR_READ = Privilege.getPrivilege("read", NAMESPACE);
-    /**
-     * Privilege representing the JSR170 'add_node' action.
-     */
-    public static final Privilege PRIVILEGE_JCR_ADD_NODE = Privilege.getPrivilege("add_node", NAMESPACE);
-    /**
-     * Privilege representing the JSR170 'set_property' action.
-     */
-    public static final Privilege PRIVILEGE_JCR_SET_PROPERTY = Privilege.getPrivilege("set_property", NAMESPACE);
-    /**
-     * Privilege representing the JSR170 'remove' action.
-     */
-    public static final Privilege PRIVILEGE_JCR_REMOVE = Privilege.getPrivilege("remove", NAMESPACE);
 }
\ No newline at end of file
Index: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/property/NamespacesProperty.java
===================================================================
--- jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/property/NamespacesProperty.java	(revision 896818)
+++ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/property/NamespacesProperty.java	(working copy)
@@ -18,9 +18,9 @@
 
 import org.apache.jackrabbit.webdav.DavException;
 import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
 import org.apache.jackrabbit.webdav.property.AbstractDavProperty;
 import org.apache.jackrabbit.webdav.property.DavProperty;
+import org.apache.jackrabbit.webdav.property.DavPropertyName;
 import org.apache.jackrabbit.webdav.xml.DomUtil;
 import org.apache.jackrabbit.webdav.xml.Namespace;
 import org.slf4j.Logger;
@@ -39,14 +39,14 @@
 /**
  * <code>NamespacesProperty</code>...
  */
-public class NamespacesProperty extends AbstractDavProperty implements ItemResourceConstants {
+public class NamespacesProperty extends AbstractDavProperty {
 
     private static Logger log = LoggerFactory.getLogger(NamespacesProperty.class);
 
     private final Map value = new HashMap();
 
     public NamespacesProperty(NamespaceRegistry nsReg) throws RepositoryException {
-        super(JCR_NAMESPACES, false);
+        super(DavPropertyName.JCR_NAMESPACES, false);
         if (nsReg != null) {
             String[] prefixes = nsReg.getPrefixes();
             for (int i = 0; i < prefixes.length; i++) {
@@ -56,12 +56,12 @@
     }
 
     public NamespacesProperty(Map namespaces) {
-        super(JCR_NAMESPACES, false);
+        super(DavPropertyName.JCR_NAMESPACES, false);
         value.putAll(namespaces);
     }
 
     public NamespacesProperty(DavProperty property) throws DavException {
-        super(JCR_NAMESPACES, false);
+        super(DavPropertyName.JCR_NAMESPACES, false);
         Object v = property.getValue();
         if (!(v instanceof List)) {
             log.warn("Unexpected structure of dcr:namespace property.");
@@ -75,9 +75,9 @@
             if (listEntry instanceof Element) {
                 Element e = (Element)listEntry;
                 if (XML_NAMESPACE.equals(e.getLocalName())) {
-                    Element pElem = DomUtil.getChildElement(e, XML_PREFIX, ItemResourceConstants.NAMESPACE);
+                    Element pElem = DomUtil.getChildElement(e, XML_PREFIX, Namespace.JCR);
                     String prefix = DomUtil.getText(pElem, Namespace.EMPTY_NAMESPACE.getPrefix());
-                    Element uElem = DomUtil.getChildElement(e, XML_URI, ItemResourceConstants.NAMESPACE);
+                    Element uElem = DomUtil.getChildElement(e, XML_URI, Namespace.JCR);
                     String uri = DomUtil.getText(uElem, Namespace.EMPTY_NAMESPACE.getURI());
                     value.put(prefix, uri);
                 }
@@ -102,9 +102,9 @@
         while (prefixes.hasNext()) {
             String prefix = (String) prefixes.next();
             String uri = (String) value.get(prefix);
-            Element nsElem = DomUtil.addChildElement(elem, XML_NAMESPACE, ItemResourceConstants.NAMESPACE);
-            DomUtil.addChildElement(nsElem, XML_PREFIX, ItemResourceConstants.NAMESPACE, prefix);
-            DomUtil.addChildElement(nsElem, XML_URI, ItemResourceConstants.NAMESPACE, uri);
+            Element nsElem = DomUtil.addChildElement(elem, XML_NAMESPACE, Namespace.JCR);
+            DomUtil.addChildElement(nsElem, XML_PREFIX, Namespace.JCR, prefix);
+            DomUtil.addChildElement(nsElem, XML_URI, Namespace.JCR, uri);
         }
         return elem;
     }
Index: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/property/ValuesProperty.java
===================================================================
--- jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/property/ValuesProperty.java	(revision 896818)
+++ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/property/ValuesProperty.java	(working copy)
@@ -17,13 +17,14 @@
 package org.apache.jackrabbit.webdav.jcr.property;
 
 import org.apache.jackrabbit.value.ValueHelper;
+import org.apache.jackrabbit.webdav.DavConstants;
 import org.apache.jackrabbit.webdav.DavException;
 import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
 import org.apache.jackrabbit.webdav.property.AbstractDavProperty;
 import org.apache.jackrabbit.webdav.property.DavProperty;
 import org.apache.jackrabbit.webdav.property.DavPropertyName;
 import org.apache.jackrabbit.webdav.xml.DomUtil;
+import org.apache.jackrabbit.webdav.xml.Namespace;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
@@ -43,7 +44,7 @@
  * utilities to handle the multiple values of the property item represented
  * by this resource.
  */
-public class ValuesProperty extends AbstractDavProperty implements ItemResourceConstants {
+public class ValuesProperty extends AbstractDavProperty {
 
     private static Logger log = LoggerFactory.getLogger(ValuesProperty.class);
 
@@ -55,7 +56,7 @@
      * @param value Array of Value objects as obtained from the JCR property.
      */
     public ValuesProperty(Value value) {
-        super(JCR_VALUE, false);
+        super(DavPropertyName.JCR_VALUE, false);
         // finally set the value to the DavProperty
         jcrValues = (value == null) ? new Value[0] : new Value[] {value};
     }
@@ -67,7 +68,7 @@
      * @param values Array of Value objects as obtained from the JCR property.
      */
     public ValuesProperty(Value[] values) {
-        super(JCR_VALUES, false);
+        super(DavPropertyName.JCR_VALUES, false);
         // finally set the value to the DavProperty
         jcrValues = (values == null) ? new Value[0] : values;
     }
@@ -87,8 +88,8 @@
         throws RepositoryException, DavException {
         super(property.getName(), false);
 
-        if (!(JCR_VALUES.equals(property.getName()) || JCR_VALUE.equals(getName()))) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "ValuesProperty may only be created with a property that has name="+JCR_VALUES.getName());
+        if (!(DavPropertyName.JCR_VALUES.equals(property.getName()) || DavPropertyName.JCR_VALUE.equals(getName()))) {
+            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "ValuesProperty may only be created with a property that has name="+DavPropertyName.JCR_VALUES.getName());
         }
 
         // retrieve jcr-values from child 'value'-element(s)
@@ -123,7 +124,7 @@
     }
 
     private static boolean isValueElement(Object obj) {
-        return obj instanceof Element && XML_VALUE.equals(((Element)obj).getLocalName());
+        return obj instanceof Element && DavConstants.XML_VALUE.equals(((Element)obj).getLocalName());
     }
 
     private void checkPropertyName(DavPropertyName reqName) throws ValueFormatException {
@@ -148,7 +149,7 @@
         }
         // make sure the value is never 'null'
         String value = DomUtil.getText(valueElement, "");
-        String typeStr = DomUtil.getAttribute(valueElement, ATTR_VALUE_TYPE, ItemResourceConstants.NAMESPACE);
+        String typeStr = DomUtil.getAttribute(valueElement, DavConstants.ATTR_VALUE_TYPE, Namespace.JCR);
         int type = (typeStr == null) ? defaultType : PropertyType.valueFromName(typeStr);
         // deserialize value ->> see #toXml where values are serialized
         return ValueHelper.deserialize(value, type, true, valueFactory);
@@ -162,7 +163,7 @@
      * the specified value type fails.
      */
     public Value[] getJcrValues(int propertyType, ValueFactory valueFactory) throws ValueFormatException {
-        checkPropertyName(JCR_VALUES);
+        checkPropertyName(DavPropertyName.JCR_VALUES);
         Value[] vs = new Value[jcrValues.length];
         for (int i = 0; i < jcrValues.length; i++) {
             vs[i] = ValueHelper.convert(jcrValues[i], propertyType, valueFactory);
@@ -176,7 +177,7 @@
      * @return the internal property value as jcr <code>Value</code> array
      */
     public Value[] getJcrValues() throws ValueFormatException {
-        checkPropertyName(JCR_VALUES);
+        checkPropertyName(DavPropertyName.JCR_VALUES);
         return jcrValues;
     }
 
@@ -187,7 +188,7 @@
      * @throws ValueFormatException
      */
     public Value getJcrValue(int propertyType, ValueFactory valueFactory) throws ValueFormatException {
-        checkPropertyName(JCR_VALUE);
+        checkPropertyName(DavPropertyName.JCR_VALUE);
         return (jcrValues.length == 0)
                 ? null
                 : ValueHelper.convert(jcrValues[0], propertyType, valueFactory);
@@ -199,7 +200,7 @@
      * @throws ValueFormatException
      */
     public Value getJcrValue() throws ValueFormatException {
-        checkPropertyName(JCR_VALUE);
+        checkPropertyName(DavPropertyName.JCR_VALUE);
         return (jcrValues.length == 0) ? null : jcrValues[0];
     }
 
@@ -238,8 +239,8 @@
                 Value v = jcrValues[i];
                 String type = PropertyType.nameFromValue(v.getType());
                 String serializedValue = ValueHelper.serialize(v, true);
-                Element xmlValue = DomUtil.createElement(document, XML_VALUE, ItemResourceConstants.NAMESPACE, serializedValue);
-                DomUtil.setAttribute(xmlValue, ATTR_VALUE_TYPE, ItemResourceConstants.NAMESPACE, type);
+                Element xmlValue = DomUtil.createElement(document, DavConstants.XML_VALUE, Namespace.JCR, serializedValue);
+                DomUtil.setAttribute(xmlValue, DavConstants.ATTR_VALUE_TYPE, Namespace.JCR, type);
                 elem.appendChild(xmlValue);
             }
         } catch (RepositoryException e) {
Index: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/property/LengthsProperty.java
===================================================================
--- jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/property/LengthsProperty.java	(revision 896818)
+++ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/property/LengthsProperty.java	(working copy)
@@ -16,9 +16,12 @@
  */
 package org.apache.jackrabbit.webdav.jcr.property;
 
+import org.apache.jackrabbit.webdav.DavConstants;
 import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
 import org.apache.jackrabbit.webdav.property.AbstractDavProperty;
+import org.apache.jackrabbit.webdav.property.DavPropertyName;
 import org.apache.jackrabbit.webdav.xml.DomUtil;
+import org.apache.jackrabbit.webdav.xml.Namespace;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
@@ -37,7 +40,7 @@
      * @param lengths as retrieved from the JCR property
      */
     public LengthsProperty(long[] lengths) {
-        super(JCR_LENGTHS, true);
+        super(DavPropertyName.JCR_LENGTHS, true);
         this.value = lengths;
     }
 
@@ -58,7 +61,7 @@
         Element elem = getName().toXml(document);
         for (int i = 0; i < value.length; i++) {
             String txtContent = String.valueOf(value[i]);
-            DomUtil.addChildElement(elem, XML_LENGTH, ItemResourceConstants.NAMESPACE, txtContent);
+            DomUtil.addChildElement(elem, DavConstants.XML_LENGTH, Namespace.JCR, txtContent);
         }
         return elem;
     }
Index: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/VersionHistoryItemCollection.java
===================================================================
--- jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/VersionHistoryItemCollection.java	(revision 896818)
+++ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/VersionHistoryItemCollection.java	(working copy)
@@ -25,6 +25,7 @@
 import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
 import org.apache.jackrabbit.webdav.jcr.JcrDavException;
 import org.apache.jackrabbit.webdav.jcr.JcrDavSession;
+import org.apache.jackrabbit.webdav.property.DavPropertyName;
 import org.apache.jackrabbit.webdav.property.DefaultDavProperty;
 import org.apache.jackrabbit.webdav.property.HrefProperty;
 import org.apache.jackrabbit.webdav.property.ResourceType;
@@ -133,7 +134,7 @@
 
         // jcr specific property pointing to the node this history belongs to
         try {
-            properties.add(new DefaultDavProperty(JCR_VERSIONABLEUUID, ((VersionHistory)item).getVersionableUUID()));
+            properties.add(new DefaultDavProperty(DavPropertyName.JCR_VERSIONABLEUUID, ((VersionHistory)item).getVersionableUUID()));
         } catch (RepositoryException e) {
             log.error(e.getMessage());
         }
Index: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/JcrPrivilegeReport.java
===================================================================
--- jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/JcrPrivilegeReport.java	(revision 896818)
+++ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/JcrPrivilegeReport.java	(working copy)
@@ -21,7 +21,6 @@
 import org.apache.jackrabbit.webdav.version.report.Report;
 import org.apache.jackrabbit.webdav.version.report.ReportType;
 import org.apache.jackrabbit.webdav.version.report.ReportInfo;
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
 import org.apache.jackrabbit.webdav.MultiStatus;
 import org.apache.jackrabbit.webdav.DavResource;
 import org.apache.jackrabbit.webdav.DavException;
@@ -30,6 +29,7 @@
 import org.apache.jackrabbit.webdav.DavServletResponse;
 import org.apache.jackrabbit.webdav.DavResourceLocator;
 import org.apache.jackrabbit.webdav.xml.DomUtil;
+import org.apache.jackrabbit.webdav.xml.Namespace;
 import org.apache.jackrabbit.webdav.security.Privilege;
 import org.apache.jackrabbit.webdav.security.CurrentUserPrivilegeSetProperty;
 import org.w3c.dom.Element;
@@ -47,18 +47,17 @@
 
     private static Logger log = LoggerFactory.getLogger(JcrPrivilegeReport.class);
 
-    private static final String REPORT_NAME = "privileges";
-
     /**
      * The exportview report type
      */
-    public static final ReportType PRIVILEGES_REPORT = ReportType.register(REPORT_NAME, ItemResourceConstants.NAMESPACE, JcrPrivilegeReport.class);
+    public static final ReportType PRIVILEGES_REPORT =
+        ReportType.register(DavConstants.JCR_PRIVILEGES, Namespace.JCR, JcrPrivilegeReport.class);
 
     private static final Privilege[] PRIVS = new Privilege[] {
-        ItemResourceConstants.PRIVILEGE_JCR_READ,
-        ItemResourceConstants.PRIVILEGE_JCR_ADD_NODE,
-        ItemResourceConstants.PRIVILEGE_JCR_SET_PROPERTY,
-        ItemResourceConstants.PRIVILEGE_JCR_REMOVE};
+        Privilege.JCR_READ,
+        Privilege.JCR_ADD_NODE,
+        Privilege.JCR_SET_PROPERTY,
+        Privilege.JCR_REMOVE};
 
     private final MultiStatus ms = new MultiStatus();
 
Index: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/LocateByUuidReport.java
===================================================================
--- jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/LocateByUuidReport.java	(revision 896818)
+++ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/LocateByUuidReport.java	(working copy)
@@ -22,12 +22,12 @@
 import org.apache.jackrabbit.webdav.DavResourceLocator;
 import org.apache.jackrabbit.webdav.DavServletResponse;
 import org.apache.jackrabbit.webdav.MultiStatus;
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
 import org.apache.jackrabbit.webdav.jcr.JcrDavException;
 import org.apache.jackrabbit.webdav.version.report.Report;
 import org.apache.jackrabbit.webdav.version.report.ReportInfo;
 import org.apache.jackrabbit.webdav.version.report.ReportType;
 import org.apache.jackrabbit.webdav.xml.DomUtil;
+import org.apache.jackrabbit.webdav.xml.Namespace;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
@@ -50,12 +50,11 @@
 
     private static Logger log = LoggerFactory.getLogger(LocateByUuidReport.class);
 
-    private static final String REPORT_NAME = "locate-by-uuid";
-
     /**
      * The exportview report type
      */
-    public static final ReportType LOCATE_BY_UUID_REPORT = ReportType.register(REPORT_NAME, ItemResourceConstants.NAMESPACE, LocateByUuidReport.class);
+    public static final ReportType LOCATE_BY_UUID_REPORT =
+        ReportType.register(DavConstants.JCR_LOCATE_BY_UUID, Namespace.JCR, LocateByUuidReport.class);
 
     private MultiStatus ms;
 
Index: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/LocateCorrespondingNodeReport.java
===================================================================
--- jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/LocateCorrespondingNodeReport.java	(revision 896818)
+++ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/LocateCorrespondingNodeReport.java	(working copy)
@@ -21,13 +21,13 @@
 import org.apache.jackrabbit.webdav.DavResource;
 import org.apache.jackrabbit.webdav.DavResourceLocator;
 import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
 import org.apache.jackrabbit.webdav.jcr.JcrDavException;
 import org.apache.jackrabbit.webdav.version.DeltaVConstants;
 import org.apache.jackrabbit.webdav.version.report.Report;
 import org.apache.jackrabbit.webdav.version.report.ReportInfo;
 import org.apache.jackrabbit.webdav.version.report.ReportType;
 import org.apache.jackrabbit.webdav.xml.DomUtil;
+import org.apache.jackrabbit.webdav.xml.Namespace;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
@@ -72,7 +72,7 @@
     /**
      * The corresponding-node report type
      */
-    public static final ReportType LOCATE_CORRESPONDING_NODE_REPORT = ReportType.register(REPORT_NAME, ItemResourceConstants.NAMESPACE, LocateByUuidReport.class);
+    public static final ReportType LOCATE_CORRESPONDING_NODE_REPORT = ReportType.register(REPORT_NAME, Namespace.JCR, LocateByUuidReport.class);
 
     /**
      * Returns {@link #LOCATE_CORRESPONDING_NODE_REPORT}
@@ -118,7 +118,7 @@
      * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
      */
     public Element toXml(Document document) {
-        Element elem = DomUtil.createElement(document, "locate-corresponding-node-report", ItemResourceConstants.NAMESPACE);
+        Element elem = DomUtil.createElement(document, "locate-corresponding-node-report", Namespace.JCR);
         if (correspHref != null) {
             elem.appendChild(DomUtil.hrefToXml(correspHref, document));
         }
Index: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/NodeTypesReport.java
===================================================================
--- jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/NodeTypesReport.java	(revision 896818)
+++ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/NodeTypesReport.java	(working copy)
@@ -17,17 +17,18 @@
 package org.apache.jackrabbit.webdav.jcr.version.report;
 
 import org.apache.jackrabbit.commons.iterator.NodeTypeIteratorAdapter;
+import org.apache.jackrabbit.webdav.DavConstants;
 import org.apache.jackrabbit.webdav.DavException;
 import org.apache.jackrabbit.webdav.DavResource;
 import org.apache.jackrabbit.webdav.DavServletResponse;
 import org.apache.jackrabbit.webdav.jcr.JcrDavException;
 import org.apache.jackrabbit.webdav.jcr.nodetype.NodeDefinitionImpl;
-import org.apache.jackrabbit.webdav.jcr.nodetype.NodeTypeConstants;
 import org.apache.jackrabbit.webdav.jcr.nodetype.PropertyDefinitionImpl;
 import org.apache.jackrabbit.webdav.version.report.Report;
 import org.apache.jackrabbit.webdav.version.report.ReportInfo;
 import org.apache.jackrabbit.webdav.version.report.ReportType;
 import org.apache.jackrabbit.webdav.xml.DomUtil;
+import org.apache.jackrabbit.webdav.xml.Namespace;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
@@ -58,19 +59,20 @@
  * &lt;!ELEMENT primary-nodetypes EMPTY &gt;
  * </pre>
  *
- * @see NodeTypeConstants#NAMESPACE
+ * @see Namespace#JCR
  */
 //todo: currently the nodetype report is not consistent with the general way of representing nodetype names (with NodetypeElement) in order to be compatible with the jackrabbit nodetype registry...
 //todo: for the same reason, not the complete nodetype-definition, but only the nodetype def as stored is represented.
 //todo: no namespace definition with response (> jackrabbit)... and nodetype element has same name as the one used with dav-properties
-public class NodeTypesReport extends AbstractJcrReport implements NodeTypeConstants {
+public class NodeTypesReport extends AbstractJcrReport {
 
     private static Logger log = LoggerFactory.getLogger(NodeTypesReport.class);
 
     /**
      * The registered type of this report.
      */
-    public static final ReportType NODETYPES_REPORT = ReportType.register("nodetypes", NodeTypeConstants.NAMESPACE, NodeTypesReport.class);
+    public static final ReportType NODETYPES_REPORT =
+        ReportType.register(DavConstants.JCR_NODETYPES, Namespace.JCR, NodeTypesReport.class);
 
     private NodeTypeIterator ntIter;
 
@@ -119,24 +121,24 @@
      * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
      */
     public Element toXml(Document document) {
-        Element report = document.createElement(NODETYPES_ELEMENT);
+        Element report = document.createElement(DavConstants.NODETYPES_ELEMENT);
         // loop over the nodetypes to be returned in the report
         while (ntIter.hasNext()) {
             NodeType nt = ntIter.nextNodeType();
-            Element ntDef = document.createElement(NODETYPE_ELEMENT);
-            ntDef.setAttribute(NAME_ATTRIBUTE, nt.getName());
-            ntDef.setAttribute(ISMIXIN_ATTRIBUTE, Boolean.toString(nt.isMixin()));
-            ntDef.setAttribute(HASORDERABLECHILDNODES_ATTRIBUTE, Boolean.toString(nt.hasOrderableChildNodes()));
+            Element ntDef = document.createElement(DavConstants.NODETYPE_ELEMENT);
+            ntDef.setAttribute(DavConstants.NAME_ATTRIBUTE, nt.getName());
+            ntDef.setAttribute(DavConstants.ISMIXIN_ATTRIBUTE, Boolean.toString(nt.isMixin()));
+            ntDef.setAttribute(DavConstants.HASORDERABLECHILDNODES_ATTRIBUTE, Boolean.toString(nt.hasOrderableChildNodes()));
             // JCR 2.0 extension
-            ntDef.setAttribute(ISABSTRACT_ATTRIBUTE, Boolean.toString(nt.isAbstract()));
+            ntDef.setAttribute(DavConstants.ISABSTRACT_ATTRIBUTE, Boolean.toString(nt.isAbstract()));
             // JCR 2.0 extension
-            ntDef.setAttribute(ISQUERYABLE_ATTRIBUTE, Boolean.toString(nt.isQueryable()));
+            ntDef.setAttribute(DavConstants.ISQUERYABLE_ATTRIBUTE, Boolean.toString(nt.isQueryable()));
 
             // declared supertypes
             NodeType[] snts = nt.getDeclaredSupertypes();
-            Element supertypes = DomUtil.addChildElement(ntDef, SUPERTYPES_ELEMENT, null);
+            Element supertypes = DomUtil.addChildElement(ntDef, DavConstants.SUPERTYPES_ELEMENT, null);
             for (int i = 0; i < snts.length; i++) {
-                DomUtil.addChildElement(supertypes, SUPERTYPE_ELEMENT, null, snts[i].getName());
+                DomUtil.addChildElement(supertypes, DavConstants.SUPERTYPE_ELEMENT, null, snts[i].getName());
             }
 
             // declared childnode defs
@@ -157,7 +159,7 @@
 
             String primaryItemName = nt.getPrimaryItemName();
             if (primaryItemName != null) {
-                ntDef.setAttribute(PRIMARYITEMNAME_ATTRIBUTE, primaryItemName);
+                ntDef.setAttribute(DavConstants.PRIMARYITEMNAME_ATTRIBUTE, primaryItemName);
             }
             report.appendChild(ntDef);
         }
@@ -176,16 +178,16 @@
         NodeTypeManager ntMgr = session.getWorkspace().getNodeTypeManager();
 
         // check the simple types first...
-        if (info.containsContentElement(XML_REPORT_ALLNODETYPES, NAMESPACE)) {
+        if (info.containsContentElement(DavConstants.XML_REPORT_ALLNODETYPES, Namespace.JCR)) {
             return ntMgr.getAllNodeTypes();
-        } else if (info.containsContentElement(XML_REPORT_MIXINNODETYPES, NAMESPACE)) {
+        } else if (info.containsContentElement(DavConstants.XML_REPORT_MIXINNODETYPES, Namespace.JCR)) {
             return ntMgr.getMixinNodeTypes();
-        } else if (info.containsContentElement(XML_REPORT_PRIMARYNODETYPES, NAMESPACE)) {
+        } else if (info.containsContentElement(DavConstants.XML_REPORT_PRIMARYNODETYPES, Namespace.JCR)) {
             return ntMgr.getPrimaryNodeTypes();
         } else {
             // None of the simple types. test if a report for individual
             // nodetype was request. If not, the request body is not valid.
-            List elemList = info.getContentElements(XML_NODETYPE, NAMESPACE);
+            List elemList = info.getContentElements(DavConstants.XML_NODETYPE, Namespace.JCR);
             if (elemList.isEmpty()) {
                 // throw exception if the request body does not contain a single nodetype element
                 throw new DavException(DavServletResponse.SC_BAD_REQUEST, "NodeTypes report: request body has invalid format.");
@@ -196,7 +198,7 @@
             Iterator elemIter = elemList.iterator();
             while (elemIter.hasNext()) {
                 Element el = ((Element)elemIter.next());
-                String nodetypeName = DomUtil.getChildTextTrim(el, XML_NODETYPENAME, NAMESPACE);
+                String nodetypeName = DomUtil.getChildTextTrim(el, DavConstants.XML_NODETYPENAME, Namespace.JCR);
                 if (nodetypeName != null) {
                     ntList.add(ntMgr.getNodeType(nodetypeName));
                 }
Index: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/ExportViewReport.java
===================================================================
--- jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/ExportViewReport.java	(revision 896818)
+++ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/ExportViewReport.java	(working copy)
@@ -25,6 +25,7 @@
 import org.apache.jackrabbit.webdav.version.report.ReportInfo;
 import org.apache.jackrabbit.webdav.version.report.ReportType;
 import org.apache.jackrabbit.webdav.xml.DomUtil;
+import org.apache.jackrabbit.webdav.xml.Namespace;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
@@ -49,7 +50,7 @@
  * and {@link Session#exportSystemView(String, java.io.OutputStream, boolean, boolean) SysView}
  * of the {@link javax.jcr.Item item} represented by the requested resource.
  * <p/>
- * The request body must contain a {@link ItemResourceConstants#NAMESPACE dcr}:exportview
+ * The request body must contain a {@link Namespace#JCR dcr}:exportview
  * element:
  * <pre>
  * &lt;!ELEMENT exportview  ( (sysview | docview)?, skipbinary?, norecurse ) &gt;
@@ -69,7 +70,7 @@
     /**
      * The exportview report type
      */
-    public static final ReportType EXPORTVIEW_REPORT = ReportType.register(REPORT_NAME, ItemResourceConstants.NAMESPACE, ExportViewReport.class);
+    public static final ReportType EXPORTVIEW_REPORT = ReportType.register(REPORT_NAME, Namespace.JCR, ExportViewReport.class);
 
     private String absNodePath;
 
@@ -119,8 +120,8 @@
      * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
      */
     public Element toXml(Document document) {
-        boolean skipBinary = getReportInfo().containsContentElement("skipbinary", ItemResourceConstants.NAMESPACE);
-        boolean noRecurse = getReportInfo().containsContentElement("norecurse", ItemResourceConstants.NAMESPACE);
+        boolean skipBinary = getReportInfo().containsContentElement("skipbinary", Namespace.JCR);
+        boolean noRecurse = getReportInfo().containsContentElement("norecurse", Namespace.JCR);
         // todo improve...
         try {
             // create tmpFile in default system-tmp directory
@@ -129,7 +130,7 @@
             tmpfile.deleteOnExit();
 
             FileOutputStream out = new FileOutputStream(tmpfile);
-            if (getReportInfo().containsContentElement("sysview", ItemResourceConstants.NAMESPACE)) {
+            if (getReportInfo().containsContentElement("sysview", Namespace.JCR)) {
                 getRepositorySession().exportSystemView(absNodePath, out, skipBinary, noRecurse);
             } else {
                 // default is docview
Index: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/RegisteredNamespacesReport.java
===================================================================
--- jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/RegisteredNamespacesReport.java	(revision 896818)
+++ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/RegisteredNamespacesReport.java	(working copy)
@@ -16,6 +16,7 @@
  */
 package org.apache.jackrabbit.webdav.jcr.version.report;
 
+import org.apache.jackrabbit.webdav.DavConstants;
 import org.apache.jackrabbit.webdav.DavException;
 import org.apache.jackrabbit.webdav.DavResource;
 import org.apache.jackrabbit.webdav.DavServletResponse;
@@ -24,6 +25,7 @@
 import org.apache.jackrabbit.webdav.version.report.ReportInfo;
 import org.apache.jackrabbit.webdav.version.report.ReportType;
 import org.apache.jackrabbit.webdav.xml.DomUtil;
+import org.apache.jackrabbit.webdav.xml.Namespace;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
@@ -58,7 +60,8 @@
     /**
      * The registered type of this report.
      */
-    public static final ReportType REGISTERED_NAMESPACES_REPORT = ReportType.register("registerednamespaces", ItemResourceConstants.NAMESPACE, RegisteredNamespacesReport.class);
+    public static final ReportType REGISTERED_NAMESPACES_REPORT =
+        ReportType.register(DavConstants.JCR_REGISTEREDNAMESPACES, Namespace.JCR, RegisteredNamespacesReport.class);
 
     private NamespaceRegistry nsReg;
 
@@ -103,13 +106,13 @@
      * @param document
      */
     public Element toXml(Document document)  {
-        Element report = DomUtil.createElement(document, "registerednamespaces-report", NAMESPACE);
+        Element report = DomUtil.createElement(document, "registerednamespaces-report", Namespace.JCR);
         try {
             String[] prefixes = nsReg.getPrefixes();
             for (int i = 0; i < prefixes.length; i++) {
-                Element elem = DomUtil.addChildElement(report, XML_NAMESPACE, NAMESPACE);
-                DomUtil.addChildElement(elem, XML_PREFIX, NAMESPACE, prefixes[i]);
-                DomUtil.addChildElement(elem, XML_URI, NAMESPACE, nsReg.getURI(prefixes[i]));
+                Element elem = DomUtil.addChildElement(report, DavConstants.XML_NAMESPACE, Namespace.JCR);
+                DomUtil.addChildElement(elem, DavConstants.XML_PREFIX, Namespace.JCR, prefixes[i]);
+                DomUtil.addChildElement(elem, DavConstants.XML_URI, Namespace.JCR, nsReg.getURI(prefixes[i]));
             }
         } catch (RepositoryException e) {
             // should not occur.
Index: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/RepositoryDescriptorsReport.java
===================================================================
--- jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/RepositoryDescriptorsReport.java	(revision 896818)
+++ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/RepositoryDescriptorsReport.java	(working copy)
@@ -16,13 +16,14 @@
  */
 package org.apache.jackrabbit.webdav.jcr.version.report;
 
+import org.apache.jackrabbit.webdav.DavConstants;
 import org.apache.jackrabbit.webdav.DavException;
 import org.apache.jackrabbit.webdav.DavResource;
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
 import org.apache.jackrabbit.webdav.version.report.Report;
 import org.apache.jackrabbit.webdav.version.report.ReportInfo;
 import org.apache.jackrabbit.webdav.version.report.ReportType;
 import org.apache.jackrabbit.webdav.xml.DomUtil;
+import org.apache.jackrabbit.webdav.xml.Namespace;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
@@ -52,14 +53,15 @@
  * @see javax.jcr.Repository#getDescriptorKeys()
  * @see javax.jcr.Repository#getDescriptor(String)
  */
-public class RepositoryDescriptorsReport extends AbstractJcrReport implements ItemResourceConstants {
+public class RepositoryDescriptorsReport extends AbstractJcrReport {
 
     private static Logger log = LoggerFactory.getLogger(RepositoryDescriptorsReport.class);
 
     /**
      * The registered type of this report.
      */
-    public static final ReportType REPOSITORY_DESCRIPTORS_REPORT = ReportType.register("repositorydescriptors", ItemResourceConstants.NAMESPACE, RepositoryDescriptorsReport.class);
+    public static final ReportType REPOSITORY_DESCRIPTORS_REPORT =
+        ReportType.register(DavConstants.JCR_REPOSITORYDESCRIPTORS, Namespace.JCR, RepositoryDescriptorsReport.class);
 
     /**
      * Returns {@link #REPOSITORY_DESCRIPTORS_REPORT} type.
@@ -98,10 +100,10 @@
      */
     public Element toXml(Document document) {
         Repository repository = getRepositorySession().getRepository();
-        Element report = DomUtil.createElement(document, "repositorydescriptors-report", NAMESPACE);
+        Element report = DomUtil.createElement(document, "repositorydescriptors-report", Namespace.JCR);
         for (String key : repository.getDescriptorKeys()) {
-            Element elem = DomUtil.addChildElement(report, XML_DESCRIPTOR, NAMESPACE);
-            DomUtil.addChildElement(elem, XML_DESCRIPTORKEY, NAMESPACE, key);
+            Element elem = DomUtil.addChildElement(report, DavConstants.XML_DESCRIPTOR, Namespace.JCR);
+            DomUtil.addChildElement(elem, DavConstants.XML_DESCRIPTORKEY, Namespace.JCR, key);
             for (Value v : repository.getDescriptorValues(key)) {
                 String value;
                 try {
@@ -110,9 +112,9 @@
                     log.error("Internal error while reading descriptor value: ", e);
                     value = repository.getDescriptor(key);
                 }
-                Element child = DomUtil.addChildElement(elem, XML_DESCRIPTORVALUE, NAMESPACE, value);
+                Element child = DomUtil.addChildElement(elem, DavConstants.XML_DESCRIPTORVALUE, Namespace.JCR, value);
                 if (PropertyType.STRING != v.getType()) {
-                    child.setAttribute(ATTR_VALUE_TYPE, PropertyType.nameFromValue(v.getType()));
+                    child.setAttribute(DavConstants.ATTR_VALUE_TYPE, PropertyType.nameFromValue(v.getType()));
                 }
             }
         }
Index: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/VersionControlledItemCollection.java
===================================================================
--- jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/VersionControlledItemCollection.java	(revision 896818)
+++ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/VersionControlledItemCollection.java	(working copy)
@@ -17,6 +17,7 @@
 package org.apache.jackrabbit.webdav.jcr;
 
 import org.apache.jackrabbit.JcrConstants;
+import org.apache.jackrabbit.webdav.DavConstants;
 import org.apache.jackrabbit.webdav.DavException;
 import org.apache.jackrabbit.webdav.DavLocatorFactory;
 import org.apache.jackrabbit.webdav.DavResource;
@@ -39,6 +40,7 @@
 import org.apache.jackrabbit.webdav.version.report.ReportType;
 import org.apache.jackrabbit.webdav.version.report.SupportedReportSetProperty;
 import org.apache.jackrabbit.webdav.xml.DomUtil;
+import org.apache.jackrabbit.webdav.xml.Namespace;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Element;
@@ -337,7 +339,7 @@
         try {
             Node node = (Node)item;
             Element udElem = updateInfo.getUpdateElement();
-            boolean removeExisting = DomUtil.hasChildElement(udElem, XML_REMOVEEXISTING, NAMESPACE);
+            boolean removeExisting = DomUtil.hasChildElement(udElem, DavConstants.XML_REMOVEEXISTING, Namespace.JCR);
 
             // register eventListener in order to be able to report the modified resources.
             EventListener el = new EListener(updateInfo.getPropertyNameSet(), ms);
@@ -353,7 +355,7 @@
                 String versionPath = getLocatorFromHref(hrefs[0]).getRepositoryPath();
                 String versionName = getItemName(versionPath);
 
-                String relPath = DomUtil.getChildText(udElem, XML_RELPATH, NAMESPACE);
+                String relPath = DomUtil.getChildText(udElem, XML_RELPATH, Namespace.JCR);
                 if (relPath == null) {
                     // restore version by name
                     node.restore(versionName, removeExisting);
Index: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/nodetype/PropertyDefinitionImpl.java
===================================================================
--- jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/nodetype/PropertyDefinitionImpl.java	(revision 896818)
+++ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/nodetype/PropertyDefinitionImpl.java	(working copy)
@@ -16,6 +16,7 @@
  */
 package org.apache.jackrabbit.webdav.jcr.nodetype;
 
+import org.apache.jackrabbit.webdav.DavConstants;
 import org.apache.jackrabbit.webdav.xml.DomUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -122,20 +123,20 @@
     public Element toXml(Document document) {
         Element elem = super.toXml(document);
 
-        elem.setAttribute(MULTIPLE_ATTRIBUTE, Boolean.toString(isMultiple()));
-        elem.setAttribute(REQUIREDTYPE_ATTRIBUTE, PropertyType.nameFromValue(getRequiredType()));
+        elem.setAttribute(DavConstants.MULTIPLE_ATTRIBUTE, Boolean.toString(isMultiple()));
+        elem.setAttribute(DavConstants.REQUIREDTYPE_ATTRIBUTE, PropertyType.nameFromValue(getRequiredType()));
 
         // JCR 2.0 extensions
-        elem.setAttribute(FULL_TEXT_SEARCHABLE_ATTRIBUTE, Boolean.toString(isFullTextSearchable()));
-        elem.setAttribute(QUERY_ORDERABLE_ATTRIBUTE, Boolean.toString(isQueryOrderable()));
+        elem.setAttribute(DavConstants.FULL_TEXT_SEARCHABLE_ATTRIBUTE, Boolean.toString(isFullTextSearchable()));
+        elem.setAttribute(DavConstants.QUERY_ORDERABLE_ATTRIBUTE, Boolean.toString(isQueryOrderable()));
 
         // default values may be 'null'
         Value[] values = getDefaultValues();
         if (values != null) {
-            Element dvElement = document.createElement(DEFAULTVALUES_ELEMENT);
+            Element dvElement = document.createElement(DavConstants.DEFAULTVALUES_ELEMENT);
             for (int i = 0; i < values.length; i++) {
                 try {
-                    Element valElem = document.createElement(DEFAULTVALUE_ELEMENT);
+                    Element valElem = document.createElement(DavConstants.DEFAULTVALUE_ELEMENT);
                     DomUtil.setText(valElem, values[i].getString());
                     dvElement.appendChild(valElem);
                 } catch (RepositoryException e) {
@@ -146,20 +147,20 @@
             elem.appendChild(dvElement);
         }
         // value constraints array is never null.
-        Element constrElem = document.createElement(VALUECONSTRAINTS_ELEMENT);
+        Element constrElem = document.createElement(DavConstants.VALUECONSTRAINTS_ELEMENT);
         String[] constraints = getValueConstraints();
         for (int i = 0; i < constraints.length; i++) {
-            Element vcElem = document.createElement(VALUECONSTRAINT_ELEMENT);
+            Element vcElem = document.createElement(DavConstants.VALUECONSTRAINT_ELEMENT);
             DomUtil.setText(vcElem, constraints[i]);
             constrElem.appendChild(vcElem);
         }
         elem.appendChild(constrElem);
 
         // JCR 2.0 extension
-        Element qopElem = document.createElement(AVAILABLE_QUERY_OPERATORS_ELEMENT);
+        Element qopElem = document.createElement(DavConstants.AVAILABLE_QUERY_OPERATORS_ELEMENT);
         String[] qops = getAvailableQueryOperators();
         for (int i = 0; i < qops.length; i++) {
-            Element opElem = document.createElement(AVAILABLE_QUERY_OPERATOR_ELEMENT);
+            Element opElem = document.createElement(DavConstants.AVAILABLE_QUERY_OPERATOR_ELEMENT);
             DomUtil.setText(opElem, qops[i]);
             qopElem.appendChild(opElem);
         }
@@ -168,11 +169,11 @@
     }
 
     /**
-     * Returns {@link #PROPERTYDEFINITION_ELEMENT}.
+     * Returns {@link DavConstants#PROPERTYDEFINITION_ELEMENT}.
      *
-     * @return always returns {@link #PROPERTYDEFINITION_ELEMENT}
+     * @return always returns {@link DavConstants#PROPERTYDEFINITION_ELEMENT}
      */
     String getElementName() {
-        return PROPERTYDEFINITION_ELEMENT;
+        return DavConstants.PROPERTYDEFINITION_ELEMENT;
     }
 }
\ No newline at end of file
Index: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/nodetype/NodeDefinitionImpl.java
===================================================================
--- jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/nodetype/NodeDefinitionImpl.java	(revision 896818)
+++ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/nodetype/NodeDefinitionImpl.java	(working copy)
@@ -16,6 +16,7 @@
  */
 package org.apache.jackrabbit.webdav.jcr.nodetype;
 
+import org.apache.jackrabbit.webdav.DavConstants;
 import org.apache.jackrabbit.webdav.xml.DomUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -101,17 +102,17 @@
      */
     public Element toXml(Document document) {
         Element elem = super.toXml(document);
-        elem.setAttribute(SAMENAMESIBLINGS_ATTRIBUTE, Boolean.toString(allowsSameNameSiblings()));
+        elem.setAttribute(DavConstants.SAMENAMESIBLINGS_ATTRIBUTE, Boolean.toString(allowsSameNameSiblings()));
         // defaultPrimaryType can be 'null'
         NodeType defaultPrimaryType = getDefaultPrimaryType();
         if (defaultPrimaryType != null) {
-            elem.setAttribute(DEFAULTPRIMARYTYPE_ATTRIBUTE, defaultPrimaryType.getName());
+            elem.setAttribute(DavConstants.DEFAULTPRIMARYTYPE_ATTRIBUTE, defaultPrimaryType.getName());
         }
         // reqPrimaryTypes: minimal set is nt:base.
         NodeType[] nts = getRequiredPrimaryTypes();
-        Element reqPrimaryTypes = document.createElement(REQUIREDPRIMARYTYPES_ELEMENT);
+        Element reqPrimaryTypes = document.createElement(DavConstants.REQUIREDPRIMARYTYPES_ELEMENT);
         for (int i = 0; i < nts.length; i++) {
-            Element rptElem = document.createElement(REQUIREDPRIMARYTYPE_ELEMENT);
+            Element rptElem = document.createElement(DavConstants.REQUIREDPRIMARYTYPE_ELEMENT);
             DomUtil.setText(rptElem, nts[i].getName());
             reqPrimaryTypes.appendChild(rptElem);
 
@@ -121,12 +122,12 @@
     }
 
     /**
-     * Returns {@link #CHILDNODEDEFINITION_ELEMENT}
+     * Returns {@link DavConstants#CHILDNODEDEFINITION_ELEMENT}
      *
-     * @return always returns {@link #CHILDNODEDEFINITION_ELEMENT}.
+     * @return always returns {@link DavConstants#CHILDNODEDEFINITION_ELEMENT}.
      */
     String getElementName() {
-        return CHILDNODEDEFINITION_ELEMENT;
+        return DavConstants.CHILDNODEDEFINITION_ELEMENT;
     }
 
 }
\ No newline at end of file
Index: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/nodetype/NodeTypeConstants.java
===================================================================
--- jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/nodetype/NodeTypeConstants.java	(revision 896818)
+++ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/nodetype/NodeTypeConstants.java	(working copy)
@@ -1,158 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr.nodetype;
-
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
-import org.apache.jackrabbit.webdav.xml.Namespace;
-
-/**
- * <code>NodeTypeConstants</code> used to represent nodetype definitions in
- * Xml.
- *
- * @see javax.jcr.nodetype.NodeType
- */
-public interface NodeTypeConstants {
-
-    public static final Namespace NAMESPACE = ItemResourceConstants.NAMESPACE;
-
-    public static final String XML_NODETYPENAME = "nodetypename";
-
-    public static final String XML_REPORT_ALLNODETYPES = "all-nodetypes";
-    public static final String XML_REPORT_MIXINNODETYPES = "mixin-nodetypes";
-    public static final String XML_REPORT_PRIMARYNODETYPES = "primary-nodetypes";
-    public static final String XML_NODETYPES = "nodetypes";
-    public static final String XML_NODETYPE = "nodetype";
-
-    //------< copied from org.apache.jackrabbit.core.nodetype.xml.Constants >---
-
-    /** Name of the node type definition root element. */
-    String NODETYPES_ELEMENT = "nodeTypes";
-
-    /** Name of the node type definition element. */
-    String NODETYPE_ELEMENT = "nodeType";
-
-    /** Name of the child node definition element. */
-    String CHILDNODEDEFINITION_ELEMENT = "childNodeDefinition";
-
-    /** Name of the property definition element. */
-    String PROPERTYDEFINITION_ELEMENT = "propertyDefinition";
-
-    /** Name of the <code>isMixin</code> attribute. */
-    String ISMIXIN_ATTRIBUTE = "isMixin";
-
-    /** Name of the <code>hasOrderableChildNodes</code> attribute. */
-    String HASORDERABLECHILDNODES_ATTRIBUTE = "hasOrderableChildNodes";
-
-    /**
-     * Name of the <code>isAbstract</code> attribute.
-     * @since JCR 2.0
-     */
-    String ISABSTRACT_ATTRIBUTE = "isAbstract";
-
-    /**
-     * Name of the <code>isQueryable</code> attribute.
-     * @since JCR 2.0
-     */
-    String ISQUERYABLE_ATTRIBUTE = "isQueryable";
-
-    /** Name of the primary item name attribute. */
-    String PRIMARYITEMNAME_ATTRIBUTE = "primaryItemName";
-
-    /** Name of the supertypes element. */
-    String SUPERTYPES_ELEMENT = "supertypes";
-
-    /** Name of the supertype element. */
-    String SUPERTYPE_ELEMENT = "supertype";
-
-    /** Name of the <code>name</code> attribute. */
-    String NAME_ATTRIBUTE = "name";
-
-    /** Name of the <code>autoCreated</code> attribute. */
-    String AUTOCREATED_ATTRIBUTE = "autoCreated";
-
-    /** Name of the <code>mandatory</code> attribute. */
-    String MANDATORY_ATTRIBUTE = "mandatory";
-
-    /** Name of the <code>onParentVersion</code> attribute. */
-    String ONPARENTVERSION_ATTRIBUTE = "onParentVersion";
-
-    /** Name of the <code>protected</code> attribute. */
-    String PROTECTED_ATTRIBUTE = "protected";
-
-    /** Name of the required type attribute. */
-    String REQUIREDTYPE_ATTRIBUTE = "requiredType";
-
-    /** Name of the value constraints element. */
-    String VALUECONSTRAINTS_ELEMENT = "valueConstraints";
-
-    /** Name of the value constraint element. */
-    String VALUECONSTRAINT_ELEMENT = "valueConstraint";
-
-    /** Name of the default values element. */
-    String DEFAULTVALUES_ELEMENT = "defaultValues";
-
-    /** Name of the default value element. */
-    String DEFAULTVALUE_ELEMENT = "defaultValue";
-
-    /** Name of the <code>multiple</code> attribute. */
-    String MULTIPLE_ATTRIBUTE = "multiple";
-
-    /** Name of the required primary types element. */
-    String REQUIREDPRIMARYTYPES_ELEMENT = "requiredPrimaryTypes";
-
-    /** Name of the required primary type element. */
-    String REQUIREDPRIMARYTYPE_ELEMENT = "requiredPrimaryType";
-
-    /** Name of the default primary type attribute. */
-    String DEFAULTPRIMARYTYPE_ATTRIBUTE = "defaultPrimaryType";
-
-    /** Name of the <code>sameNameSiblings</code> attribute. */
-    String SAMENAMESIBLINGS_ATTRIBUTE = "sameNameSiblings";
-
-    /**
-     * Name of the availableQueryOperators element.
-     * @since JCR 2.0
-     */
-    String AVAILABLE_QUERY_OPERATORS_ELEMENT = "availableQueryOperators";
-
-    /**
-     * Name of the availableQueryOperator element.
-     * @since JCR 2.0
-     */
-    String AVAILABLE_QUERY_OPERATOR_ELEMENT = "availableQueryOperator";
-
-    /**
-     * Name of the fullTextSearchable attribute.
-     * @since JCR 2.0
-     */
-    String FULL_TEXT_SEARCHABLE_ATTRIBUTE = "fullTextSearchable";
-
-    /**
-     * Name of the queryOrderable attribute.
-     * @since JCR 2.0
-     */
-    String QUERY_ORDERABLE_ATTRIBUTE = "queryOrderable";
-
-    //----------< attr. not defined by copied from o.a.j.core.n.x.Constants >---
-    /**
-     * Name of the declaring nodetype. This value is not needed during
-     * discovery of nodetype definitions. However if the definition of an item is
-     * retrieved (instead of being calculated on the client), this information is
-     * needed
-     */
-    String DECLARINGNODETYPE_ATTRIBUTE = "declaringNodeType";
-}
\ No newline at end of file
Index: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/nodetype/ItemDefinitionImpl.java
===================================================================
--- jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/nodetype/ItemDefinitionImpl.java	(revision 896818)
+++ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/nodetype/ItemDefinitionImpl.java	(working copy)
@@ -16,6 +16,7 @@
  */
 package org.apache.jackrabbit.webdav.jcr.nodetype;
 
+import org.apache.jackrabbit.webdav.DavConstants;
 import org.apache.jackrabbit.webdav.xml.XmlSerializable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -29,7 +30,7 @@
 /**
  * <code>ItemDefinitionImpl</code>...
  */
-abstract public class ItemDefinitionImpl implements ItemDefinition, NodeTypeConstants, XmlSerializable {
+abstract public class ItemDefinitionImpl implements ItemDefinition, XmlSerializable {
 
     private static Logger log = LoggerFactory.getLogger(ItemDefinitionImpl.class);
 
@@ -105,13 +106,13 @@
         Element elem = document.createElement(getElementName());
         NodeType dnt = getDeclaringNodeType();
         if (dnt != null) {
-            elem.setAttribute(DECLARINGNODETYPE_ATTRIBUTE, dnt.getName());
+            elem.setAttribute(DavConstants.DECLARINGNODETYPE_ATTRIBUTE, dnt.getName());
         }
-        elem.setAttribute(NAME_ATTRIBUTE, getName());
-        elem.setAttribute(AUTOCREATED_ATTRIBUTE, Boolean.toString(isAutoCreated()));
-        elem.setAttribute(MANDATORY_ATTRIBUTE, Boolean.toString(isMandatory()));
-        elem.setAttribute(ONPARENTVERSION_ATTRIBUTE, OnParentVersionAction.nameFromValue(getOnParentVersion()));
-        elem.setAttribute(PROTECTED_ATTRIBUTE, Boolean.toString(isProtected()));
+        elem.setAttribute(DavConstants.NAME_ATTRIBUTE, getName());
+        elem.setAttribute(DavConstants.AUTOCREATED_ATTRIBUTE, Boolean.toString(isAutoCreated()));
+        elem.setAttribute(DavConstants.MANDATORY_ATTRIBUTE, Boolean.toString(isMandatory()));
+        elem.setAttribute(DavConstants.ONPARENTVERSION_ATTRIBUTE, OnParentVersionAction.nameFromValue(getOnParentVersion()));
+        elem.setAttribute(DavConstants.PROTECTED_ATTRIBUTE, Boolean.toString(isProtected()));
         return elem;
     }
 
Index: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/nodetype/NodeTypeProperty.java
===================================================================
--- jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/nodetype/NodeTypeProperty.java	(revision 896818)
+++ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/nodetype/NodeTypeProperty.java	(working copy)
@@ -20,6 +20,7 @@
 import org.apache.jackrabbit.webdav.property.DavProperty;
 import org.apache.jackrabbit.webdav.property.DavPropertyName;
 import org.apache.jackrabbit.webdav.xml.DomUtil;
+import org.apache.jackrabbit.webdav.xml.Namespace;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
@@ -35,7 +36,7 @@
 /**
  * <code>NodeTypeProperty</code>...
  */
-public class NodeTypeProperty extends AbstractDavProperty implements NodeTypeConstants {
+public class NodeTypeProperty extends AbstractDavProperty {
 
     private static Logger log = LoggerFactory.getLogger(NodeTypeProperty.class);
 
@@ -97,8 +98,8 @@
                 continue;
             }
             Element el = (Element)content;
-            if (XML_NODETYPE.equals(el.getLocalName()) && NodeTypeConstants.NAMESPACE.isSame(el.getNamespaceURI())) {
-                String nodetypeName = DomUtil.getChildText(el, XML_NODETYPENAME, NodeTypeConstants.NAMESPACE);
+            if (XML_NODETYPE.equals(el.getLocalName()) && Namespace.JCR.isSame(el.getNamespaceURI())) {
+                String nodetypeName = DomUtil.getChildText(el, XML_NODETYPENAME, Namespace.JCR);
                 if (nodetypeName != null && !"".equals(nodetypeName)) {
                     nodetypeNames.add(nodetypeName);
                 }
@@ -134,8 +135,8 @@
         Iterator it = getNodeTypeNames().iterator();
         while (it.hasNext()) {
             String name = it.next().toString();
-            Element ntElem = DomUtil.addChildElement(elem, XML_NODETYPE, NodeTypeConstants.NAMESPACE);
-            DomUtil.addChildElement(ntElem, XML_NODETYPENAME, NodeTypeConstants.NAMESPACE, name);
+            Element ntElem = DomUtil.addChildElement(elem, XML_NODETYPE, Namespace.JCR);
+            DomUtil.addChildElement(ntElem, XML_NODETYPENAME, Namespace.JCR, name);
         }
         return elem;
     }
Index: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DavLocatorFactoryImpl.java
===================================================================
--- jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DavLocatorFactoryImpl.java	(revision 896818)
+++ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DavLocatorFactoryImpl.java	(working copy)
@@ -17,6 +17,7 @@
 package org.apache.jackrabbit.webdav.jcr;
 
 import org.apache.jackrabbit.webdav.AbstractLocatorFactory;
+import org.apache.jackrabbit.webdav.DavConstants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -55,7 +56,7 @@
             return null;
         } else {
             // a repository item  -> remove wspPath + /jcr:root
-            String pfx = wspPath + ItemResourceConstants.ROOT_ITEM_RESOURCEPATH;
+            String pfx = wspPath + DavConstants.JCR_ROOT_ITEM_RESOURCEPATH;
             if (resourcePath.startsWith(pfx)) {
                 String repositoryPath = resourcePath.substring(pfx.length());
                 return (repositoryPath.length() == 0) ? ItemResourceConstants.ROOT_ITEM_PATH : repositoryPath;
@@ -77,7 +78,7 @@
         if (wspPath != null) {
             StringBuffer b = new StringBuffer(wspPath);
             if (repositoryPath != null) {
-                b.append(ItemResourceConstants.ROOT_ITEM_RESOURCEPATH);
+                b.append(DavConstants.JCR_ROOT_ITEM_RESOURCEPATH);
                 if (!ItemResourceConstants.ROOT_ITEM_PATH.equals(repositoryPath)) {
                     b.append(repositoryPath);
                 }
Index: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/lock/JcrActiveLock.java
===================================================================
--- jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/lock/JcrActiveLock.java	(revision 896818)
+++ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/lock/JcrActiveLock.java	(working copy)
@@ -175,6 +175,6 @@
      * @see ActiveLock#getScope()
      */
     public Scope getScope() {
-        return (lock.isSessionScoped()) ? ItemResourceConstants.EXCLUSIVE_SESSION : Scope.EXCLUSIVE;
+        return (lock.isSessionScoped()) ? Scope.JCR_EXCLUSIVE_SESSION : Scope.EXCLUSIVE;
     }
 }
\ No newline at end of file
Index: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/lock/SessionScopedLockEntry.java
===================================================================
--- jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/lock/SessionScopedLockEntry.java	(revision 896818)
+++ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/lock/SessionScopedLockEntry.java	(working copy)
@@ -45,6 +45,6 @@
      * @see LockEntry#getScope()
      */
     public Scope getScope() {
-        return ItemResourceConstants.EXCLUSIVE_SESSION;
+        return Scope.JCR_EXCLUSIVE_SESSION;
     }
 }
\ No newline at end of file
Index: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/observation/SubscriptionImpl.java
===================================================================
--- jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/observation/SubscriptionImpl.java	(revision 896818)
+++ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/observation/SubscriptionImpl.java	(working copy)
@@ -157,14 +157,14 @@
      * @param document
      */
     public Element toXml(Document document) {
-        Element subscr = DomUtil.createElement(document, XML_SUBSCRIPTION, NAMESPACE);
+        Element subscr = DomUtil.createElement(document, XML_SUBSCRIPTION, Namespace.JCR);
 
         subscr.appendChild(info.toXml(document));
         subscr.appendChild(DomUtil.depthToXml(info.isDeep(), document));
         subscr.appendChild(DomUtil.timeoutToXml(info.getTimeOut(), document));
 
         if (getSubscriptionId() != null) {
-            Element id = DomUtil.addChildElement(subscr, XML_SUBSCRIPTIONID, NAMESPACE);
+            Element id = DomUtil.addChildElement(subscr, XML_SUBSCRIPTIONID, Namespace.JCR);
             id.appendChild(DomUtil.hrefToXml(getSubscriptionId(), document));
         }
         return subscr;
@@ -214,7 +214,7 @@
     }
 
     private String[] getFilterValues(String filterLocalName) {
-        Filter[] filters = info.getFilters(filterLocalName, NAMESPACE);
+        Filter[] filters = info.getFilters(filterLocalName, Namespace.JCR);
         List values = new ArrayList();
         for (int i = 0; i < filters.length; i++) {
             String val = filters[i].getValue();
@@ -428,7 +428,7 @@
             default: // no default
                 throw new IllegalArgumentException("Invalid JCR event type: " + jcrEventType);
         }
-        return DefaultEventType.create(localName, NAMESPACE);
+        return DefaultEventType.create(localName, Namespace.JCR);
     }
 
     /**
@@ -452,7 +452,7 @@
      * JCR event type, such as returned by {@link #getEventType(int)}.
      */
     public static int getJcrEventType(EventType eventType) throws DavException {
-        if (eventType == null || !NAMESPACE.equals(eventType.getNamespace())) {
+        if (eventType == null || !Namespace.JCR.equals(eventType.getNamespace())) {
             throw new DavException(DavServletResponse.SC_UNPROCESSABLE_ENTITY, "Invalid JCR event type: "+ eventType + ": Namespace mismatch.");
         }
         int eType;
@@ -501,13 +501,13 @@
         }
 
         public Element toXml(Document document) {
-            Element bundle = DomUtil.createElement(document, XML_EVENTBUNDLE, NAMESPACE);
+            Element bundle = DomUtil.createElement(document, XML_EVENTBUNDLE, Namespace.JCR);
             if (transactionId != null) {
-                DomUtil.setAttribute(bundle, XML_EVENT_TRANSACTION_ID, NAMESPACE, transactionId);
+                DomUtil.setAttribute(bundle, XML_EVENT_TRANSACTION_ID, Namespace.JCR, transactionId);
             }
             while (events.hasNext()) {
                 Event event = events.nextEvent();
-                Element eventElem = DomUtil.addChildElement(bundle, XML_EVENT, NAMESPACE);
+                Element eventElem = DomUtil.addChildElement(bundle, XML_EVENT, Namespace.JCR);
                 // href
                 String eHref = "";
                 try {
@@ -519,32 +519,32 @@
                 }
                 eventElem.appendChild(DomUtil.hrefToXml(eHref, document));
                 // eventtype
-                Element eType = DomUtil.addChildElement(eventElem, XML_EVENTTYPE, NAMESPACE);
+                Element eType = DomUtil.addChildElement(eventElem, XML_EVENTTYPE, Namespace.JCR);
                 eType.appendChild(getEventType(event.getType()).toXml(document));
                 // user id
-                DomUtil.addChildElement(eventElem, XML_EVENTUSERID, NAMESPACE, event.getUserID());
+                DomUtil.addChildElement(eventElem, XML_EVENTUSERID, Namespace.JCR, event.getUserID());
 
                 // Additional JCR 2.0 event information
                 // userdata
                 try {
-                    DomUtil.addChildElement(eventElem, XML_EVENTUSERDATA, NAMESPACE, event.getUserData());
+                    DomUtil.addChildElement(eventElem, XML_EVENTUSERDATA, Namespace.JCR, event.getUserData());
                 } catch (RepositoryException e) {
                     log.error("Internal error while retrieving event user data.", e.getMessage());
                 }
                 // timestamp
                 try {
-                    DomUtil.addChildElement(eventElem, XML_EVENTDATE, NAMESPACE, String.valueOf(event.getDate()));
+                    DomUtil.addChildElement(eventElem, XML_EVENTDATE, Namespace.JCR, String.valueOf(event.getDate()));
                 } catch (RepositoryException e) {
                     log.error("Internal error while retrieving event date.", e.getMessage());
                 }
                 // identifier
                 try {
-                    DomUtil.addChildElement(eventElem, XML_EVENTIDENTIFIER, NAMESPACE, event.getIdentifier());
+                    DomUtil.addChildElement(eventElem, XML_EVENTIDENTIFIER, Namespace.JCR, event.getIdentifier());
                 } catch (RepositoryException e) {
                     log.error("Internal error while retrieving event identifier.", e.getMessage());
                 }
                 // info
-                Element info = DomUtil.addChildElement(eventElem, XML_EVENTINFO, NAMESPACE);
+                Element info = DomUtil.addChildElement(eventElem, XML_EVENTINFO, Namespace.JCR);
                 try {
                     Map m = event.getInfo();
                     for (Iterator it = m.keySet().iterator(); it.hasNext();) {
Index: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/AbstractResource.java
===================================================================
--- jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/AbstractResource.java	(revision 896818)
+++ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/AbstractResource.java	(working copy)
@@ -310,7 +310,7 @@
         if (l != null) {
             locks.add(l);
         } else {
-            l = getLock(Type.WRITE, ItemResourceConstants.EXCLUSIVE_SESSION);
+            l = getLock(Type.WRITE, Scope.JCR_EXCLUSIVE_SESSION);
             if (l != null) {
                 locks.add(l);
             }
@@ -580,7 +580,7 @@
             properties.add(new HrefProperty(DeltaVConstants.WORKSPACE, workspaceHref, true));
         }
         // name of the jcr workspace
-        properties.add(new DefaultDavProperty(ItemResourceConstants.JCR_WORKSPACE_NAME,
+        properties.add(new DefaultDavProperty(DavPropertyName.JCR_WORKSPACE_NAME,
                 getRepositorySession().getWorkspace().getName()));
 
         // TODO: required supported-live-property-set
Index: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemResource.java
===================================================================
--- jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemResource.java	(revision 896818)
+++ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemResource.java	(working copy)
@@ -123,7 +123,7 @@
             if (out != null && exists()) {
                 if (isMultiple()) {
                     Document doc = DomUtil.BUILDER_FACTORY.newDocumentBuilder().newDocument();
-                    doc.appendChild(getProperty(JCR_VALUES).toXml(doc));
+                    doc.appendChild(getProperty(DavPropertyName.JCR_VALUES).toXml(doc));
                     OutputFormat format = new OutputFormat("xml", "UTF-8", false);
                     XMLSerializer serializer = new XMLSerializer(out, format);
                     serializer.setNamespaces(true);
@@ -180,9 +180,9 @@
             int defaultType = prop.getType();
             ValueFactory vfact = getRepositorySession().getValueFactory();
             ValuesProperty vp = new ValuesProperty(property, defaultType, vfact);
-            if (property.getName().equals(JCR_VALUE)) {
+            if (property.getName().equals(DavPropertyName.JCR_VALUE)) {
                 prop.setValue(vp.getJcrValue(vp.getValueType(), vfact));
-            } else if (property.getName().equals(JCR_VALUES)) {
+            } else if (property.getName().equals(DavPropertyName.JCR_VALUES)) {
                 prop.setValue(vp.getJcrValues());
             } else {
                 throw new DavException(DavServletResponse.SC_CONFLICT);
@@ -311,14 +311,14 @@
                 properties.add(new DefaultDavProperty(DavPropertyName.GETCONTENTTYPE, contentType));
 
                 // add jcr-specific resource properties
-                properties.add(new DefaultDavProperty(JCR_TYPE, PropertyType.nameFromValue(type)));
+                properties.add(new DefaultDavProperty(DavPropertyName.JCR_TYPE, PropertyType.nameFromValue(type)));
                 if (isMultiple()) {
                     properties.add(new ValuesProperty(prop.getValues()));
                     properties.add(new LengthsProperty(prop.getLengths()));
                 } else {
                     properties.add(new ValuesProperty(prop.getValue()));
                     long length = prop.getLength();
-                    properties.add(new DefaultDavProperty(JCR_LENGTH, String.valueOf(length), true));
+                    properties.add(new DefaultDavProperty(DavPropertyName.JCR_LENGTH, String.valueOf(length), true));
                 }
             } catch (RepositoryException e) {
                 log.error("Failed to retrieve resource properties: "+e.getMessage());
Index: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemCollection.java
===================================================================
--- jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemCollection.java	(revision 896818)
+++ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemCollection.java	(working copy)
@@ -224,7 +224,7 @@
             throw new DavException(DavServletResponse.SC_NOT_FOUND);
         }
         DavPropertyName propName = property.getName();
-        if (JCR_MIXINNODETYPES.equals(propName)) {
+        if (DavPropertyName.JCR_MIXINNODETYPES.equals(propName)) {
             Node n = (Node) item;
             try {
                 NodeType[] existingMixin = n.getMixinNodeTypes();
@@ -250,7 +250,7 @@
             } catch (RepositoryException e) {
                 throw new JcrDavException(e);
             }
-        } else if (JCR_PRIMARYNODETYPE.equals(propName)) {
+        } else if (DavPropertyName.JCR_PRIMARYNODETYPE.equals(propName)) {
             Node n = (Node) item;
             try {
                 NodeTypeProperty ntProp = new NodeTypeProperty(property);
@@ -296,7 +296,7 @@
         if (!exists()) {
             throw new DavException(DavServletResponse.SC_NOT_FOUND);
         }
-        if (JCR_MIXINNODETYPES.equals(propertyName)) {
+        if (DavPropertyName.JCR_MIXINNODETYPES.equals(propertyName)) {
             // remove all mixin nodetypes
             try {
                 Node n = (Node)item;
@@ -395,7 +395,7 @@
                 } else {
                     // MKCOL, which is not allowed for existing resources
                     int uuidBehavior = ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW;
-                    String str = inputContext.getProperty(IMPORT_UUID_BEHAVIOR);
+                    String str = inputContext.getProperty(DavConstants.IMPORT_UUID_BEHAVIOR);
                     if (str != null) {
                         try {
                             uuidBehavior = Integer.parseInt(str);
@@ -446,7 +446,7 @@
                     // try to parse the request body into a 'values' property.
                     ValuesProperty vp = buildValuesProperty(new FileInputStream(tmpFile));
                     if (vp != null) {
-                        if (JCR_VALUE.equals(vp.getName())) {
+                        if (DavPropertyName.JCR_VALUE.equals(vp.getName())) {
                             n.setProperty(memberName, vp.getJcrValue());
                         } else {
                             n.setProperty(memberName, vp.getJcrValues());
@@ -620,7 +620,7 @@
                 throw new DavException(DavServletResponse.SC_NOT_FOUND);
             }
             try {
-                boolean sessionScoped = EXCLUSIVE_SESSION.equals(reqLockInfo.getScope());
+                boolean sessionScoped = Scope.JCR_EXCLUSIVE_SESSION.equals(reqLockInfo.getScope());
                 Lock jcrLock = ((Node)item).lock(reqLockInfo.isDeep(), sessionScoped);
                 ActiveLock lock = new JcrActiveLock(jcrLock);
                  // add reference to DAVSession for this lock
@@ -716,7 +716,7 @@
         }
         ActiveLock writeLock = getLock(Type.WRITE, Scope.EXCLUSIVE);
         if (writeLock == null) {
-            writeLock = getLock(Type.WRITE, EXCLUSIVE_SESSION);
+            writeLock = getLock(Type.WRITE, Scope.JCR_EXCLUSIVE_SESSION);
         }
         return writeLock;
     }
@@ -889,20 +889,20 @@
 
             // add node-specific resource properties
             try {
-                properties.add(new NodeTypeProperty(JCR_PRIMARYNODETYPE, n.getPrimaryNodeType(), false));
-                properties.add(new NodeTypeProperty(JCR_MIXINNODETYPES, n.getMixinNodeTypes(), false));
-                properties.add(new DefaultDavProperty(JCR_INDEX, new Integer(n.getIndex()), true));
-                addHrefProperty(JCR_REFERENCES, n.getReferences(), true);
-                addHrefProperty(JCR_WEAK_REFERENCES, n.getWeakReferences(), true);
+                properties.add(new NodeTypeProperty(DavPropertyName.JCR_PRIMARYNODETYPE, n.getPrimaryNodeType(), false));
+                properties.add(new NodeTypeProperty(DavPropertyName.JCR_MIXINNODETYPES, n.getMixinNodeTypes(), false));
+                properties.add(new DefaultDavProperty(DavPropertyName.JCR_INDEX, new Integer(n.getIndex()), true));
+                addHrefProperty(DavPropertyName.JCR_REFERENCES, n.getReferences(), true);
+                addHrefProperty(DavPropertyName.JCR_WEAK_REFERENCES, n.getWeakReferences(), true);
                 if (n.isNodeType(JcrConstants.MIX_REFERENCEABLE)) {
-                    properties.add(new DefaultDavProperty(JCR_UUID, n.getUUID(), true));
+                    properties.add(new DefaultDavProperty(DavPropertyName.JCR_UUID, n.getUUID(), true));
                 }
             } catch (RepositoryException e) {
                 log.error("Failed to retrieve node-specific property: " + e);
             }
             try {
                 Item primaryItem = n.getPrimaryItem();
-                addHrefProperty(JCR_PRIMARYITEM, new Item[] {primaryItem}, true);
+                addHrefProperty(DavPropertyName.JCR_PRIMARYITEM, new Item[] {primaryItem}, true);
             } catch (ItemNotFoundException e) {
                 log.debug("No primary item present on this node '" + getResourcePath() + "'");
             } catch (RepositoryException e) {
Index: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/search/SearchResultProperty.java
===================================================================
--- jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/search/SearchResultProperty.java	(revision 896818)
+++ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/search/SearchResultProperty.java	(working copy)
@@ -17,11 +17,11 @@
 package org.apache.jackrabbit.webdav.jcr.search;
 
 import org.apache.jackrabbit.value.ValueHelper;
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
 import org.apache.jackrabbit.webdav.property.AbstractDavProperty;
 import org.apache.jackrabbit.webdav.property.DavProperty;
 import org.apache.jackrabbit.webdav.property.DavPropertyName;
 import org.apache.jackrabbit.webdav.xml.DomUtil;
+import org.apache.jackrabbit.webdav.xml.Namespace;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
@@ -39,11 +39,10 @@
  * <code>SearchResultProperty</code>...
  */
 // todo: find proper solution for transporting search results...
-public class SearchResultProperty extends AbstractDavProperty implements ItemResourceConstants {
+public class SearchResultProperty extends AbstractDavProperty {
 
     private static Logger log = LoggerFactory.getLogger(SearchResultProperty.class);
 
-    public static final DavPropertyName SEARCH_RESULT_PROPERTY = DavPropertyName.create("search-result-property", ItemResourceConstants.NAMESPACE);
     private static final String COLUMN = "column";
 
     private final String[] columnNames;
@@ -62,7 +61,7 @@
     public SearchResultProperty(String[] columnNames,
                                 String[] selectorNames,
                                 Value[] values) {
-        super(SEARCH_RESULT_PROPERTY, true);
+        super(DavPropertyName.JCR_SEARCH_RESULT_PROPERTY, true);
         this.columnNames = columnNames;
         this.selectorNames = selectorNames;
         this.values = values;
@@ -80,8 +79,8 @@
      */
     public SearchResultProperty(DavProperty property, ValueFactory valueFactory) throws RepositoryException {
         super(property.getName(), true);
-        if (!SEARCH_RESULT_PROPERTY.equals(getName())) {
-	    throw new IllegalArgumentException("SearchResultProperty may only be created from a property named " + SEARCH_RESULT_PROPERTY.toString());
+        if (!DavPropertyName.JCR_SEARCH_RESULT_PROPERTY.equals(getName())) {
+	    throw new IllegalArgumentException("SearchResultProperty may only be created from a property named " + DavPropertyName.JCR_SEARCH_RESULT_PROPERTY.toString());
 	}
 
         List<String> colList = new ArrayList<String>();
@@ -111,17 +110,17 @@
                                     List<Value> values,
                                     ValueFactory valueFactory)
         throws ValueFormatException, RepositoryException {
-        if (!DomUtil.matches(columnElement, COLUMN, ItemResourceConstants.NAMESPACE)) {
+        if (!DomUtil.matches(columnElement, COLUMN, Namespace.JCR)) {
             log.debug("dcr:column element expected within search result.");
             return;
         }
-        columnNames.add(DomUtil.getChildText(columnElement, JCR_NAME.getName(), JCR_NAME.getNamespace()));
-        selectorNames.add(DomUtil.getChildText(columnElement, JCR_SELECTOR_NAME.getName(), JCR_SELECTOR_NAME.getNamespace()));
+        columnNames.add(DomUtil.getChildText(columnElement, DavPropertyName.JCR_NAME.getName(), DavPropertyName.JCR_NAME.getNamespace()));
+        selectorNames.add(DomUtil.getChildText(columnElement, DavPropertyName.JCR_SELECTOR_NAME.getName(), DavPropertyName.JCR_SELECTOR_NAME.getNamespace()));
 
         Value jcrValue;
-        Element valueElement = DomUtil.getChildElement(columnElement, JCR_VALUE.getName(), JCR_VALUE.getNamespace());
+        Element valueElement = DomUtil.getChildElement(columnElement, DavPropertyName.JCR_VALUE.getName(), DavPropertyName.JCR_VALUE.getNamespace());
         if (valueElement != null) {
-            String typeStr = DomUtil.getAttribute(valueElement, ATTR_VALUE_TYPE, ItemResourceConstants.NAMESPACE);
+            String typeStr = DomUtil.getAttribute(valueElement, ATTR_VALUE_TYPE, Namespace.JCR);
             jcrValue = ValueHelper.deserialize(DomUtil.getText(valueElement),
                     PropertyType.valueFromName(typeStr), true, valueFactory);
         } else {
@@ -215,20 +214,20 @@
             String selectorName = selectorNames[i];
             Value propertyValue = values[i];
 
-            Element columnEl = DomUtil.addChildElement(elem, COLUMN, ItemResourceConstants.NAMESPACE);
-            DomUtil.addChildElement(columnEl, JCR_NAME.getName(), JCR_NAME.getNamespace(), propertyName);
+            Element columnEl = DomUtil.addChildElement(elem, COLUMN, Namespace.JCR);
+            DomUtil.addChildElement(columnEl, DavPropertyName.JCR_NAME.getName(), DavPropertyName.JCR_NAME.getNamespace(), propertyName);
             if (propertyValue != null) {
                 try {
                     String serializedValue = ValueHelper.serialize(propertyValue, true);
-                    Element xmlValue = DomUtil.addChildElement(columnEl, XML_VALUE, ItemResourceConstants.NAMESPACE, serializedValue);
+                    Element xmlValue = DomUtil.addChildElement(columnEl, XML_VALUE, Namespace.JCR, serializedValue);
                     String type = PropertyType.nameFromValue(propertyValue.getType());
-                    DomUtil.setAttribute(xmlValue, ATTR_VALUE_TYPE, ItemResourceConstants.NAMESPACE, type);
+                    DomUtil.setAttribute(xmlValue, ATTR_VALUE_TYPE, Namespace.JCR, type);
                 } catch (RepositoryException e) {
                     log.error(e.toString());
                 }
             }
             if (selectorName != null) {
-                DomUtil.addChildElement(columnEl, JCR_SELECTOR_NAME.getName(), JCR_SELECTOR_NAME.getNamespace(), selectorName);
+                DomUtil.addChildElement(columnEl, DavPropertyName.JCR_SELECTOR_NAME.getName(), DavPropertyName.JCR_SELECTOR_NAME.getNamespace(), selectorName);
             }
         }
         return elem;
Index: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/WorkspaceResourceImpl.java
===================================================================
--- jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/WorkspaceResourceImpl.java	(revision 896818)
+++ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/WorkspaceResourceImpl.java	(working copy)
@@ -25,6 +25,7 @@
 import org.apache.jackrabbit.webdav.version.MergeInfo;
 import org.apache.jackrabbit.webdav.version.LabelInfo;
 import org.apache.jackrabbit.webdav.version.VersionHistoryResource;
+import org.apache.jackrabbit.webdav.DavConstants;
 import org.apache.jackrabbit.webdav.DavResource;
 import org.apache.jackrabbit.webdav.DavException;
 import org.apache.jackrabbit.webdav.DavResourceIterator;
@@ -36,10 +37,12 @@
 import org.apache.jackrabbit.webdav.MultiStatus;
 import org.apache.jackrabbit.webdav.DavMethods;
 import org.apache.jackrabbit.webdav.xml.DomUtil;
+import org.apache.jackrabbit.webdav.xml.Namespace;
 import org.apache.jackrabbit.webdav.search.SearchResource;
 import org.apache.jackrabbit.webdav.jcr.property.NamespacesProperty;
 import org.apache.jackrabbit.webdav.jcr.version.report.JcrPrivilegeReport;
 import org.apache.jackrabbit.webdav.property.DavProperty;
+import org.apache.jackrabbit.webdav.property.DavPropertyName;
 import org.apache.jackrabbit.webdav.io.InputContext;
 import org.apache.jackrabbit.webdav.io.OutputContext;
 import org.w3c.dom.Element;
@@ -248,7 +251,7 @@
      * @see DavResource#setProperty(org.apache.jackrabbit.webdav.property.DavProperty)
      */
     public void setProperty(DavProperty property) throws DavException {
-        if (ItemResourceConstants.JCR_NAMESPACES.equals(property.getName())) {
+        if (DavPropertyName.JCR_NAMESPACES.equals(property.getName())) {
             NamespacesProperty nsp = new NamespacesProperty(property);
             try {
                 Map changes = new HashMap(nsp.getNamespaces());
@@ -294,7 +297,7 @@
            Object propEntry = changeList.get(0);
             // only modification of prop is allowed. removal is not possible
             if (propEntry instanceof DavProperty
-                && ItemResourceConstants.JCR_NAMESPACES.equals(((DavProperty)propEntry).getName())) {
+                && DavPropertyName.JCR_NAMESPACES.equals(((DavProperty)propEntry).getName())) {
                 DavProperty namespaceProp = (DavProperty) propEntry;
                 setProperty(namespaceProp);
             } else {
@@ -369,7 +372,7 @@
         MultiStatus ms = new MultiStatus();
         try {
             Element udElem = updateInfo.getUpdateElement();
-            boolean removeExisting = DomUtil.hasChildElement(udElem, ItemResourceConstants.XML_REMOVEEXISTING, ItemResourceConstants.NAMESPACE);
+            boolean removeExisting = DomUtil.hasChildElement(udElem, DavConstants.XML_REMOVEEXISTING, Namespace.JCR);
 
             // register eventListener in order to be able to report the modified resources.
             EventListener el = new EListener(updateInfo.getPropertyNameSet(), ms);
Index: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/JcrDavException.java
===================================================================
--- jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/JcrDavException.java	(revision 896818)
+++ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/JcrDavException.java	(working copy)
@@ -20,6 +20,7 @@
 import org.apache.jackrabbit.webdav.DavException;
 import org.apache.jackrabbit.webdav.DavServletResponse;
 import org.apache.jackrabbit.webdav.xml.DomUtil;
+import org.apache.jackrabbit.webdav.xml.Namespace;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
@@ -150,9 +151,9 @@
      */
     public Element toXml(Document document) {
         Element error = DomUtil.createElement(document, XML_ERROR, DavConstants.NAMESPACE);
-        Element excep = DomUtil.createElement(document, "exception", ItemResourceConstants.NAMESPACE);
-        DomUtil.addChildElement(excep, "class", ItemResourceConstants.NAMESPACE, exceptionClass.getName());
-        DomUtil.addChildElement(excep, "message", ItemResourceConstants.NAMESPACE, getMessage());
+        Element excep = DomUtil.createElement(document, "exception", Namespace.JCR);
+        DomUtil.addChildElement(excep, "class", Namespace.JCR, exceptionClass.getName());
+        DomUtil.addChildElement(excep, "message", Namespace.JCR, getMessage());
         error.appendChild(excep);
         return error;
     }
Index: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/AbstractItemResource.java
===================================================================
--- jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/AbstractItemResource.java	(revision 896818)
+++ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/AbstractItemResource.java	(working copy)
@@ -324,13 +324,13 @@
         super.initProperties();
         if (exists()) {
             try {
-                properties.add(new DefaultDavProperty(JCR_NAME, item.getName()));
-                properties.add(new DefaultDavProperty(JCR_PATH, item.getPath()));
-                properties.add(new DefaultDavProperty(JCR_DEPTH, String.valueOf(item.getDepth())));
+                properties.add(new DefaultDavProperty(DavPropertyName.JCR_NAME, item.getName()));
+                properties.add(new DefaultDavProperty(DavPropertyName.JCR_PATH, item.getPath()));
+                properties.add(new DefaultDavProperty(DavPropertyName.JCR_DEPTH, String.valueOf(item.getDepth())));
                 // add href-property for the items parent unless its the root item
                 if (item.getDepth() > 0) {
                     String parentHref = getLocatorFromItem(item.getParent()).getHref(true);
-                    properties.add(new HrefProperty(JCR_PARENT, parentHref, false));
+                    properties.add(new HrefProperty(DavPropertyName.JCR_PARENT, parentHref, false));
                 }
                 // protected 'definition' property revealing the item definition
                 ItemDefinitionImpl val;
@@ -339,7 +339,7 @@
                 } else {
                     val = PropertyDefinitionImpl.create(((Property)item).getDefinition());
                 }
-                properties.add(new DefaultDavProperty(JCR_DEFINITION, val, true));
+                properties.add(new DefaultDavProperty(DavPropertyName.JCR_DEFINITION, val, true));
             } catch (RepositoryException e) {
                 // should not get here
                 log.error("Error while accessing jcr properties: " + e.getMessage());
@@ -347,9 +347,9 @@
 
             // transaction resource additional protected properties
             if (item.isNew()) {
-                properties.add(new DefaultDavProperty(JCR_ISNEW, null, true));
+                properties.add(new DefaultDavProperty(DavPropertyName.JCR_ISNEW, null, true));
             } else if (item.isModified()) {
-                properties.add(new DefaultDavProperty(JCR_ISMODIFIED, null, true));
+                properties.add(new DefaultDavProperty(DavPropertyName.JCR_ISMODIFIED, null, true));
             }
         }
 
@@ -358,10 +358,10 @@
         properties.add(subsDiscovery);
 
         // TODO complete set of properties defined by RFC 3744
-        Privilege[] allPrivs = new Privilege[] {PRIVILEGE_JCR_READ,
-                                                PRIVILEGE_JCR_ADD_NODE,
-                                                PRIVILEGE_JCR_SET_PROPERTY,
-                                                PRIVILEGE_JCR_REMOVE};
+        Privilege[] allPrivs = new Privilege[] {Privilege.JCR_READ,
+                                                Privilege.JCR_ADD_NODE,
+                                                Privilege.JCR_SET_PROPERTY,
+                                                Privilege.JCR_REMOVE};
         List currentPrivs = new ArrayList();
         for (int i = 0; i < allPrivs.length; i++) {
             try {
