first version done + test suite