smarter diff for maps