base class, interface
not done yet.