don't have to have a base class