final implementation of the methods