don't expect visibleViewController to be present