A system comprising: one or more non-volatile memory cells; one or more temperature sensors; and a controller (102,114, 204) configured to: receive a request to read data from one or more non-volatile memory cells; retrieve stored temperature information associated with the non-volatile memory cells, wherein the temperature information is associated with a temperature measured by the one or more temperature sensors at approximately at a time when the data was written to the non-volatile memory cells; read the data from the non-volatile memory cells, wherein each non-volatile memory cell stores a number of data bits, wherein the number of data bits is dependent upon the temperature measured by the one or more temperature sensors at approximately at the time when the data was written to the non-volatile memory cells; select a first temperature algorithm from one or more temperature algorithms; determine a current temperature; process the read data based on at least the retrieved temperature information, the determined current temperature, and the first temperature algorithm; perform an error checking operation on the processed data; select a second temperature algorithm from the one or more temperature algorithms dependent upon the error checking operation; re-process the read data dependent upon the retrieved temperature, the determined current temperature, and the second temperature algorithm and increment an iteration count; log an error condition responsive to a determination that the iteration count is equal to a predetermined threshold value; provide the processed data. one or more non-volatile memory cells; one or more temperature sensors; and a controller (102,114, 204) configured to: receive a request to read data from one or more non-volatile memory cells; retrieve stored temperature information associated with the non-volatile memory cells, wherein the temperature information is associated with a temperature measured by the one or more temperature sensors at approximately at a time when the data was written to the non-volatile memory cells; read the data from the non-volatile memory cells, wherein each non-volatile memory cell stores a number of data bits, wherein the number of data bits is dependent upon the temperature measured by the one or more temperature sensors at approximately at the time when the data was written to the non-volatile memory cells; select a first temperature algorithm from one or more temperature algorithms; determine a current temperature; process the read data based on at least the retrieved temperature information, the determined current temperature, and the first temperature algorithm; perform an error checking operation on the processed data; select a second temperature algorithm from the one or more temperature algorithms dependent upon the error checking operation; re-process the read data dependent upon the retrieved temperature, the determined current temperature, and the second temperature algorithm and increment an iteration count; log an error condition responsive to a determination that the iteration count is equal to a predetermined threshold value; provide the processed data. receive a request to read data from one or more non-volatile memory cells; retrieve stored temperature information associated with the non-volatile memory cells, wherein the temperature information is associated with a temperature measured by the one or more temperature sensors at approximately at a time when the data was written to the non-volatile memory cells; read the data from the non-volatile memory cells, wherein each non-volatile memory cell stores a number of data bits, wherein the number of data bits is dependent upon the temperature measured by the one or more temperature sensors at approximately at the time when the data was written to the non-volatile memory cells; select a first temperature algorithm from one or more temperature algorithms; determine a current temperature; process the read data based on at least the retrieved temperature information, the determined current temperature, and the first temperature algorithm; perform an error checking operation on the processed data; select a second temperature algorithm from the one or more temperature algorithms dependent upon the error checking operation; re-process the read data dependent upon the retrieved temperature, the determined current temperature, and the second temperature algorithm and increment an iteration count; log an error condition responsive to a determination that the iteration count is equal to a predetermined threshold value; provide the processed data.