First implementation.
Some tests seems to be broken.
Waiting for a complete rework