more general way