visitor pattern finished i think