Looks like basic functionality is finished. Probably needs some refactoring and more tests.