more general form