Original code written by Lincoln D. Stein <lstein@cshl.org>.
Adapted and released by Nicola Worthington <nicolaw@cpan.org>.
