diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc
index 5927b047f77..560001eddd5 100644
--- a/sql/ha_partition.cc
+++ b/sql/ha_partition.cc
@@ -6112,7 +6112,7 @@ int ha_partition::multi_range_key_create_key(RANGE_SEQ_IF *seq,
       end_key->key= m_mrr_range_current->key[1];
     }
 
-    m_mrr_range_current->ptr= m_mrr_range_current->key_multi_range.ptr;
+    m_mrr_range_current->ptr2= m_mrr_range_current->key_multi_range.ptr;
     m_mrr_range_current->key_multi_range.ptr= m_mrr_range_current;
 
     if (start_key->key && (start_key->flag & HA_READ_KEY_EXACT))
@@ -6253,9 +6255,11 @@ static bool partition_multi_range_key_skip_record(range_seq_t seq,
 {
   PARTITION_PART_KEY_MULTI_RANGE_HLD *hld=
     (PARTITION_PART_KEY_MULTI_RANGE_HLD *)seq;
+  PARTITION_KEY_MULTI_RANGE *pkmr= (PARTITION_KEY_MULTI_RANGE *)range_info;
   DBUG_ENTER("partition_multi_range_key_skip_record");
+  // TODO: also convert the rowid!
   DBUG_RETURN(hld->partition->m_seq_if->skip_record(hld->partition->m_seq,
-                                                    range_info, rowid));
+                                                    pkmr->ptr2, rowid));
 }
 
 
@@ -6264,9 +6268,10 @@ static bool partition_multi_range_key_skip_index_tuple(range_seq_t seq,
 {
   PARTITION_PART_KEY_MULTI_RANGE_HLD *hld=
     (PARTITION_PART_KEY_MULTI_RANGE_HLD *)seq;
+  PARTITION_KEY_MULTI_RANGE *pkmr= (PARTITION_KEY_MULTI_RANGE *)range_info;
   DBUG_ENTER("partition_multi_range_key_skip_index_tuple");
   DBUG_RETURN(hld->partition->m_seq_if->skip_index_tuple(hld->partition->m_seq,
-                                                         range_info));
+                                                         pkmr->ptr2));
 }
 
 ha_rows ha_partition::multi_range_read_info_const(uint keyno,
@@ -6502,7 +6507,7 @@ int ha_partition::multi_range_read_next(range_id_t *range_info)
     else if (unlikely((error= handle_ordered_next(table->record[0],
                                                   eq_range))))
       DBUG_RETURN(error);
-    *range_info= m_mrr_range_current->ptr;
+    *range_info= m_mrr_range_current->ptr2;
   }
   else
   {
@@ -6518,7 +6523,7 @@ int ha_partition::multi_range_read_next(range_id_t *range_info)
       DBUG_RETURN(error);
 
     *range_info=
-      ((PARTITION_KEY_MULTI_RANGE *) m_range_info[m_last_part])->ptr;
+      ((PARTITION_KEY_MULTI_RANGE *) m_range_info[m_last_part])->ptr2;
   }
   DBUG_RETURN(0);
 }
diff --git a/sql/ha_partition.h b/sql/ha_partition.h
index 6407a607fe7..e2d1b8c1fd9 100644
--- a/sql/ha_partition.h
+++ b/sql/ha_partition.h
@@ -184,17 +184,29 @@ class Partition_share : public Handler_share
                                      bool is_subpart);
 };
 
+/*
+  A range for the partitioned handler.
+*/
 typedef struct st_partition_key_multi_range
 {
   uint id;
+
   uchar *key[2];
   uint length[2];
+  
+  // This is passed to the underlying engine's interface
+  // key_multi_range.ptr points to some internal ha_partition structure
   KEY_MULTI_RANGE key_multi_range;
-  range_id_t ptr;
+
+  // range_id from the SQL layer.
+  range_id_t ptr2;
   st_partition_key_multi_range *next;
 } PARTITION_KEY_MULTI_RANGE;
 
 
+/*
+  A list PARTITION_KEY_MULTI_RANGE structures.
+*/
 typedef struct st_partition_part_key_multi_range
 {
   PARTITION_KEY_MULTI_RANGE *partition_key_multi_range;
@@ -203,10 +215,20 @@ typedef struct st_partition_part_key_multi_range
 
 
 class ha_partition;
+
+/*
+  The structure holding information about range sequence to be used with one
+  partition.
+*/
 typedef struct st_partition_part_key_multi_range_hld
 {
+  /* Owner object */
   ha_partition *partition;
+
+  // The partition this structure is for
   uint32 part_id;
+
+  // Current range we're iterating through.
   PARTITION_PART_KEY_MULTI_RANGE *partition_part_key_multi_range;
 } PARTITION_PART_KEY_MULTI_RANGE_HLD;
 
