added IDeepCopy interface