categories are created if they do not exist