Initial commit. Basic implementation. Some tests