Integration to merge multiple outstanding pull requests

This pull request integrates several outstanding pull requests.

* #28
* #24
* #23
  * #22
  * #16
  * #11
  * Obsoletes #10