/// <summary>
        /// 
        /// </summary>
        /// <param name="message"></param>
        /// <param name="ex"></param>
        /// <returns></returns>
        /// TODO: doesn't confirm to DRY princple - must be a better way to do this using generics
        public static new ContactPreferencesOperationStatus CreateFromException(string message, Exception ex)
        {
            ContactPreferencesOperationStatus opStatus = new ContactPreferencesOperationStatus
            {
                Status = false,
                Message = message,
                OperationId = null
            };

            if (ex != null)
            {
                opStatus.ExceptionMessage = ex.Message;
                opStatus.ExceptionStackTrace = ex.StackTrace;
                opStatus.ExceptionInnerMessage = (ex.InnerException == null) ? null : ex.InnerException.Message;
                opStatus.ExceptionInnerStackTrace = (ex.InnerException == null) ? null : ex.InnerException.StackTrace;
            }
            return opStatus;
        }
        private ContactPreferencesOperationStatus GetContactPreferences(int externalContactNumber, bool currentRecordsOnly)
        {
            var opStatus = new ContactPreferencesOperationStatus { Status = true };
            ContactPreferences preferences = new ContactPreferences();
            preferences.ExternalContactNumber = externalContactNumber;
            //preferences.ExternalAddressNumber = externalAddressNumber;

            string sendXML = String.Format("<Parameters>" +
                "<ContactNumber>{0}</ContactNumber>" +
                //"<AddressNumber>{1}</AddressNumber>" +
                "</Parameters>",
                externalContactNumber);//, externalAddressNumber

            //Load xmldata into XDocument Object
            XDocument sendingXMLDoc = XDocument.Parse(sendXML);

            var careWebServices = new CARECustomerPortalExtensions.CareWebServices.NDataAccessSoapClient();
            string returnXML = careWebServices.SelectContactData(CustomerPortalExtensions.CareWebServices.XMLContactDataSelectionTypes.xcdtContactCategories, sendingXMLDoc.ToString());

            XDocument receivingXMLDoc = XDocument.Parse(returnXML);
            List<Preference> contactPreferences = new List<Preference>();

            try
            {

                foreach (XElement preferenceNode in receivingXMLDoc.Descendants("DataRow"))
                {
                    string status = preferenceNode.Element("Status").Value;
                    if (!currentRecordsOnly || status == "Current")
                    {
                        contactPreferences.Add(new Preference
                        {
                            Category = preferenceNode.Element("ActivityCode").Value,
                            Value = preferenceNode.Element("ActivityValueCode").Value,
                            ValidFrom = Convert.ToDateTime(preferenceNode.Element("ValidFrom").Value),
                            ValidTo = Convert.ToDateTime(preferenceNode.Element("ValidTo").Value)
                        });
                    }
                }

            }
            catch (Exception e)
            {
                opStatus = ContactPreferencesOperationStatus.CreateFromException("Error retrieving contact preferences from CARE: " + e.Message, e);
                opStatus.Status = false;
            }
            preferences.Preferences = contactPreferences;
            opStatus.UpdatedPreferences = preferences;
            return opStatus;
        }