Mapping character state changes over phylogenetic trees is central to the study of evolution. However, current probabilistic methods for generating such mappings are ill-suited to certain types of evolutionary models, in particular, the widely used models of codon substitution.