protected void WriteCreateXml(XmlTextWriter writer, RecurlyAccount account, string couponCode, int? billingCycles, DateTime? firstRenewalDate)
 {
     writer.WriteStartElement(ElementName); // Start: subscription
         writer.WriteElementString(PlanCodeElement, PlanCode); //Required
         account.WriteXml(writer); //Required
         writer.WriteElementStringIfProvided(CouponCodeElement,couponCode);
         writer.WriteElementIntIfProvided(UnitAmountInCentsElement, UnitAmountInCents);
         writer.WriteElementString(CurrencyElement,Currency); //Required
         writer.WriteElementIntIfProvided(QuantityElement, Quantity > 1 ? Quantity : new int?());
         writer.WriteElementDateTimeIfProvided(TrialEndsAtElement, TrialEndsAt);
         writer.WriteElementDateTimeIfFuture(StartsAtElement,ActivatedAt);
         writer.WriteElementIntIfProvided(TotalBillingCyclesElement, billingCycles);
         writer.WriteElementDateTimeIfProvided(FirstRenewalDateElement, firstRenewalDate);
         writer.WriteElementListIfAny(AddonsElement, Addons, (w, a) => a.WriteXml(w));
         WriteManualInvoiceElement(writer);
     writer.WriteEndElement(); // End: subscription
 }
 protected void WriteChangeXml(XmlTextWriter writer, ChangeTimeframe timeframe, string newPlanCode)
 {
     writer.WriteStartElement(ElementName); // Start: subscription
         writer.WriteElementEnum("timeframe", timeframe); //Required
         writer.WriteElementStringIfProvided(PlanCodeElement, newPlanCode);
         writer.WriteElementIntIfProvided(QuantityElement,Quantity);
         writer.WriteElementIntIfProvided(UnitAmountInCentsElement,UnitAmountInCents);
         writer.WriteElementListIfAny(AddonsElement, Addons, (w, a) => a.WriteXml(w));
         WriteManualInvoiceElement(writer);
     writer.WriteEndElement(); // End: subscription
 }