it shouldn't be a member function