public static IEnumerable<MappingElement> ToMappingElements(this IEnumerable<string> items,
		                                                            MappingSourceEntry mappingSource)
		{
			return items.Select(x => new MappingElement
			                         	{
			                         		Key = x,
			                         		Value = mappingSource.TpItems
			                         			.FirstOrDefault(y => x.Equals(y.Name, StringComparison.OrdinalIgnoreCase))
			                         	});
		}
		private MappingContainer GetMappingFor(MappingSourceEntry source, IEnumerable<MappingElement> mapped)
		{
			var elements = new List<MappingElement>();
			IEnumerable<string> thirdPartyItems = source.ThirdPartyItems;

			var existingMappingElements = mapped
				.FilterOutObsoleteItemsBy(thirdPartyItems)
				.FilterOutEmptyItems();
				
			elements.AddRange(existingMappingElements);

			var newMappingElements = thirdPartyItems
				.FilterOutDuplicateThirdPartyItemsBy(elements)
				.ToMappingElements(source);
			elements.AddRange(newMappingElements);
			
			var container = new MappingContainer();
			container.AddRange(elements.OrderBy(r => r.Key).ToList());

			return container;
		}