diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageMemory.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageMemory.java
index 61414ea..8a9cd5c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageMemory.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageMemory.java
@@ -39,6 +39,10 @@
 
     public Page readPage(int cacheId, long pageId) throws IgniteCheckedException;
 
+    public long readLockPageAddr(int cacheId, long pageId) throws IgniteCheckedException;
+
+    public void releaseReadLock(long absPtr) throws IgniteCheckedException;
+
     public long pageAddr(int cacheId, long pageId) throws IgniteCheckedException;
 
     /**
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java
index d5777de..ba906dc 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java
@@ -281,6 +281,23 @@
     }
 
     @Override
+    public long readLockPageAddr(int cacheId, long pageId) throws IgniteCheckedException {
+        Segment seg = segment(pageId);
+
+        long absPtr = seg.absolute(pageId);
+
+        if (readLockPage(absPtr, PageIdUtils.tag(pageId)))
+            return absPtr + PageMemoryNoStoreImpl.PAGE_OVERHEAD;
+
+        return -1L;
+    }
+
+    @Override
+    public void releaseReadLock(long absPtr) throws IgniteCheckedException {
+        readUnlockPage(absPtr - PageMemoryNoStoreImpl.PAGE_OVERHEAD);
+    }
+
+    @Override
     public long pageAddr(int cacheId, long pageId) throws IgniteCheckedException {
         Segment seg = segment(pageId);
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageNoStoreImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageNoStoreImpl.java
index 5fe15a0..552b28b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageNoStoreImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageNoStoreImpl.java
@@ -154,7 +154,7 @@
 
     /** {@inheritDoc} */
     @Override public void close() {
-        pageMem.releasePage(this);
+        //pageMem.releasePage(this);
     }
 
     /**
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/CacheDataRowAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/CacheDataRowAdapter.java
index 89636cb..5e4c8ec 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/CacheDataRowAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/CacheDataRowAdapter.java
@@ -76,31 +76,36 @@
         boolean first = true;
 
         do {
-            long buf = cctx.shared().database().pageMemory().pageAddr(cctx.cacheId(), pageId(nextLink));
+            long buf = cctx.shared().database().pageMemory().readLockPageAddr(cctx.cacheId(), pageId(nextLink));
 
-            DataPageIO io = DataPageIO.VERSION1;
+            try {
+                DataPageIO io = DataPageIO.VERSION1;
 
-            long addr = io.getPositionOnPayload(buf, itemId(nextLink));
+                long addr = io.getPositionOnPayload(buf, itemId(nextLink));
 
-            addr = addr + buf;
+                addr = addr + buf;
 
-            int len = GridUnsafe.UNSAFE.getInt(addr);
+                int len = GridUnsafe.UNSAFE.getInt(addr);
 
-            //byte type = buf.get();
+                //byte type = buf.get();
 
-            int size = Math.min(bytes.length, len);
+                int size = Math.min(bytes.length, len);
 
-            addr += 5;
+                addr += 5;
 
-            for (int i = 0; i < size; i++) {
-                byte b1 = GridUnsafe.UNSAFE.getByte(addr++);
-                byte b2 = bytes[i];
+                for (int i = 0; i < size; i++) {
+                    byte b1 = GridUnsafe.UNSAFE.getByte(addr++);
+                    byte b2 = bytes[i];
 
-                if (b1 != b2)
-                    return b1 > b2 ? 1 : -1;
+                    if (b1 != b2)
+                        return b1 > b2 ? 1 : -1;
+                }
+
+                return Integer.compare(len, bytes.length);
             }
-
-            return Integer.compare(len, bytes.length);
+            finally {
+                cctx.shared().database().pageMemory().releaseReadLock(buf);
+            }
         }
         while(nextLink != 0);
     }
@@ -170,15 +175,20 @@
         IncompleteObject<?> incomplete = null;
         boolean first = true;
 
-        long buf = cctx.shared().database().pageMemory().pageAddr(cctx.cacheId(), pageId(nextLink));
+        long buf = cctx.shared().database().pageMemory().readLockPageAddr(cctx.cacheId(), pageId(nextLink));
 
-        DataPageIO io = DataPageIO.VERSION1;
+        try {
+            DataPageIO io = DataPageIO.VERSION1;
 
-        long addr = io.getPositionOnPayload(buf, itemId(nextLink));
+            long addr = io.getPositionOnPayload(buf, itemId(nextLink));
 
-        addr = addr + buf;
+            addr = addr + buf;
 
-        readFullRow(coctx, addr, keyOnly);
+            readFullRow(coctx, addr, keyOnly);
+        }
+        finally {
+            cctx.shared().database().pageMemory().releaseReadLock(buf);
+        }
     }
 
     /**
