refactor; improve tests

- refactor & simplify the code
- improve the way scalacheck is run - now it's much more informative