factory methods for all the types