A method for storing data in a memory that stores groups of G data words with w data-bits per data word, comprising: generating a first generator polynomial g ( x) of a (n,k,d) cyclic error correcting code, wherein n is the code length, k is n minus the degree of the polynomial g ( x) and d is the minimum distance of the code; for each of the plurality of G data words in a group: generating first parity bits for the data word, wherein the first parity bits are the coefficients of a polynomial p ( x), wherein p ( x) = a ( x) · x n-k mod g(x), and wherein a ( x) is a binary polynomial with the coefficients of a ( x) being the data bits of the data word; generating first split parity bits of the data word based upon p ( x); and generating second split parity bits of the data word based upon the first split parity bits and p(x); combining the second split parity bits of each of the G data words into combined parity information Q, wherein combining the second split parity bits of each of the G data words into combined parity information Q comprises bitwise XORing the second split parity bits of all G data words such that if each of the G data words comprises N second split parity bits, the combined parity information Q also comprises N bits; distributing the bits of Q among the G data words; and storing the G data words in the memory, wherein each data word includes the w data-bits, the first split parity bits, and distributed bits of Q; the method further comprising encoding Q to obtain additional parity bits P; and distributing the bits of P among the G data words, wherein storing the G data words in the memory further comprises that each data word further includes distributed bits of P. generating a first generator polynomial g ( x) of a (n,k,d) cyclic error correcting code, wherein n is the code length, k is n minus the degree of the polynomial g ( x) and d is the minimum distance of the code; for each of the plurality of G data words in a group: generating first parity bits for the data word, wherein the first parity bits are the coefficients of a polynomial p ( x), wherein p ( x) = a ( x) · x n-k mod g(x), and wherein a ( x) is a binary polynomial with the coefficients of a ( x) being the data bits of the data word; generating first split parity bits of the data word based upon p ( x); and generating second split parity bits of the data word based upon the first split parity bits and p(x); combining the second split parity bits of each of the G data words into combined parity information Q, wherein combining the second split parity bits of each of the G data words into combined parity information Q comprises bitwise XORing the second split parity bits of all G data words such that if each of the G data words comprises N second split parity bits, the combined parity information Q also comprises N bits; distributing the bits of Q among the G data words; and storing the G data words in the memory, wherein each data word includes the w data-bits, the first split parity bits, and distributed bits of Q; the method further comprising encoding Q to obtain additional parity bits P; and distributing the bits of P among the G data words, wherein storing the G data words in the memory further comprises that each data word further includes distributed bits of P. generating first parity bits for the data word, wherein the first parity bits are the coefficients of a polynomial p ( x), wherein p ( x) = a ( x) · x n-k mod g(x), and wherein a ( x) is a binary polynomial with the coefficients of a ( x) being the data bits of the data word; generating first split parity bits of the data word based upon p ( x); and generating second split parity bits of the data word based upon the first split parity bits and p(x); generating first split parity bits of the data word based upon p ( x); and generating second split parity bits of the data word based upon the first split parity bits and p(x); combining the second split parity bits of each of the G data words into combined parity information Q, wherein combining the second split parity bits of each of the G data words into combined parity information Q comprises bitwise XORing the second split parity bits of all G data words such that if each of the G data words comprises N second split parity bits, the combined parity information Q also comprises N bits; distributing the bits of Q among the G data words; and storing the G data words in the memory, wherein each data word includes the w data-bits, the first split parity bits, and distributed bits of Q; the method further comprising encoding Q to obtain additional parity bits P; and distributing the bits of P among the G data words, wherein storing the G data words in the memory further comprises that each data word further includes distributed bits of P. encoding Q to obtain additional parity bits P; and distributing the bits of P among the G data words, wherein storing the G data words in the memory further comprises that each data word further includes distributed bits of P.