infrastructure for character classes