sigh this is harder than i thought