First commit:

-basic implementations
-few tests