added valuetype pure virtual