added ability to specify input, and went back to a callback to run users
code that gets overridden.