apparently I suck at preventing circular dependencies