done with the implementation of the basic functions