using forward declarations