First working version + Unit Tests