Updated to use Dave Wards code.