A method for implementing a non-volatile counter using non-volatile memory, the method comprising: distributing operations for storing a low word of a counter in non-volatile memory across memory cells in a memory array in the non-volatile memory; and storing additional bits of the counter in the non-volatile memory in memory cells outside of the memory array; wherein a location in the memory array at which the low word is stored is determined for each count based on the additional bits of the counter, and wherein the low word is a single bit or any other number of bits; wherein the counter is a multi-bit counter; characterised in that the memory array is formed by at least one byte and a plurality of memory pages in non-volatile memory, wherein the additional bits are stored in at least one of said memory pages, and wherein storing the low word comprises: determining an X offset having an initial value and determining a Y offset having an initial value; storing the low word in memory cells at a memory cell position equal to the Y offset on memory pages in the plurality of memory pages starting with the memory page corresponding to the page with a page index equal to the X offset; incrementing the X offset after a first number of updates to the memory cells at the memory cell position equal to the Y offset; resetting the X offset to the initial value and incrementing the Y offset when the X offset is incremented to a value greater than the number of memory pages in the plurality of memory pages; and repeatedly incrementing and resetting the X offset, while incrementing the Y offset until the Y offset is equal to the highest memory cell position within a memory page in the plurality of memory pages and the X offset is equal to the number of memory pages in the plurality of memory pages. distributing operations for storing a low word of a counter in non-volatile memory across memory cells in a memory array in the non-volatile memory; and storing additional bits of the counter in the non-volatile memory in memory cells outside of the memory array; wherein a location in the memory array at which the low word is stored is determined for each count based on the additional bits of the counter, and wherein the low word is a single bit or any other number of bits; wherein the counter is a multi-bit counter; characterised in that the memory array is formed by at least one byte and a plurality of memory pages in non-volatile memory, wherein the additional bits are stored in at least one of said memory pages, and wherein storing the low word comprises: determining an X offset having an initial value and determining a Y offset having an initial value; storing the low word in memory cells at a memory cell position equal to the Y offset on memory pages in the plurality of memory pages starting with the memory page corresponding to the page with a page index equal to the X offset; incrementing the X offset after a first number of updates to the memory cells at the memory cell position equal to the Y offset; resetting the X offset to the initial value and incrementing the Y offset when the X offset is incremented to a value greater than the number of memory pages in the plurality of memory pages; and repeatedly incrementing and resetting the X offset, while incrementing the Y offset until the Y offset is equal to the highest memory cell position within a memory page in the plurality of memory pages and the X offset is equal to the number of memory pages in the plurality of memory pages. determining an X offset having an initial value and determining a Y offset having an initial value; storing the low word in memory cells at a memory cell position equal to the Y offset on memory pages in the plurality of memory pages starting with the memory page corresponding to the page with a page index equal to the X offset; incrementing the X offset after a first number of updates to the memory cells at the memory cell position equal to the Y offset; resetting the X offset to the initial value and incrementing the Y offset when the X offset is incremented to a value greater than the number of memory pages in the plurality of memory pages; and repeatedly incrementing and resetting the X offset, while incrementing the Y offset until the Y offset is equal to the highest memory cell position within a memory page in the plurality of memory pages and the X offset is equal to the number of memory pages in the plurality of memory pages.