   Copyright 2006 Gregory Rubin grrubin@gmail.com
   Permission is given to use, modify, and or distribute this code so long as this message remains attached
