version one: all functionality