drop and change seem to be exactly the same. Can you abstract it into a single function?