Index: src/main/java/org/apache/jackrabbit/oak/api/Tree.java
===================================================================
--- src/main/java/org/apache/jackrabbit/oak/api/Tree.java	(revision 1447663)
+++ src/main/java/org/apache/jackrabbit/oak/api/Tree.java	(working copy)
@@ -179,7 +179,7 @@
      *         child exists or the child is not accessible.
      */
     @CheckForNull
-    Tree getChild(String name);
+    Tree getChild(@Nonnull String name);
 
     /**
      * Determine if a child of this {@code Tree} instance exists. If no child
@@ -189,7 +189,7 @@
      * @return {@code true} if and only if a child with the given {@code name}
      *         exists and is accessible for the current content session.
      */
-    boolean hasChild(String name);
+    boolean hasChild(@Nonnull String name);
 
     /**
      * Determine the number of children of this {@code Tree} instance taking
Index: src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java
===================================================================
--- src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java	(revision 1447663)
+++ src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java	(working copy)
@@ -198,7 +198,8 @@
     }
 
     @Override
-    public TreeImpl getChild(String name) {
+    public TreeImpl getChild(@Nonnull String name) {
+        checkNotNull(name);
         root.checkLive();
         TreeImpl child = internalGetChild(name);
         if (child != null && canRead(child)) {
@@ -239,8 +240,7 @@
     }
 
     @Override
-    public boolean hasChild(String name) {
-        root.checkLive();
+    public boolean hasChild(@Nonnull String name) {
         return getChild(name) != null;
     }
 
Index: src/main/java/org/apache/jackrabbit/oak/spi/state/NodeBuilder.java
===================================================================
--- src/main/java/org/apache/jackrabbit/oak/spi/state/NodeBuilder.java	(revision 1447663)
+++ src/main/java/org/apache/jackrabbit/oak/spi/state/NodeBuilder.java	(working copy)
@@ -97,7 +97,7 @@
      * @return {@code true} if the named child node exists,
      *         {@code false} otherwise
      */
-    boolean hasChildNode(String name);
+    boolean hasChildNode(@Nonnull String name);
 
     /**
      * Returns the names of current child nodes.
@@ -213,6 +213,6 @@
      * @return child builder
      */
     @Nonnull
-    NodeBuilder child(String name);
+    NodeBuilder child(@Nonnull String name);
 
 }
Index: src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeState.java
===================================================================
--- src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeState.java	(revision 1447663)
+++ src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeState.java	(working copy)
@@ -16,6 +16,8 @@
  */
 package org.apache.jackrabbit.oak.plugins.memory;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.spi.state.AbstractNodeState;
 import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
@@ -78,11 +80,13 @@
 
     @Override
     public boolean hasChildNode(String name) {
+        checkNotNull(name);
         return nodes.containsKey(name);
     }
 
     @Override
     public NodeState getChildNode(String name) {
+        checkNotNull(name);
         return nodes.get(name);
     }
 
Index: src/main/java/org/apache/jackrabbit/oak/spi/state/AbstractNodeState.java
===================================================================
--- src/main/java/org/apache/jackrabbit/oak/spi/state/AbstractNodeState.java	(revision 1447663)
+++ src/main/java/org/apache/jackrabbit/oak/spi/state/AbstractNodeState.java	(working copy)
@@ -16,6 +16,8 @@
  */
 package org.apache.jackrabbit.oak.spi.state;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 import org.apache.jackrabbit.oak.api.PropertyState;
 
 import com.google.common.base.Function;
@@ -65,6 +67,7 @@
 
     @Override
     public NodeState getChildNode(String name) {
+        checkNotNull(name);
         for (ChildNodeEntry entry : getChildNodeEntries()) {
             if (name.equals(entry.getName())) {
                 return entry.getNodeState();
Index: src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeDefinitionStore.java
===================================================================
--- src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeDefinitionStore.java	(revision 1447663)
+++ src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeDefinitionStore.java	(working copy)
@@ -110,6 +110,9 @@
         }
         PrivilegeBits bits = PrivilegeBits.getInstance();
         for (String privilegeName : privilegeNames) {
+            if (privilegeName == null) {
+                break;
+            }
             Tree defTree = privilegesTree.getChild(privilegeName);
             if (defTree != null) {
                 bits.add(PrivilegeBits.getInstance(defTree));
Index: src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeState.java
===================================================================
--- src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeState.java	(revision 1447663)
+++ src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeState.java	(working copy)
@@ -205,6 +205,7 @@
 
     @Override
     public NodeState getChildNode(String name) {
+        checkNotNull(name);
         init();
         String childPath = childPaths.get(name);
         if (childPath == null && childNodeCount > MAX_CHILD_NODE_NAMES) {
Index: src/main/java/org/apache/jackrabbit/oak/spi/state/NodeState.java
===================================================================
--- src/main/java/org/apache/jackrabbit/oak/spi/state/NodeState.java	(revision 1447663)
+++ src/main/java/org/apache/jackrabbit/oak/spi/state/NodeState.java	(working copy)
@@ -134,7 +134,7 @@
      * @return {@code true} if the named child node exists,
      *         {@code false} otherwise
      */
-    boolean hasChildNode(String name);
+    boolean hasChildNode(@Nonnull String name);
 
     /**
      * Returns the named child node. The name is an opaque string and
@@ -149,7 +149,7 @@
      * @return named child node, or {@code null} if not found
      */
     @CheckForNull
-    NodeState getChildNode(String name);
+    NodeState getChildNode(@Nonnull String name);
 
     /**
      * Returns the number of child nodes of this node.
Index: src/main/java/org/apache/jackrabbit/oak/core/ReadOnlyTree.java
===================================================================
--- src/main/java/org/apache/jackrabbit/oak/core/ReadOnlyTree.java	(revision 1447663)
+++ src/main/java/org/apache/jackrabbit/oak/core/ReadOnlyTree.java	(working copy)
@@ -136,7 +136,7 @@
     }
 
     @Override
-    public ReadOnlyTree getChild(String name) {
+    public ReadOnlyTree getChild(@Nonnull String name) {
         NodeState child = state.getChildNode(name);
         if (child != null) {
             return new ReadOnlyTree(this, name, child);
@@ -156,8 +156,8 @@
     }
 
     @Override
-    public boolean hasChild(String name) {
-        return state.getChildNode(name) != null;
+    public boolean hasChild(@Nonnull String name) {
+        return state.hasChildNode(name);
     }
 
     @Override
Index: src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java
===================================================================
--- src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java	(revision 1447663)
+++ src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java	(working copy)
@@ -577,11 +577,13 @@
 
         @Override
         public boolean hasChildNode(String name) {
+            checkNotNull(name);
             return withNodes(base, nodes).hasChildNode(name);
         }
 
         @Override
         public NodeState getChildNode(String name) {
+            checkNotNull(name);
             return withNodes(base, nodes).getChildNode(name); // mutable
         }
 
Index: src/main/java/org/apache/jackrabbit/oak/plugins/memory/ModifiedNodeState.java
===================================================================
--- src/main/java/org/apache/jackrabbit/oak/plugins/memory/ModifiedNodeState.java	(revision 1447663)
+++ src/main/java/org/apache/jackrabbit/oak/plugins/memory/ModifiedNodeState.java	(working copy)
@@ -204,6 +204,7 @@
 
     @Override
     public boolean hasChildNode(String name) {
+        checkNotNull(name);
         NodeState child = nodes.get(name);
         if (child != null) {
             return true;
@@ -216,6 +217,7 @@
 
     @Override
     public NodeState getChildNode(String name) {
+        checkNotNull(name);
         NodeState child = nodes.get(name);
         if (child != null) {
             return child;
