A method for decoding a concatenated coding scheme including iterative belief propagation, BP, decoding of a low density parity check, LDPC, inner code with an iterative error correction circuit and algebraic decoding of an algebraic outer code with an algebraic error correction circuit , the decoding method comprising: receiving an LDPC codeword with the iterative error correction circuit that includes variable nodes and check nodes coupled according to an LDPC matrix of the LDPC code; iteratively error correcting the LDPC codeword with the iterative error correction circuit including: layered parity checking the LPDC codeword at the check nodes on a layer-by-layer basis, wherein one iteration includes more than one layer; updating the LDPC codeword after each layered parity checking by receiving at a variable node input from less than all of the check nodes coupled thereto; and stopping the iterative error correction for a particular layer of a particular iteration without error correcting a next layer of the particular iteration if the number of parity errors in the particular layer of the particular iteration is less than a threshold, wherein the threshold is greater than one, and wherein the particular layer is a layer other than a last layer of an iteration; transferring the updated LDPC codeword to the algebraic error correction circuit after stopping the iterative error correction; and error correcting the algebraic outer code with the algebraic error correction circuit . receiving an LDPC codeword with the iterative error correction circuit that includes variable nodes and check nodes coupled according to an LDPC matrix of the LDPC code; iteratively error correcting the LDPC codeword with the iterative error correction circuit including: layered parity checking the LPDC codeword at the check nodes on a layer-by-layer basis, wherein one iteration includes more than one layer; updating the LDPC codeword after each layered parity checking by receiving at a variable node input from less than all of the check nodes coupled thereto; and stopping the iterative error correction for a particular layer of a particular iteration without error correcting a next layer of the particular iteration if the number of parity errors in the particular layer of the particular iteration is less than a threshold, wherein the threshold is greater than one, and wherein the particular layer is a layer other than a last layer of an iteration; layered parity checking the LPDC codeword at the check nodes on a layer-by-layer basis, wherein one iteration includes more than one layer; updating the LDPC codeword after each layered parity checking by receiving at a variable node input from less than all of the check nodes coupled thereto; and stopping the iterative error correction for a particular layer of a particular iteration without error correcting a next layer of the particular iteration if the number of parity errors in the particular layer of the particular iteration is less than a threshold, wherein the threshold is greater than one, and wherein the particular layer is a layer other than a last layer of an iteration; transferring the updated LDPC codeword to the algebraic error correction circuit after stopping the iterative error correction; and error correcting the algebraic outer code with the algebraic error correction circuit . <EOS>