added options, added comments, added tests, refactored