added forward declarations