add accessors, type checking, type