diff --git oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeState.java oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeState.java
index 0b56187..bc962b3 100644
--- oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeState.java
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeState.java
@@ -695,7 +695,7 @@ public class DocumentNodeState extends AbstractNodeState implements CacheValue {
                     return false;
                 } else if (current.hasNext()) {
                     return true;
-                } else if (currentRemaining > 0) {
+                } else if (currentRemaining != 0) {
                     // current returned less than fetchSize
                     return false;
                 }
diff --git oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java
index 2bfc799..84d4014 100644
--- oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java
+++ oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java
@@ -67,6 +67,7 @@ import javax.annotation.Nonnull;
 
 import com.google.common.base.Throwables;
 import com.google.common.collect.Iterables;
+import com.google.common.collect.Iterators;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
@@ -233,6 +234,45 @@ public class DocumentNodeStoreTest {
     }
 
     @Test
+    public void childNodeEntriesBigSize() throws Exception {
+        final AtomicInteger counter = new AtomicInteger();
+        DocumentStore docStore = new MemoryDocumentStore() {
+            @Nonnull
+            @Override
+            public <T extends Document> List<T> query(Collection<T> collection,
+                                                      String fromKey,
+                                                      String toKey,
+                                                      int limit) {
+                if (collection == Collection.NODES) {
+                    counter.incrementAndGet();
+                }
+                return super.query(collection, fromKey, toKey, limit);
+            }
+        };
+        DocumentNodeStore store = builderProvider.newBuilder()
+                .setDocumentStore(docStore).getNodeStore();
+        NodeBuilder root = store.getRoot().builder();
+        NodeBuilder cb = root.child("a");
+        int expectedCount = DocumentNodeState.INITIAL_FETCH_SIZE * 2;
+        for (int i = 0; i < expectedCount; i++) {
+            cb.child("node-" + i);
+        }
+        store.merge(root, EmptyHook.INSTANCE, CommitInfo.EMPTY);
+        counter.set(0);
+        // the following should just make one call to DocumentStore.query()
+        int actualCount = Iterators.size(store.getRoot().getChildNode("a").getChildNodeEntries().iterator());
+        assertEquals(expectedCount, actualCount);
+        assertEquals(0, counter.get());
+
+        counter.set(0);
+        // now the child node entries are cached and no call should happen
+        for (ChildNodeEntry e : store.getRoot().getChildNode("a").getChildNodeEntries()) {
+            e.getNodeState();
+        }
+        assertEquals(0, counter.get());
+    }
+
+    @Test
     public void rollback() throws Exception {
         final Map<Thread, Semaphore> locks = Collections.synchronizedMap(
                 new HashMap<Thread, Semaphore>());
