try to generalize