void connection_StatusMessageReceived(object sender, IStatusMessageReceivedEventArgs args)
        {
            var tweetUpdate = new Dictionary<string, string>();
            AddFieldOrBlankToDictionary(tweetUpdate, "CreatedAt" ,args.Message.CreatedAt.ToString());
            AddFieldOrBlankToDictionary(tweetUpdate, "Favourited", args.Message.Favourited?"true":"false");
            AddFieldOrBlankToDictionary(tweetUpdate, "Id", args.Message.Id);
            AddFieldOrBlankToDictionary(tweetUpdate, "InReplyToScreenName", args.Message.InReplyToScreenName);
            AddFieldOrBlankToDictionary(tweetUpdate, "InReplyToStatusId", args.Message.InReplyToStatusId);
            AddFieldOrBlankToDictionary(tweetUpdate, "InReplyToUserId", args.Message.InReplyToUserId);
            AddFieldOrBlankToDictionary(tweetUpdate, "Source", args.Message.Source);
            AddFieldOrBlankToDictionary(tweetUpdate, "Text", args.Message.Text);
            AddFieldOrBlankToDictionary(tweetUpdate, "Truncated", args.Message.Truncated ? "true" : "false");
            AddFieldOrBlankToDictionary(tweetUpdate, "UserFollowersCount", args.Message.User.FollowersCount.ToString());
            AddFieldOrBlankToDictionary(tweetUpdate, "UserName", args.Message.User.Name);
            AddFieldOrBlankToDictionary(tweetUpdate, "UserProfileImageUrl", args.Message.User.ProfileImageUrl);
            AddFieldOrBlankToDictionary(tweetUpdate, "ScreenName", args.Message.User.ScreenName);

            // Location stuff
            Place place = args.Message.Place ?? new Place();
            Geo geo = args.Message.Geo ?? new Geo();
            AddFieldOrBlankToDictionary(tweetUpdate, "PlaceCountry", place.Country);
            AddFieldOrBlankToDictionary(tweetUpdate, "PlaceFullName", place.FullName);
            AddFieldOrBlankToDictionary(tweetUpdate, "PlaceId", place.Id);
            AddFieldOrBlankToDictionary(tweetUpdate, "PlaceName", place.Name);
            AddFieldOrBlankToDictionary(tweetUpdate, "PlaceType", place.PlaceType);
            AddFieldOrBlankToDictionary(tweetUpdate, "PlaceUrl", place.Url);

            AddFieldOrBlankToDictionary(tweetUpdate, "GeoType", geo.Type);
            if (geo.Type == "Point")
            {
                try
                {
                    // Note: Twitter v1 API sends Lat,Long. v2 will send Long,Lat
                    decimal[] coords = (decimal[])args.Message.Geo.Coordinates;
                    AddFieldOrBlankToDictionary(tweetUpdate, "GeoLat", ((decimal)coords[0]).ToString());
                    AddFieldOrBlankToDictionary(tweetUpdate, "GeoLong", ((decimal)coords[1]).ToString());
                }
                catch (Exception ex)
                {
                    _logger.LogError("error getting Geo Cordinates " + ex.ToString());
                }
            }
            else
            {
                AddFieldOrBlankToDictionary(tweetUpdate, "GeoLat", "");
                AddFieldOrBlankToDictionary(tweetUpdate, "GeoLong", "");
            }

            string[] topics = DetermineTopicFromTwitterMessage(tweetUpdate, args.Message, _config.SearchDefinitions);
            string[] fieldsToSend = DetermineFieldsToSend(tweetUpdate, _config.SearchDefinitions);
            string[] allFieldsInTweet = tweetUpdate.Keys.ToArray<string>();

            AddCountFieldsToUpdate(topics, tweetUpdate, _config.SearchDefinitions);

            foreach (string fieldInTweet in allFieldsInTweet)
            {
                if (fieldsToSend.Contains<string>(fieldInTweet) == false)
                {
                    tweetUpdate.Remove(fieldInTweet);
                }
            }

            if (tweetUpdate.Keys.Count > 0)
            {
                foreach (string topic in topics)
                {
                    _logger.LogInfo("publishing to " + topic);
                    Publish(topic, tweetUpdate);
                }
            }
            else
            {
                _logger.LogInfo("Ignoring tweet. Either no interest in tweet (ignored) or no fields of interest were present");
            }
        }
 /// <summary>
 /// Facilitate the sending of status message events.
 /// </summary>
 /// <param name="args"></param>
 private void OnStatusMessageReceived(IStatusMessageReceivedEventArgs args)
 {
     if( this.StatusMessageReceived != null )
     {
         try
         {
             this.StatusMessageReceived(this, args);
         }
         catch (Exception ex)
         {
             _logger.LogError(ex);
         }
     }
 }