A method comprising: receiving at a first device an encoded data stream transmitted over a communication channel from a second device, the encoded data stream including encoded data at one of a plurality of data rates; performing differential decoding on the encoded data to generate one or more streams of decoded data based on the data rate of the encoded data stream; selectively activating one or more of a plurality of Forward Error Correction, FEC, decoder units (506 - 506) in the first device based on the data rate of the encoded data stream, wherein each of the plurality of FEC decoder units (506 - 506) is configured to operate at a same data rate; and wherein performing differential decoding comprises performing turbo differential decoding on the encoded data by iterating between a soft-input soft-output differential decoder unit and one or more of a plurality of FEC decoder units (506 - 506) wherein each of the plurality of FEC decoder units (506 - 506) are configured to decode data at a particular data rate, and when the data rate of the encoded data is equal to four times the particular data rate and the modulation format of the encoded data is Quadrature Amplitude Modulation, QAM, the performing turbo differential decoding further comprising: performing N outer plurality of turbo differential decoding iterations with Quadrature Phase Shift Key QPSK differential decoding such that the QAM encoded data is treated as QPSK data, and correcting inter-quadrant errors that occur as a result of the QPSK differential decoding to produce a corrected outer QPSK constellation; rotating symbols of the outer QPSK constellation to an upper right quadrant such that a resulting QPSK sub-constellation is shifted to the origin; and performing N inner plurality of turbo differential decoding iterations on the QPSK sub-constellation. receiving at a first device an encoded data stream transmitted over a communication channel from a second device, the encoded data stream including encoded data at one of a plurality of data rates; performing differential decoding on the encoded data to generate one or more streams of decoded data based on the data rate of the encoded data stream; selectively activating one or more of a plurality of Forward Error Correction, FEC, decoder units (506 - 506) in the first device based on the data rate of the encoded data stream, wherein each of the plurality of FEC decoder units (506 - 506) is configured to operate at a same data rate; and wherein performing differential decoding comprises performing turbo differential decoding on the encoded data by iterating between a soft-input soft-output differential decoder unit and one or more of a plurality of FEC decoder units (506 - 506) performing N outer plurality of turbo differential decoding iterations with Quadrature Phase Shift Key QPSK differential decoding such that the QAM encoded data is treated as QPSK data, and correcting inter-quadrant errors that occur as a result of the QPSK differential decoding to produce a corrected outer QPSK constellation; rotating symbols of the outer QPSK constellation to an upper right quadrant such that a resulting QPSK sub-constellation is shifted to the origin; and performing N inner plurality of turbo differential decoding iterations on the QPSK sub-constellation.