Original author:
2001 by Andrei Alexandrescu

Changes made:
2001-2003 by Ben Martin
