use only in the implementation