Copyright (C) 2004, 2012 by S. A. Reilly