In one embodiment, a method is provided to receive a set of data and in an iterative process: C1 decode all first subsets of the set of data two or more times in each half iteration using two or more C1-decoding methods when a first subset is not decoded successfully using a first C1-decoding method, determine whether to stop decoding the set of data after the C1 decoding and output results of the C1 decoding, increment a half iteration counter to indicate completion of a half iteration, C2 decode all second subsets of the set of data, determine whether to stop decoding the set of data after the C2 decoding and output results of the C2 decoding, increment the half iteration counter to indicate completion of another half iteration, and output the set of decoded data when all subsets of the set of data are decoded successfully.