add powerful constructors to models