refactor baseobject