add clone generic and methods