so much refactor i cant even