added basic logic and tests
squash commits