use clearer static factory method instead of constructor