First implementarion & unit tests