Refactor

Resolves GH-6
Resolves GH-7
Resolves GH-8