finished Variant abstract class