public ServiceTemplate MakeChild(ServiceTemplateLevel level)
        {
#if !SILVERLIGHT
            var serviceTemplateChild = new ServiceTemplate
            {
                Id = Guid.NewGuid(),
                Name = this.Name,
                ParentServiceTemplate = this,
                ServiceTemplateLevel = level,
                CreatedDate = DateTime.UtcNow
            };

            if (serviceTemplateChild.ServiceTemplateLevel == ServiceTemplateLevel.ServiceProviderDefined)
                serviceTemplateChild.OwnerServiceProvider = this.OwnerServiceProvider;

            if (serviceTemplateChild.ServiceTemplateLevel == ServiceTemplateLevel.ClientDefined)
                serviceTemplateChild.OwnerClient = this.OwnerClient;

            if (serviceTemplateChild.ServiceTemplateLevel == ServiceTemplateLevel.RecurringServiceDefined)
                serviceTemplateChild.OwnerRecurringService = this.OwnerRecurringService;

            if (serviceTemplateChild.ServiceTemplateLevel == ServiceTemplateLevel.ServiceDefined)
                serviceTemplateChild.OwnerService = this.OwnerService;

            foreach (var field in this.Fields.ToArray())
                serviceTemplateChild.Fields.Add(field.MakeChild());

            //TODO: Uncomment.
            //if (this.Invoice != null)
            //{
            //    serviceTemplateChild.Invoice = this.Invoice.MakeChild();
            //    serviceTemplateChild.Invoice.Id = serviceTemplateChild.Id;
            //}

            return serviceTemplateChild;
#else
            var serviceTemplateChild = MakeChildSilverlight(level);

            //TODO: Uncomment.
            //if (this.Invoice != null)
            //{
            //    serviceTemplateChild.Invoice = this.Invoice.MakeChild();
            //    serviceTemplateChild.Invoice.Id = serviceTemplateChild.Id;
            //}

            return serviceTemplateChild;
#endif
        }
        /// <summary>
        /// Makes a child of this ServiceTemplate.
        /// </summary>
        /// <param name="serviceTemplateLevel">The service template level of the child.</param>
        /// <returns></returns>
        private ServiceTemplate MakeChildSilverlight(ServiceTemplateLevel serviceTemplateLevel)
        {
            var serviceTemplateChild = MakeFamilyMember();

            //Setup the ServiceTemplateLevel
            serviceTemplateChild.ServiceTemplateLevel = serviceTemplateLevel;

            //Set the ParentServiceTemplate to this
            serviceTemplateChild.ParentServiceTemplate = this;

            //Make children of each of this fields
            foreach (var fieldToCopy in this.Fields.ToArray())
            {
                var childField = fieldToCopy.MakeChild();

                //set the field's service template
                childField.OwnerServiceTemplate = serviceTemplateChild;
            }

            return serviceTemplateChild;
        }