still moduling stuff
added tests
still refactoring
still refactoring...