Initial commit, semi-working with tests