A method for creating efficient updates to a previously stored file, said method comprising: (a) receiving a first file comprising a first plurality of sequences of data; (b) receiving a second file comprising a second plurality of sequences of data; (c) creating a hash table having a plurality of entries, each of the plurality of entries corresponding to a respective one of the first plurality of sequences, and wherein at least two of said entries correspond to overlapping sequences of data; (d) computing hash values for said second plurality of sequences of data; (e) comparing each of the second plurality of sequences of data with sequences from the first plurality of sequences having the same hash value to determine sequences of data present in both files; (f) storing representations of lengths and locations of said sequences of data present in both the first and second files and characterised by: (g) creating a third file comprising sequences of data from the second file and representations of locations and lengths of said sequences of data present in both the first and second files, wherein the representations of locations and lengths of said sequences of data present in both the first and second files comprise: (i) a first representation of a first sequence of data present in both the first and second files, the first representation identifying the location, in the first file, and the length, in bytes, of the first sequence, and (ii) a second representation of a second sequence of data present in both the first and second files, the second sequence of data preceding the first sequence of data in the first file, the second representation identifying the number of bytes, in the first file, between a last byte of the first sequence and a byte preceding a first byte of the second sequence, and the length, in bytes, of the second sequence. (a) receiving a first file comprising a first plurality of sequences of data; (b) receiving a second file comprising a second plurality of sequences of data; (c) creating a hash table having a plurality of entries, each of the plurality of entries corresponding to a respective one of the first plurality of sequences, and wherein at least two of said entries correspond to overlapping sequences of data; (d) computing hash values for said second plurality of sequences of data; (e) comparing each of the second plurality of sequences of data with sequences from the first plurality of sequences having the same hash value to determine sequences of data present in both files; (f) storing representations of lengths and locations of said sequences of data present in both the first and second files and characterised by: (g) creating a third file comprising sequences of data from the second file and representations of locations and lengths of said sequences of data present in both the first and second files, wherein (i) a first representation of a first sequence of data present in both the first and second files, the first representation identifying the location, in the first file, and the length, in bytes, of the first sequence, and (ii) a second representation of a second sequence of data present in both the first and second files, the second sequence of data preceding the first sequence of data in the first file, the second representation identifying the number of bytes, in the first file, between a last byte of the first sequence and a byte preceding a first byte of the second sequence, and the length, in bytes, of the second sequence.