Adding behavioral / visitor impl and tests