separation of decoders: - the actual decompressor: has a "Decoded" callback which gets new data and a "Decode" function to actually decode some... (limited). - Stream: there's a TOwnerStream descendent that has a ring buffer holding data that is already decoded but not yet claimed. - how long can the decompressed data of a single code become when decompressed? Hold twice the space available in the ring buffer.