/// <summary>
        /// Fetches an existing newsletter subscription for the given person and Arena
        /// newsletter ID or creates a new one if it did not already exist.
        /// </summary>
        /// <param name="person">person for who the subscription is for</param>
        /// <param name="newsletterID">Arena newsletter ID of the newsletter subscription</param>
        /// <returns>An Arena NewsletterSubscription for the given args</returns>
        private NewsletterSubscription FetchOrCreateNewsletterSubscription(Person person, int newsletterID)
        {
            NewsletterSubscription           subscription;
            NewsletterSubscriptionCollection subscriptionsArena = new NewsletterSubscriptionCollection();

            subscriptionsArena.LoadNewsletterSubscriptionsByEmail(person.Emails.FirstActive);

            var query =
                (from existingSubscription in subscriptionsArena.OfType <NewsletterSubscription>()
                 where existingSubscription.NewsletterId == newsletterID
                 select existingSubscription).ToList();

            if (query.Count > 0)
            {
                subscription = new NewsletterSubscription(query.First().SubscriptionId);
            }
            else
            {
                subscription              = new NewsletterSubscription();
                subscription.PersonId     = person.PersonID;
                subscription.NewsletterId = newsletterID;
                subscription.Email        = person.Emails.FirstActive;
                subscription.FirstName    = person.FirstName;
                subscription.LastName     = person.LastName;
                subscription.Gender       = person.Gender;
            }

            return(subscription);
        }
        /// <summary>
        /// Fetches an existing newsletter subscription for the given person and Arena
        /// newsletter ID or creates a new one if it did not already exist.
        /// </summary>
        /// <param name="person">person for who the subscription is for</param>
        /// <param name="newsletterID">Arena newsletter ID of the newsletter subscription</param>
        /// <returns>An Arena NewsletterSubscription for the given args</returns>
        private NewsletterSubscription FetchOrCreateNewsletterSubscription( Person person, int newsletterID )
        {
            NewsletterSubscription subscription;
            NewsletterSubscriptionCollection subscriptionsArena = new NewsletterSubscriptionCollection();
            subscriptionsArena.LoadNewsletterSubscriptionsByEmail( person.Emails.FirstActive );

            var query =
                ( from existingSubscription in subscriptionsArena.OfType<NewsletterSubscription>()
                  where existingSubscription.NewsletterId == newsletterID
                  select existingSubscription ).ToList();

            if ( query.Count > 0 )
            {
                subscription = new NewsletterSubscription( query.First().SubscriptionId );
            }
            else
            {
                subscription = new NewsletterSubscription();
                subscription.PersonId = person.PersonID;
                subscription.NewsletterId = newsletterID;
                subscription.Email = person.Emails.FirstActive;
                subscription.FirstName = person.FirstName;
                subscription.LastName = person.LastName;
                subscription.Gender = person.Gender;
            }

            return subscription;
        }