deep merge. Closes #15