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.