Written by Johann George

Thanks to the following for their contributions:
    Dotan Barak
    Ralph Campbell
    Yevgeny Kliteynik
    Dave Olson
