I have made some changes to the original implementation to separate the statistical models more fully from the coder. This allows substituting models on a per symbol basis.
An example of this behavior is provided in the ArithmeticStream class (paralleling the compression classes in System.IO.Compression). This class uses two models: a zero order model and a new symbol model. The former is only initialized with two symbols (stream terminator and new character). The latter is initialized with all characters.