Moved variant out of product model and added generic properties to variant