idiomatic factory method