why do you need all these forward declarations?