Many thanks to:

Colin Newell for patches and bug fixes

