implemented base functionality