A method of operating non-volatile storage, comprising: reading a group of non-volatile storage elements on a memory die by applying successively read levels of a first set to said group, the group of non-volatile storage elements store a plurality of data states, each of the read levels in the first set being associated with a first pair of adjacent data states of the plurality of data states and each of the read levels in the first set differing from the preceding read level of the first set by a same amount; storing, on the memory die, read results associated to two consecutively applied read levels of the first set; determining a first count of how many of the non-volatile storage elements in the group showed a different read result between the reads for the two consecutively applied read levels of the first set, the determining is performed on the memory die using the read results stored on the memory die; establishing a first dynamic read level for distinguishing between the adjacent data states of said first pair based on the last of the two consecutively applied read levels of the first set when the first count reaches a first pre-determined criterion; and characterised by determining an initial read level based on the first dynamic read level; reading the group of non-volatile storage elements by applying successively read levels of a second set to said group of non-volatile storage elements, wherein each of the read levels in the second set being associated with a second pair of adjacent data states of the plurality of data states, the second pair being different from the first pair, and wherein each of the read levels in the second set differs from the preceding read level of the second set by said same amount and the initial read level is the first applied read level of the second set; storing, on the memory die, read results associated to two consecutively applied read levels of the second set; determining a second count of how many of the non-volatile storage elements in the group showed a different read result between the reads for the two consecutively applied read levels of the second set, the determining is performed on the memory die using the read results stored on the memory die; and establishing a second dynamic read level for distinguishing between the adjacent data states in the second pair based on the last of the two consecutively applied read levels of the second set when the second count reaches a second pre-determined criterion. reading a group of non-volatile storage elements on a memory die by applying successively read levels of a first set to said group, the group of non-volatile storage elements store a plurality of data states, each of the read levels in the first set being associated with a first pair of adjacent data states of the plurality of data states and each of the read levels in the first set differing from the preceding read level of the first set by a same amount; storing, on the memory die, read results associated to two consecutively applied read levels of the first set; determining a first count of how many of the non-volatile storage elements in the group showed a different read result between the reads for the two consecutively applied read levels of the first set, the determining is performed on the memory die using the read results stored on the memory die; establishing a first dynamic read level for distinguishing between the adjacent data states of said first pair based on the last of the two consecutively applied read levels of the first set when the first count reaches a first pre-determined criterion; and characterised by determining an initial read level based on the first dynamic read level; reading the group of non-volatile storage elements by applying successively read levels of a second set to said group of non-volatile storage elements, wherein each of the read levels in the second set being associated with a second pair of adjacent data states of the plurality of data states, the second pair being different from the first pair, and wherein each of the read levels in the second set differs from the preceding read level of the second set by said same amount and the initial read level is the first applied read level of the second set; storing, on the memory die, read results associated to two consecutively applied read levels of the second set; determining a second count of how many of the non-volatile storage elements in the group showed a different read result between the reads for the two consecutively applied read levels of the second set, the determining is performed on the memory die using the read results stored on the memory die; and establishing a second dynamic read level for distinguishing between the adjacent data states in the second pair based on the last of the two consecutively applied read levels of the second set when the second count reaches a second pre-determined criterion.