Originally by Matthew Mullins.
Recoded into seperate modules by Christopher 'devilhorns' Michael <devilhorns@comcast.net>