diff --git a/EPPlus/CellStore.cs b/EPPlus/CellStore.cs
index a3c8598..d977a96 100644
--- a/EPPlus/CellStore.cs
+++ b/EPPlus/CellStore.cs
@@ -68,7 +68,7 @@
         {
             var page = (short)(Row >> CellStore<int>.pageBits);
             _searchIx.Index = page;
-            var res = Array.BinarySearch(_pages, 0, PageCount, _searchIx);
+            var res = (_pages[page].Index == page) ? page : Array.BinarySearch(_pages, 0, PageCount, _searchIx);
             if (res >= 0)
             {
                 GetPage(Row, ref res);
@@ -263,7 +263,7 @@
         internal int GetPosition(int offset)
         {
             _searchIx.Index = (short)offset;
-            return Array.BinarySearch(Rows, 0, RowCount, _searchIx);
+            return (Rows[offset-1].Index == offset) ? offset-1 : Array.BinarySearch(Rows, 0, RowCount, _searchIx);
         }
         internal int GetNextRow(int row)
         {
@@ -355,7 +355,7 @@
         internal int GetPosition(int Column)
         {
             _searchIx.Index = (short)Column;
-            return Array.BinarySearch(_columnIndex, 0, ColumnCount, _searchIx);
+            return (_columnIndex[Column-1].Index == Column) ? Column-1 : Array.BinarySearch(_columnIndex, 0, ColumnCount, _searchIx);
         }
         internal CellStore<T> Clone()
         {
@@ -568,7 +568,7 @@
                     }
                     short ix = (short)(Row - pageItem.IndexOffset);
                     _searchIx.Index = ix;
-                    var cellPos = Array.BinarySearch(pageItem.Rows, 0, pageItem.RowCount, _searchIx);
+                    var cellPos = (pageItem.Rows[ix-1].Index == ix) ? ix-1 : Array.BinarySearch(pageItem.Rows, 0, pageItem.RowCount, _searchIx);
                     if (cellPos >= 0)
                     {
                         return pageItem.Rows[cellPos].IndexPointer;
@@ -609,7 +609,7 @@
         {
             lock (_columnIndex)
             {
-                var col = Array.BinarySearch(_columnIndex, 0, ColumnCount, new IndexBase() { Index = (short)(Column) });
+                var col = (_columnIndex[Column-1].Index == Column) ? Column-1 : Array.BinarySearch(_columnIndex, 0, ColumnCount, new IndexBase() { Index = (short)(Column) });
                 var page = (short)(Row >> pageBits);
                 if (col >= 0)
                 {
@@ -645,7 +645,7 @@
 
                     short ix = (short)(Row - ((pageItem.Index << pageBits) + pageItem.Offset));
                     _searchIx.Index = ix;
-                    var cellPos = Array.BinarySearch(pageItem.Rows, 0, pageItem.RowCount, _searchIx);
+                    var cellPos = (pageItem.Rows[ix].Index == ix) ? ix : Array.BinarySearch(pageItem.Rows, 0, pageItem.RowCount, _searchIx);
                     if (cellPos < 0)
                     {
                         cellPos = ~cellPos;
