it shouldn't be a member funtion