better project layout, add tests