http://www.4j.lane.edu/~eagen/cg2/cereal/cereal.html