shouldn't be a member function