this is harder than i thought