generalized upward again