Now variants are defined separately so we can apply the variants for more than one output. It will also allow different variant semantics.