An apparatus for storage or retrieval of a data object on a storage medium, which is unreliable, wherein said apparatus is operable to store and retrieve on said storage medium a data object comprising a data object identifier in the form of a predetermined number of redundant sub blocks comprising said data object identifier, said predetermined number corresponding to a predetermined multiple of a desired spreading width, which consists of the sum of: • a minimal spreading requirement, which when multiplied with said predetermined multiple, corresponds to the minimal number of sub blocks of said data object which are not allowed to fail; supplemented with • a maximal concurrent failures tolerance, which when multiplied with said predetermined multiple, corresponds to the number of sub blocks of said data object which are allowed to fail concurrently, each one of said redundant sub blocks comprising: • encoded data of equal size of the data object divided by a factor equal to said predetermined multiple of said minimal spreading requirement; and • decoding data, such that said data object can be decoded from any combination of said redundant sub blocks of which the number corresponds to predetermined multiple of said minimal spreading requirement, said apparatus operably being connected to said storage medium when storing or retrieving said data object, comprising: • an encoding module operable to disassemble said data object into said predetermined number of redundant sub blocks; • a spreading module operable to store said predetermined number of said redundant sub blocks on said storage medium; • a clustering module operable to retrieve at least said predetermined multiple of said minimal spreading requirement of said redundant sub blocks from said storage medium; and • a decoding module operable to assemble said data object from any combination of said redundant sub blocks of which the number corresponds to said predetermined multiple of said minimal spreading requirement. said apparatus is operable to store and retrieve on said storage medium a data object comprising a data object identifier in the form of a predetermined number of redundant sub blocks comprising said data object identifier, said predetermined number corresponding to a predetermined multiple of a desired spreading width, which consists of the sum of: • a minimal spreading requirement, which when multiplied with said predetermined multiple, corresponds to the minimal number of sub blocks of said data object which are not allowed to fail; supplemented with • a maximal concurrent failures tolerance, which when multiplied with said predetermined multiple, corresponds to the number of sub blocks of said data object which are allowed to fail concurrently, • a minimal spreading requirement, which when multiplied with said predetermined multiple, corresponds to the minimal number of sub blocks of said data object which are not allowed to fail; supplemented with • a maximal concurrent failures tolerance, which when multiplied with said predetermined multiple, corresponds to the number of sub blocks of said data object which are allowed to fail concurrently, each one of said redundant sub blocks comprising: • encoded data of equal size of the data object divided by a factor equal to said predetermined multiple of said minimal spreading requirement; and • decoding data, such that said data object can be decoded from any combination of said redundant sub blocks of which the number corresponds to predetermined multiple of said minimal spreading requirement, • encoded data of equal size of the data object divided by a factor equal to said predetermined multiple of said minimal spreading requirement; and • decoding data, such that said data object can be decoded from any combination of said redundant sub blocks of which the number corresponds to predetermined multiple of said minimal spreading requirement, said apparatus operably being connected to said storage medium when storing or retrieving said data object, comprising: • an encoding module operable to disassemble said data object into said predetermined number of redundant sub blocks; • a spreading module operable to store said predetermined number of said redundant sub blocks on said storage medium; • a clustering module operable to retrieve at least said predetermined multiple of said minimal spreading requirement of said redundant sub blocks from said storage medium; and • a decoding module operable to assemble said data object from any combination of said redundant sub blocks of which the number corresponds to said predetermined multiple of said minimal spreading requirement. • an encoding module operable to disassemble said data object into said predetermined number of redundant sub blocks; • a spreading module operable to store said predetermined number of said redundant sub blocks on said storage medium; • a clustering module operable to retrieve at least said predetermined multiple of said minimal spreading requirement of said redundant sub blocks from said storage medium; and • a decoding module operable to assemble said data object from any combination of said redundant sub blocks of which the number corresponds to said predetermined multiple of said minimal spreading requirement.