complete refactoring
this fixes #1 and #2 too
...
...