Based on patches from Ronald F. Guilmette <rfg@monkeys.com>: