First implementation. Still need a lot of tests