ok, I accept that this is ugly