implemented member functions