use defensive copies in dupe check
update docs