Fully functional
Adding some tests