implement almost full customization support.  resolves #3