cleaned up builder pattern