add diffing algorithm to leverage 'appended' and 'remove' methods + transitions