abstract top level class for output based providers