public override IDeepCopyable CopyTo(IDeepCopyable other)
        {
            var dest = other as Account;

            if (dest == null)
            {
                throw new ArgumentException("Can only copy to an object of the same type", "other");
            }

            base.CopyTo(dest);
            if (Identifier != null)
            {
                dest.Identifier = new List <Hl7.Fhir.Model.Identifier>(Identifier.DeepCopy());
            }
            if (StatusElement != null)
            {
                dest.StatusElement = (Code <Hl7.Fhir.Model.Account.AccountStatus>)StatusElement.DeepCopy();
            }
            if (Type != null)
            {
                dest.Type = (Hl7.Fhir.Model.CodeableConcept)Type.DeepCopy();
            }
            if (NameElement != null)
            {
                dest.NameElement = (Hl7.Fhir.Model.FhirString)NameElement.DeepCopy();
            }
            if (Subject != null)
            {
                dest.Subject = (Hl7.Fhir.Model.ResourceReference)Subject.DeepCopy();
            }
            if (Period != null)
            {
                dest.Period = (Hl7.Fhir.Model.Period)Period.DeepCopy();
            }
            if (Active != null)
            {
                dest.Active = (Hl7.Fhir.Model.Period)Active.DeepCopy();
            }
            if (Balance != null)
            {
                dest.Balance = (Hl7.Fhir.Model.Money)Balance.DeepCopy();
            }
            if (Coverage != null)
            {
                dest.Coverage = new List <Hl7.Fhir.Model.Account.CoverageComponent>(Coverage.DeepCopy());
            }
            if (Owner != null)
            {
                dest.Owner = (Hl7.Fhir.Model.ResourceReference)Owner.DeepCopy();
            }
            if (DescriptionElement != null)
            {
                dest.DescriptionElement = (Hl7.Fhir.Model.FhirString)DescriptionElement.DeepCopy();
            }
            if (Guarantor != null)
            {
                dest.Guarantor = new List <Hl7.Fhir.Model.Account.GuarantorComponent>(Guarantor.DeepCopy());
            }
            return(dest);
        }