renamed and generalized