Making software revision

This pull request includes the outstanding changes from #173. I've rebased it with the intention of making the diff as small as possible so that it can be reviewed more easily.

I think @jabley has started incorporating some of those changes, so maybe that's the best way to continue.

I'd like us to be quite aggressive about reviewing and either merging or closing this quickly.

I have not addressed the outstanding comments on #173.