visitor pattern init