refactor, documentation, ignores and unittests