using BaseObject to reduce boilerplate