Added: replace conditionals with VIsitor