modified structure to allow better header inclusion for internal definitions