A storage system comprising: a storage medium (100, 216) operable to maintain a data set; a read/write head assembly operable to write the data set to the storage medium and to read the data set from the storage medium (100, 216); a multi-level encoder operable to encode (800, 806) the data set at a plurality of different code rates before it is written to the storage medium (100, 216); and a multi-level decoder operable to decode the data set retrieved from the storage medium and to yield decoded data, the multi-level decoder comprising: a serial to parallel converter operable to divide the data set into a plurality of encoded data segments (462, 474, 486), each encoded at a different code rate; a plurality of decoder stages (464, 468; 476, 480; 488, 492), each operable to decode one (462, 474, 486) of the plurality of encoded data segments to yield a plurality of decoder outputs (470, 472; 482, 484; 494), wherein at least one (476, 480; 488, 492) of the plurality of decoder stages is operable to use a decoder output (472; 484) from a decoder stage (464, 468; 476, 480) associated with a lower one of the different code rates to guide the decoding of said one (462, 474, 486) of the plurality of encoded data segments associated with a higher one of the different code rates; and a parallel to serial converter operable to combine the plurality of decoder outputs (470, 482, 494) to yield decoded data. a storage medium (100, 216) operable to maintain a data set; a read/write head assembly operable to write the data set to the storage medium and to read the data set from the storage medium (100, 216); a multi-level encoder operable to encode (800, 806) the data set at a plurality of different code rates before it is written to the storage medium (100, 216); and a multi-level decoder operable to decode the data set retrieved from the storage medium and to yield decoded data, the multi-level decoder comprising: a serial to parallel converter operable to divide the data set into a plurality of encoded data segments (462, 474, 486), each encoded at a different code rate; a plurality of decoder stages (464, 468; 476, 480; 488, 492), each operable to decode one (462, 474, 486) of the plurality of encoded data segments to yield a plurality of decoder outputs (470, 472; 482, 484; 494), wherein at least one (476, 480; 488, 492) of the plurality of decoder stages is operable to use a decoder output (472; 484) from a decoder stage (464, 468; 476, 480) associated with a lower one of the different code rates to guide the decoding of said one (462, 474, 486) of the plurality of encoded data segments associated with a higher one of the different code rates; and a parallel to serial converter operable to combine the plurality of decoder outputs (470, 482, 494) to yield decoded data. a serial to parallel converter operable to divide the data set into a plurality of encoded data segments (462, 474, 486), each encoded at a different code rate; a plurality of decoder stages (464, 468; 476, 480; 488, 492), each operable to decode one (462, 474, 486) of the plurality of encoded data segments to yield a plurality of decoder outputs (470, 472; 482, 484; 494), wherein at least one (476, 480; 488, 492) of the plurality of decoder stages is operable to use a decoder output (472; 484) from a decoder stage (464, 468; 476, 480) associated with a lower one of the different code rates to guide the decoding of said one (462, 474, 486) of the plurality of encoded data segments associated with a higher one of the different code rates; and a parallel to serial converter operable to combine the plurality of decoder outputs (470, 482, 494) to yield decoded data.