implemented the builder