don't forget to call super ctor