A method for in-place updating, in a non-volatile storage device with physical storage blocks, an original version of content to yield an updated version of content, the method comprising: obtaining, by a receiver, an update package (3B01; 3C01; 3D01; 501) containing update commands executed in a certain update sequence, the update commands comprising at least one transforming command, a transforming command having a source segment on whose original content the transforming command is based and a target segment whose updated content is generated by the transforming command; copying, by an update module, said original version of content from one or more physical storage blocks in the non-volatile storage device to corresponding one or more virtual blocks (3A01; 503; 9A01) in volatile memory; for each transforming command in the update package, if it is determined by the update module that the physical block corresponding to the virtual block that includes the transforming command's source segment precedes in the update sequence or is the same as the physical block corresponding to the virtual block that includes the transforming command's target segment, copying, by the update module, the source segment to a protection buffer (3C02; 3D03; 9A25; 9B01; 9C01); updating in volatile memory, according to the update sequence, said copy of said original version of content (3A01; 503; 9A01) to provide an updated version (3A02; 504; 9A02); and writing, according to the update sequence, said updated version (3A02; 504; 9A02) from the one or more virtual blocks in volatile memory to the non-volatile storage device in place of said original version of content in the corresponding one or more physical storage blocks of said storage device. obtaining, by a receiver, an update package (3B01; 3C01; 3D01; 501) containing update commands executed in a certain update sequence, the update commands comprising at least one transforming command, a transforming command having a source segment on whose original content the transforming command is based and a target segment whose updated content is generated by the transforming command; copying, by an update module, said original version of content from one or more physical storage blocks in the non-volatile storage device to corresponding one or more virtual blocks (3A01; 503; 9A01) in volatile memory; for each transforming command in the update package, if it is determined by the update module that the physical block corresponding to the virtual block that includes the transforming command's source segment precedes in the update sequence or is the same as the physical block corresponding to the virtual block that includes the transforming command's target segment, copying, by the update module, the source segment to a protection buffer (3C02; 3D03; 9A25; 9B01; 9C01); updating in volatile memory, according to the update sequence, said copy of said original version of content (3A01; 503; 9A01) to provide an updated version (3A02; 504; 9A02); and writing, according to the update sequence, said updated version (3A02; 504; 9A02) from the one or more virtual blocks in volatile memory to the non-volatile storage device in place of said original version of content in the corresponding one or more physical storage blocks of said storage device.