someday I will do this without dictionaries