split builder into "geometry abstraction layer"