  The ability to store data in the DNA of a living organism has applications in
a variety of areas including synthetic biology and watermarking of patented
genetically-modified organisms. Data stored in this medium is subject to errors
arising from various mutations, such as point mutations, indels, and tandem
duplication, which need to be corrected to maintain data integrity. In this
paper, we provide error-correcting codes for errors caused by tandem
duplications, which create a copy of a block of the sequence and insert it in a
tandem manner, i.e., next to the original. In particular, we present two
families of codes for correcting errors due to tandem-duplications of a fixed
length, the first family can correct any number of errors while the second
corrects a bounded number of errors. We also study codes for correcting tandem
duplications of length up to a given constant $k$, where we are primarily
focused on the cases of $k=2,3$. Finally, we provide a full classification of
the sets of lengths allowed in tandem duplication that result in a unique root
for all sequences.
