diff --git oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java
index 3ec211f..e1e2cf8 100644
--- oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java
@@ -17,6 +17,8 @@
 package org.apache.jackrabbit.oak.plugins.index.property;
 
 import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.collect.Iterators.concat;
+import static com.google.common.collect.Iterators.singletonIterator;
 import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.INDEX_CONTENT_NODE_NAME;
 import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.INDEX_DEFINITIONS_NAME;
 import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.TYPE_PROPERTY_NAME;
@@ -24,10 +26,13 @@ import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.TYPE_PROPER
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.Set;
 
+import com.google.common.collect.Iterators;
 import org.apache.jackrabbit.oak.api.PropertyValue;
 import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.plugins.memory.MemoryChildNodeEntry;
 import org.apache.jackrabbit.oak.spi.query.Cursor;
 import org.apache.jackrabbit.oak.spi.query.Filter;
 import org.apache.jackrabbit.oak.spi.query.QueryIndex;
@@ -147,7 +152,7 @@ class PropertyIndex implements QueryIndex {
         // TODO support indexes on a path
         // currently, only indexes on the root node are supported
         NodeState state = root.getChildNode(INDEX_DEFINITIONS_NAME);
-        for (ChildNodeEntry entry : state.getChildNodeEntries()) {
+        for (ChildNodeEntry entry : reorderedEntries(state, filter)) {
             NodeState definition = entry.getNodeState();
             if (PROPERTY.equals(definition.getString(TYPE_PROPERTY_NAME))
                     && definition.hasChildNode(INDEX_CONTENT_NODE_NAME)) {
@@ -170,6 +175,25 @@ class PropertyIndex implements QueryIndex {
         return bestPlan;
     }
 
+    private static Iterable<? extends ChildNodeEntry> reorderedEntries(final NodeState state, Filter filter) {
+        //Special case uuid index such that for uuid index lookup query uuid index comes first
+        if (filter.getPropertyRestrictions().size() == 1 && filter.getPropertyRestriction("jcr:uuid") != null){
+            final NodeState uuidIdx = state.getChildNode("uuid");
+            if (uuidIdx.exists()){
+                return new Iterable<ChildNodeEntry>() {
+                    @Override
+                    public Iterator<ChildNodeEntry> iterator() {
+                        return concat(
+                                singletonIterator(new MemoryChildNodeEntry("uuid", uuidIdx)),
+                                state.getChildNodeEntries().iterator()
+                        );
+                    }
+                };
+            }
+        }
+        return state.getChildNodeEntries();
+    }
+
     //--------------------------------------------------------< QueryIndex >--
 
     @Override
