Index: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/ReadWriteNamespaceRegistry.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/ReadWriteNamespaceRegistry.java	(date 1350412218000)
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/ReadWriteNamespaceRegistry.java	(revision )
@@ -16,10 +16,14 @@
  */
 package org.apache.jackrabbit.oak.plugins.name;
 
+import java.util.Map;
+
 import javax.jcr.NamespaceException;
 import javax.jcr.RepositoryException;
+import javax.jcr.nodetype.NodeTypeTemplate;
 
 import org.apache.jackrabbit.JcrConstants;
+import org.apache.jackrabbit.commons.cnd.CompactNodeTypeDefReader;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Root;
@@ -114,6 +118,16 @@
             throw new RepositoryException(
                     "Failed to unregister namespace mapping for prefix "
                     + prefix, e);
+        }
+    }
+
+    public void registerNamespaces(CompactNodeTypeDefReader<NodeTypeTemplate, Map<String, String>> reader)
+            throws RepositoryException {
+        Map<String,String> mappings = reader.getNamespaceMapping();
+        for(Map.Entry<String,String> e : mappings.entrySet()){
+            String prefix = e.getKey();
+            String uri = e.getValue();
+            registerNamespace(prefix, uri);
         }
     }
 
Index: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadWriteNodeTypeManager.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadWriteNodeTypeManager.java	(date 1350412218000)
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadWriteNodeTypeManager.java	(revision )
@@ -132,16 +132,20 @@
     protected void refresh() throws RepositoryException {
     }
 
+    public CompactNodeTypeDefReader<NodeTypeTemplate, Map<String, String>> createCndReader(Reader cnd)
+            throws ParseException {
+        return new CompactNodeTypeDefReader<NodeTypeTemplate, Map<String, String>>(
+                cnd, null, new DefBuilderFactory(getNameMapper()));
+    }
+
     /**
      * Utility method for registering node types from a CND format.
-     * @param cnd  reader for the CND
+     * @param reader  reader for the CND
      * @throws ParseException  if parsing the CND fails
      * @throws RepositoryException  if registering the node types fails
      */
-    public void registerNodeTypes(Reader cnd) throws ParseException, RepositoryException {
-        CompactNodeTypeDefReader<NodeTypeTemplate, Map<String, String>> reader =
-                new CompactNodeTypeDefReader<NodeTypeTemplate, Map<String, String>>(
-                        cnd, null, new DefBuilderFactory(getNameMapper()));
+    public void registerNodeTypes(CompactNodeTypeDefReader<NodeTypeTemplate, Map<String, String>> reader)
+            throws ParseException, RepositoryException {
         Map<String, NodeTypeTemplate> templates = Maps.newHashMap();
         for (NodeTypeTemplate template : reader.getNodeTypeDefinitions()) {
             templates.put(template.getName(), template);
Index: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/BuiltInNamespaces.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/BuiltInNamespaces.java	(revision )
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/BuiltInNamespaces.java	(revision )
@@ -0,0 +1,82 @@
+/*
+ * 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.oak.plugins.name;
+
+
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.Map;
+
+import javax.annotation.Nonnull;
+import javax.jcr.nodetype.NodeTypeTemplate;
+
+import org.apache.jackrabbit.commons.cnd.CompactNodeTypeDefReader;
+import org.apache.jackrabbit.oak.api.Root;
+import org.apache.jackrabbit.oak.api.Tree;
+
+/**
+ * <code>BuiltInNamespaces</code> is a utility class that registers the built-in
+ * namespaces required for a JCR repository running on Oak.
+ */
+public class BuiltInNamespaces {
+    private final ReadWriteNamespaceRegistry registry;
+
+    private BuiltInNamespaces(final Root root) {
+        this.registry =  new ReadWriteNamespaceRegistry() {
+
+            @Nonnull
+            @Override
+            protected Root getWriteRoot() {
+                return root;
+            }
+
+            @Override
+            protected Tree getReadTree() {
+                return root.getTree(NAMESPACES_PATH);
+            }
+        };
+    }
+
+    /**
+     * Creates instance using the given {@link Root}.
+     *
+     * @param root the {@link Root} instance.
+     */
+    public static BuiltInNamespaces create(final Root root) {
+        return new BuiltInNamespaces(root);
+    }
+
+    public void register(CompactNodeTypeDefReader<NodeTypeTemplate, Map<String, String>> reader) {
+        // FIXME: migrate custom node types as well.
+        if (!namespacesInContent()) {
+            try {
+               registry.registerNamespaces(reader);
+            } catch (Exception e) {
+                throw new IllegalStateException(
+                        "Unable to load built-in node types", e);
+            }
+        }
+    }
+
+    private boolean namespacesInContent() {
+        Tree namespaces = registry.getReadTree();
+        return namespaces != null && namespaces.getChildrenCount() > 0;
+    }
+}
Index: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/InitialContent.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/InitialContent.java	(date 1350412218000)
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/InitialContent.java	(revision )
@@ -16,11 +16,17 @@
  */
 package org.apache.jackrabbit.oak.plugins.nodetype;
 
+import java.util.Map;
+
+import javax.jcr.nodetype.NodeTypeTemplate;
+
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Service;
+import org.apache.jackrabbit.commons.cnd.CompactNodeTypeDefReader;
 import org.apache.jackrabbit.mk.api.MicroKernel;
 import org.apache.jackrabbit.oak.Oak;
 import org.apache.jackrabbit.oak.api.Root;
+import org.apache.jackrabbit.oak.plugins.name.BuiltInNamespaces;
 import org.apache.jackrabbit.oak.spi.lifecycle.DefaultMicroKernelTracker;
 import org.apache.jackrabbit.oak.spi.lifecycle.MicroKernelTracker;
 import org.apache.jackrabbit.oak.spi.security.OpenSecurityProvider;
@@ -81,7 +87,16 @@
             mk.commit("/", "+\"oak:index\":{\"jcr:uuid\":{\"jcr:primaryType\":\"nam:oak:queryIndexDefinition\",\"unique\":true},\"rep:authorizableId\":{\"jcr:primaryType\":\"nam:oak:queryIndexDefinition\",\"unique\":true},\"rep:principalName\":{\"jcr:primaryType\":\"nam:oak:queryIndexDefinition\",\"unique\":true}}", null, null);
         }
 
-        BuiltInNodeTypes.register(createRoot(mk));
+        registerTypesAndNamespaces(createRoot(mk));
+    }
+
+    private void registerTypesAndNamespaces(final Root root){
+        BuiltInNodeTypes builtInTypes = BuiltInNodeTypes.create(root);
+        BuiltInNamespaces builtInNamespaces = BuiltInNamespaces.create(root);
+        CompactNodeTypeDefReader<NodeTypeTemplate, Map<String, String>> reader = builtInTypes.createReader();
+
+        builtInTypes.register(reader);
+        builtInNamespaces.register(reader);
     }
 
     private Root createRoot(MicroKernel mk) {
Index: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/BuiltInNodeTypes.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/BuiltInNodeTypes.java	(date 1350412218000)
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/BuiltInNodeTypes.java	(revision )
@@ -18,9 +18,12 @@
 
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.util.Map;
 
 import javax.annotation.Nonnull;
+import javax.jcr.nodetype.NodeTypeTemplate;
 
+import org.apache.jackrabbit.commons.cnd.CompactNodeTypeDefReader;
 import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.api.Tree;
 
@@ -50,24 +53,37 @@
     }
 
     /**
-     * Registers built in node types using the given {@link Root}.
+     * Creates instance using the given {@link Root}.
      *
      * @param root the {@link Root} instance.
      */
-    public static void register(final Root root) {
-        new BuiltInNodeTypes(root).registerBuiltinNodeTypes();
+    public static BuiltInNodeTypes create(final Root root){
+        return new BuiltInNodeTypes(root);
     }
 
-    private void registerBuiltinNodeTypes() {
-        // FIXME: migrate custom node types as well.
-        if (!nodeTypesInContent()) {
+
+    public CompactNodeTypeDefReader<NodeTypeTemplate, Map<String, String>> createReader() {
-            try {
-                InputStream stream = BuiltInNodeTypes.class.getResourceAsStream("builtin_nodetypes.cnd");
-                try {
+        try {
+            InputStream stream = BuiltInNodeTypes.class.getResourceAsStream("builtin_nodetypes.cnd");
+            try {
-                    ntMgr.registerNodeTypes(new InputStreamReader(stream, "UTF-8"));
+                CompactNodeTypeDefReader<NodeTypeTemplate, Map<String, String>> reader
+                        = ntMgr.createCndReader(new InputStreamReader(stream, "UTF-8"));
+                return reader;
-                } finally {
-                    stream.close();
-                }
+            } finally {
+                stream.close();
+            }
+        } catch (Exception e) {
+            throw new IllegalStateException(
+                    "Unable to load built-in node types", e);
+        }
+    }
+
+
+    public void register(CompactNodeTypeDefReader<NodeTypeTemplate, Map<String, String>> reader) {
+        // FIXME: migrate custom node types as well.
+        if (!nodeTypesInContent()) {
+            try {
+                ntMgr.registerNodeTypes(reader);
             } catch (Exception e) {
                 throw new IllegalStateException(
                         "Unable to load built-in node types", e);
Index: oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/TestContentLoader.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/TestContentLoader.java	(date 1350412218000)
+++ oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/TestContentLoader.java	(revision )
@@ -21,7 +21,9 @@
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.util.Calendar;
+import java.util.Map;
 
+import javax.jcr.NamespaceRegistry;
 import javax.jcr.Node;
 import javax.jcr.PathNotFoundException;
 import javax.jcr.PropertyType;
@@ -30,12 +32,18 @@
 import javax.jcr.Value;
 import javax.jcr.ValueFactory;
 import javax.jcr.nodetype.NodeTypeManager;
+import javax.jcr.nodetype.NodeTypeTemplate;
 
+import com.google.common.base.Preconditions;
 import org.apache.jackrabbit.commons.JcrUtils;
+import org.apache.jackrabbit.commons.cnd.CompactNodeTypeDefReader;
 import org.apache.jackrabbit.commons.cnd.ParseException;
+import org.apache.jackrabbit.oak.plugins.name.ReadWriteNamespaceRegistry;
 import org.apache.jackrabbit.oak.plugins.nodetype.ReadWriteNodeTypeManager;
 import org.apache.jackrabbit.value.BinaryValue;
 
+import static com.google.common.base.Preconditions.checkArgument;
+
 public class TestContentLoader {
 
     /**
@@ -47,7 +55,7 @@
         session.getWorkspace().getNamespaceRegistry().registerNamespace(
                 "test", "http://www.apache.org/jackrabbit/test");
 
-        registerTestNodeTypes(session.getWorkspace().getNodeTypeManager());
+        registerTestNodeTypes(session.getWorkspace().getNodeTypeManager(),session.getWorkspace().getNamespaceRegistry());
 
         Node data = getOrAddNode(session.getRootNode(), "testdata");
         addPropertyTestData(getOrAddNode(data, "property"));
@@ -64,13 +72,17 @@
         session.save();
     }
 
-    private static void registerTestNodeTypes(NodeTypeManager ntm) throws RepositoryException, ParseException, IOException {
+    private static void registerTestNodeTypes(NodeTypeManager ntm, NamespaceRegistry nsReg) throws RepositoryException, ParseException, IOException {
         InputStream stream = TestContentLoader.class.getResourceAsStream("test_nodetypes.cnd");
         try {
-            if (!(ntm instanceof ReadWriteNodeTypeManager)) {
-                throw new IllegalArgumentException("Need ReadWriteNodeTypeManager");
-            }
-            ((ReadWriteNodeTypeManager)ntm).registerNodeTypes(new InputStreamReader(stream, "UTF-8"));
+            checkArgument(ntm instanceof ReadWriteNodeTypeManager, "Need ReadWriteNodeTypeManager");
+            checkArgument(nsReg instanceof ReadWriteNamespaceRegistry, "Need ReadWriteNamespaceRegistry");
+            ReadWriteNodeTypeManager rwNtm = (ReadWriteNodeTypeManager) ntm;
+            ReadWriteNamespaceRegistry rwNsReg = (ReadWriteNamespaceRegistry) nsReg;
+            CompactNodeTypeDefReader<NodeTypeTemplate, Map<String, String>> reader =
+                    rwNtm.createCndReader(new InputStreamReader(stream, "UTF-8"));
+            rwNtm.registerNodeTypes(reader);
+            rwNsReg.registerNamespaces(reader);
         } finally {
             stream.close();
         }
