created a builder function to delegate instantiation