elaborate record data constructors