Major refactoring

Fixes #4 and #5