more like a builder pattern