top-level base class