diff --git a/stack/core/src/main/java/org/usergrid/persistence/cassandra/QueryProcessor.java b/stack/core/src/main/java/org/usergrid/persistence/cassandra/QueryProcessor.java
index b99fe56..b5d77a3 100644
--- a/stack/core/src/main/java/org/usergrid/persistence/cassandra/QueryProcessor.java
+++ b/stack/core/src/main/java/org/usergrid/persistence/cassandra/QueryProcessor.java
@@ -242,6 +242,16 @@
     }
 
 
+    /**
+     * Return the node id from the cursor cache
+     * @param nodeId
+     * @return
+     */
+    public ByteBuffer getCursorCache(int nodeId){
+        return cursorCache.getCursorBytes( nodeId );
+    }
+
+
     private SortPredicate getSort( String propertyName ) {
         for ( SortPredicate sort : sorts ) {
             if ( sort.getPropertyName().equals( propertyName ) ) {
@@ -384,7 +394,7 @@
             QueryNode leftResult = nodes.pop();
 
             // rewrite with the new Or operand
-            OrNode orNode = new OrNode( leftResult, rightResult );
+            OrNode orNode = new OrNode( leftResult, rightResult,  ++contextCount );
 
             nodes.push( orNode );
         }
diff --git a/stack/core/src/main/java/org/usergrid/persistence/query/ir/OrNode.java b/stack/core/src/main/java/org/usergrid/persistence/query/ir/OrNode.java
index 4fefdcf..2597312 100644
--- a/stack/core/src/main/java/org/usergrid/persistence/query/ir/OrNode.java
+++ b/stack/core/src/main/java/org/usergrid/persistence/query/ir/OrNode.java
@@ -16,15 +16,29 @@
 package org.usergrid.persistence.query.ir;
 
 
-/** @author tnine */
+/**
+ * @author tnine
+ */
 public class OrNode extends BooleanNode {
 
+    private final int id;
+
+
     /**
      * @param left
      * @param right
      */
-    public OrNode( QueryNode left, QueryNode right ) {
+    public OrNode( QueryNode left, QueryNode right, int id ) {
         super( left, right );
+        this.id = id;
+    }
+
+
+    /**
+     * Get the context id
+     */
+    public int getId() {
+        return this.id;
     }
 
 
diff --git a/stack/core/src/main/java/org/usergrid/persistence/query/ir/SearchVisitor.java b/stack/core/src/main/java/org/usergrid/persistence/query/ir/SearchVisitor.java
index 20837e3..665ddd2 100644
--- a/stack/core/src/main/java/org/usergrid/persistence/query/ir/SearchVisitor.java
+++ b/stack/core/src/main/java/org/usergrid/persistence/query/ir/SearchVisitor.java
@@ -119,7 +119,9 @@
         ResultIterator right = results.pop();
         ResultIterator left = results.pop();
 
-        UnionIterator union = new UnionIterator( queryProcessor.getPageSizeHint( node ) );
+        final int nodeId = node.getId();
+
+        UnionIterator union = new UnionIterator( queryProcessor.getPageSizeHint( node ), nodeId, queryProcessor.getCursorCache(nodeId  ) );
 
         if ( left != null ) {
             union.addIterator( left );
diff --git a/stack/core/src/main/java/org/usergrid/persistence/query/ir/result/UnionIterator.java b/stack/core/src/main/java/org/usergrid/persistence/query/ir/result/UnionIterator.java
index ec5d1a6..efd4e3d 100644
--- a/stack/core/src/main/java/org/usergrid/persistence/query/ir/result/UnionIterator.java
+++ b/stack/core/src/main/java/org/usergrid/persistence/query/ir/result/UnionIterator.java
@@ -16,6 +16,7 @@
 package org.usergrid.persistence.query.ir.result;
 
 
+import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -28,6 +29,8 @@
 import org.usergrid.persistence.cassandra.CursorCache;
 import org.usergrid.utils.UUIDUtils;
 
+import me.prettyprint.cassandra.serializers.UUIDSerializer;
+
 
 /**
  * Simple iterator to perform Unions
@@ -38,17 +41,24 @@
 
     private static final ScanColumnComparator COMP = new ScanColumnComparator();
 
+    private static final UUIDSerializer UUID_SERIALIZER = UUIDSerializer.get();
 
-     private SortedColumnList list;
 
+    private SortedColumnList list;
+
+    private final int id;
 
 
     /**
-     * @param pageSize
+     * @param pageSize The page size to return
+     * @param id The id assigned to this node
+     * @param minUuid The minimum UUID to return
      */
-    public UnionIterator( int pageSize ) {
+    public UnionIterator( int pageSize, int id, ByteBuffer minUuid ) {
         super( pageSize );
-        list = new SortedColumnList( pageSize );
+
+        this.id = id;
+        list = new SortedColumnList( pageSize, UUID_SERIALIZER.fromByteBuffer( minUuid ) );
     }
 
 
@@ -86,8 +96,6 @@
     }
 
 
-
-
     /*
      * (non-Javadoc)
      *
@@ -98,15 +106,16 @@
     @Override
     public void finalizeCursor( CursorCache cache, UUID lastLoaded ) {
 
+        ByteBuffer buff = UUIDSerializer.get().toByteBuffer( lastLoaded );
+        cache.setNextCursor( id, buff );
         //get our scan column and put them in the cache
-       //we finalize the cursor of the min
+        //we finalize the cursor of the min
     }
 
 
     /**
-     * A Sorted Set with a max size. When a new entry is added, the max is removed.  You can mark the next
-     * "min" by calling the mark method.  Values > min are accepted.  Values > min and that are over size are
-     * discarded
+     * A Sorted Set with a max size. When a new entry is added, the max is removed.  You can mark the next "min" by
+     * calling the mark method.  Values > min are accepted.  Values > min and that are over size are discarded
      */
     public static final class SortedColumnList {
 
@@ -120,34 +129,37 @@
         private ScanColumn min;
 
 
-        public SortedColumnList( int maxSize ) {
+        public SortedColumnList( final int maxSize, final UUID minUuid ) {
             //we need to allocate the extra space if required
-            this.list = new ArrayList<ScanColumn>(maxSize);
+            this.list = new ArrayList<ScanColumn>( maxSize );
             this.maxSize = maxSize;
+
+            if ( minUuid != null ) {
+                min = new AbstractScanColumn( minUuid, null ) {};
+            }
         }
 
 
         /**
          * Add the column to this list
-         * @param col
          */
         public void add( ScanColumn col ) {
             //less than our min, don't add
-            if(COMP.compare( min, col ) >= 0){
+            if ( COMP.compare( min, col ) >= 0 ) {
                 return;
             }
 
             int index = Collections.binarySearch( this.list, col, COMP );
 
             //already present
-            if(index > -1){
-                return ;
+            if ( index > -1 ) {
+                return;
             }
 
-            index = (index * -1) - 1;
+            index = ( index * -1 ) - 1;
 
             //outside the renage
-            if(index >= maxSize){
+            if ( index >= maxSize ) {
                 return;
             }
 
@@ -155,34 +167,31 @@
 
             final int size = this.list.size();
 
-            if(size > maxSize){
+            if ( size > maxSize ) {
                 this.list.subList( maxSize, size ).clear();
             }
-
         }
 
 
         /**
          * Add all the elements to this list
-         * @param cols
          */
         public void addAll( final Collection<? extends ScanColumn> cols ) {
-            for(ScanColumn col:cols){
-               add(col);
+            for ( ScanColumn col : cols ) {
+                add( col );
             }
         }
 
 
         /**
          * Returns a new list.  If no elements are present, returns null
-         * @return
          */
-        public Set<ScanColumn> asSet(){
-            if(this.list.size() == 0){
+        public Set<ScanColumn> asSet() {
+            if ( this.list.size() == 0 ) {
                 return null;
             }
 
-            return new LinkedHashSet<ScanColumn>(this.list);
+            return new LinkedHashSet<ScanColumn>( this.list );
         }
 
 
@@ -194,24 +203,20 @@
             final int size = this.list.size();
 
             //we don't have any elements in the list, and we've never set a min
-            if(size == 0){
+            if ( size == 0 ) {
                 return;
             }
 
-            min = this.list.get( size -1);
+            min = this.list.get( size - 1 );
         }
 
 
         /**
          * Clear the list
          */
-        public void clear(){
+        public void clear() {
             this.list.clear();
         }
-
-
-
-
     }
 
 
diff --git a/stack/core/src/test/java/org/usergrid/persistence/CollectionIT.java b/stack/core/src/test/java/org/usergrid/persistence/CollectionIT.java
index a362358..08c69af 100644
--- a/stack/core/src/test/java/org/usergrid/persistence/CollectionIT.java
+++ b/stack/core/src/test/java/org/usergrid/persistence/CollectionIT.java
@@ -579,11 +579,11 @@
 
         Entity returned = r.getEntities().get( 0 );
 
-        assertEquals( game2.getUuid(), returned.getUuid() );
+        assertEquals( game1.getUuid(), returned.getUuid() );
 
         returned = r.getEntities().get( 1 );
 
-        assertEquals( game1.getUuid(), returned.getUuid() );
+        assertEquals( game2.getUuid(), returned.getUuid() );
 
         query = Query.fromQL( "select * where( keywords contains 'Random' OR keywords contains 'Game')" );
 
@@ -593,11 +593,11 @@
 
         returned = r.getEntities().get( 0 );
 
-        assertEquals( game2.getUuid(), returned.getUuid() );
+        assertEquals( game1.getUuid(), returned.getUuid() );
 
         returned = r.getEntities().get( 1 );
 
-        assertEquals( game1.getUuid(), returned.getUuid() );
+        assertEquals( game2.getUuid(), returned.getUuid() );
 
         // field order shouldn't matter USERGRID-375
         query = Query.fromQL( "select * where keywords contains 'blah' OR title contains 'blah'" );
diff --git a/stack/core/src/test/java/org/usergrid/persistence/query/ir/result/UnionIteratorTest.java b/stack/core/src/test/java/org/usergrid/persistence/query/ir/result/UnionIteratorTest.java
index 79fc8af..683f00d 100644
--- a/stack/core/src/test/java/org/usergrid/persistence/query/ir/result/UnionIteratorTest.java
+++ b/stack/core/src/test/java/org/usergrid/persistence/query/ir/result/UnionIteratorTest.java
@@ -82,7 +82,7 @@
         fourth.add( id9 );
 
 
-        UnionIterator iter = new UnionIterator( 100 );
+        UnionIterator iter = new UnionIterator( 100, 0, null );
         iter.addIterator( first );
         iter.addIterator( second );
         iter.addIterator( third );
@@ -119,7 +119,7 @@
         first.add( id3 );
         first.add( id4 );
 
-        UnionIterator union = new UnionIterator( 100 );
+        UnionIterator union = new UnionIterator( 100, 0, null );
         union.addIterator( first );
 
         Set<ScanColumn> ids = union.next();
@@ -151,7 +151,7 @@
         second.add( id3 );
         second.add( id4 );
 
-        UnionIterator union = new UnionIterator( 100 );
+        UnionIterator union = new UnionIterator( 100, 0, null );
         union.addIterator( first );
         union.addIterator( second );
 
@@ -170,7 +170,7 @@
     @Test
     public void testNoIterator() {
 
-        UnionIterator union = new UnionIterator( 100 );
+        UnionIterator union = new UnionIterator( 100, 0, null );
 
         // now make sure it's right, only 1, 3 and 8 intersect
         assertFalse( union.hasNext() );
@@ -229,7 +229,7 @@
         third.add( thirdSet );
 
         // now intersect them and make sure we get all results in a small set
-        UnionIterator union = new UnionIterator( pageSize );
+        UnionIterator union = new UnionIterator( pageSize, 0, null );
         union.addIterator( first );
         union.addIterator( second );
         union.addIterator( third );
@@ -262,7 +262,7 @@
         UUID id5 = UUIDUtils.minTimeUUID( 5 );
 
 
-        UnionIterator union = new UnionIterator( 5 );
+        UnionIterator union = new UnionIterator( 5, 0, null );
 
         InOrderIterator first = new InOrderIterator( 100 );
 
