Some (maybe all) of that is deliberate - when I don't want to cover something twice and I want to do something for a specific case or something, other times I need to pass down more info than visit would do (I think functions have that issue).