A computer implemented method of compressing a collection of data strings comprising: a) receiving a collection of data strings from a data set, wherein said data strings comprise a plurality of characters, b) generating a Burrows Wheeler transform, BWT, for the collection of data strings; and c) compressing the BWT; characterised in that: the BWT for the collection of data strings is generated by: i) generating a first BWT on a string containing a first collection of characters, wherein the first collection of characters comprises a corresponding first character from each respective one of said data strings, ii) inserting a second collection of characters into the first Burrows Wheeler transformed characters from the first collection of characters to form a merged collection of characters, wherein the second collection of characters comprises a second corresponding character from each respective one of said data strings, and iii) incrementally building a new, second BWT from the merged collection of characters, iv) inserting a further collection of characters into the new Burrows Wheeler transformed characters from the preceding collections of characters to form a further new merged collection of characters, wherein the further collection of characters comprises a corresponding character following the preceding character from each respective one of said data strings, and v) incrementally building a further new BWT from the further new merged collection of characters, vi) repeating steps iv) and v) until the BWT is determined for the collection of data strings. a) receiving a collection of data strings from a data set, wherein said data strings comprise a plurality of characters, b) generating a Burrows Wheeler transform, BWT, for the collection of data strings; and c) compressing the BWT; characterised in that: the BWT for the collection of data strings is generated by: i) generating a first BWT on a string containing a first collection of characters, wherein the first collection of characters comprises a corresponding first character from each respective one of said data strings, ii) inserting a second collection of characters into the first Burrows Wheeler transformed characters from the first collection of characters to form a merged collection of characters, wherein the second collection of characters comprises a second corresponding character from each respective one of said data strings, and iii) incrementally building a new, second BWT from the merged collection of characters, iv) inserting a further collection of characters into the new Burrows Wheeler transformed characters from the preceding collections of characters to form a further new merged collection of characters, wherein the further collection of characters comprises a corresponding character following the preceding character from each respective one of said data strings, and v) incrementally building a further new BWT from the further new merged collection of characters, vi) repeating steps iv) and v) until the BWT is determined for the collection of data strings. i) generating a first BWT on a string containing a first collection of characters, wherein the first collection of characters comprises a corresponding first character from each respective one of said data strings, ii) inserting a second collection of characters into the first Burrows Wheeler transformed characters from the first collection of characters to form a merged collection of characters, wherein the second collection of characters comprises a second corresponding character from each respective one of said data strings, and iii) incrementally building a new, second BWT from the merged collection of characters, iv) inserting a further collection of characters into the new Burrows Wheeler transformed characters from the preceding collections of characters to form a further new merged collection of characters, wherein the further collection of characters comprises a corresponding character following the preceding character from each respective one of said data strings, and v) incrementally building a further new BWT from the further new merged collection of characters, vi) repeating steps iv) and v) until the BWT is determined for the collection of data strings.