add useful constructors
simplify