Index: TvEngine3/TVLibrary/SetupControls/FormTuningDetailCommon.cs
===================================================================
--- TvEngine3/TVLibrary/SetupControls/FormTuningDetailCommon.cs	(revision 28196)
+++ TvEngine3/TVLibrary/SetupControls/FormTuningDetailCommon.cs	(working copy)
@@ -64,7 +64,7 @@
       int minorChannel = -1;
       int majorChannel = -1;
       string provider = "";
-      int channelType = 0;
+      ChannelProviderType channelType = ChannelProviderType.Analog;
       int band = 0;
       int satIndex = -1;
       var innerFecRate = (int)BinaryConvolutionCodeRate.RateNotSet;
Index: TvEngine3/TVLibrary/SetupTv/Dialogs/FormAnalogTuningDetail.cs
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Dialogs/FormAnalogTuningDetail.cs	(revision 28196)
+++ TvEngine3/TVLibrary/SetupTv/Dialogs/FormAnalogTuningDetail.cs	(working copy)
@@ -89,7 +89,7 @@
       TuningDetail.AudioSource = comboBoxAudioSource.SelectedIndex;
       TuningDetail.Frequency = (int)GetFrequency(textBoxAnalogFrequency.Text, "2");
       TuningDetail.IsVCRSignal = checkBoxVCR.Checked;
-      TuningDetail.ChannelType = 0;
+      TuningDetail.ChannelType = TvDatabase.ChannelProviderType.Analog;
     }
 
     private bool ValidateInput()
Index: TvEngine3/TVLibrary/SetupTv/Dialogs/FormATSCTuningDetail.cs
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Dialogs/FormATSCTuningDetail.cs	(revision 28196)
+++ TvEngine3/TVLibrary/SetupTv/Dialogs/FormATSCTuningDetail.cs	(working copy)
@@ -21,6 +21,7 @@
 using System;
 using System.Windows.Forms;
 using DirectShowLib.BDA;
+using TvDatabase;
 
 namespace SetupTv.Dialogs
 {
@@ -93,7 +94,7 @@
 
     private void UpdateTuningDetail()
     {
-      TuningDetail.ChannelType = 1;
+      TuningDetail.ChannelType = ChannelProviderType.ATSC;
       TuningDetail.ChannelNumber = Int32.Parse(textBoxProgram.Text);
       TuningDetail.Frequency = Int32.Parse(textBoxFrequency.Text);
       TuningDetail.MajorChannel = Int32.Parse(textBoxMajor.Text);
Index: TvEngine3/TVLibrary/SetupTv/Dialogs/FormDVBCTuningDetail.cs
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Dialogs/FormDVBCTuningDetail.cs	(revision 28196)
+++ TvEngine3/TVLibrary/SetupTv/Dialogs/FormDVBCTuningDetail.cs	(working copy)
@@ -21,6 +21,7 @@
 using System;
 using System.Windows.Forms;
 using DirectShowLib.BDA;
+using TvDatabase;
 
 namespace SetupTv.Dialogs
 {
@@ -128,7 +129,7 @@
       TuningDetail.Provider = textBoxDVBCProvider.Text;
       TuningDetail.FreeToAir = checkBoxDVBCfta.Checked;
       TuningDetail.Modulation = (int)(ModulationType)(comboBoxDvbCModulation.SelectedIndex - 1);
-      TuningDetail.ChannelType = 2;
+      TuningDetail.ChannelType = ChannelProviderType.DVBC;
     }
 
     private bool ValidateInput()
Index: TvEngine3/TVLibrary/SetupTv/Dialogs/FormDVBIPTuningDetail.cs
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Dialogs/FormDVBIPTuningDetail.cs	(revision 28196)
+++ TvEngine3/TVLibrary/SetupTv/Dialogs/FormDVBIPTuningDetail.cs	(working copy)
@@ -72,7 +72,7 @@
 
     private void UpdateTuningDetail()
     {
-      TuningDetail.ChannelType = 7;
+      TuningDetail.ChannelType = TvDatabase.ChannelProviderType.DVBIP;
       TuningDetail.ChannelNumber = Int32.Parse(textBoxDVBIPChannel.Text);
       TuningDetail.Url = textBoxDVBIPUrl.Text;
       TuningDetail.NetworkId = Int32.Parse(textBoxDVBIPNetworkId.Text);
Index: TvEngine3/TVLibrary/SetupTv/Dialogs/FormDVBSTuningDetail.cs
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Dialogs/FormDVBSTuningDetail.cs	(revision 28196)
+++ TvEngine3/TVLibrary/SetupTv/Dialogs/FormDVBSTuningDetail.cs	(working copy)
@@ -88,7 +88,7 @@
 
     private void UpdateTuningDetail()
     {
-      TuningDetail.ChannelType = 3;
+      TuningDetail.ChannelType = ChannelProviderType.DVBS;
       TuningDetail.Frequency = Int32.Parse(textBoxFrequency.Text);
       TuningDetail.NetworkId = Int32.Parse(textBoxNetworkId.Text);
       TuningDetail.TransportId = Int32.Parse(textBoxTransportId.Text);
Index: TvEngine3/TVLibrary/SetupTv/Dialogs/FormDVBTTuningDetail.cs
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Dialogs/FormDVBTTuningDetail.cs	(revision 28196)
+++ TvEngine3/TVLibrary/SetupTv/Dialogs/FormDVBTTuningDetail.cs	(working copy)
@@ -20,6 +20,7 @@
 
 using System;
 using System.Windows.Forms;
+using TvDatabase;
 
 namespace SetupTv.Dialogs
 {
@@ -74,7 +75,7 @@
 
     private void UpdateTuningDetail()
     {
-      TuningDetail.ChannelType = 4;
+      TuningDetail.ChannelType = ChannelProviderType.DVBT;
       TuningDetail.ChannelNumber = Int32.Parse(textBoxDVBTChannel.Text);
       TuningDetail.Frequency = Int32.Parse(textBoxDVBTfreq.Text);
       TuningDetail.NetworkId = Int32.Parse(textBoxNetworkId.Text);
Index: TvEngine3/TVLibrary/SetupTv/Dialogs/FormEditChannel.cs
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Dialogs/FormEditChannel.cs	(revision 28196)
+++ TvEngine3/TVLibrary/SetupTv/Dialogs/FormEditChannel.cs	(working copy)
@@ -137,7 +137,7 @@
           float frequency;
           switch (detail.ChannelType)
           {
-            case 0:
+            case ChannelProviderType.Analog:
               channelType = "Analog";
               if (detail.VideoSource == (int)AnalogChannel.VideoInputType.Tuner)
               {
@@ -150,35 +150,35 @@
                 description = detail.VideoSource.ToString();
               }
               break;
-            case 1:
+            case ChannelProviderType.ATSC:
               channelType = "ATSC";
               description = String.Format("{0} {1}:{2}", detail.ChannelNumber, detail.MajorChannel,
                                           detail.MinorChannel);
               break;
-            case 2:
+            case ChannelProviderType.DVBC:
               channelType = "DVB-C";
               frequency = detail.Frequency;
               frequency /= 1000.0f;
               description = String.Format("{0} MHz SR:{1}", frequency.ToString("f2"), detail.Symbolrate);
               break;
-            case 3:
+            case ChannelProviderType.DVBS:
               channelType = "DVB-S";
               frequency = detail.Frequency;
               frequency /= 1000.0f;
               description = String.Format("{0} MHz {1}", frequency.ToString("f2"),
                                           (((Polarisation)detail.Polarisation)));
               break;
-            case 4:
+            case ChannelProviderType.DVBT:
               channelType = "DVB-T";
               frequency = detail.Frequency;
               frequency /= 1000.0f;
               description = String.Format("{0} MHz BW:{1}", frequency.ToString("f2"), detail.Bandwidth);
               break;
-            case 5:
+            case ChannelProviderType.WebStream:
               channelType = "Web-Stream";
               description = detail.Url;
               break;
-            case 7:
+            case ChannelProviderType.DVBIP:
               channelType = "DVB-IP";
               description = detail.Url;
               break;
@@ -245,7 +245,7 @@
       {
         int index = mpListView1.SelectedIndices[0];
         TuningDetail tuningDetailToEdit = _tuningDetails[index];
-        FormTuningDetailCommon form = CreateDialog(tuningDetailToEdit.ChannelType);
+        FormTuningDetailCommon form = CreateDialog((int)tuningDetailToEdit.ChannelType);
         form.TuningDetail = tuningDetailToEdit;
         form.ShowDialog(this);
         UpdateTuningDetailList();
Index: TvEngine3/TVLibrary/SetupTv/Dialogs/FormWebStreamTuningDetail.cs
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Dialogs/FormWebStreamTuningDetail.cs	(revision 28196)
+++ TvEngine3/TVLibrary/SetupTv/Dialogs/FormWebStreamTuningDetail.cs	(working copy)
@@ -25,6 +25,7 @@
 using System.Drawing;
 using System.Text;
 using System.Windows.Forms;
+using TvDatabase;
 
 namespace SetupTv.Dialogs
 {
@@ -74,7 +75,7 @@
 
     private void UpdateTuningDetail()
     {
-      TuningDetail.ChannelType = 5;
+      TuningDetail.ChannelType = ChannelProviderType.WebStream;
       TuningDetail.Url = edStreamURL.Text;
       TuningDetail.Bitrate = (int)nudStreamBitrate.Value;
     }
Index: TvEngine3/TVLibrary/SetupTv/Sections/ChannelsInGroupControl.cs
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Sections/ChannelsInGroupControl.cs	(revision 28196)
+++ TvEngine3/TVLibrary/SetupTv/Sections/ChannelsInGroupControl.cs	(working copy)
@@ -27,6 +27,7 @@
 using TvLibrary.Interfaces;
 using MediaPortal.UserInterface.Controls;
 using TvLibrary.Log;
+using SetupTv.Sections.Helpers;
 
 namespace SetupTv.Sections
 {
@@ -69,25 +70,44 @@
 
         UpdateMenuAndTabs();
 
+        listView1.BeginUpdate();
         listView1.Items.Clear();
-        SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (GroupMap));
 
-        sb.AddConstraint(Operator.Equals, "idGroup", _channelGroup.IdGroup);
-        sb.AddOrderByField(true, "sortOrder");
+        // read all channel maps for current group.
+        IList<GroupMap> maps = _channelGroup.ReferringGroupMap();
 
-        SqlStatement stmt = sb.GetStatement(true);
+        IDictionary<int, IList<TuningDetail>> dTuningDetails = ChannelListHelper.GetDictionaryOfTuningDetailsForGroup(_channelGroup.IdGroup, ChannelType.Tv);
+        IDictionary<int, Channel> dChannels = ChannelListHelper.GetDictionaryOfChannelsForGroup(_channelGroup.IdGroup, ChannelType.Tv);
 
-        IList<GroupMap> maps = ObjectFactory.GetCollection<GroupMap>(stmt.Execute());
-
+        // here we cannot just fill list with channels from channel list because of map.SortOrder
+        List<ListViewItem> items = new List<ListViewItem>();
+        IList<TuningDetail> tuningDetails;
+        Channel channel;
         foreach (GroupMap map in maps)
         {
-          Channel channel = map.ReferencedChannel();
-          if (!channel.IsTv)
-          {
-            continue;
-          }
-          listView1.Items.Add(CreateItemForChannel(channel, map));
+          if (dChannels.TryGetValue(map.IdChannel, out channel))
+            {
+              dTuningDetails.TryGetValue(channel.IdChannel, out tuningDetails);
+              int imageIndex = ChannelListIcons.GetChannelListIconIndex(channel, tuningDetails);
+              ListViewItem item = new ListViewItem(channel.DisplayName, imageIndex);
+              item.Checked = channel.VisibleInGuide;
+              item.Tag = map;
+
+              if ( (tuningDetails != null) && (tuningDetails.Count > 0))
+              {
+                item.SubItems.Add(tuningDetails[0].ChannelNumber.ToString());
+              }
+              items.Add(item);
+            }
         }
+        
+        // first remove our OnItemChecked event handler because we set item's check state when inserting item into items list,
+        // so no need to recheck it while filling the listview.
+        listView1.ItemChecked -= listView1_ItemChecked;
+        listView1.Items.AddRange(items.ToArray());
+        listView1.ItemChecked += listView1_ItemChecked;
+        listView1.EndUpdate();
+
         bool isAllChannelsGroup = (_channelGroup.GroupName == TvConstants.TvGroupNames.AllChannels);
         removeChannelFromGroup.Enabled = !isAllChannelsGroup;
         mpButtonDel.Enabled = !isAllChannelsGroup;
@@ -102,50 +122,6 @@
       }
     }
 
-    private ListViewItem CreateItemForChannel(Channel channel, object map)
-    {
-      bool hasFta = false;
-      bool hasScrambled = false;
-      IList<TuningDetail> tuningDetails = channel.ReferringTuningDetail();
-      foreach (TuningDetail detail in tuningDetails)
-      {
-        if (detail.FreeToAir)
-        {
-          hasFta = true;
-        }
-        if (!detail.FreeToAir)
-        {
-          hasScrambled = true;
-        }
-      }
-
-      int imageIndex;
-      if (hasFta && hasScrambled)
-      {
-        imageIndex = 5;
-      }
-      else if (hasScrambled)
-      {
-        imageIndex = 4;
-      }
-      else
-      {
-        imageIndex = 3;
-      }
-
-      ListViewItem item = new ListViewItem(channel.DisplayName, imageIndex);
-
-      item.Checked = channel.VisibleInGuide;
-      item.Tag = map;
-
-      IList<TuningDetail> details = channel.ReferringTuningDetail();
-      if (details.Count > 0)
-      {
-        item.SubItems.Add(details[0].ChannelNumber.ToString());
-      }
-      return item;
-    }
-
     private void listView1_ItemDrag(object sender, ItemDragEventArgs e)
     {
       if (e.Item is ListViewItem)
@@ -196,7 +172,7 @@
         layer.AddChannelToGroup(channel, _channelGroup);
 
         //get the new group map and set the listitem tag
-        SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (GroupMap));
+        SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof(GroupMap));
 
         sb.AddConstraint(Operator.Equals, "idChannel", channel.IdChannel);
         sb.AddConstraint(Operator.Equals, "idGroup", _channelGroup.IdGroup);
Index: TvEngine3/TVLibrary/SetupTv/Sections/ChannelsInRadioGroupControl.cs
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Sections/ChannelsInRadioGroupControl.cs	(revision 28196)
+++ TvEngine3/TVLibrary/SetupTv/Sections/ChannelsInRadioGroupControl.cs	(working copy)
@@ -27,6 +27,7 @@
 using TvLibrary.Interfaces;
 using MediaPortal.UserInterface.Controls;
 using TvLibrary.Log;
+using SetupTv.Sections.Helpers;
 
 namespace SetupTv.Sections
 {
@@ -69,25 +70,44 @@
 
         UpdateMenuAndTabs();
 
+        listView1.BeginUpdate();
         listView1.Items.Clear();
-        SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (RadioGroupMap));
 
-        sb.AddConstraint(Operator.Equals, "idGroup", _channelGroup.IdGroup);
-        sb.AddOrderByField(true, "sortOrder");
+        // read all channel maps for current group.
+        IList<RadioGroupMap> maps = _channelGroup.ReferringRadioGroupMap();
 
-        SqlStatement stmt = sb.GetStatement(true);
+        IDictionary<int, IList<TuningDetail>> dTuningDetails = ChannelListHelper.GetDictionaryOfTuningDetailsForGroup(_channelGroup.IdGroup, ChannelType.Radio);
+        IDictionary<int, Channel> dChannels = ChannelListHelper.GetDictionaryOfChannelsForGroup(_channelGroup.IdGroup, ChannelType.Radio);
 
-        IList<RadioGroupMap> maps = ObjectFactory.GetCollection<RadioGroupMap>(stmt.Execute());
-
+        // here we cannot just fill list with channels from channel list because of map.SortOrder
+        List<ListViewItem> items = new List<ListViewItem>();
+        IList<TuningDetail> tuningDetails;
+        Channel channel;
         foreach (RadioGroupMap map in maps)
         {
-          Channel channel = map.ReferencedChannel();
-          if (!channel.IsRadio)
-          {
-            continue;
+          if (dChannels.TryGetValue(map.IdChannel, out channel))
+            {
+              dTuningDetails.TryGetValue(channel.IdChannel, out tuningDetails);
+              int imageIndex = ChannelListIcons.GetChannelListIconIndex(channel, tuningDetails);
+              ListViewItem item = new ListViewItem(channel.DisplayName, imageIndex);
+              item.Checked = channel.VisibleInGuide;
+              item.Tag = map;
+
+              if ( (tuningDetails != null) && (tuningDetails.Count > 0))
+              {
+                item.SubItems.Add(tuningDetails[0].ChannelNumber.ToString());
+              }
+              items.Add(item);
           }
-          listView1.Items.Add(CreateItemForChannel(channel, map));
         }
+        
+        // first remove our OnItemChecked event handler because we set item's check state when inserting item into items list,
+        // so no need to recheck it while filling the listview.
+        listView1.ItemChecked -= listView1_ItemChecked;
+        listView1.Items.AddRange(items.ToArray());
+        listView1.ItemChecked += listView1_ItemChecked;
+        listView1.EndUpdate();
+
         bool isAllChannelsGroup = (_channelGroup.GroupName == TvConstants.RadioGroupNames.AllChannels);
         removeChannelFromGroup.Enabled = !isAllChannelsGroup;
         mpButtonDel.Enabled = !isAllChannelsGroup;
@@ -102,50 +122,6 @@
       }
     }
 
-    private ListViewItem CreateItemForChannel(Channel channel, object map)
-    {
-      bool hasFta = false;
-      bool hasScrambled = false;
-      IList<TuningDetail> tuningDetails = channel.ReferringTuningDetail();
-      foreach (TuningDetail detail in tuningDetails)
-      {
-        if (detail.FreeToAir)
-        {
-          hasFta = true;
-        }
-        if (!detail.FreeToAir)
-        {
-          hasScrambled = true;
-        }
-      }
-
-      int imageIndex;
-      if (hasFta && hasScrambled)
-      {
-        imageIndex = 2;
-      }
-      else if (hasScrambled)
-      {
-        imageIndex = 1;
-      }
-      else
-      {
-        imageIndex = 0;
-      }
-
-      ListViewItem item = new ListViewItem(channel.DisplayName, imageIndex);
-
-      item.Checked = channel.VisibleInGuide;
-      item.Tag = map;
-
-      IList<TuningDetail> details = channel.ReferringTuningDetail();
-      if (details.Count > 0)
-      {
-        item.SubItems.Add(details[0].ChannelNumber.ToString());
-      }
-      return item;
-    }
-
     private void listView1_ItemDrag(object sender, ItemDragEventArgs e)
     {
       if (e.Item is ListViewItem)
@@ -237,20 +213,16 @@
     {
       RadioChannelGroup group;
       ToolStripMenuItem menuItem = (ToolStripMenuItem)sender;
-
       if (menuItem.Tag == null)
       {
         GroupNameForm dlg = new GroupNameForm();
         dlg.IsRadio = true;
-
         if (dlg.ShowDialog(this) != DialogResult.OK)
         {
           return;
         }
-
         group = new RadioChannelGroup(dlg.GroupName, 9999);
         group.Persist();
-
         UpdateMenuAndTabs();
       }
       else
@@ -261,9 +233,7 @@
       ListView.SelectedIndexCollection indexes = listView1.SelectedIndices;
       if (indexes.Count == 0)
         return;
-
       TvBusinessLayer layer = new TvBusinessLayer();
-
       for (int i = 0; i < indexes.Count; ++i)
       {
         ListViewItem item = listView1.Items[indexes[i]];
@@ -291,10 +261,10 @@
         }
       }
 
-
       ListView.SelectedIndexCollection indexes = listView1.SelectedIndices;
       if (indexes.Count == 0)
         return;
+
       NotifyForm dlg = new NotifyForm("Deleting selected radio channels...",
                                       "This can take some time\n\nPlease be patient...");
       dlg.Show();
@@ -339,6 +309,31 @@
       ReOrder();
     }
 
+    private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)
+    {
+      editChannelToolStripMenuItem_Click(null, null);
+    }
+
+    private void listView1_AfterLabelEdit(object sender, LabelEditEventArgs e)
+    {
+      if (e.Label != null)
+      {
+        Channel channel = ((RadioGroupMap)listView1.Items[e.Item].Tag).ReferencedChannel();
+        channel.DisplayName = e.Label;
+        channel.Persist();
+      }
+    }
+
+    private void listView1_ItemChecked(object sender, ItemCheckedEventArgs e)
+    {
+      Channel ch = ((RadioGroupMap)e.Item.Tag).ReferencedChannel();
+      if (ch.VisibleInGuide != e.Item.Checked)
+      {
+        ch.VisibleInGuide = e.Item.Checked;
+        ch.Persist();
+      }
+    }
+
     private void mpButtonPreview_Click(object sender, EventArgs e)
     {
       ListView.SelectedIndexCollection indexes = listView1.SelectedIndices;
@@ -515,26 +510,6 @@
       lvwColumnSorter.Order = SortOrder.None;
     }
 
-    private void listView1_AfterLabelEdit(object sender, LabelEditEventArgs e)
-    {
-      if (e.Label != null)
-      {
-        Channel channel = ((RadioGroupMap)listView1.Items[e.Item].Tag).ReferencedChannel();
-        channel.DisplayName = e.Label;
-        channel.Persist();
-      }
-    }
-
-    private void listView1_ItemChecked(object sender, ItemCheckedEventArgs e)
-    {
-      Channel ch = ((RadioGroupMap)e.Item.Tag).ReferencedChannel();
-      if (ch.VisibleInGuide != e.Item.Checked)
-      {
-        ch.VisibleInGuide = e.Item.Checked;
-        ch.Persist();
-      }
-    }
-
     private void mpButtonOrderByName_Click(object sender, EventArgs e)
     {
       this.listView1_ColumnClick(null, new ColumnClickEventArgs(0));
Index: TvEngine3/TVLibrary/SetupTv/Sections/Combinations.cs
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Sections/Combinations.cs	(revision 28196)
+++ TvEngine3/TVLibrary/SetupTv/Sections/Combinations.cs	(working copy)
@@ -22,12 +22,11 @@
 using System.Collections.Generic;
 using System.Windows.Forms;
 using TvControl;
-using Gentle.Framework;
 using TvDatabase;
 using TvLibrary.Interfaces;
 using similaritymetrics;
 using MediaPortal.UserInterface.Controls;
-using TvLibrary.Log;
+using SetupTv.Sections.Helpers;
 
 namespace SetupTv.Sections
 {
@@ -56,7 +55,7 @@
     private readonly MPListViewStringColumnSorter lvwColumnSorter2;
     private readonly MPListViewStringColumnSorter lvwColumnSorter3;
 
-    private Dictionary<int, CardType> cards;
+    private IDictionary<int, CardType> cards;
 
     public TvCombinations(string name)
       : base(name)
@@ -102,38 +101,35 @@
 
     private void mpComboBoxCard_SelectedIndexChanged(object sender, EventArgs e)
     {
+      Application.UseWaitCursor = true;
       mpListViewChannels.BeginUpdate();
       try
       {
         mpListViewChannels.Items.Clear();
         mpListViewMapped.Items.Clear();
 
-        SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (Channel));
-        sb.AddOrderByField(true, "sortOrder");
-        CardInfo cardInfo = (CardInfo)mpComboBoxCard.SelectedItem;
+        Card card = ((CardInfo)mpComboBoxCard.SelectedItem).Card;
 
-        Card card = cardInfo.Card;
+        // get cardtype - dvb, analogue etc.
         CardType cardType = cards[card.IdCard];
-        IList<ChannelMap> maps = card.ReferringChannelMap();
 
+        TvBusinessLayer layer = new TvBusinessLayer();
+        bool enableDVBS2 = (layer.GetSetting("dvbs" + card.IdCard + "enabledvbs2", "false").Value == "true");
 
         List<ListViewItem> items = new List<ListViewItem>();
+
+        IDictionary<int, Channel> dChannels = ChannelListHelper.GetDictionaryOfChannelsForGroup(-1, ChannelType.Tv);
+        IDictionary<int, IList<TuningDetail>> dDetails = ChannelListHelper.GetDictionaryOfTuningDetailsForGroup(-1, ChannelType.Tv);
+        IList<ChannelMap> maps = card.ReferringChannelMap();
         foreach (ChannelMap map in maps)
         {
           Channel channel = null;
-          try
-          {
-            channel = map.ReferencedChannel();
-          }
-          catch (Exception) {}
-          if (channel == null)
+          if (!dChannels.TryGetValue(map.IdChannel, out channel))
             continue;
-          if (channel.IsTv == false)
-            continue;
-          TvBusinessLayer layer = new TvBusinessLayer();
-          bool enableDVBS2 = (layer.GetSetting("dvbs" + card.IdCard + "enabledvbs2", "false").Value == "true");
-          List<TuningDetail> tuningDetails = GetTuningDetailsByCardType(channel, cardType, enableDVBS2);
-          int imageIndex = GetImageIndex(tuningDetails);
+
+          List<TuningDetail> tuningDetails = ChannelListHelper.GetTuningDetailsByCardType(channel, dDetails, cardType, enableDVBS2);
+          
+          int imageIndex = ChannelListIcons.GetChannelListIconIndex(channel, tuningDetails);
           ListViewItem item = new ListViewItem(channel.DisplayName, imageIndex);
           item.Tag = channel;
           items.Add(item);
@@ -144,6 +140,7 @@
       finally
       {
         mpListViewChannels.EndUpdate();
+        Application.UseWaitCursor = false;
       }
     }
 
@@ -153,32 +150,35 @@
       try
       {
         mpListViewMapped.Items.Clear();
-        if (mpListViewChannels.SelectedIndices == null)
-          return;
         if (mpListViewChannels.SelectedIndices.Count != 1)
           return;
         Card card = ((CardInfo)mpComboBoxCard.SelectedItem).Card;
         ListViewItem selectedItem = mpListViewChannels.Items[mpListViewChannels.SelectedIndices[0]];
         Channel selectedChannel = (Channel)selectedItem.Tag;
-        IList<Channel> allChannels = Channel.ListAll();
+
+        IList<Channel> allChannels = ChannelListHelper.GetChannelsOfTypeForGroup(-1, ChannelType.Tv);
+        IDictionary<int, IList<TuningDetail>> dDetails = ChannelListHelper.GetDictionaryOfTuningDetailsForGroup(-1, ChannelType.Tv);
+        IDictionary<int, IList<ChannelMap>> dMaps = ChannelListHelper.GetDictionaryOfChannelMaps(ChannelType.Tv);
+
         List<ListViewItem> items = new List<ListViewItem>();
-        NotifyForm dlg = new NotifyForm("Searching for Similar Channels...",
-                                        "This can take some time\n\nPlease be patient...");
+        NotifyForm dlg = new NotifyForm("Searching for similar channels...",
+                                        "This can take some time.\n\nPlease be patient...");
         dlg.Show(this);
         dlg.WaitForDisplay();
         foreach (Channel channel in allChannels)
         {
-          if (channel.IsTv == false)
-            continue;
-
           bool isMapped = false;
-          IList<ChannelMap> list = channel.ReferringChannelMap();
-          foreach (ChannelMap map in list)
+          IList<ChannelMap> maps;
+          dMaps.TryGetValue(channel.IdChannel, out maps);
+          if (maps != null)
           {
-            if (map.IdCard == card.IdCard)
+            foreach (ChannelMap map in maps)
             {
-              isMapped = true;
-              break;
+              if (map.IdCard == card.IdCard)
+              {
+                isMapped = true;
+                break;
+              }
             }
           }
           if (isMapped)
@@ -187,8 +187,9 @@
           Levenstein comparer = new Levenstein();
           float result = comparer.getSimilarity(selectedChannel.DisplayName, channel.DisplayName);
 
-          IList<TuningDetail> details = channel.ReferringTuningDetail();
-          int imageIndex = GetImageIndex(details);
+          IList<TuningDetail> details;
+          dDetails.TryGetValue(channel.IdChannel, out details);
+          int imageIndex = ChannelListIcons.GetChannelListIconIndex(channel, details);
           ListViewItem item = new ListViewItem((result * 100f).ToString("f2") + "%", imageIndex);
           item.Tag = channel;
           item.SubItems.Add(channel.DisplayName);
@@ -332,90 +333,5 @@
       // Perform the sort with these new sort options.
       mpListViewMapped.Sort();
     }
-
-    private static List<TuningDetail> GetTuningDetailsByCardType(Channel channel, CardType cardType, bool enableDVBS2)
-    {
-      List<TuningDetail> result = new List<TuningDetail>();
-      foreach (TuningDetail tDetail in channel.ReferringTuningDetail())
-      {
-        switch (cardType)
-        {
-          case CardType.Analog:
-            if (tDetail.ChannelType == 0)
-              result.Add(tDetail);
-            break;
-          case CardType.Atsc:
-            if (tDetail.ChannelType == 1)
-              result.Add(tDetail);
-            break;
-          case CardType.DvbC:
-            if (tDetail.ChannelType == 2)
-              result.Add(tDetail);
-            break;
-          case CardType.DvbS:
-            if (tDetail.ChannelType == 3)
-            {
-              if (!enableDVBS2 && (tDetail.Pilot > -1 || tDetail.RollOff > -1))
-              {
-                Log.Debug(String.Format(
-                  "Imported channel {0} detected as DVB-S2. Skipped! \n Enable \"DVB-S2 tuning\" option in your TV-Card properties to be able to combine these channels.",
-                  tDetail.Name));
-              }
-              else
-              {
-                result.Add(tDetail);
-              }
-            }
-            break;
-          case CardType.DvbT:
-            if (tDetail.ChannelType == 4)
-              result.Add(tDetail);
-            break;
-          case CardType.DvbIP:
-            if (tDetail.ChannelType == 7)
-              result.Add(tDetail);
-            break;
-          case CardType.RadioWebStream:
-            if (tDetail.ChannelType == 5)
-              result.Add(tDetail);
-            break;
-          default:
-            break;
-        }
-      }
-      return result;
-    }
-
-    private static int GetImageIndex(IList<TuningDetail> tuningDetails)
-    {
-      bool hasFta = false;
-      bool hasScrambled = false;
-      foreach (TuningDetail detail in tuningDetails)
-      {
-        if (detail.FreeToAir)
-        {
-          hasFta = true;
-        }
-        if (!detail.FreeToAir)
-        {
-          hasScrambled = true;
-        }
-      }
-
-      int imageIndex;
-      if (hasFta && hasScrambled)
-      {
-        imageIndex = 5;
-      }
-      else if (hasScrambled)
-      {
-        imageIndex = 4;
-      }
-      else
-      {
-        imageIndex = 3;
-      }
-      return imageIndex;
-    }
   }
 }
\ No newline at end of file
Index: TvEngine3/TVLibrary/SetupTv/Sections/Epg.Designer.cs
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Sections/Epg.Designer.cs	(revision 28196)
+++ TvEngine3/TVLibrary/SetupTv/Sections/Epg.Designer.cs	(working copy)
@@ -326,8 +326,13 @@
             0,
             0,
             0});
+      this.numericUpDownTSEpgTimeout.Minimum = new decimal(new int[] {
+            1,
+            0,
+            0,
+            0});
       this.numericUpDownTSEpgTimeout.Name = "numericUpDownTSEpgTimeout";
-      this.numericUpDownTSEpgTimeout.Size = new System.Drawing.Size(86, 20);
+      this.numericUpDownTSEpgTimeout.Size = new System.Drawing.Size(73, 20);
       this.numericUpDownTSEpgTimeout.TabIndex = 10;
       this.numericUpDownTSEpgTimeout.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
       this.numericUpDownTSEpgTimeout.Value = new decimal(new int[] {
@@ -351,11 +356,11 @@
       // 
       this.label22.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
       this.label22.AutoSize = true;
-      this.label22.Location = new System.Drawing.Point(173, 42);
+      this.label22.Location = new System.Drawing.Point(149, 44);
       this.label22.Name = "label22";
-      this.label22.Size = new System.Drawing.Size(28, 13);
+      this.label22.Size = new System.Drawing.Size(47, 13);
       this.label22.TabIndex = 7;
-      this.label22.Text = "mins";
+      this.label22.Text = "seconds";
       // 
       // label23
       // 
@@ -401,7 +406,7 @@
       this.checkboxSameTransponder.Name = "checkboxSameTransponder";
       this.checkboxSameTransponder.Size = new System.Drawing.Size(257, 17);
       this.checkboxSameTransponder.TabIndex = 14;
-      this.checkboxSameTransponder.Text = "Grap EPG only for channels on same transponder";
+      this.checkboxSameTransponder.Text = "Grab EPG only for channels on same transponder";
       this.checkboxSameTransponder.UseVisualStyleBackColor = true;
       // 
       // label1
Index: TvEngine3/TVLibrary/SetupTv/Sections/Helpers/ChannelListHelper.cs
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Sections/Helpers/ChannelListHelper.cs	(revision 0)
+++ TvEngine3/TVLibrary/SetupTv/Sections/Helpers/ChannelListHelper.cs	(revision 0)
@@ -0,0 +1,483 @@
+#region Copyright (C) 2005-2011 Team MediaPortal
+
+// Copyright (C) 2005-2011 Team MediaPortal
+// http://www.team-mediaportal.com
+//
+// MediaPortal is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 2 of the License, or
+// (at your option) any later version.
+//
+// MediaPortal is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with MediaPortal. If not, see <http://www.gnu.org/licenses/>.
+
+#endregion
+
+using System;
+using System.Collections.Generic;
+using TvDatabase;
+using TvLibrary.Interfaces;
+using TvLibrary.Log;
+using Gentle.Framework;
+
+namespace SetupTv.Sections.Helpers
+{
+  /// <summary>
+  /// Class that helps to fill any kind of channel list
+  /// </summary>
+  public static class ChannelListHelper
+  {
+    #region dictionaries
+
+    public static IDictionary<int, IList<TuningDetail>> GetDictionaryOfTuningDetailsForGroup(int GroupId, ChannelType chType)
+    {
+      // Create a dictionary of tuning details keyed on channel id.
+      System.Data.IDbCommand icmd = Broker.Provider.GetCommand();
+      string sql = "SELECT * FROM tuningdetail";
+      if ((chType == ChannelType.Tv) || (chType == ChannelType.Radio))
+      {
+        string IsTvOrRadio = (chType == ChannelType.Tv) ? "isTv" : "isRadio";
+        sql += " WHERE (" + IsTvOrRadio + " = true)";
+        if ((GroupId >= 0))
+        {
+          string GroupMapTableName = (chType == ChannelType.Tv) ? "groupmap" : "radiogroupmap";
+          sql += " AND (idchannel IN " +
+                 "(SELECT idChannel FROM " + GroupMapTableName + " WHERE idGroup = " + GroupId + " ORDER BY idChannel))";
+        }
+      }
+      sql += " ORDER BY idChannel";
+      SqlStatement stmt = new SqlStatement(StatementType.Select, icmd, sql);
+      IList<TuningDetail> details = ObjectFactory.GetCollection<TuningDetail>(stmt.Execute());
+      int prevChannelId = -1;
+      IList<TuningDetail> l = new List<TuningDetail>();
+      IDictionary<int, IList<TuningDetail>> d = new Dictionary<int, IList<TuningDetail>>();
+      foreach (TuningDetail detail in details)
+      {
+        if (prevChannelId != detail.IdChannel)
+        {
+          if (l.Count > 0)
+            d.Add(prevChannelId, l);
+          prevChannelId = detail.IdChannel;
+          l = new List<TuningDetail>();
+        }
+        l.Add(detail);
+      }
+      if (prevChannelId != -1)
+      {
+        d.Add(prevChannelId, l);
+      }
+      return d;
+    }
+
+    public static IDictionary<int, Channel> GetDictionaryOfChannelsForGroup(int GroupId, ChannelType chType)
+    {
+      // Create a dictionary of channels keyed on channel id.
+      IList<Channel> channels = GetChannelsOfTypeForGroup(GroupId, chType);
+      IDictionary<int, Channel> d = new Dictionary<int, Channel>();
+      if (channels != null)
+      {
+        foreach (Channel _ch in channels)
+        {
+          d.Add(_ch.IdChannel, _ch);
+        }
+      }
+      return d;
+    }
+
+    public static IDictionary<int, IList<ChannelMap>> GetDictionaryOfChannelMaps(ChannelType chType)
+    {
+      System.Data.IDbCommand icmd = Broker.Provider.GetCommand();
+      string sql = "SELECT * FROM channelmap";
+      if ((chType == ChannelType.Tv) || (chType == ChannelType.Radio))
+      {
+        string IsTvOrRadio = (chType == ChannelType.Tv) ? "isTv = true" : "isRadio = true";
+        sql += " WHERE (idchannel IN " +
+               "(SELECT idChannel FROM channel WHERE (" + IsTvOrRadio + ") ORDER BY idChannel))";
+      }
+      sql += " ORDER BY idChannel";
+      SqlStatement stmt = new SqlStatement(StatementType.Select, icmd, sql);
+      IList<ChannelMap> maps = ObjectFactory.GetCollection<ChannelMap>(stmt.Execute());
+      int prevChannelId = -1;
+      IList<ChannelMap> l = new List<ChannelMap>();
+      IDictionary<int, IList<ChannelMap>> d = new Dictionary<int, IList<ChannelMap>>();
+      foreach (ChannelMap map in maps)
+      {
+        if (prevChannelId != map.IdChannel)
+        {
+          if (l.Count > 0)
+            d.Add(prevChannelId, l);
+          prevChannelId = map.IdChannel;
+          l = new List<ChannelMap>();
+        }
+        l.Add(map);
+      }
+      if (prevChannelId != -1)
+      {
+        d.Add(prevChannelId, l);
+      }
+      return d;
+    }
+
+    public static IDictionary<int, IList<string>> GetDictionaryOfGroupNamesForChannelType(ChannelType chType)
+    {
+      IDictionary<int, string> dGroupNames = new Dictionary<int, string>();
+      if (chType == ChannelType.Tv)
+      {
+        SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (ChannelGroup));
+        sb.AddOrderByField("SortOrder");
+        SqlStatement stmnt = sb.GetStatement();
+        IList<ChannelGroup> chGroups = ObjectFactory.GetCollection<ChannelGroup>(stmnt.Execute());
+        foreach (ChannelGroup group in chGroups)
+        {
+          dGroupNames.Add(group.IdGroup, group.GroupName);
+        }
+      }
+      else
+      {
+        SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (RadioChannelGroup));
+        sb.AddOrderByField("SortOrder");
+        SqlStatement stmnt = sb.GetStatement();
+        IList<RadioChannelGroup> chGroups = ObjectFactory.GetCollection<RadioChannelGroup>(stmnt.Execute());
+        foreach (RadioChannelGroup group in chGroups)
+        {
+          dGroupNames.Add(group.IdGroup, group.GroupName);
+        }
+      }
+
+
+      // Create a dictionary of group names keyed on channel id.
+      System.Data.IDbCommand icmd = Broker.Provider.GetCommand();
+      string GroupMapTableName = (chType == ChannelType.Tv) ? "groupmap" : "radiogroupmap";
+      string sqlGroupMap = "SELECT * FROM " + GroupMapTableName;
+      if ((chType == ChannelType.Tv) || (chType == ChannelType.Radio))
+      {
+        string IsTvOrRadio = (chType == ChannelType.Tv) ? "isTV" : "isRadio";
+        sqlGroupMap += " WHERE idChannel IN " +
+                       "(SELECT idChannel FROM channel WHERE " + IsTvOrRadio + " = true ORDER BY idChannel)";
+      }
+      sqlGroupMap += " ORDER BY idChannel";
+      SqlStatement stmt = new SqlStatement(StatementType.Select, icmd, sqlGroupMap);
+
+      IList<GroupMap> GroupMaps = ObjectFactory.GetCollection<GroupMap>(stmt.Execute());
+      int prevChannelId = -1;
+      IList<string> l = new List<string>();
+      IDictionary<int, IList<string>> d = new Dictionary<int, IList<string>>();
+      foreach (GroupMap map in GroupMaps)
+      {
+        if (prevChannelId != map.IdChannel)
+        {
+          if (l.Count > 0)
+            d.Add(prevChannelId, l);
+          prevChannelId = map.IdChannel;
+          l = new List<string>();
+        }
+        string GroupName;
+        if (dGroupNames.TryGetValue(map.IdGroup, out GroupName))
+        {
+          l.Add(GroupName);
+        }
+        else
+        {
+          Log.Error("channelgroup for channel id={0} with channelgroup id={1} does not exist", prevChannelId,
+                    map.IdGroup);
+        }
+      }
+      if (prevChannelId != -1)
+      {
+        d.Add(prevChannelId, l);
+      }
+      return d;
+    }
+
+    public static IDictionary<int, CardType> GetDictionaryOfInstalledCardTypes()
+    {
+      IDictionary<int, CardType> cards = new Dictionary<int, CardType>();
+      IList<Card> dbsCards = Card.ListAll();
+      foreach (Card card in dbsCards)
+      {
+        if (card.Enabled == false)
+          continue;
+        if (!TvControl.RemoteControl.Instance.CardPresent(card.IdCard))
+          continue;
+        cards.Add(card.IdCard, TvControl.RemoteControl.Instance.Type(card.IdCard));
+      }
+      return cards;
+    }
+
+  #endregion
+
+    public static IList<Channel> GetChannelsOfTypeForGroup(int GroupId, ChannelType chType)
+    {
+      System.Data.IDbCommand icmd = Broker.Provider.GetCommand();
+      string sql = "SELECT * FROM channel";
+      if ((chType == ChannelType.Tv) || (chType == ChannelType.Radio))
+      {
+        string IsTvOrRadio = (chType == ChannelType.Tv) ? "isTv" : "isRadio";
+        sql += " WHERE (" + IsTvOrRadio + " = true)";
+        if ((GroupId >= 0))
+        {
+          string GroupMapTableName = (chType == ChannelType.Tv) ? "groupmap" : "radiogroupmap";
+          sql += " AND (idchannel IN " +
+                 "(SELECT idChannel FROM " + GroupMapTableName + " WHERE idGroup = " + GroupId + " ORDER BY idChannel))";
+        }
+      }
+      sql += " ORDER BY sortOrder";
+      SqlStatement stmt = new SqlStatement(StatementType.Select, icmd, sql);
+      return ObjectFactory.GetCollection<Channel>(stmt.Execute());
+    }
+
+    public static bool HasWebstreamTuningDetails(IList<TuningDetail> details)
+    {
+      return Channel.HasWebstreamTuningDetails(details);
+    }
+
+    public static bool HasDVBS2Details(TuningDetail detail)
+    {
+      if ( (detail.Modulation != (int)DirectShowLib.BDA.ModulationType.Mod16Qam) &&
+           (detail.RollOff == (int)DirectShowLib.BDA.RollOff.Twenty ||
+            detail.RollOff == (int)DirectShowLib.BDA.RollOff.TwentyFive ||
+            detail.Pilot == (int)DirectShowLib.BDA.Pilot.On ||
+            detail.Modulation == (int)DirectShowLib.BDA.ModulationType.Mod8Psk ||    /* acc.to mm1352000:
+                                                                                * most DVB-S2 channels are 8PSK.
+                                                                                * We store the modulation of DVB-S channels
+                                                                                * as ModNotSet so it should be safe to treat
+                                                                                * Mod8psk as the DVB-S2 8 PSK - DVB-S 8 PSK
+                                                                                * doesn't seem to be very common */
+            detail.Modulation == (int)DirectShowLib.BDA.ModulationType.Mod16Apsk ||
+            detail.Modulation == (int)DirectShowLib.BDA.ModulationType.Mod32Apsk ||
+            detail.InnerFecRate == (int)DirectShowLib.BDA.BinaryConvolutionCodeRate.Rate3_5 ||
+            detail.InnerFecRate == (int)DirectShowLib.BDA.BinaryConvolutionCodeRate.Rate4_5 ||
+            detail.InnerFecRate == (int)DirectShowLib.BDA.BinaryConvolutionCodeRate.Rate5_11 ||
+            detail.InnerFecRate == (int)DirectShowLib.BDA.BinaryConvolutionCodeRate.Rate1_4 ||
+            detail.InnerFecRate == (int)DirectShowLib.BDA.BinaryConvolutionCodeRate.Rate1_3 ||
+            detail.InnerFecRate == (int)DirectShowLib.BDA.BinaryConvolutionCodeRate.Rate2_5 ||
+            detail.InnerFecRate == (int)DirectShowLib.BDA.BinaryConvolutionCodeRate.Rate6_7 ||
+            detail.InnerFecRate == (int)DirectShowLib.BDA.BinaryConvolutionCodeRate.Rate8_9 ||
+            detail.InnerFecRate == (int)DirectShowLib.BDA.BinaryConvolutionCodeRate.Rate9_10
+         ) )
+        return true;
+      else
+        return false;
+    }
+
+    public static string GetMappingNames(IList<ChannelMap> maps, IDictionary<int, CardType> cardtypes, IList<TuningDetail> tuningDetails)
+    {
+      bool HasAnalog = false;
+      bool HasDVBC = false;
+      bool HasDVBT = false;
+      bool HasDVBS = false;
+      bool HasATSC = false;
+      bool HasDVBIP = false;
+      bool HasWebStream = false;
+      bool HasDVBS2 = false;
+      bool HasDVBSOnly = false;
+
+      if (maps != null)
+      {
+        CardType type;
+        foreach (ChannelMap map in maps)
+        {
+          if (cardtypes.TryGetValue(map.IdCard, out type))
+          {
+            switch (type)
+            {
+              case CardType.Analog:
+                HasAnalog = true;
+                break;
+              case CardType.DvbC:
+                HasDVBC = true;
+                break;
+              case CardType.DvbT:
+                HasDVBT = true;
+                break;
+              case CardType.DvbS:
+                HasDVBS = true;
+                break;
+              case CardType.Atsc:
+                HasATSC = true;
+                break;
+              case CardType.DvbIP:
+                HasDVBIP = true;
+                break;
+              case CardType.RadioWebStream:
+                HasWebStream = true;
+                break;
+            }
+          }
+        }
+      }
+
+      if (tuningDetails != null)
+      {
+        foreach (TuningDetail tuningDetail in tuningDetails)
+        {
+          if (HasDVBS)
+          {
+            if (HasDVBS2Details(tuningDetail))
+              HasDVBS2 = true;
+            else
+              HasDVBSOnly = true;
+          }
+        }
+      }
+
+      List<string> mappings = new List<string>();
+      if (HasAnalog)
+        mappings.Add("Analog");
+      if (HasDVBC)
+        mappings.Add("DVB-C");
+      if (HasDVBT)
+        mappings.Add("DVB-T");
+      if (HasDVBSOnly)
+        mappings.Add("DVB-S");
+      if (HasDVBS2)
+        mappings.Add("DVB-S2");
+      if (HasATSC)
+        mappings.Add("ATSC");
+      if (HasDVBIP)
+        mappings.Add("DVB-IP");
+      if (HasWebStream)
+        mappings.Add("Webstream");
+      return String.Join(", ", mappings.ToArray());
+    }
+
+    public static List<TuningDetail> GetTuningDetailsByCardType(Channel channel, IDictionary<int, IList<TuningDetail>> dDetails, CardType cardType, bool enableDVBS2)
+    {
+      List<TuningDetail> result = new List<TuningDetail>();
+      IList<TuningDetail> Details;
+      if (dDetails.TryGetValue(channel.IdChannel, out Details))
+      {
+        foreach (TuningDetail tDetail in Details)
+        {
+          switch (cardType)
+          {
+            case CardType.Analog:
+              if (tDetail.ChannelType == ChannelProviderType.Analog)
+                result.Add(tDetail);
+              break;
+            case CardType.Atsc:
+              if (tDetail.ChannelType == ChannelProviderType.ATSC)
+                result.Add(tDetail);
+              break;
+            case CardType.DvbC:
+              if (tDetail.ChannelType == ChannelProviderType.DVBC)
+                result.Add(tDetail);
+              break;
+            case CardType.DvbS:
+              if (tDetail.ChannelType == ChannelProviderType.DVBS)
+              {
+                if (!enableDVBS2 && ChannelListHelper.HasDVBS2Details(tDetail))
+                {
+                  Log.Debug(String.Format(
+                    "Imported channel {0} detected as DVB-S2. Skipped! \n Enable \"DVB-S2 tuning\" option in your TV-Card properties to be able to map these channels.",
+                    tDetail.Name));
+                }
+                else
+                  result.Add(tDetail);
+              }
+              break;
+            case CardType.DvbT:
+              if (tDetail.ChannelType == ChannelProviderType.DVBT)
+                result.Add(tDetail);
+              break;
+            case CardType.DvbIP:
+              if (tDetail.ChannelType == ChannelProviderType.DVBIP)
+                result.Add(tDetail);
+              break;
+            case CardType.RadioWebStream:
+              if (tDetail.ChannelType == ChannelProviderType.WebStream)
+                result.Add(tDetail);
+              break;
+          }
+        }
+      }
+      return result;
+    }
+  }
+
+  public static class ChannelListIcons
+  {
+    /// <summary>
+    /// Icon for radio channel with FTA flag or without any flag
+    /// </summary>
+    public static int Radio_FTA = 0;
+
+    /// <summary>
+    /// Icon for radio scrambled channel
+    /// </summary>
+    public static int Radio_Scrambled = 1;
+
+    /// <summary>
+    /// Icon for radio FTA and scrambled channel (combined)
+    /// </summary>
+    public static int Radio_FTA_Scrambled = 2;
+
+    /// <summary>
+    /// Icon for TV channel with FTA flag or without any flag
+    /// </summary>
+    public static int TV_FTA = 3;
+
+    /// <summary>
+    /// Icon for TV scrambled channel
+    /// </summary>
+    public static int TV_Scrambled = 4;
+
+    /// <summary>
+    /// Icon for TV FTA and scrambled channel (combined)
+    /// </summary>
+    public static int TV_FTA_Scrambled = 5;
+
+    private static int GetChannelListIconIndex(ChannelType _type, bool IsFTA, bool IsScrambled)
+    {
+      switch (_type)
+      {
+        case ChannelType.Tv:
+          if (IsFTA && IsScrambled)
+            return TV_FTA_Scrambled;
+          else if (IsScrambled)
+            return TV_Scrambled;
+          else
+            return TV_FTA;
+
+        case ChannelType.Radio:
+          if (IsFTA && IsScrambled)
+            return Radio_FTA_Scrambled;
+          else if (IsScrambled)
+            return Radio_Scrambled;
+          else
+            return Radio_FTA;
+
+        default:
+          return -1;
+      }
+    }
+
+    public static int GetChannelListIconIndex(Channel _ch, IList<TuningDetail> TuningDetailsList)
+    {
+      bool hasFta = false;
+      bool hasScrambled = false;
+      if (TuningDetailsList != null)
+      {
+        foreach (TuningDetail detail in TuningDetailsList)
+        {
+          if (detail.FreeToAir)
+          {
+            hasFta = true;
+          }
+          if (!detail.FreeToAir)
+          {
+            hasScrambled = true;
+          }
+        }
+      }
+      ChannelType _type = (_ch.IsTv ? ChannelType.Tv : (_ch.IsRadio ? ChannelType.Radio : ChannelType.All));
+      return GetChannelListIconIndex(_type, hasFta, hasScrambled);
+    }
+  }
+
+}
\ No newline at end of file
Index: TvEngine3/TVLibrary/SetupTv/Sections/Helpers/ChannelListViewHandler.cs
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Sections/Helpers/ChannelListViewHandler.cs	(revision 28196)
+++ TvEngine3/TVLibrary/SetupTv/Sections/Helpers/ChannelListViewHandler.cs	(working copy)
@@ -20,13 +20,11 @@
 
 using System;
 using System.Collections.Generic;
-using System.Text;
 using System.Windows.Forms;
 using TvDatabase;
 using TvLibrary.Interfaces;
 using TvLibrary.Log;
 using System.Threading;
-using SetupControls;
 
 namespace SetupTv.Sections.Helpers
 {
@@ -46,6 +44,11 @@
     private ChannelType _type; //the type of the texbox, currently that's tv or radio
     private Dictionary<int, ListViewItem> _listViewCache; //A list of allready created listviewitems
 
+    private IDictionary<int, IList<TuningDetail>> dTuningDetails;
+    private IDictionary<int, Channel> dChannels;
+    private IDictionary<int, IList<ChannelMap>> dChannelMaps;
+    private IDictionary<int, IList<string>> dChannelGroupNames;
+
     /// <summary>
     /// Creates a new ChannelListView Handler
     /// </summary>
@@ -53,6 +56,7 @@
     /// <param name="channels"></param>
     /// <param name="allCards"></param>
     /// <param name="textBox"></param>
+    /// <param name="type"></param>
     internal ChannelListViewHandler(ListView listView, IList<Channel> channels, Dictionary<int, CardType> allCards,
                                     TextBox textBox, ChannelType type)
     {
@@ -62,6 +66,11 @@
       _currentText = textBox;
       _type = type;
       _listViewCache = new Dictionary<int, ListViewItem>();
+
+      dChannels = ChannelListHelper.GetDictionaryOfChannelsForGroup(-1, type);
+      dTuningDetails = ChannelListHelper.GetDictionaryOfTuningDetailsForGroup(-1, type);
+      dChannelMaps = ChannelListHelper.GetDictionaryOfChannelMaps(type);
+      dChannelGroupNames = ChannelListHelper.GetDictionaryOfGroupNamesForChannelType(type);
     }
 
     /// <summary>
@@ -105,7 +114,7 @@
 
       try
       {
-        Log.Debug("Filter listview for " + filterText);
+        Log.Debug("Filter listview for \"" + filterText + "\"");
         _listView.Invoke(new MethodInvoker(delegate()
                                              {
                                                _listView.Items.Clear();
@@ -118,7 +127,7 @@
           if (InvokeHasTextChanged(filterText))
           {
 //the search term changed while we were filtering
-            Log.Debug("Cancel filtering for " + filterText);
+            Log.Debug("Cancel filtering for \"" + filterText + "\"");
             break;
           }
 
@@ -141,7 +150,7 @@
                                                  _listView.Items.AddRange(items.ToArray());
                                                  _listView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
                                                }));
-          Log.Debug("Finished filtering " + items.Count + " items for " + filterText);
+          Log.Debug("Finished filtering " + items.Count + " items for \"" + filterText + "\"");
         }
         else
         {
@@ -195,188 +204,72 @@
     /// <returns>Listview item representing the channel</returns>
     internal ListViewItem CreateListViewItemForChannel(Channel ch, Dictionary<int, CardType> cards)
     {
-      if (_listViewCache.ContainsKey(ch.IdChannel)) return _listViewCache[ch.IdChannel];
+      if (_listViewCache.ContainsKey(ch.IdChannel))
+        return _listViewCache[ch.IdChannel];
 
-      bool analog = false;
-      bool dvbc = false;
-      bool dvbt = false;
-      bool dvbs = false;
-      bool atsc = false;
-      bool dvbip = false;
-      bool webstream = false;
-      bool notmapped = true;
-      if (ch.IsWebstream())
+      bool hasTuningDetails;
+      ListViewItem item = new ListViewItem(ch.DisplayName);
+      IList<TuningDetail> tuningDetails;
+      IList<ChannelMap> maps;
+
+      try
       {
-        webstream = true;
-        notmapped = false;
-      }
-      if (notmapped)
-      {
-        IList<ChannelMap> maps = ch.ReferringChannelMap();
-        foreach (ChannelMap map in maps)
+        hasTuningDetails = dTuningDetails.TryGetValue(ch.IdChannel, out tuningDetails);
+
+        #region Group names
+        List<string> GroupNamesListNoAll = new List<string>();
+        IList<string> groupnames;
+        if(dChannelGroupNames.TryGetValue(ch.IdChannel, out groupnames))
         {
-          if (cards.ContainsKey(map.IdCard))
+          //Don't add "All Channels"
+          foreach (string groupName in groupnames)
           {
-            CardType type = cards[map.IdCard];
-            switch (type)
+            if (groupName != TvConstants.TvGroupNames.AllChannels &&
+                groupName != TvConstants.RadioGroupNames.AllChannels)
             {
-              case CardType.Analog:
-                analog = true;
-                notmapped = false;
-                break;
-              case CardType.DvbC:
-                dvbc = true;
-                notmapped = false;
-                break;
-              case CardType.DvbT:
-                dvbt = true;
-                notmapped = false;
-                break;
-              case CardType.DvbS:
-                dvbs = true;
-                notmapped = false;
-                break;
-              case CardType.Atsc:
-                atsc = true;
-                notmapped = false;
-                break;
-              case CardType.DvbIP:
-                dvbip = true;
-                notmapped = false;
-                break;
+              GroupNamesListNoAll.Add(groupName);
             }
           }
         }
-      }
-      ListViewItem item = new ListViewItem(ch.DisplayName);
-      item.Checked = ch.VisibleInGuide;
-      item.Tag = ch;
+        string GroupNamesNoAll = String.Join(", ", GroupNamesListNoAll.ToArray());
+        #endregion
 
-
-      IList<string> groups = ch.GroupNames;
-      List<string> groupNames = new List<string>();
-      foreach (string groupName in groups)
-      {
-        if (groupName != TvConstants.TvGroupNames.AllChannels &&
-            groupName != TvConstants.RadioGroupNames.AllChannels)
+        #region Provider names
+        List<string> providers = new List<string>();
+        if (hasTuningDetails)
         {
-//Don't add "All Channels"
-          groupNames.Add(groupName);
+          foreach (TuningDetail detail in tuningDetails)
+          {
+            if (!providers.Contains(detail.Provider) && !String.IsNullOrEmpty(detail.Provider))
+            {
+              providers.Add(detail.Provider);
+            }
+          }
         }
-      }
-      string group = String.Join(", ", groupNames.ToArray());
-      item.SubItems.Add(group);
+        string ProviderNames = String.Join(", ", providers.ToArray());
+        #endregion
 
-      List<string> providers = new List<string>();
-      IList<TuningDetail> tuningDetails = ch.ReferringTuningDetail();
-      bool hasFta = false;
-      bool hasScrambled = false;
-      foreach (TuningDetail detail in tuningDetails)
-      {
-        if (!providers.Contains(detail.Provider) && !String.IsNullOrEmpty(detail.Provider))
-        {
-          providers.Add(detail.Provider);
-        }
-        if (detail.FreeToAir)
-        {
-          hasFta = true;
-        }
-        if (!detail.FreeToAir)
-        {
-          hasScrambled = true;
-        }
-      }
+        #region Mapping Names
+        dChannelMaps.TryGetValue(ch.IdChannel, out maps);
+        string MappingNames = ChannelListHelper.GetMappingNames(maps, cards, tuningDetails);
+        if (MappingNames.Length == 0)
+          MappingNames = "Channel not mapped to a card";
+        #endregion
 
-      string provider = String.Join(", ", providers.ToArray());
-      item.SubItems.Add(provider);
+        item.Checked = ch.VisibleInGuide;
+        item.ImageIndex = ChannelListIcons.GetChannelListIconIndex(ch, tuningDetails);
+        item.Tag = ch;
+        item.SubItems.Add(GroupNamesNoAll);
+        item.SubItems.Add(ProviderNames);
+        item.SubItems.Add(MappingNames);
+        item.SubItems.Add(hasTuningDetails ? tuningDetails.Count.ToString() : "0");
 
-      int imageIndex = 0;
-      if (_type == ChannelType.Tv)
-      {
-        if (hasFta && hasScrambled)
-        {
-          imageIndex = 5;
-        }
-        else if (hasScrambled)
-        {
-          imageIndex = 4;
-        }
-        else
-        {
-          imageIndex = 3;
-        }
+        _listViewCache.Add(ch.IdChannel, item);
       }
-      else if (_type == ChannelType.Radio)
+      catch (Exception exp)
       {
-        if (hasFta && hasScrambled)
-        {
-          imageIndex = 2;
-        }
-        else if (hasScrambled)
-        {
-          imageIndex = 1;
-        }
-        else
-        {
-          imageIndex = 0;
-        }
+        Log.Error("RefreshAllChannels error: {0}", exp.StackTrace);
       }
-      item.ImageIndex = imageIndex;
-
-      StringBuilder builder = new StringBuilder();
-
-      if (notmapped)
-      {
-        builder.Append("Channel not mapped to a card");
-      }
-      else
-      {
-        if (analog)
-        {
-          builder.Append("Analog");
-        }
-        if (dvbc)
-        {
-          if (builder.Length > 0)
-            builder.Append(",");
-          builder.Append("DVB-C");
-        }
-        if (dvbt)
-        {
-          if (builder.Length > 0)
-            builder.Append(",");
-          builder.Append("DVB-T");
-        }
-        if (dvbs)
-        {
-          if (builder.Length > 0)
-            builder.Append(",");
-          builder.Append("DVB-S");
-        }
-        if (atsc)
-        {
-          if (builder.Length > 0)
-            builder.Append(",");
-          builder.Append("ATSC");
-        }
-        if (dvbip)
-        {
-          if (builder.Length > 0) builder.Append(",");
-          builder.Append("DVB-IP");
-        }
-        if (webstream)
-        {
-          if (builder.Length > 0)
-            builder.Append(",");
-          builder.Append("Webstream");
-        }
-      }
-
-      item.SubItems.Add(builder.ToString());
-      item.SubItems.Add(tuningDetails.Count.ToString());
-
-      _listViewCache.Add(ch.IdChannel, item);
-
       return item;
     }
   }
Index: TvEngine3/TVLibrary/SetupTv/Sections/ImportExport.cs
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Sections/ImportExport.cs	(revision 28196)
+++ TvEngine3/TVLibrary/SetupTv/Sections/ImportExport.cs	(working copy)
@@ -160,7 +160,7 @@
           AddAttribute(nodeTune, "IdTuning", detail.IdTuning);
           AddAttribute(nodeTune, "Bandwidth", detail.Bandwidth);
           AddAttribute(nodeTune, "ChannelNumber", detail.ChannelNumber);
-          AddAttribute(nodeTune, "ChannelType", detail.ChannelType);
+          AddAttribute(nodeTune, "ChannelType", (int)detail.ChannelType);
           AddAttribute(nodeTune, "CountryId", detail.CountryId);
           AddAttribute(nodeTune, "Diseqc", detail.Diseqc);
           AddAttribute(nodeTune, "FreeToAir", detail.FreeToAir);
Index: TvEngine3/TVLibrary/SetupTv/Sections/RadioChannelMapping.cs
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Sections/RadioChannelMapping.cs	(revision 28196)
+++ TvEngine3/TVLibrary/SetupTv/Sections/RadioChannelMapping.cs	(working copy)
@@ -22,11 +22,10 @@
 using System.Collections.Generic;
 using System.Windows.Forms;
 using TvControl;
-using Gentle.Framework;
 using TvDatabase;
-using MediaPortal.UserInterface.Controls;
 using TvLibrary.Interfaces;
-using TvLibrary.Log;
+using MediaPortal.UserInterface.Controls;
+using SetupTv.Sections.Helpers;
 
 namespace SetupTv.Sections
 {
@@ -68,11 +67,8 @@
       lvwColumnSorter2 = new MPListViewStringColumnSorter();
       lvwColumnSorter2.Order = SortOrder.Ascending;
       mpListViewMapped.ListViewItemSorter = lvwColumnSorter2;
-      //mpListViewChannels.ListViewItemSorter = new MPListViewSortOnColumn(0);
-      //mpListViewMapped.ListViewItemSorter = new MPListViewSortOnColumn(0);
     }
 
-
     public override void OnSectionActivated()
     {
       mpComboBoxCard.Items.Clear();
@@ -89,8 +85,7 @@
         mpComboBoxCard.SelectedIndex = 0;
     }
 
-
-    private void mpButtonMap_Click_1(object sender, EventArgs e)
+    private void mpButtonMap_Click(object sender, EventArgs e)
     {
       NotifyForm dlg = new NotifyForm("Mapping selected channels to TV-Card...",
                                       "This can take some time\n\nPlease be patient...");
@@ -106,11 +101,15 @@
         foreach (ListViewItem item in selectedItems)
         {
           Channel channel = (Channel)item.Tag;
-          ChannelMap map = layer.MapChannelToCard(card, channel, false);
+          ChannelMap map = layer.MapChannelToCard(card, channel, mpCheckBoxMapForEpgOnly.Checked);
           mpListViewChannels.Items.Remove(item);
-          ListViewItem newItem = mpListViewMapped.Items.Add(channel.DisplayName, item.ImageIndex);
+          string displayName = channel.DisplayName;
+          if (mpCheckBoxMapForEpgOnly.Checked)
+            displayName += " (EPG Only)";
+          ListViewItem newItem = mpListViewMapped.Items.Add(displayName, item.ImageIndex);
           newItem.Tag = map;
         }
+        mpListViewMapped.Sort();
         dlg.Close();
       }
       finally
@@ -120,8 +119,7 @@
       }
     }
 
-
-    private void mpButtonUnmap_Click_1(object sender, EventArgs e)
+    private void mpButtonUnmap_Click(object sender, EventArgs e)
     {
       NotifyForm dlg = new NotifyForm("Unmapping selected channels from TV-Card...",
                                       "This can take some time\n\nPlease be patient...");
@@ -129,6 +127,7 @@
       dlg.WaitForDisplay();
       mpListViewChannels.BeginUpdate();
       mpListViewMapped.BeginUpdate();
+
       try
       {
         ListView.SelectedListViewItemCollection selectedItems = mpListViewMapped.SelectedItems;
@@ -153,52 +152,44 @@
       }
     }
 
-
-    private void mpComboBoxCard_SelectedIndexChanged_1(object sender, EventArgs e)
+    private void mpComboBoxCard_SelectedIndexChanged(object sender, EventArgs e)
     {
+      Application.UseWaitCursor = true;
       mpListViewChannels.BeginUpdate();
       mpListViewMapped.BeginUpdate();
       try
       {
-        mpListViewMapped.Items.Clear();
         mpListViewChannels.Items.Clear();
+        mpListViewMapped.Items.Clear();
 
-        SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (Channel));
-        sb.AddOrderByField(true, "sortOrder");
-        SqlStatement stmt = sb.GetStatement(true);
-        IList<Channel> channels = ObjectFactory.GetCollection<Channel>(stmt.Execute());
-
         Card card = ((CardInfo)mpComboBoxCard.SelectedItem).Card;
-        IList<ChannelMap> maps = card.ReferringChannelMap();
 
-        // get cardtype, dvb, analogue etc.		
+        IList<Channel> channels = ChannelListHelper.GetChannelsOfTypeForGroup(-1, ChannelType.Radio);
+
+        // get cardtype - dvb, analogue etc.
         CardType cardType = RemoteControl.Instance.Type(card.IdCard);
+
         TvBusinessLayer layer = new TvBusinessLayer();
         bool enableDVBS2 = (layer.GetSetting("dvbs" + card.IdCard + "enabledvbs2", "false").Value == "true");
 
         List<ListViewItem> items = new List<ListViewItem>();
+
+        IDictionary<int, Channel> dChannels = ChannelListHelper.GetDictionaryOfChannelsForGroup(-1, ChannelType.Radio);
+        IDictionary<int, IList<TuningDetail>> dDetails = ChannelListHelper.GetDictionaryOfTuningDetailsForGroup(-1, ChannelType.Radio);
+        IList<ChannelMap> maps = card.ReferringChannelMap();
         foreach (ChannelMap map in maps)
         {
           Channel channel = null;
-          try
-          {
-            channel = map.ReferencedChannel();
-          }
-          catch (Exception) {}
-          if (channel == null)
+          if (!dChannels.TryGetValue(map.IdChannel, out channel))
             continue;
-          if (channel.IsRadio == false)
-            continue;
 
-
-          List<TuningDetail> tuningDetails = GetTuningDetailsByCardType(channel, cardType, enableDVBS2);
-          bool foundValidTuningDetail = tuningDetails.Count > 0;
-          if (foundValidTuningDetail)
+          List<TuningDetail> tuningDetails = ChannelListHelper.GetTuningDetailsByCardType(channel, dDetails, cardType, enableDVBS2);
+          if (tuningDetails.Count > 0)
           {
-            int imageIndex = GetImageIndex(tuningDetails);
             string displayName = channel.DisplayName;
             if (map.EpgOnly)
-              displayName = channel.DisplayName + " (EPG Only)";
+              displayName += " (EPG Only)";
+            int imageIndex = ChannelListIcons.GetChannelListIconIndex(channel, tuningDetails);
             ListViewItem item = new ListViewItem(displayName, imageIndex);
             item.Tag = map;
             items.Add(item);
@@ -214,23 +205,18 @@
             }
           }
           else
-          {
             map.Delete();
-          }
         }
         mpListViewMapped.Items.AddRange(items.ToArray());
 
         items = new List<ListViewItem>();
         foreach (Channel channel in channels)
         {
-          if (!channel.IsRadio)
-            continue;
-          List<TuningDetail> tuningDetails = GetTuningDetailsByCardType(channel, cardType, enableDVBS2);
+          List<TuningDetail> tuningDetails = ChannelListHelper.GetTuningDetailsByCardType(channel, dDetails, cardType, enableDVBS2);
           // only add channel that is tuneable on the device selected.
-          bool foundValidTuningDetail = tuningDetails.Count > 0;
-          if (foundValidTuningDetail)
+          if (tuningDetails.Count > 0)
           {
-            int imageIndex = GetImageIndex(tuningDetails);
+            int imageIndex = ChannelListIcons.GetChannelListIconIndex(channel, tuningDetails);
             ListViewItem item = new ListViewItem(channel.DisplayName, imageIndex);
             item.Tag = channel;
             items.Add(item);
@@ -243,6 +229,7 @@
       {
         mpListViewChannels.EndUpdate();
         mpListViewMapped.EndUpdate();
+        Application.UseWaitCursor = false;
       }
     }
 
@@ -305,90 +292,5 @@
       }
       map.Persist();
     }
-
-    private static List<TuningDetail> GetTuningDetailsByCardType(Channel channel, CardType cardType, bool enableDVBS2)
-    {
-      List<TuningDetail> result = new List<TuningDetail>();
-      foreach (TuningDetail tDetail in channel.ReferringTuningDetail())
-      {
-        switch (cardType)
-        {
-          case CardType.Analog:
-            if (tDetail.ChannelType == 0)
-              result.Add(tDetail);
-            break;
-          case CardType.Atsc:
-            if (tDetail.ChannelType == 1)
-              result.Add(tDetail);
-            break;
-          case CardType.DvbC:
-            if (tDetail.ChannelType == 2)
-              result.Add(tDetail);
-            break;
-          case CardType.DvbS:
-            if (tDetail.ChannelType == 3)
-            {
-              if (!enableDVBS2 && (tDetail.Pilot > -1 || tDetail.RollOff > -1))
-              {
-                Log.Debug(String.Format(
-                  "Imported channel {0} detected as DVB-S2. Skipped! \n Enable \"DVB-S2 tuning\" option in your TV-Card properties to be able to map these channels.",
-                  tDetail.Name));
-              }
-              else
-              {
-                result.Add(tDetail);
-              }
-            }
-            break;
-          case CardType.DvbT:
-            if (tDetail.ChannelType == 4)
-              result.Add(tDetail);
-            break;
-          case CardType.DvbIP:
-            if (tDetail.ChannelType == 7)
-              result.Add(tDetail);
-            break;
-          case CardType.RadioWebStream:
-            if (tDetail.ChannelType == 5)
-              result.Add(tDetail);
-            break;
-          default:
-            break;
-        }
-      }
-      return result;
-    }
-
-    private static int GetImageIndex(IList<TuningDetail> tuningDetails)
-    {
-      bool hasFta = false;
-      bool hasScrambled = false;
-      foreach (TuningDetail detail in tuningDetails)
-      {
-        if (detail.FreeToAir)
-        {
-          hasFta = true;
-        }
-        if (!detail.FreeToAir)
-        {
-          hasScrambled = true;
-        }
-      }
-
-      int imageIndex;
-      if (hasFta && hasScrambled)
-      {
-        imageIndex = 2;
-      }
-      else if (hasScrambled)
-      {
-        imageIndex = 1;
-      }
-      else
-      {
-        imageIndex = 0;
-      }
-      return imageIndex;
-    }
   }
 }
\ No newline at end of file
Index: TvEngine3/TVLibrary/SetupTv/Sections/RadioChannelMapping.Designer.cs
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Sections/RadioChannelMapping.Designer.cs	(revision 28196)
+++ TvEngine3/TVLibrary/SetupTv/Sections/RadioChannelMapping.Designer.cs	(working copy)
@@ -30,66 +30,128 @@
     {
       this.components = new System.ComponentModel.Container();
       System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RadioChannelMapping));
-      this.columnHeader2 = new System.Windows.Forms.ColumnHeader();
+      this.imageList1 = new System.Windows.Forms.ImageList(this.components);
+      this.tabControl1 = new System.Windows.Forms.TabControl();
+      this.tabPage1 = new System.Windows.Forms.TabPage();
+      this.mpCheckBoxMapForEpgOnly = new MediaPortal.UserInterface.Controls.MPCheckBox();
+      this.pictureBox1 = new System.Windows.Forms.PictureBox();
       this.mpButtonUnmap = new MediaPortal.UserInterface.Controls.MPButton();
       this.mpButtonMap = new MediaPortal.UserInterface.Controls.MPButton();
       this.mpLabel3 = new MediaPortal.UserInterface.Controls.MPLabel();
       this.mpListViewMapped = new MediaPortal.UserInterface.Controls.MPListView();
-      this.columnHeader4 = new System.Windows.Forms.ColumnHeader();
+      this.columnHeader2 = new System.Windows.Forms.ColumnHeader();
       this.mpLabel2 = new MediaPortal.UserInterface.Controls.MPLabel();
       this.mpListViewChannels = new MediaPortal.UserInterface.Controls.MPListView();
+      this.columnHeader4 = new System.Windows.Forms.ColumnHeader();
       this.mpLabel1 = new MediaPortal.UserInterface.Controls.MPLabel();
       this.mpComboBoxCard = new MediaPortal.UserInterface.Controls.MPComboBox();
-      this.pictureBox1 = new System.Windows.Forms.PictureBox();
-      this.tabControl1 = new System.Windows.Forms.TabControl();
-      this.tabPage1 = new System.Windows.Forms.TabPage();
       this.mpLabelChannelCount = new MediaPortal.UserInterface.Controls.MPLabel();
-      this.imageList1 = new System.Windows.Forms.ImageList(this.components);
-      ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
       this.tabControl1.SuspendLayout();
       this.tabPage1.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
       this.SuspendLayout();
       // 
-      // columnHeader2
+      // imageList1
       // 
-      this.columnHeader2.Text = "Name";
-      this.columnHeader2.Width = 180;
+      this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));
+      this.imageList1.TransparentColor = System.Drawing.Color.Transparent;
+      this.imageList1.Images.SetKeyName(0, "radio_fta_.png");
+      this.imageList1.Images.SetKeyName(1, "radio_scrambled.png");
+      this.imageList1.Images.SetKeyName(2, "icon.radio_scrambled_and_fta.png");
+      this.imageList1.Images.SetKeyName(3, "tv_fta_.png");
+      this.imageList1.Images.SetKeyName(4, "tv_scrambled.png");
+      this.imageList1.Images.SetKeyName(5, "icon.tv_scrambled_and_fta.png");
       // 
+      // tabControl1
+      // 
+      this.tabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.tabControl1.Controls.Add(this.tabPage1);
+      this.tabControl1.Location = new System.Drawing.Point(3, 3);
+      this.tabControl1.Name = "tabControl1";
+      this.tabControl1.SelectedIndex = 0;
+      this.tabControl1.Size = new System.Drawing.Size(454, 392);
+      this.tabControl1.TabIndex = 0;
+      // 
+      // tabPage1
+      // 
+      this.tabPage1.Controls.Add(this.mpCheckBoxMapForEpgOnly);
+      this.tabPage1.Controls.Add(this.pictureBox1);
+      this.tabPage1.Controls.Add(this.mpButtonUnmap);
+      this.tabPage1.Controls.Add(this.mpButtonMap);
+      this.tabPage1.Controls.Add(this.mpLabel3);
+      this.tabPage1.Controls.Add(this.mpListViewMapped);
+      this.tabPage1.Controls.Add(this.mpLabel2);
+      this.tabPage1.Controls.Add(this.mpListViewChannels);
+      this.tabPage1.Controls.Add(this.mpLabel1);
+      this.tabPage1.Controls.Add(this.mpComboBoxCard);
+      this.tabPage1.Controls.Add(this.mpLabelChannelCount);
+      this.tabPage1.Location = new System.Drawing.Point(4, 22);
+      this.tabPage1.Name = "tabPage1";
+      this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
+      this.tabPage1.Size = new System.Drawing.Size(446, 366);
+      this.tabPage1.TabIndex = 0;
+      this.tabPage1.Text = "Radio Mapping";
+      this.tabPage1.UseVisualStyleBackColor = true;
+      // 
+      // mpCheckBoxMapForEpgOnly
+      // 
+      this.mpCheckBoxMapForEpgOnly.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.mpCheckBoxMapForEpgOnly.AutoSize = true;
+      this.mpCheckBoxMapForEpgOnly.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
+      this.mpCheckBoxMapForEpgOnly.Location = new System.Drawing.Point(6, 343);
+      this.mpCheckBoxMapForEpgOnly.Name = "mpCheckBoxMapForEpgOnly";
+      this.mpCheckBoxMapForEpgOnly.Size = new System.Drawing.Size(355, 17);
+      this.mpCheckBoxMapForEpgOnly.TabIndex = 6;
+      this.mpCheckBoxMapForEpgOnly.Text = "Perform mapping for EPG grabbing only (you can also use doubleclick)";
+      this.mpCheckBoxMapForEpgOnly.UseVisualStyleBackColor = true;
+      // 
+      // pictureBox1
+      // 
+      this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
+      this.pictureBox1.Location = new System.Drawing.Point(3, 2);
+      this.pictureBox1.Name = "pictureBox1";
+      this.pictureBox1.Size = new System.Drawing.Size(33, 23);
+      this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
+      this.pictureBox1.TabIndex = 26;
+      this.pictureBox1.TabStop = false;
+      // 
       // mpButtonUnmap
       // 
-      this.mpButtonUnmap.Location = new System.Drawing.Point(215, 130);
+      this.mpButtonUnmap.Location = new System.Drawing.Point(211, 103);
       this.mpButtonUnmap.Name = "mpButtonUnmap";
       this.mpButtonUnmap.Size = new System.Drawing.Size(27, 23);
       this.mpButtonUnmap.TabIndex = 4;
       this.mpButtonUnmap.Text = "<<";
       this.mpButtonUnmap.UseVisualStyleBackColor = true;
-      this.mpButtonUnmap.Click += new System.EventHandler(this.mpButtonUnmap_Click_1);
+      this.mpButtonUnmap.Click += new System.EventHandler(this.mpButtonUnmap_Click);
       // 
       // mpButtonMap
       // 
-      this.mpButtonMap.Location = new System.Drawing.Point(215, 101);
+      this.mpButtonMap.Location = new System.Drawing.Point(211, 74);
       this.mpButtonMap.Name = "mpButtonMap";
       this.mpButtonMap.Size = new System.Drawing.Size(27, 23);
       this.mpButtonMap.TabIndex = 3;
       this.mpButtonMap.Text = ">>";
       this.mpButtonMap.UseVisualStyleBackColor = true;
-      this.mpButtonMap.Click += new System.EventHandler(this.mpButtonMap_Click_1);
+      this.mpButtonMap.Click += new System.EventHandler(this.mpButtonMap_Click);
       // 
       // mpLabel3
       // 
       this.mpLabel3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                   | System.Windows.Forms.AnchorStyles.Left)));
       this.mpLabel3.AutoSize = true;
-      this.mpLabel3.Location = new System.Drawing.Point(245, 42);
+      this.mpLabel3.Location = new System.Drawing.Point(250, 32);
       this.mpLabel3.Name = "mpLabel3";
-      this.mpLabel3.Size = new System.Drawing.Size(154, 13);
-      this.mpLabel3.TabIndex = 13;
+      this.mpLabel3.Size = new System.Drawing.Size(131, 13);
+      this.mpLabel3.TabIndex = 0;
       this.mpLabel3.Text = "Radio stations mapped to card:";
       // 
       // mpListViewMapped
       // 
       this.mpListViewMapped.AllowDrop = true;
-      this.mpListViewMapped.AllowRowReorder = true;
+      this.mpListViewMapped.AllowRowReorder = false;
       this.mpListViewMapped.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                   | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
@@ -97,55 +159,61 @@
             this.columnHeader2});
       this.mpListViewMapped.IsChannelListView = false;
       this.mpListViewMapped.LargeImageList = this.imageList1;
-      this.mpListViewMapped.Location = new System.Drawing.Point(248, 61);
+      this.mpListViewMapped.Location = new System.Drawing.Point(246, 50);
       this.mpListViewMapped.Name = "mpListViewMapped";
-      this.mpListViewMapped.Size = new System.Drawing.Size(196, 292);
+      this.mpListViewMapped.Size = new System.Drawing.Size(193, 290);
       this.mpListViewMapped.SmallImageList = this.imageList1;
-      this.mpListViewMapped.TabIndex = 2;
+      this.mpListViewMapped.TabIndex = 5;
       this.mpListViewMapped.UseCompatibleStateImageBehavior = false;
       this.mpListViewMapped.View = System.Windows.Forms.View.Details;
       this.mpListViewMapped.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.mpListViewMapped_ColumnClick);
+      this.mpListViewMapped.DoubleClick += new System.EventHandler(this.mpListViewMapped_DoubleClick);
       // 
-      // columnHeader4
+      // columnHeader2
       // 
-      this.columnHeader4.Text = "Name";
-      this.columnHeader4.Width = 180;
+      this.columnHeader2.Text = "Name";
+      this.columnHeader2.Width = 180;
       // 
       // mpLabel2
       // 
       this.mpLabel2.AutoSize = true;
-      this.mpLabel2.Location = new System.Drawing.Point(3, 42);
+      this.mpLabel2.Location = new System.Drawing.Point(0, 32);
       this.mpLabel2.Name = "mpLabel2";
-      this.mpLabel2.Size = new System.Drawing.Size(118, 13);
-      this.mpLabel2.TabIndex = 11;
+      this.mpLabel2.Size = new System.Drawing.Size(99, 13);
+      this.mpLabel2.TabIndex = 0;
       this.mpLabel2.Text = "Available radio stations:";
       // 
       // mpListViewChannels
       // 
       this.mpListViewChannels.AllowDrop = true;
-      this.mpListViewChannels.AllowRowReorder = true;
+      this.mpListViewChannels.AllowRowReorder = false;
       this.mpListViewChannels.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                   | System.Windows.Forms.AnchorStyles.Left)));
       this.mpListViewChannels.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
             this.columnHeader4});
       this.mpListViewChannels.IsChannelListView = false;
       this.mpListViewChannels.LargeImageList = this.imageList1;
-      this.mpListViewChannels.Location = new System.Drawing.Point(6, 61);
+      this.mpListViewChannels.Location = new System.Drawing.Point(3, 50);
       this.mpListViewChannels.Name = "mpListViewChannels";
-      this.mpListViewChannels.Size = new System.Drawing.Size(193, 292);
+      this.mpListViewChannels.Size = new System.Drawing.Size(193, 290);
       this.mpListViewChannels.SmallImageList = this.imageList1;
-      this.mpListViewChannels.TabIndex = 1;
+      this.mpListViewChannels.TabIndex = 2;
       this.mpListViewChannels.UseCompatibleStateImageBehavior = false;
       this.mpListViewChannels.View = System.Windows.Forms.View.Details;
       this.mpListViewChannels.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.mpListViewChannels_ColumnClick);
       // 
+      // columnHeader4
+      // 
+      this.columnHeader4.Text = "Name";
+      this.columnHeader4.Width = 180;
+      // 
       // mpLabel1
       // 
       this.mpLabel1.AutoSize = true;
-      this.mpLabel1.Location = new System.Drawing.Point(44, 7);
+      this.mpLabel1.Location = new System.Drawing.Point(42, 9);
       this.mpLabel1.Name = "mpLabel1";
       this.mpLabel1.Size = new System.Drawing.Size(32, 13);
-      this.mpLabel1.TabIndex = 9;
+      this.mpLabel1.TabIndex = 0;
       this.mpLabel1.Text = "Card:";
       // 
       // mpComboBoxCard
@@ -154,104 +222,52 @@
                   | System.Windows.Forms.AnchorStyles.Right)));
       this.mpComboBoxCard.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
       this.mpComboBoxCard.FormattingEnabled = true;
-      this.mpComboBoxCard.Location = new System.Drawing.Point(79, 4);
+      this.mpComboBoxCard.Location = new System.Drawing.Point(80, 6);
       this.mpComboBoxCard.Name = "mpComboBoxCard";
-      this.mpComboBoxCard.Size = new System.Drawing.Size(365, 21);
-      this.mpComboBoxCard.TabIndex = 0;
-      this.mpComboBoxCard.SelectedIndexChanged += new System.EventHandler(this.mpComboBoxCard_SelectedIndexChanged_1);
+      this.mpComboBoxCard.Size = new System.Drawing.Size(360, 21);
+      this.mpComboBoxCard.TabIndex = 1;
+      this.mpComboBoxCard.SelectedIndexChanged += new System.EventHandler(this.mpComboBoxCard_SelectedIndexChanged);
       // 
-      // pictureBox1
-      // 
-      this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
-      this.pictureBox1.Location = new System.Drawing.Point(6, 4);
-      this.pictureBox1.Name = "pictureBox1";
-      this.pictureBox1.Size = new System.Drawing.Size(33, 23);
-      this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
-      this.pictureBox1.TabIndex = 16;
-      this.pictureBox1.TabStop = false;
-      // 
-      // tabControl1
-      // 
-      this.tabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.tabControl1.Controls.Add(this.tabPage1);
-      this.tabControl1.Location = new System.Drawing.Point(3, 3);
-      this.tabControl1.Name = "tabControl1";
-      this.tabControl1.SelectedIndex = 0;
-      this.tabControl1.Size = new System.Drawing.Size(464, 385);
-      this.tabControl1.TabIndex = 17;
-      // 
-      // tabPage1
-      // 
-      this.tabPage1.Controls.Add(this.mpLabelChannelCount);
-      this.tabPage1.Controls.Add(this.pictureBox1);
-      this.tabPage1.Controls.Add(this.mpButtonUnmap);
-      this.tabPage1.Controls.Add(this.mpComboBoxCard);
-      this.tabPage1.Controls.Add(this.mpButtonMap);
-      this.tabPage1.Controls.Add(this.mpLabel1);
-      this.tabPage1.Controls.Add(this.mpLabel3);
-      this.tabPage1.Controls.Add(this.mpListViewChannels);
-      this.tabPage1.Controls.Add(this.mpListViewMapped);
-      this.tabPage1.Controls.Add(this.mpLabel2);
-      this.tabPage1.Location = new System.Drawing.Point(4, 22);
-      this.tabPage1.Name = "tabPage1";
-      this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
-      this.tabPage1.Size = new System.Drawing.Size(456, 359);
-      this.tabPage1.TabIndex = 0;
-      this.tabPage1.Text = "Radio Mapping";
-      this.tabPage1.UseVisualStyleBackColor = true;
-      // 
       // mpLabelChannelCount
       // 
       this.mpLabelChannelCount.AutoSize = true;
       this.mpLabelChannelCount.Location = new System.Drawing.Point(13, 14);
       this.mpLabelChannelCount.Name = "mpLabelChannelCount";
       this.mpLabelChannelCount.Size = new System.Drawing.Size(0, 13);
-      this.mpLabelChannelCount.TabIndex = 2;
+      this.mpLabelChannelCount.TabIndex = 0;
       // 
-      // imageList1
-      // 
-      this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));
-      this.imageList1.TransparentColor = System.Drawing.Color.Transparent;
-      this.imageList1.Images.SetKeyName(0, "radio_fta_.png");
-      this.imageList1.Images.SetKeyName(1, "radio_scrambled.png");
-      this.imageList1.Images.SetKeyName(2, "icon.radio_scrambled_and_fta.png");
-      this.imageList1.Images.SetKeyName(3, "tv_fta_.png");
-      this.imageList1.Images.SetKeyName(4, "tv_scrambled.png");
-      this.imageList1.Images.SetKeyName(5, "icon.tv_scrambled_and_fta.png");
-      // 
       // RadioChannelMapping
       // 
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
       this.Controls.Add(this.tabControl1);
       this.Name = "RadioChannelMapping";
-      this.Size = new System.Drawing.Size(467, 388);
-      ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
+      this.Size = new System.Drawing.Size(457, 395);
       this.tabControl1.ResumeLayout(false);
       this.tabPage1.ResumeLayout(false);
       this.tabPage1.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
       this.ResumeLayout(false);
 
     }
 
     #endregion
 
-    private System.Windows.Forms.ColumnHeader columnHeader2;
+    private System.Windows.Forms.ImageList imageList1;
+    private System.Windows.Forms.TabControl tabControl1;
+    private System.Windows.Forms.TabPage tabPage1;
+    private MediaPortal.UserInterface.Controls.MPLabel mpLabelChannelCount;
+    private System.Windows.Forms.PictureBox pictureBox1;
     private MediaPortal.UserInterface.Controls.MPButton mpButtonUnmap;
     private MediaPortal.UserInterface.Controls.MPButton mpButtonMap;
     private MediaPortal.UserInterface.Controls.MPLabel mpLabel3;
     private MediaPortal.UserInterface.Controls.MPListView mpListViewMapped;
-    private System.Windows.Forms.ColumnHeader columnHeader4;
+    private System.Windows.Forms.ColumnHeader columnHeader2;
     private MediaPortal.UserInterface.Controls.MPLabel mpLabel2;
     private MediaPortal.UserInterface.Controls.MPListView mpListViewChannels;
+    private System.Windows.Forms.ColumnHeader columnHeader4;
     private MediaPortal.UserInterface.Controls.MPLabel mpLabel1;
     private MediaPortal.UserInterface.Controls.MPComboBox mpComboBoxCard;
-    private System.Windows.Forms.PictureBox pictureBox1;
-		private System.Windows.Forms.TabControl tabControl1;
-		private System.Windows.Forms.TabPage tabPage1;
-		private MediaPortal.UserInterface.Controls.MPLabel mpLabelChannelCount;
-    private System.Windows.Forms.ImageList imageList1;
+    private MediaPortal.UserInterface.Controls.MPCheckBox mpCheckBoxMapForEpgOnly;
   }
 }
\ No newline at end of file
Index: TvEngine3/TVLibrary/SetupTv/Sections/RadioChannelMapping.resx
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Sections/RadioChannelMapping.resx	(revision 28196)
+++ TvEngine3/TVLibrary/SetupTv/Sections/RadioChannelMapping.resx	(working copy)
@@ -122,145 +122,145 @@
   </metadata>
   <data name="imageList1.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
     <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
         LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
-        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABi
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABS
         HgAAAk1TRnQBSQFMAgEBBgEAASwBAAEsAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
-        AwABIAMAAQEBAAEgBgABICIAAwkBDAE/Aj4BbAFXAlUBugFdAlIB0gFcAlYBzAFWAlQBtAE6AjkBYAMC
-        AQMQABD/A/MB/wOTAf8DQAH/AygB/wMuAf8DRgH/A58B/wP8Ef+MAAFGAkUBfwMgAf8DSQH/A1wB/wNj
-        Af8DYwH/A1sB/wNEAf8DHQH/AUACPwFvDAAM/wOFAf8DCgH/AzMB/wNGAf8DTQH/A00B/wNFAf8DLgH/
-        AwcB/wOUDf+IAANMAZIDTQH/AlwBYgH/AhsBaQH/AhIBgQH/AhIBmQH/AhIBlQH/AhMBgQH/AiABZAH/
-        A2YB/wNIAf8DSAGFCAAI/wN1Af8DNwH/AUcBTQFGAf8BEQFgAQYB/wEPAZMBAAH/ARIBswEAAf8CAAGV
-        Af8CAAF0Af8CCgFOAf8DUAH/AzIB/wOGCf+EAANEAXsDVgH/AkYBXQH/AhIBgwH/AhIBuAH/AhIB5AH/
-        AhIC/wISAfwB/wISAeAB/wISAbcB/wITAYEB/wJTAWIB/wNRAf8BOgI5AWAEAAT/A5UB/wNAAf8BMwFL
-        ATAB/wEPAZkBAAH/ARIBtQEAAf8BFAG+AQAB/wEVAcsBAAH/AgAB/AH/AgAB4AH/AgABtwH/AgABcAH/
-        Aj0BTAH/AzsB/wOtBf+AAAMJAQwDRAH/AmMBZQH/AhIBgQH/AhIBwwH/AhIC/wISAv8CEgFVAf8CEgGI
-        Af8CEgL/AhIC/wISAcAB/wIUAYEB/wNfAf8BWwJUAcsEAAP1Af8DLgH/AU0BTwFNAf8BDwGQAQAB/wET
-        AbYBAAH/ARQBxAEAAf8BFgHPAQAB/wECATQBAAH/AgABiAH/AgAC/wIAAv8CAAHAAf8CAAFoAf8DSQH/
-        A10F/4AAAzwBZgNfAf8CHQFkAf8CEgGyAf8CEgL/AhIC/wISAv8CEgFVAf8CEgGIAf8CEgL/AhIC/wIS
-        Av8CFwGxAf8CKAFcAf8DZQH/Ay4BSAOyAf8DSQH/ARIBWgEIAf8BEgG1AQAB/wEUAcIBAAH/ARYBzwEA
-        Af8BFwHWAQAB/wECATUBAAH/AgABiAH/AgAC/wIAAv8CAAL/AgEBsQH/AhIBRgH/A08B/wPLAf+AAAFX
-        AlUBtwNlAf8CEwGBAf8CEgHkAf8CEgL/AhIC/wISAv8CEgFVAf8CEgGIAf8CEgL/AhIC/wISAv8CJwHW
-        Af8CFQGBAf8DbAH/A0wBkwOBAf8DTwH/ARABkAEAAf8BEwG6AQAB/wEVAcsBAAH/ARYB1AEAAf8BFwHa
-        AQAB/wEDATcBAAH/AgABiAH/AgAC/wIAAv8CAAL/AhEB1gH/AgABaQH/A1YB/wOhAf+AAAFfAlAB2wNn
-        Af8CEwGSAf8CJAH8Af8CEgL/AhIC/wISAv8CEgFVAf8CEgGIAf8CEgL/AhIC/wIfAv8CQgHsAf8CEgGE
-        Af8DbgH/AVYCVAG0A3EB/wNRAf8BEgGqAQAB/wElAccBEAH/ARYB0QEAAf8BFwHYAQAB/wEYAd8BAAH/
-        AQMBOAEAAf8CAAGIAf8CAAL/AgAC/wIJAv8CLAHsAf8CAAGEAf8DWAH/A5sB/4AAAV8CUAHbA2kB/wIg
-        AYEB/wJMAfgB/wIqAv8CEgL/AhIC/wISAVUB/wISAYgB/wISAv8CIwL/AksC/wJMAekB/wISAYEB/wNx
-        Af8BVgJUAbQDhgH/A1MB/wEaAYUBCwH/AUoB0wE4Af8BLAHZARYB/wEXAdsBAAH/ARgB4gEAAf8BAwE4
-        AQAB/wIAAYgB/wIAAv8CDQL/AjUC/wI2AekB/wIAAYEB/wNbAf8DqgH/gAABVgJUAbQDbgH/AiABbgH/
-        AkYBuQH/AlQC/wJHAv8CNQL/AhcBVQH/AiIBiAH/AkMC/wJSAv8CWAL/Aj8B0gH/AhUBeAH/A4EB/wNM
-        AZMDpwH/A1gB/wEVAWUBCwH/AUABrAEyAf8BUwHiAT8B/wFIAeYBMwH/ATgB6AEiAf8BCAE4AQIB/wIM
-        AYgB/wItAv8CPAL/AkIC/wIpAdIB/wIAAWIB/wNoAf8DwAH/gAADPAFmA4EB/wIqAUoB/wI3AYEB/wJP
-        Ad0B/wMSAf8DJAH/AzEB/wMwAf8DHgH/AxIB/wJYAv8CJAGqAf8CLgFYAf8DhgH/Ay4BSAPWAf8DbQH/
-        ARkBOgEVAf8BLQGEASIB/wFKAcYBOQH/AwAB/wMOAf8DGwH/AxoB/wMIAf8DAAH/AkIC/wIOAaoB/wIY
-        AUIB/wOGAf8D4gH/gAADBwEJA50B/wJrAWwB/wIpAVoB/wI5AZMB/wJYAv8CWAL/AlgC/wJYAv8CWAL/
-        AlUB+gH/AjEBuQH/AhQBdwH/A28B/wFaAlYBxQQAA/wB/wOdAf8BVQFWAVUB/wEaAU0BEwH/ATEBmAEk
-        Af8BVwHrAUQB/wFWAeYBQwH/AVYB4gFDAf8CQgL/AkIC/wI/AfoB/wIbAbkB/wIAAWEB/wNZAf8DuQX/
-        hAADRAF7A5cB/wJXAVkB/wIoAVEB/wI3AYEB/wI/AZsB/wJLAeIB/wJJAeMB/wI7AcUB/wIjAakB/wIV
-        AWkB/wJjAWgB/wOhAf8DNwFaBAAE/wPcAf8DlwH/AUEBQwFBAf8BGAFCARMB/wEqAW8BIQH/ATcBmQEq
-        Af8BRwHQATYB/wIzAeMB/wIlAcUB/wINAakB/wIAAVMB/wJNAVIB/wOhAf8D5AX/iAABTAJLAZADngH/
-        A3IB/wIvAUQB/wIXAWwB/wITAYEB/wISAYEB/wIVAW8B/wItAVMB/wNvAf8DqAH/A0gBhAgACP8D3AH/
-        A54B/wNcAf8BHAEyARkB/wEOAWQBAgH/AQ8BjQEAAf8CAAFyAf8CAAFZAf8CFwE9Af8DWQH/A6gB/wPc
-        Cf+MAANEAXsDwgH/A4oB/wOBAf8DeAH/A4AB/wOBAf8DjwH/A78B/wE/Aj4BbAwADP8D5wH/A8IB/wOK
-        Af8DaAH/A2IB/wNkAf8DagH/A48B/wO/Af8D5w3/kAADBwEJAT8CPgFsAVcCVQG6AV0CUgHSAVwCVgHM
-        AVYCVQGxAzgBXQMCAQMQABD/A/4B/wPtAf8D3gH/A9kB/wPZAf8D3gH/A+0B/wP+Ef+QAAMJAQwBPwI+
-        AWwBVwJVAboBXQJSAdIBXAJWAcwBVgJUAbQBOgI5AWADAgEDIAADCQEMAT8CPgFsAVcCVQG6AV0CUgHS
-        AVwCVgHMAVYCVAG0AToCOQFgAwIBAxAAEP8D8wH/A5MB/wNAAf8DKAH/Ay4B/wNGAf8DnwH/A/wR/xAA
-        AwkBDAE/Aj4BbAFXAlUBugFdAlIB0gFcAlYBzAFWAlQBtAE6AjkBYAMCAQMcAAFGAkUBfwMgAf8DSQH/
-        A1wB/wNjAf8DYwH/A1sB/wNEAf8DHQH/AUACPwFvGAABRgJFAX8DIAH/A0kB/wNcAf8DYwH/A2MB/wNb
-        Af8DRAH/Ax0B/wFAAj8BbwwADP8DhQH/AwoB/wMzAf8DRgH/A00B/wNNAf8DRQH/Ay4B/wMHAf8DlA3/
-        DAABRgJFAX8DIAH/A0kB/wNcAf8DYwH/A2MB/wNbAf8DRAH/Ax0B/wFAAj8BbxQAA0wBkgNNAf8BXQFj
-        AVwB/wEnAXYBHAH/ASUBkwEUAf8BKAGzARMB/wEnAa8BEwH/ASUBjQEVAf8BKgFwASEB/wNmAf8DSAH/
-        A0gBhRAAA0wBkgNNAf8CXAFiAf8CGwFpAf8CEgGBAf8CEgGZAf8CEgGVAf8CEwGBAf8CIAFkAf8DZgH/
-        A0gB/wNIAYUIAAj/A3UB/wM3Af8BRwFNAUYB/wERAWABBgH/AQ8BkwEAAf8BEgGzAQAB/wIAAZUB/wIA
-        AXQB/wIKAU4B/wNQAf8DMgH/A4YJ/wgAA0wBkgNNAf8BXQFjAVwB/wEnAXYBHAH/ASUBkwEUAf8BKAGz
-        ARMB/wEnAa8BEwH/ASUBjQEVAf8BKgFwASEB/wNmAf8DSAH/A0gBhQwAA0QBewNWAf8BSQFhAUYB/wEl
-        AZkBFAH/ASgBtQETAf8BKgG+ARMB/wErAcsBEwH/ASwB0QETAf8BKwHMARMB/wEqAcABEwH/ASQBiQEU
-        Af8BVQFkAVMB/wNRAf8BOgI5AWAIAANEAXsDVgH/AkYBXQH/AhIBgwH/AhIBuAH/AhIB5AH/AhIC/wIS
-        AfwB/wISAeAB/wISAbcB/wITAYEB/wJTAWIB/wNRAf8BOgI5AWAEAAT/A5UB/wNAAf8BMwFLATAB/wEP
-        AZkBAAH/ARIBtQEAAf8BFAG+AQAB/wEVAcsBAAH/AgAB/AH/AgAB4AH/AgABtwH/AgABcAH/Aj0BTAH/
-        AzsB/wOtBf8EAANEAXsDVgH/AUkBYQFGAf8BJQGZARQB/wEoAbUBEwH/ASoBvgETAf8BKwHLARMB/wEs
-        AdEBEwH/ASsBzAETAf8BKgHAARMB/wEkAYkBFAH/AVUBZAFTAf8DUQH/AToCOQFgBAADCQEMA0QB/wFj
-        AWUBYwH/ASUBkAEUAf8BKQG2ARMB/wEgAYEBEgH/ARUBLQESAf8BLAHVARMB/wEtAdkBEwH/ASABgQES
-        Af8BEwEgARIB/wElAZwBEwH/ASQBgQEVAf8DXwH/AVsCVAHLBAADCQEMA0QB/wJjAWUB/wISAYEB/wIS
-        AcMB/wISAZkB/wISATMB/wISAv8CEgL/AhIBiAH/AhIBIgH/AhIBmgH/AhQBgQH/A18B/wFbAlQBywQA
-        A/UB/wMuAf8BTQFPAU0B/wEPAZABAAH/ARMBtgEAAf8BCgFxAQAB/wEAARcBAAH/ARYB1QEAAf8CAAL/
-        AgABiAH/AgABDAH/AgABmgH/AgABaAH/A0kB/wNdBf8DCQEMA0QB/wFjAWUBYwH/ASUBkAEUAf8BKQG2
-        ARMB/wEqAcQBEwH/ASwBzwETAf8BGAFKARIB/wEgAYEBEgH/AS0B3gETAf8BLgHlARQB/wEqAcMBEwH/
-        ASQBgQEVAf8DXwH/AVsCVAHLBAADPAFmA18B/wEoAXABHgH/ASgBtQETAf8BKgHCARMB/wEhAYEBEgH/
-        ARUBLgESAf8BLQHbARMB/wEoAbMBEwH/AxIB/wE3AagBJQH/AS0B2AETAf8BLgG7ARkB/wEwAWUBKQH/
-        A2UB/wMuAUgDPAFmA18B/wIdAWQB/wISAbIB/wISAv8CEgGZAf8CEgEzAf8CEgL/AhIBzAH/AxIB/wIj
-        AbwB/wISAv8CFwGxAf8CKAFcAf8DZQH/Ay4BSAOyAf8DSQH/ARIBWgEIAf8BEgG1AQAB/wEUAcIBAAH/
-        AQsBdwEAAf8BAAEYAQAB/wEXAdsBAAH/AgABzAH/AwAB/wINAbwB/wIAAv8CAQGxAf8CEgFGAf8DTwH/
-        A8sB/wM8AWYDXwH/ASgBcAEeAf8BKAG1ARMB/wEqAcIBEwH/ASwBzwETAf8BLQHWARMB/wEYAUsBEgH/
-        ASABgQETAf8BLgHkARQB/wEuAeABFAH/AS0B2AETAf8BLgG7ARkB/wEwAWUBKQH/A2UB/wMuAUgBVwJV
-        AbcDZQH/ASYBkAEVAf8BKQG6ARMB/wErAcsBEwH/ASEBgQESAf8BFQEuARIB/wEsAdEBFAH/ARUBLwES
-        Af8BKAGBARsB/wEtAd4BEwH/AS0B1gETAf8BPgHGASkB/wElAYEBFgH/A2wB/wNMAZMBVwJVAbcDZQH/
-        AhMBgQH/AhIB5AH/AhIC/wISAZkB/wISATMB/wISAe4B/wISATMB/wIZAZAB/wISAv8CEgL/AicB1gH/
-        AhUBgQH/A2wB/wNMAZMDgQH/A08B/wEQAZABAAH/ARMBugEAAf8BFQHLAQAB/wELAXoBAAH/AQABGAEA
-        Af8BFgHRAQAB/wIAAR0B/wIDAZAB/wIAAv8CAAL/AhEB1gH/AgABaQH/A1YB/wOhAf8BVwJVAbcDZQH/
-        ASYBkAEVAf8BKQG6ARMB/wErAcsBEwH/ASwB1AETAf8BLQHaARMB/wEZAU0BEgH/ASABgQETAf8BLgHj
-        ARQB/wEtAd4BEwH/AS0B1gETAf8BPgHGASkB/wElAYEBFgH/A2wB/wNMAZMBXwJQAdsDZwH/ASgBqgEV
-        Af8BOwHHASYB/wEsAdEBEwH/ASIBggESAf8DEgH/AyYB/wEbASkBGgH/ASABgQETAf8BLQHaARMB/wE5
-        AdUBIQH/AVYBzgFEAf8BJQGaARMB/wNuAf8BVgJUAbQBXwJQAdsDZwH/AhMBkgH/AiQB/AH/AhIC/wIS
-        AZkB/wMSAf8DJgH/AhkBKgH/AhIBiAH/AhIC/wIfAv8CQgHsAf8CEgGEAf8DbgH/AVYCVAG0A3EB/wNR
-        Af8BEgGqAQAB/wElAccBEAH/ARYB0QEAAf8BDAGCAQAB/wMAAf8DEAH/AgMBFAH/AgABiAH/AgAC/wIJ
-        Av8CLAHsAf8CAAGEAf8DWAH/A5sB/wFfAlAB2wNnAf8BKAGqARUB/wE7AccBJgH/ASwB0QETAf8BLQHY
-        ARMB/wEuAd8BEwH/ARkBTgESAf8BIAGBARMB/wEuAeEBFAH/AS0B2gETAf8BOQHVASEB/wFWAc4BRAH/
-        ASUBmgETAf8DbgH/AVYCVAG0AV8CUAHbA2kB/wEwAYUBIQH/AWAB0wFOAf8BQgHZASwB/wEiAYMBEgH/
-        ATgBUgE0Af8BLgHlARQB/wEvAckBGAH/ARMBIAESAf8BMQGgASAB/wFgAdoBTQH/AV8BzQFNAf8BJQGW
-        ARMB/wNxAf8BVgJUAbQBXwJQAdsDaQH/AiABgQH/AkwB+AH/AioC/wISAZkB/wI0AVYB/wISAv8CFgHi
-        Af8CEgEiAf8CHgG7Af8CSwL/AkwB6QH/AhIBgQH/A3EB/wFWAlQBtAOGAf8DUwH/ARoBhQELAf8BSgHT
-        ATgB/wEsAdkBFgH/AQwBgwEAAf8BIgE8AR4B/wEYAeUBAAH/AgAB4gH/AgABDAH/AggBuwH/AjUC/wI2
-        AekB/wIAAYEB/wNbAf8DqgH/AV8CUAHbA2kB/wEwAYUBIQH/AWAB0wFOAf8BQgHZASwB/wEtAdsBEwH/
-        AS4B4gEUAf8BGQFOARIB/wEgAYEBEwH/AS0B3gETAf8BPQHaASUB/wFgAdoBTQH/AV8BzQFNAf8BJQGW
-        ARMB/wNxAf8BVgJUAbQBVgJUAbQDbgH/ASsBgQEhAf8BVgGsAUgB/wFpAeIBVQH/AT8BigEzAf8BGQEw
-        ARYB/wFDAeUBLAH/AUYB1AExAf8BFgEgARQB/wFIAYkBPQH/AWsB1wFZAf8BUgHEAUAB/wEkAYEBFwH/
-        A4EB/wNMAZMBVgJUAbQDbgH/AiABbgH/AkYBuQH/AlQC/wIxAZkB/wIWATMB/wIpAv8CLwHuAf8CFAEi
-        Af8CPAGdAf8CWAL/Aj8B0gH/AhUBeAH/A4EB/wNMAZMDpwH/A1gB/wEVAWUBCwH/AUABrAEyAf8BUwHi
-        AT8B/wEpAYoBHQH/AQMBGgEAAf8BLQHlARYB/wIZAe4B/wIAAQwB/wImAZ0B/wJCAv8CKQHSAf8CAAFi
-        Af8DaAH/A8AB/wFWAlQBtANuAf8BKwGBASEB/wFWAawBSAH/AWkB4gFVAf8BXgHmAUkB/wFOAegBOAH/
-        AR4BTgEYAf8BLwGBASMB/wFaAeABRQH/AWYB3gFTAf8BawHXAVkB/wFSAcQBQAH/ASQBgQEXAf8DgQH/
-        A0wBkwM8AWYDgQH/AS8BUAErAf8BQwGEATgB/wFsAeQBWQH/AVkBnQFNAf8DPQH/AyoB/wMzAf8BVAF3
-        AU8B/wFrAdoBWQH/AWoB0QFZAf8BOgG5ASYB/wE0AV8BLwH/A4YB/wMuAUgDPAFmA4EB/wIqAUoB/wI3
-        AYEB/wJYAv8CTAGpAf8DPQH/AyoB/wMzAf8CTgGBAf8CWAL/AlgC/wIkAaoB/wIuAVgB/wOGAf8DLgFI
-        A9YB/wNtAf8BGQE6ARUB/wEtAYQBIgH/AVYB5AFDAf8BQwGdATcB/wMnAf8DFAH/Ax0B/wI4AWoB/wJC
-        Av8CQgL/Ag4BqgH/AhgBQgH/A4YB/wPiAf8DPAFmA4EB/wEvAVABKwH/AUMBhAE4Af8BYAHGAU8B/wMS
-        Af8DJAH/AzEB/wMwAf8DHgH/AxIB/wFqAdEBWQH/AToBuQEmAf8BNAFfAS8B/wOGAf8DLgFIAwcBCQOd
-        Af8BawFsAWsB/wEwAWMBKQH/AUcBmAE6Af8BbQHrAVoB/wFsAeYBWQH/AWwB4gFZAf8BawHfAVkB/wFr
-        AdkBWQH/AWgB0QFXAf8BRQG+ATIB/wEjAYEBFQH/A28B/wFaAlYBxQQAAwcBCQOdAf8CawFsAf8CKQFa
-        Af8COQGTAf8CWAL/AlgC/wJYAv8CWAL/AlgC/wJVAfoB/wIxAbkB/wIUAXcB/wNvAf8BWgJWAcUEAAP8
-        Af8DnQH/AVUBVgFVAf8BGgFNARMB/wExAZgBJAH/AVcB6wFEAf8BVgHmAUMB/wFWAeIBQwH/AkIC/wJC
-        Av8CPwH6Af8CGwG5Af8CAAFhAf8DWQH/A7kF/wMHAQkDnQH/AWsBbAFrAf8BMAFjASkB/wFHAZgBOgH/
-        AW0B6wFaAf8BbAHmAVkB/wFsAeIBWQH/AWsB3wFZAf8BawHZAVkB/wFoAdEBVwH/AUUBvgEyAf8BIwGB
-        ARUB/wNvAf8BWgJWAcUIAANEAXsDlwH/AVcBWQFXAf8BLgFYASkB/wFAAYEBNwH/AU0BmQFAAf8BXQHQ
-        AUwB/wFdAc4BSgH/AU4BvAE8Af8BOAG5ASQB/wEhAXgBFgH/AWQBaQFjAf8DoQH/AzcBWggAA0QBewOX
-        Af8CVwFZAf8CKAFRAf8CNwGBAf8CPwGbAf8CSwHiAf8CSQHjAf8COwHFAf8CIwGpAf8CFQFpAf8CYwFo
-        Af8DoQH/AzcBWgQABP8D3AH/A5cB/wFBAUMBQQH/ARgBQgETAf8BKgFvASEB/wE3AZkBKgH/AUcB0AE2
-        Af8CMwHjAf8CJQHFAf8CDQGpAf8CAAFTAf8CTQFSAf8DoQH/A+QF/wQAA0QBewOXAf8BVwFZAVcB/wEu
-        AVgBKQH/AUABgQE3Af8BTQGZAUAB/wFdAdABTAH/AV0BzgFKAf8BTgG8ATwB/wE4AbkBJAH/ASEBeAEW
-        Af8BZAFpAWMB/wOhAf8DNwFaDAABTAJLAZADngH/A3IB/wEyAUgBLwH/ASQBgAEYAf8BJQGNARQB/wEk
-        AYsBFAH/ASIBgQEWAf8BMwFZAS0B/wNvAf8DqAH/A0gBhBAAAUwCSwGQA54B/wNyAf8CLwFEAf8CFwFs
-        Af8CEwGBAf8CEgGBAf8CFQFvAf8CLQFTAf8DbwH/A6gB/wNIAYQIAAj/A9wB/wOeAf8DXAH/ARwBMgEZ
-        Af8BDgFkAQIB/wEPAY0BAAH/AgABcgH/AgABWQH/AhcBPQH/A1kB/wOoAf8D3An/CAABTAJLAZADngH/
-        A3IB/wEyAUgBLwH/ASQBgAEYAf8BJQGNARQB/wEkAYsBFAH/ASIBgQEWAf8BMwFZAS0B/wNvAf8DqAH/
-        A0gBhBQAA0QBewPCAf8DigH/A4EB/wN4Af8DgAH/A4EB/wOPAf8DvwH/AT8CPgFsGAADRAF7A8IB/wOK
-        Af8DgQH/A3gB/wOAAf8DgQH/A48B/wO/Af8BPwI+AWwMAAz/A+cB/wPCAf8DigH/A2gB/wNiAf8DZAH/
-        A2oB/wOPAf8DvwH/A+cN/wwAA0QBewPCAf8DigH/A4EB/wN4Af8DgAH/A4EB/wOPAf8DvwH/AT8CPgFs
-        HAADBwEJAT8CPgFsAVcCVQG6AV0CUgHSAVwCVgHMAVYCVQGxAzgBXQMCAQMgAAMHAQkBPwI+AWwBVwJV
-        AboBXQJSAdIBXAJWAcwBVgJVAbEDOAFdAwIBAxAAEP8D/gH/A+0B/wPeAf8D2QH/A9kB/wPeAf8D7QH/
-        A/4R/xAAAwcBCQE/Aj4BbAFXAlUBugFdAlIB0gFcAlYBzAFWAlUBsQM4AV0DAgEDEAABQgFNAT4HAAE+
-        AwABKAMAAUADAAEgAwABAQEAAQEGAAEBFgAD/wEAAfABDwYAAeABBwYAAcABAwYAAYABAQcAAQE3AAEB
-        BgABgAEBBgABwAEDBgAB4AEHBgAB8AEPBgAB8AEPAfABDwIAAfABDwHgAQcB4AEHAgAB4AEHAcABAwHA
-        AQMCAAHAAQMBgAEBAYABAQIAAYABAQEAAQEBAAEBAwABATEAAQEBAAEBAwABAQGAAQEBgAEBAgABgAEB
-        AcABAwHAAQMCAAHAAQMB4AEHAeABBwIAAeABBwHwAQ8B8AEPAgAB8AEPCw==
+        AwABIAMAAQEBAAEgBgABICIAAwoBDAFAAj8BbAFYAlcBugFfAlcB0gFdAlkBzAFXAlYBtAE7AjoBYAQD
+        EAAQ/wPzAf8DkwH/A0EB/wMpAf8DLwH/A0cB/wOfAf8D/BH/jAABRwJGAX8DIQH/A0oB/wNdAf8DZAH/
+        A2QB/wNcAf8DRQH/Ax4B/wFBAkABbwwADP8DhQH/AwsB/wM0Af8DRwH/A04B/wNOAf8DRgH/Ay8B/wMI
+        Af8DlA3/iAADTQGSA04B/wJdAWMB/wIcAWoB/wITAYEB/wITAZkB/wITAZUB/wIUAYEB/wIhAWUB/wNn
+        Af8DSQH/A0kBhQgACP8DdgH/AzgB/wFIAU4BRwH/ARIBYQEHAf8BEAGTAQEB/wETAbMBAQH/AgEBlQH/
+        AgEBdQH/AgsBTwH/A1EB/wMzAf8Dhgn/hAADRQF7A1cB/wJHAV4B/wITAYMB/wITAbgB/wITAeQB/wIT
+        Av8CEwH8Af8CEwHgAf8CEwG3Af8CFAGBAf8CVAFjAf8DUgH/ATsCOgFgBAAE/wOVAf8DQQH/ATQBTAEx
+        Af8BEAGZAQEB/wETAbUBAQH/ARUBvgEBAf8BFgHLAQEB/wIBAfwB/wIBAeAB/wIBAbcB/wIBAXEB/wI+
+        AU0B/wM8Af8DrQX/gAADCgEMA0UB/wJkAWYB/wITAYEB/wITAcMB/wITAv8CEwL/AhMBVgH/AhMBiAH/
+        AhMC/wITAv8CEwHAAf8CFQGBAf8DYAH/AVwCWAHLBAAD9QH/Ay8B/wFOAVABTgH/ARABkAEBAf8BFAG2
+        AQEB/wEVAcQBAQH/ARcBzwEBAf8BAwE1AQEB/wIBAYgB/wIBAv8CAQL/AgEBwAH/AgEBaQH/A0oB/wNe
+        Bf+AAAM9AWYDYAH/Ah4BZQH/AhMBsgH/AhMC/wITAv8CEwL/AhMBVgH/AhMBiAH/AhMC/wITAv8CEwL/
+        AhgBsQH/AikBXQH/A2YB/wMvAUgDsgH/A0oB/wETAVsBCQH/ARMBtQEBAf8BFQHCAQEB/wEXAc8BAQH/
+        ARgB1gEBAf8BAwE2AQEB/wIBAYgB/wIBAv8CAQL/AgEC/wICAbEB/wITAUcB/wNQAf8DywH/gAABWAJX
+        AbcDZgH/AhQBgQH/AhMB5AH/AhMC/wITAv8CEwL/AhMBVgH/AhMBiAH/AhMC/wITAv8CEwL/AigB1gH/
+        AhYBgQH/A20B/wNNAZMDgQH/A1AB/wERAZABAQH/ARQBugEBAf8BFgHLAQEB/wEXAdQBAQH/ARgB2gEB
+        Af8BBAE4AQEB/wIBAYgB/wIBAv8CAQL/AgEC/wISAdYB/wIBAWoB/wNXAf8DoQH/gAABYQJWAdsDaAH/
+        AhQBkgH/AiUB/AH/AhMC/wITAv8CEwL/AhMBVgH/AhMBiAH/AhMC/wITAv8CIAL/AkMB7AH/AhMBhAH/
+        A28B/wFXAlYBtANyAf8DUgH/ARMBqgEBAf8BJgHHAREB/wEXAdEBAQH/ARgB2AEBAf8BGQHfAQEB/wEE
+        ATkBAQH/AgEBiAH/AgEC/wIBAv8CCgL/Ai0B7AH/AgEBhAH/A1kB/wObAf+AAAFhAlYB2wNqAf8CIQGB
+        Af8CTQH4Af8CKwL/AhMC/wITAv8CEwFWAf8CEwGIAf8CEwL/AiQC/wJMAv8CTQHpAf8CEwGBAf8DcgH/
+        AVcCVgG0A4YB/wNUAf8BGwGFAQwB/wFLAdMBOQH/AS0B2QEXAf8BGAHbAQEB/wEZAeIBAQH/AQQBOQEB
+        Af8CAQGIAf8CAQL/Ag4C/wI2Av8CNwHpAf8CAQGBAf8DXAH/A6oB/4AAAVcCVgG0A28B/wIhAW8B/wJH
+        AbkB/wJVAv8CSAL/AjYC/wIYAVYB/wIjAYgB/wJEAv8CUwL/AlkC/wJAAdIB/wIWAXkB/wOBAf8DTQGT
+        A6cB/wNZAf8BFgFmAQwB/wFBAawBMwH/AVQB4gFAAf8BSQHmATQB/wE5AegBIwH/AQkBOQEDAf8CDQGI
+        Af8CLgL/Aj0C/wJDAv8CKgHSAf8CAQFjAf8DaQH/A8AB/4AAAz0BZgOBAf8CKwFLAf8COAGBAf8CUAHd
+        Af8DEwH/AyUB/wMyAf8DMQH/Ax8B/wMTAf8CWQL/AiUBqgH/Ai8BWQH/A4YB/wMvAUgD1gH/A24B/wEa
+        ATsBFgH/AS4BhAEjAf8BSwHGAToB/wMBAf8DDwH/AxwB/wMbAf8DCQH/AwEB/wJDAv8CDwGqAf8CGQFD
+        Af8DhgH/A+IB/4AAAwgBCQOdAf8CbAFtAf8CKgFbAf8COgGTAf8CWQL/AlkC/wJZAv8CWQL/AlkC/wJW
+        AfoB/wIyAbkB/wIVAXgB/wNwAf8BXAJZAcUEAAP8Af8DnQH/AVYBVwFWAf8BGwFOARQB/wEyAZgBJQH/
+        AVgB6wFFAf8BVwHmAUQB/wFXAeIBRAH/AkMC/wJDAv8CQAH6Af8CHAG5Af8CAQFiAf8DWgH/A7kF/4QA
+        A0UBewOXAf8CWAFaAf8CKQFSAf8COAGBAf8CQAGbAf8CTAHiAf8CSgHjAf8CPAHFAf8CJAGpAf8CFgFq
+        Af8CZAFpAf8DoQH/AzgBWgQABP8D3AH/A5cB/wFCAUQBQgH/ARkBQwEUAf8BKwFwASIB/wE4AZkBKwH/
+        AUgB0AE3Af8CNAHjAf8CJgHFAf8CDgGpAf8CAQFUAf8CTgFTAf8DoQH/A+QF/4gAAU0CTAGQA54B/wNz
+        Af8CMAFFAf8CGAFtAf8CFAGBAf8CEwGBAf8CFgFwAf8CLgFUAf8DcAH/A6gB/wNJAYQIAAj/A9wB/wOe
+        Af8DXQH/AR0BMwEaAf8BDwFlAQMB/wEQAY0BAQH/AgEBcwH/AgEBWgH/AhgBPgH/A1oB/wOoAf8D3An/
+        jAADRQF7A8IB/wOKAf8DgQH/A3kB/wOBAf8DgQH/A48B/wO/Af8BQAI/AWwMAAz/A+cB/wPCAf8DigH/
+        A2kB/wNjAf8DZQH/A2sB/wOPAf8DvwH/A+cN/5AAAwgBCQFAAj8BbAFYAlcBugFfAlcB0gFdAlkBzAFX
+        AlYBsQM5AV0EAxAAEP8D/gH/A+0B/wPeAf8D2QH/A9kB/wPeAf8D7QH/A/4R/5AAAwoBDAFAAj8BbAFY
+        AlcBugFfAlcB0gFdAlkBzAFXAlYBtAE7AjoBYAQDIAADCgEMAUACPwFsAVgCVwG6AV8CVwHSAV0CWQHM
+        AVcCVgG0ATsCOgFgBAMQABD/A/MB/wOTAf8DQQH/AykB/wMvAf8DRwH/A58B/wP8Ef8QAAMKAQwBQAI/
+        AWwBWAJXAboBXwJXAdIBXQJZAcwBVwJWAbQBOwI6AWAEAxwAAUcCRgF/AyEB/wNKAf8DXQH/A2QB/wNk
+        Af8DXAH/A0UB/wMeAf8BQQJAAW8YAAFHAkYBfwMhAf8DSgH/A10B/wNkAf8DZAH/A1wB/wNFAf8DHgH/
+        AUECQAFvDAAM/wOFAf8DCwH/AzQB/wNHAf8DTgH/A04B/wNGAf8DLwH/AwgB/wOUDf8MAAFHAkYBfwMh
+        Af8DSgH/A10B/wNkAf8DZAH/A1wB/wNFAf8DHgH/AUECQAFvFAADTQGSA04B/wFeAWQBXQH/ASgBdwEd
+        Af8BJgGTARUB/wEpAbMBFAH/ASgBrwEUAf8BJgGNARYB/wErAXEBIgH/A2cB/wNJAf8DSQGFEAADTQGS
+        A04B/wJdAWMB/wIcAWoB/wITAYEB/wITAZkB/wITAZUB/wIUAYEB/wIhAWUB/wNnAf8DSQH/A0kBhQgA
+        CP8DdgH/AzgB/wFIAU4BRwH/ARIBYQEHAf8BEAGTAQEB/wETAbMBAQH/AgEBlQH/AgEBdQH/AgsBTwH/
+        A1EB/wMzAf8Dhgn/CAADTQGSA04B/wFeAWQBXQH/ASgBdwEdAf8BJgGTARUB/wEpAbMBFAH/ASgBrwEU
+        Af8BJgGNARYB/wErAXEBIgH/A2cB/wNJAf8DSQGFDAADRQF7A1cB/wFKAWIBRwH/ASYBmQEVAf8BKQG1
+        ARQB/wErAb4BFAH/ASwBywEUAf8BLQHRARQB/wEsAcwBFAH/ASsBwAEUAf8BJQGJARUB/wFWAWUBVAH/
+        A1IB/wE7AjoBYAgAA0UBewNXAf8CRwFeAf8CEwGDAf8CEwG4Af8CEwHkAf8CEwL/AhMB/AH/AhMB4AH/
+        AhMBtwH/AhQBgQH/AlQBYwH/A1IB/wE7AjoBYAQABP8DlQH/A0EB/wE0AUwBMQH/ARABmQEBAf8BEwG1
+        AQEB/wEVAb4BAQH/ARYBywEBAf8CAQH8Af8CAQHgAf8CAQG3Af8CAQFxAf8CPgFNAf8DPAH/A60F/wQA
+        A0UBewNXAf8BSgFiAUcB/wEmAZkBFQH/ASkBtQEUAf8BKwG+ARQB/wEsAcsBFAH/AS0B0QEUAf8BLAHM
+        ARQB/wErAcABFAH/ASUBiQEVAf8BVgFlAVQB/wNSAf8BOwI6AWAEAAMKAQwDRQH/AWQBZgFkAf8BJgGQ
+        ARUB/wEqAbYBFAH/ASEBgQETAf8BFgEuARMB/wEtAdUBFAH/AS4B2QEUAf8BIQGBARMB/wEUASEBEwH/
+        ASYBnAEUAf8BJQGBARYB/wNgAf8BXAJYAcsEAAMKAQwDRQH/AmQBZgH/AhMBgQH/AhMBwwH/AhMBmQH/
+        AhMBNAH/AhMC/wITAv8CEwGIAf8CEwEjAf8CEwGaAf8CFQGBAf8DYAH/AVwCWAHLBAAD9QH/Ay8B/wFO
+        AVABTgH/ARABkAEBAf8BFAG2AQEB/wELAXIBAQH/AQEBGAEBAf8BFwHVAQEB/wIBAv8CAQGIAf8CAQEN
+        Af8CAQGaAf8CAQFpAf8DSgH/A14F/wMKAQwDRQH/AWQBZgFkAf8BJgGQARUB/wEqAbYBFAH/ASsBxAEU
+        Af8BLQHPARQB/wEZAUsBEwH/ASEBgQETAf8BLgHeARQB/wEvAeUBFQH/ASsBwwEUAf8BJQGBARYB/wNg
+        Af8BXAJYAcsEAAM9AWYDYAH/ASkBcQEfAf8BKQG1ARQB/wErAcIBFAH/ASIBgQETAf8BFgEvARMB/wEu
+        AdsBFAH/ASkBswEUAf8DEwH/ATgBqAEmAf8BLgHYARQB/wEvAbsBGgH/ATEBZgEqAf8DZgH/Ay8BSAM9
+        AWYDYAH/Ah4BZQH/AhMBsgH/AhMC/wITAZkB/wITATQB/wITAv8CEwHMAf8DEwH/AiQBvAH/AhMC/wIY
+        AbEB/wIpAV0B/wNmAf8DLwFIA7IB/wNKAf8BEwFbAQkB/wETAbUBAQH/ARUBwgEBAf8BDAF4AQEB/wEB
+        ARkBAQH/ARgB2wEBAf8CAQHMAf8DAQH/Ag4BvAH/AgEC/wICAbEB/wITAUcB/wNQAf8DywH/Az0BZgNg
+        Af8BKQFxAR8B/wEpAbUBFAH/ASsBwgEUAf8BLQHPARQB/wEuAdYBFAH/ARkBTAETAf8BIQGBARQB/wEv
+        AeQBFQH/AS8B4AEVAf8BLgHYARQB/wEvAbsBGgH/ATEBZgEqAf8DZgH/Ay8BSAFYAlcBtwNmAf8BJwGQ
+        ARYB/wEqAboBFAH/ASwBywEUAf8BIgGBARMB/wEWAS8BEwH/AS0B0QEVAf8BFgEwARMB/wEpAYEBHAH/
+        AS4B3gEUAf8BLgHWARQB/wE/AcYBKgH/ASYBgQEXAf8DbQH/A00BkwFYAlcBtwNmAf8CFAGBAf8CEwHk
+        Af8CEwL/AhMBmQH/AhMBNAH/AhMB7gH/AhMBNAH/AhoBkAH/AhMC/wITAv8CKAHWAf8CFgGBAf8DbQH/
+        A00BkwOBAf8DUAH/AREBkAEBAf8BFAG6AQEB/wEWAcsBAQH/AQwBewEBAf8BAQEZAQEB/wEXAdEBAQH/
+        AgEBHgH/AgQBkAH/AgEC/wIBAv8CEgHWAf8CAQFqAf8DVwH/A6EB/wFYAlcBtwNmAf8BJwGQARYB/wEq
+        AboBFAH/ASwBywEUAf8BLQHUARQB/wEuAdoBFAH/ARoBTgETAf8BIQGBARQB/wEvAeMBFQH/AS4B3gEU
+        Af8BLgHWARQB/wE/AcYBKgH/ASYBgQEXAf8DbQH/A00BkwFhAlYB2wNoAf8BKQGqARYB/wE8AccBJwH/
+        AS0B0QEUAf8BIwGCARMB/wMTAf8DJwH/ARwBKgEbAf8BIQGBARQB/wEuAdoBFAH/AToB1QEiAf8BVwHO
+        AUUB/wEmAZoBFAH/A28B/wFXAlYBtAFhAlYB2wNoAf8CFAGSAf8CJQH8Af8CEwL/AhMBmQH/AxMB/wMn
+        Af8CGgErAf8CEwGIAf8CEwL/AiAC/wJDAewB/wITAYQB/wNvAf8BVwJWAbQDcgH/A1IB/wETAaoBAQH/
+        ASYBxwERAf8BFwHRAQEB/wENAYIBAQH/AwEB/wMRAf8CBAEVAf8CAQGIAf8CAQL/AgoC/wItAewB/wIB
+        AYQB/wNZAf8DmwH/AWECVgHbA2gB/wEpAaoBFgH/ATwBxwEnAf8BLQHRARQB/wEuAdgBFAH/AS8B3wEU
+        Af8BGgFPARMB/wEhAYEBFAH/AS8B4QEVAf8BLgHaARQB/wE6AdUBIgH/AVcBzgFFAf8BJgGaARQB/wNv
+        Af8BVwJWAbQBYQJWAdsDagH/ATEBhQEiAf8BYQHTAU8B/wFDAdkBLQH/ASMBgwETAf8BOQFTATUB/wEv
+        AeUBFQH/ATAByQEZAf8BFAEhARMB/wEyAaABIQH/AWEB2gFOAf8BYAHNAU4B/wEmAZYBFAH/A3IB/wFX
+        AlYBtAFhAlYB2wNqAf8CIQGBAf8CTQH4Af8CKwL/AhMBmQH/AjUBVwH/AhMC/wIXAeIB/wITASMB/wIf
+        AbsB/wJMAv8CTQHpAf8CEwGBAf8DcgH/AVcCVgG0A4YB/wNUAf8BGwGFAQwB/wFLAdMBOQH/AS0B2QEX
+        Af8BDQGDAQEB/wEjAT0BHwH/ARkB5QEBAf8CAQHiAf8CAQENAf8CCQG7Af8CNgL/AjcB6QH/AgEBgQH/
+        A1wB/wOqAf8BYQJWAdsDagH/ATEBhQEiAf8BYQHTAU8B/wFDAdkBLQH/AS4B2wEUAf8BLwHiARUB/wEa
+        AU8BEwH/ASEBgQEUAf8BLgHeARQB/wE+AdoBJgH/AWEB2gFOAf8BYAHNAU4B/wEmAZYBFAH/A3IB/wFX
+        AlYBtAFXAlYBtANvAf8BLAGBASIB/wFXAawBSQH/AWoB4gFWAf8BQAGKATQB/wEaATEBFwH/AUQB5QEt
+        Af8BRwHUATIB/wEXASEBFQH/AUkBiQE+Af8BbAHXAVoB/wFTAcQBQQH/ASUBgQEYAf8DgQH/A00BkwFX
+        AlYBtANvAf8CIQFvAf8CRwG5Af8CVQL/AjIBmQH/AhcBNAH/AioC/wIwAe4B/wIVASMB/wI9AZ0B/wJZ
+        Av8CQAHSAf8CFgF5Af8DgQH/A00BkwOnAf8DWQH/ARYBZgEMAf8BQQGsATMB/wFUAeIBQAH/ASoBigEe
+        Af8BBAEbAQEB/wEuAeUBFwH/AhoB7gH/AgEBDQH/AicBnQH/AkMC/wIqAdIB/wIBAWMB/wNpAf8DwAH/
+        AVcCVgG0A28B/wEsAYEBIgH/AVcBrAFJAf8BagHiAVYB/wFfAeYBSgH/AU8B6AE5Af8BHwFPARkB/wEw
+        AYEBJAH/AVsB4AFGAf8BZwHeAVQB/wFsAdcBWgH/AVMBxAFBAf8BJQGBARgB/wOBAf8DTQGTAz0BZgOB
+        Af8BMAFRASwB/wFEAYQBOQH/AW0B5AFaAf8BWgGdAU4B/wM+Af8DKwH/AzQB/wFVAXgBUAH/AWwB2gFa
+        Af8BawHRAVoB/wE7AbkBJwH/ATUBYAEwAf8DhgH/Ay8BSAM9AWYDgQH/AisBSwH/AjgBgQH/AlkC/wJN
+        AakB/wM+Af8DKwH/AzQB/wJPAYEB/wJZAv8CWQL/AiUBqgH/Ai8BWQH/A4YB/wMvAUgD1gH/A24B/wEa
+        ATsBFgH/AS4BhAEjAf8BVwHkAUQB/wFEAZ0BOAH/AygB/wMVAf8DHgH/AjkBawH/AkMC/wJDAv8CDwGq
+        Af8CGQFDAf8DhgH/A+IB/wM9AWYDgQH/ATABUQEsAf8BRAGEATkB/wFhAcYBUAH/AxMB/wMlAf8DMgH/
+        AzEB/wMfAf8DEwH/AWsB0QFaAf8BOwG5AScB/wE1AWABMAH/A4YB/wMvAUgDCAEJA50B/wFsAW0BbAH/
+        ATEBZAEqAf8BSAGYATsB/wFuAesBWwH/AW0B5gFaAf8BbQHiAVoB/wFsAd8BWgH/AWwB2QFaAf8BaQHR
+        AVgB/wFGAb4BMwH/ASQBgQEWAf8DcAH/AVwCWQHFBAADCAEJA50B/wJsAW0B/wIqAVsB/wI6AZMB/wJZ
+        Av8CWQL/AlkC/wJZAv8CWQL/AlYB+gH/AjIBuQH/AhUBeAH/A3AB/wFcAlkBxQQAA/wB/wOdAf8BVgFX
+        AVYB/wEbAU4BFAH/ATIBmAElAf8BWAHrAUUB/wFXAeYBRAH/AVcB4gFEAf8CQwL/AkMC/wJAAfoB/wIc
+        AbkB/wIBAWIB/wNaAf8DuQX/AwgBCQOdAf8BbAFtAWwB/wExAWQBKgH/AUgBmAE7Af8BbgHrAVsB/wFt
+        AeYBWgH/AW0B4gFaAf8BbAHfAVoB/wFsAdkBWgH/AWkB0QFYAf8BRgG+ATMB/wEkAYEBFgH/A3AB/wFc
+        AlkBxQgAA0UBewOXAf8BWAFaAVgB/wEvAVkBKgH/AUEBgQE4Af8BTgGZAUEB/wFeAdABTQH/AV4BzgFL
+        Af8BTwG8AT0B/wE5AbkBJQH/ASIBeQEXAf8BZQFqAWQB/wOhAf8DOAFaCAADRQF7A5cB/wJYAVoB/wIp
+        AVIB/wI4AYEB/wJAAZsB/wJMAeIB/wJKAeMB/wI8AcUB/wIkAakB/wIWAWoB/wJkAWkB/wOhAf8DOAFa
+        BAAE/wPcAf8DlwH/AUIBRAFCAf8BGQFDARQB/wErAXABIgH/ATgBmQErAf8BSAHQATcB/wI0AeMB/wIm
+        AcUB/wIOAakB/wIBAVQB/wJOAVMB/wOhAf8D5AX/BAADRQF7A5cB/wFYAVoBWAH/AS8BWQEqAf8BQQGB
+        ATgB/wFOAZkBQQH/AV4B0AFNAf8BXgHOAUsB/wFPAbwBPQH/ATkBuQElAf8BIgF5ARcB/wFlAWoBZAH/
+        A6EB/wM4AVoMAAFNAkwBkAOeAf8DcwH/ATMBSQEwAf8BJQGBARkB/wEmAY0BFQH/ASUBiwEVAf8BIwGB
+        ARcB/wE0AVoBLgH/A3AB/wOoAf8DSQGEEAABTQJMAZADngH/A3MB/wIwAUUB/wIYAW0B/wIUAYEB/wIT
+        AYEB/wIWAXAB/wIuAVQB/wNwAf8DqAH/A0kBhAgACP8D3AH/A54B/wNdAf8BHQEzARoB/wEPAWUBAwH/
+        ARABjQEBAf8CAQFzAf8CAQFaAf8CGAE+Af8DWgH/A6gB/wPcCf8IAAFNAkwBkAOeAf8DcwH/ATMBSQEw
+        Af8BJQGBARkB/wEmAY0BFQH/ASUBiwEVAf8BIwGBARcB/wE0AVoBLgH/A3AB/wOoAf8DSQGEFAADRQF7
+        A8IB/wOKAf8DgQH/A3kB/wOBAf8DgQH/A48B/wO/Af8BQAI/AWwYAANFAXsDwgH/A4oB/wOBAf8DeQH/
+        A4EB/wOBAf8DjwH/A78B/wFAAj8BbAwADP8D5wH/A8IB/wOKAf8DaQH/A2MB/wNlAf8DawH/A48B/wO/
+        Af8D5w3/DAADRQF7A8IB/wOKAf8DgQH/A3kB/wOBAf8DgQH/A48B/wO/Af8BQAI/AWwcAAMIAQkBQAI/
+        AWwBWAJXAboBXwJXAdIBXQJZAcwBVwJWAbEDOQFdBAMgAAMIAQkBQAI/AWwBWAJXAboBXwJXAdIBXQJZ
+        AcwBVwJWAbEDOQFdBAMQABD/A/4B/wPtAf8D3gH/A9kB/wPZAf8D3gH/A+0B/wP+Ef8QAAMIAQkBQAI/
+        AWwBWAJXAboBXwJXAdIBXQJZAcwBVwJWAbEDOQFdBAMQAAFCAU0BPgcAAT4DAAEoAwABQAMAASADAAEB
+        AQABAQYAAQEWAAP/AQAB8AEPBgAB4AEHBgABwAEDBgABgAEBBwABATcAAQEGAAGAAQEGAAHAAQMGAAHg
+        AQcGAAHwAQ8GAAHwAQ8B8AEPAgAB8AEPAeABBwHgAQcCAAHgAQcBwAEDAcABAwIAAcABAwGAAQEBgAEB
+        AgABgAEBAQABAQEAAQEDAAEBMQABAQEAAQEDAAEBAYABAQGAAQECAAGAAQEBwAEDAcABAwIAAcABAwHg
+        AQcB4AEHAgAB4AEHAfABDwHwAQ8CAAHwAQ8L
 </value>
   </data>
   <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
   <data name="pictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
-        R0lGODlhIQAXAIcAAAAAAIAAAACAAICAAAAAgIAAgACAgMDAwE9lfYOZsV8/P38/P58/P78/P98/P/8/
+        R0lGODlhIQAXAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgMDAwE9lfYOZsV8/P38/P58/P78/P98/P/8/
         Pz9fP19fP39fP59fP79fP99fP/9fPz9/P19/P39/P59/P79/P99/P/9/Pz+fP1+fP3+fP5+fP7+fP9+f
         P/+fPz+/P1+/P3+/P5+/P7+/P9+/P/+/Pz/fP1/fP3/fP5/fP7/fP9/fP//fPz//P1//P3//P5//P7//
         P9//P///Pz8/X18/X38/X58/X78/X98/X/8/Xz9fX19fX39fX59fX79fX99fX/9fXz9/X19/X39/X59/
@@ -273,11 +273,11 @@
         n9/fn//fnz//n1//n3//n5//n7//n9//n///nz8/v18/v38/v58/v78/v98/v/8/vz9fv19fv39fv59f
         v79fv99fv/9fvz9/v19/v39/v59/v79/v99/v/9/vz+fv1+fv3+fv5+fv7+fv9+fv/+fvz+/v1+/v3+/
         v5+/v7+/v9+/v/+/vz/fv1/fv3/fv5/fv7/fv9/fv8HM2aCgpICAgP8AAAD/AP//AAAA//8A/wD/////
-        /yH/C05FVFNDQVBFMi4wAwEBAAAh+QQBAAAHACwAAAAAIQAXAAAI6gAPCBxIsKDBgwXxKVzIsKHDh/gA
-        DMT3D6HFixIFUhTA8QDHjh896jugT8DIjwI8Csh4gGI+kCFjppQJk+VGARUPAMApcKdKlTl1puwZseW/
-        jgp9Jp3JtOVSlQD+SXS5EoDVqld/In3KUeLUoyjDdhy4NeJQnWhv5ty5lulHq3CZejX60qlSsyrFypx7
-        E+5Ov2dJChwpGGpasHppJn57mGPbtnntply6svFkvFy7xgWM1ajmq4DzLu46EbHbpigDcFQtgHVljRBj
-        yy7a069tv/j26d7N2/bFg7l5C2f5G7jw4cUt3r6dvHnygAA7
+        /yH5BAEAAAcALAAAAAAhABcAAAjqAA8IHEiwoMGDBfEpXMiwocOH+AAMxPcPocWLEgVSFMDxAMeOHz3q
+        O6BPwMiPAjwKyHiAYj6QIWOmlAmT5UYBFQ8AwClwp0qVOXWm7Bmx5b+OCn0mncm05VKVAP5JdLkSgNWq
+        V38ifcpR4tSjKMN2HLg14lCdaG/m3LmW6UercJl6NfrSqVKzKsXKnHsT7k6/Z0kKHCkYalqwemkmfnuY
+        Y9u2ee2mXLqy8WS8XLvGBYzVqOargPMu7joRsdumKANwVC2AdWWNEGPLLtrTr22/+Pbp3s3b9sWDuXkL
+        Z/kbuPDhxS3evp28efKAADs=
 </value>
   </data>
 </root>
\ No newline at end of file
Index: TvEngine3/TVLibrary/SetupTv/Sections/RadioChannels.cs
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Sections/RadioChannels.cs	(revision 28196)
+++ TvEngine3/TVLibrary/SetupTv/Sections/RadioChannels.cs	(working copy)
@@ -20,14 +20,12 @@
 
 using System;
 using System.Collections.Generic;
-using System.Text;
 using System.Windows.Forms;
 using SetupTv.Dialogs;
 using TvControl;
 using MediaPortal.Playlists;
 using Gentle.Framework;
 using TvDatabase;
-using TvLibrary.Log;
 using TvLibrary.Interfaces;
 using MediaPortal.UserInterface.Controls;
 using System.Threading;
@@ -95,7 +93,6 @@
       base.OnSectionDeActivated();
     }
 
-
     public override void OnSectionActivated()
     {
       base.OnSectionActivated();
@@ -167,6 +164,9 @@
       addToFavoritesToolStripMenuItem.DropDownItems.Add(itemNew);
     }
 
+    /// <summary>
+    /// Get all channels from the database
+    /// </summary>
     private void RefreshAllChannels()
     {
       Cursor.Current = Cursors.WaitCursor;
@@ -184,11 +184,15 @@
       _allChannels = ObjectFactory.GetCollection<Channel>(stmt.Execute());
       tabControl1.TabPages[0].Text = string.Format("Channels ({0})", _allChannels.Count);
 
-      _lvChannelHandler = new ChannelListViewHandler(mpListView1, _allChannels, _cards, txtFilterString,
-                                                     ChannelType.Radio);
+      _lvChannelHandler = new ChannelListViewHandler(mpListView1, _allChannels, _cards, txtFilterString, ChannelType.Radio);
       _lvChannelHandler.FilterListView("");
     }
 
+    /// <summary>
+    /// Text of the filter has changed
+    /// </summary>
+    /// <param name="sender"></param>
+    /// <param name="e"></param>
     private void txtFilterString_TextChanged(object sender, EventArgs e)
     {
       //Filter the listview so only items that contain the text of txtFilterString are shown
@@ -254,8 +258,7 @@
         return;
       }
 
-      NotifyForm dlg = new NotifyForm("Clearing all radio channels...",
-                                      "This can take some time\n\nPlease be patient...");
+      NotifyForm dlg = new NotifyForm("Clearing all radio channels...", "This can take some time\n\nPlease be patient...");
       dlg.Show(this);
       dlg.WaitForDisplay();
       IList<Channel> channels = Channel.ListAll();
@@ -950,7 +953,6 @@
 
       int targetIndex = -1;
 
-
       System.Drawing.Point pt = new System.Drawing.Point(e.X, e.Y);
 
       pt = PointToClient(pt);
Index: TvEngine3/TVLibrary/SetupTv/Sections/RadioCombinations.cs
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Sections/RadioCombinations.cs	(revision 28196)
+++ TvEngine3/TVLibrary/SetupTv/Sections/RadioCombinations.cs	(working copy)
@@ -22,12 +22,11 @@
 using System.Collections.Generic;
 using System.Windows.Forms;
 using TvControl;
-using Gentle.Framework;
 using TvDatabase;
 using TvLibrary.Interfaces;
 using similaritymetrics;
 using MediaPortal.UserInterface.Controls;
-using TvLibrary.Log;
+using SetupTv.Sections.Helpers;
 
 namespace SetupTv.Sections
 {
@@ -56,7 +55,7 @@
     private readonly MPListViewStringColumnSorter lvwColumnSorter2;
     private readonly MPListViewStringColumnSorter lvwColumnSorter3;
 
-    private Dictionary<int, CardType> cards;
+    private IDictionary<int, CardType> cards;
 
     public RadioCombinations(string name)
       : base(name)
@@ -102,38 +101,35 @@
 
     private void mpComboBoxCard_SelectedIndexChanged(object sender, EventArgs e)
     {
+      Application.UseWaitCursor = true;
       mpListViewChannels.BeginUpdate();
       try
       {
         mpListViewChannels.Items.Clear();
         mpListViewMapped.Items.Clear();
 
-        SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (Channel));
-        sb.AddOrderByField(true, "sortOrder");
-        CardInfo cardInfo = (CardInfo)mpComboBoxCard.SelectedItem;
+        Card card = ((CardInfo)mpComboBoxCard.SelectedItem).Card;
 
-        Card card = cardInfo.Card;
+        // get cardtype - dvb, analogue etc.
         CardType cardType = cards[card.IdCard];
-        IList<ChannelMap> maps = card.ReferringChannelMap();
 
+        TvBusinessLayer layer = new TvBusinessLayer();
+        bool enableDVBS2 = (layer.GetSetting("dvbs" + card.IdCard + "enabledvbs2", "false").Value == "true");
 
         List<ListViewItem> items = new List<ListViewItem>();
+
+        IDictionary<int, Channel> dChannels = ChannelListHelper.GetDictionaryOfChannelsForGroup(-1, ChannelType.Radio);
+        IDictionary<int, IList<TuningDetail>> dDetails = ChannelListHelper.GetDictionaryOfTuningDetailsForGroup(-1, ChannelType.Radio);
+        IList<ChannelMap> maps = card.ReferringChannelMap();
         foreach (ChannelMap map in maps)
         {
           Channel channel = null;
-          try
-          {
-            channel = map.ReferencedChannel();
-          }
-          catch (Exception) {}
-          if (channel == null)
+          if (!dChannels.TryGetValue(map.IdChannel, out channel))
             continue;
-          if (channel.IsRadio == false)
-            continue;
-          TvBusinessLayer layer = new TvBusinessLayer();
-          bool enableDVBS2 = (layer.GetSetting("dvbs" + card.IdCard + "enabledvbs2", "false").Value == "true");
-          List<TuningDetail> tuningDetails = GetTuningDetailsByCardType(channel, cardType, enableDVBS2);
-          int imageIndex = GetImageIndex(tuningDetails);
+
+          List<TuningDetail> tuningDetails = ChannelListHelper.GetTuningDetailsByCardType(channel, dDetails, cardType, enableDVBS2);
+          
+          int imageIndex = ChannelListIcons.GetChannelListIconIndex(channel, tuningDetails);
           ListViewItem item = new ListViewItem(channel.DisplayName, imageIndex);
           item.Tag = channel;
           items.Add(item);
@@ -144,6 +140,7 @@
       finally
       {
         mpListViewChannels.EndUpdate();
+        Application.UseWaitCursor = false;
       }
     }
 
@@ -153,32 +150,35 @@
       try
       {
         mpListViewMapped.Items.Clear();
-        if (mpListViewChannels.SelectedIndices == null)
-          return;
         if (mpListViewChannels.SelectedIndices.Count != 1)
           return;
         Card card = ((CardInfo)mpComboBoxCard.SelectedItem).Card;
         ListViewItem selectedItem = mpListViewChannels.Items[mpListViewChannels.SelectedIndices[0]];
         Channel selectedChannel = (Channel)selectedItem.Tag;
-        IList<Channel> allChannels = Channel.ListAll();
+
+        IList<Channel> allChannels = ChannelListHelper.GetChannelsOfTypeForGroup(-1, ChannelType.Radio);
+        IDictionary<int, IList<TuningDetail>> dDetails = ChannelListHelper.GetDictionaryOfTuningDetailsForGroup(-1, ChannelType.Radio);
+        IDictionary<int, IList<ChannelMap>> dMaps = ChannelListHelper.GetDictionaryOfChannelMaps(ChannelType.Radio);
+
         List<ListViewItem> items = new List<ListViewItem>();
-        NotifyForm dlg = new NotifyForm("Searching for Similar Channels...",
-                                        "This can take some time\n\nPlease be patient...");
+        NotifyForm dlg = new NotifyForm("Searching for similar channels...",
+                                        "This can take some time.\n\nPlease be patient...");
         dlg.Show(this);
         dlg.WaitForDisplay();
         foreach (Channel channel in allChannels)
         {
-          if (channel.IsRadio == false)
-            continue;
-
           bool isMapped = false;
-          IList<ChannelMap> list = channel.ReferringChannelMap();
-          foreach (ChannelMap map in list)
+          IList<ChannelMap> maps;
+          dMaps.TryGetValue(channel.IdChannel, out maps);
+          if (maps != null)
           {
-            if (map.IdCard == card.IdCard)
+            foreach (ChannelMap map in maps)
             {
-              isMapped = true;
-              break;
+              if (map.IdCard == card.IdCard)
+              {
+                isMapped = true;
+                break;
+              }
             }
           }
           if (isMapped)
@@ -187,8 +187,9 @@
           Levenstein comparer = new Levenstein();
           float result = comparer.getSimilarity(selectedChannel.DisplayName, channel.DisplayName);
 
-          IList<TuningDetail> details = channel.ReferringTuningDetail();
-          int imageIndex = GetImageIndex(details);
+          IList<TuningDetail> details;
+          dDetails.TryGetValue(channel.IdChannel, out details);
+          int imageIndex = ChannelListIcons.GetChannelListIconIndex(channel, details);
           ListViewItem item = new ListViewItem((result * 100f).ToString("f2") + "%", imageIndex);
           item.Tag = channel;
           item.SubItems.Add(channel.DisplayName);
@@ -332,90 +333,5 @@
       // Perform the sort with these new sort options.
       mpListViewMapped.Sort();
     }
-
-    private static List<TuningDetail> GetTuningDetailsByCardType(Channel channel, CardType cardType, bool enableDVBS2)
-    {
-      List<TuningDetail> result = new List<TuningDetail>();
-      foreach (TuningDetail tDetail in channel.ReferringTuningDetail())
-      {
-        switch (cardType)
-        {
-          case CardType.Analog:
-            if (tDetail.ChannelType == 0)
-              result.Add(tDetail);
-            break;
-          case CardType.Atsc:
-            if (tDetail.ChannelType == 1)
-              result.Add(tDetail);
-            break;
-          case CardType.DvbC:
-            if (tDetail.ChannelType == 2)
-              result.Add(tDetail);
-            break;
-          case CardType.DvbS:
-            if (tDetail.ChannelType == 3)
-            {
-              if (!enableDVBS2 && (tDetail.Pilot > -1 || tDetail.RollOff > -1))
-              {
-                Log.Debug(String.Format(
-                  "Imported channel {0} detected as DVB-S2. Skipped! \n Enable \"DVB-S2 tuning\" option in your TV-Card properties to be able to combine these channels.",
-                  tDetail.Name));
-              }
-              else
-              {
-                result.Add(tDetail);
-              }
-            }
-            break;
-          case CardType.DvbT:
-            if (tDetail.ChannelType == 4)
-              result.Add(tDetail);
-            break;
-          case CardType.DvbIP:
-            if (tDetail.ChannelType == 7)
-              result.Add(tDetail);
-            break;
-          case CardType.RadioWebStream:
-            if (tDetail.ChannelType == 5)
-              result.Add(tDetail);
-            break;
-          default:
-            break;
-        }
-      }
-      return result;
-    }
-
-    private static int GetImageIndex(IList<TuningDetail> tuningDetails)
-    {
-      bool hasFta = false;
-      bool hasScrambled = false;
-      foreach (TuningDetail detail in tuningDetails)
-      {
-        if (detail.FreeToAir)
-        {
-          hasFta = true;
-        }
-        if (!detail.FreeToAir)
-        {
-          hasScrambled = true;
-        }
-      }
-
-      int imageIndex;
-      if (hasFta && hasScrambled)
-      {
-        imageIndex = 2;
-      }
-      else if (hasScrambled)
-      {
-        imageIndex = 1;
-      }
-      else
-      {
-        imageIndex = 0;
-      }
-      return imageIndex;
-    }
   }
 }
\ No newline at end of file
Index: TvEngine3/TVLibrary/SetupTv/Sections/RadioEpgGrabber.cs
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Sections/RadioEpgGrabber.cs	(revision 28196)
+++ TvEngine3/TVLibrary/SetupTv/Sections/RadioEpgGrabber.cs	(working copy)
@@ -21,12 +21,11 @@
 using System;
 using System.Collections.Generic;
 using System.Windows.Forms;
-using TvControl;
-using Gentle.Framework;
 using TvDatabase;
 using TvLibrary.Log;
 using TvLibrary.Interfaces;
 using MediaPortal.UserInterface.Controls;
+using SetupTv.Sections.Helpers;
 
 namespace SetupTv.Sections
 {
@@ -108,139 +107,48 @@
     public override void OnSectionActivated()
     {
       mpListView1.BeginUpdate();
+      base.OnSectionActivated();
+      mpListView1.Items.Clear();
+      List<ListViewItem> items = new List<ListViewItem>();
       try
       {
         LoadLanguages();
         TvBusinessLayer layer = new TvBusinessLayer();
         Setting setting = layer.GetSetting("epgRadioStoreOnlySelected");
         mpCheckBoxStoreOnlySelected.Checked = (setting.Value == "yes");
-        Dictionary<string, CardType> cards = new Dictionary<string, CardType>();
-        IList<Card> dbsCards = Card.ListAll();
-        foreach (Card card in dbsCards)
-        {
-          cards[card.DevicePath] = RemoteControl.Instance.Type(card.IdCard);
-        }
-        base.OnSectionActivated();
-        mpListView1.Items.Clear();
 
-        SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof(Channel));
-        sb.AddOrderByField(true, "sortOrder");
-        SqlStatement stmt = sb.GetStatement(true);
-        IList<Channel> channels = ObjectFactory.GetCollection<Channel>(stmt.Execute());
+        IDictionary<int, IList<ChannelMap>> dChannelMaps = ChannelListHelper.GetDictionaryOfChannelMaps(ChannelType.Radio);
+        IDictionary<int, IList<TuningDetail>> dTuningDetails = ChannelListHelper.GetDictionaryOfTuningDetailsForGroup(-1, ChannelType.Radio);
+        IDictionary<int, CardType> dCardTypes = ChannelListHelper.GetDictionaryOfInstalledCardTypes();
 
+        IList<TuningDetail> tuningDetails;
+        IList<ChannelMap> maps;
+        IList<Channel> channels = ChannelListHelper.GetChannelsOfTypeForGroup(-1, ChannelType.Radio);
         foreach (Channel ch in channels)
         {
-          bool analog = false;
-          bool dvbc = false;
-          bool dvbt = false;
-          bool dvbs = false;
-          bool atsc = false;
-          bool dvbip = false;
-          bool hasFta = false;
-          bool hasScrambled = false;
-          if (ch.IsRadio == false)
+          dTuningDetails.TryGetValue(ch.IdChannel, out tuningDetails);
+
+          if (ChannelListHelper.HasWebstreamTuningDetails(tuningDetails))
             continue;
-          if (ch.IsWebstream())
-            continue;
+          int imageIndex = ChannelListIcons.GetChannelListIconIndex(ch, tuningDetails);
+          ListViewItem item = new ListViewItem(ch.DisplayName, imageIndex);
+          items.Add(item);
 
-          IList<TuningDetail> tuningDetails = ch.ReferringTuningDetail();
-          foreach (TuningDetail detail in tuningDetails)
-          {
-            if (detail.FreeToAir)
-            {
-              hasFta = true;
-            }
-            if (!detail.FreeToAir)
-            {
-              hasScrambled = true;
-            }
-          }
+          dChannelMaps.TryGetValue(ch.IdChannel, out maps);
+          string MappingNames = ChannelListHelper.GetMappingNames(maps, dCardTypes, tuningDetails);
 
-          int imageIndex;
-          if (hasFta && hasScrambled)
-          {
-            imageIndex = 2;
-          }
-          else if (hasScrambled)
-          {
-            imageIndex = 1;
-          }
-          else
-          {
-            imageIndex = 0;
-          }
-
-          ListViewItem item = mpListView1.Items.Add(ch.DisplayName, imageIndex);
-          foreach (ChannelMap map in ch.ReferringChannelMap())
-          {
-            if (cards.ContainsKey(map.ReferencedCard().DevicePath))
-            {
-              CardType type = cards[map.ReferencedCard().DevicePath];
-              switch (type)
-              {
-                case CardType.Analog:
-                  analog = true;
-                  break;
-                case CardType.DvbC:
-                  dvbc = true;
-                  break;
-                case CardType.DvbT:
-                  dvbt = true;
-                  break;
-                case CardType.DvbS:
-                  dvbs = true;
-                  break;
-                case CardType.Atsc:
-                  atsc = true;
-                  break;
-                case CardType.DvbIP:
-                  dvbip = true;
-                  break;
-              }
-            }
-          }
-          string line = "";
-          if (analog)
-          {
-            line += "Analog";
-          }
-          if (dvbc)
-          {
-            if (line != "")
-              line += ",";
-            line += "DVB-C";
-          }
-          if (dvbt)
-          {
-            if (line != "")
-              line += ",";
-            line += "DVB-T";
-          }
-          if (dvbs)
-          {
-            if (line != "")
-              line += ",";
-            line += "DVB-S";
-          }
-          if (atsc)
-          {
-            if (line != "")
-              line += ",";
-            line += "ATSC";
-          }
-          if (dvbip)
-          {
-            if (line != "")
-              line += ",";
-            line += "DVB-IP";
-          }
-          item.SubItems.Add(line);
+          item.SubItems.Add(MappingNames);
           item.Checked = ch.GrabEpg;
           item.Tag = ch;
         }
       }
+      catch (Exception exp)
+      {
+        Log.Error("SetupTV.RadioEpgGrabber.OnSectionActivated error: {0}", exp.StackTrace);
+      }
       finally
       {
+        mpListView1.Items.AddRange(items.ToArray());
         mpListView1.EndUpdate();
       }
     }
@@ -401,7 +309,7 @@
         TvBusinessLayer layer = new TvBusinessLayer();
         Setting setting = layer.GetSetting("radioLanguages");
         setting.Value = ",";
-        Log.WriteFile("tvsetup:epggrabber:none: epglang={0}", setting.Value);
+        Log.WriteFile("tvsetup:epgradiograbber:none: epglang={0}", setting.Value);
         setting.Persist();
       }
       finally
Index: TvEngine3/TVLibrary/SetupTv/Sections/TestChannels.cs
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Sections/TestChannels.cs	(revision 28196)
+++ TvEngine3/TVLibrary/SetupTv/Sections/TestChannels.cs	(working copy)
@@ -120,7 +120,7 @@
     ///   Splits a <see cref = "List{T}" /> into multiple chunks.
     /// </summary>
     /// <typeparam name = "T"></typeparam>
-    /// <param name = "list">The list to be chunked.</param>
+    /// <param name = "source">The list to be chunked.</param>
     /// <param name = "chunkSize">The size of each chunk.</param>
     /// <returns>A list of chunks.</returns>
     public static List<List<T>> SplitIntoChunks<T>(List<T> source, int chunkSize)
Index: TvEngine3/TVLibrary/SetupTv/Sections/TestService.cs
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Sections/TestService.cs	(revision 28196)
+++ TvEngine3/TVLibrary/SetupTv/Sections/TestService.cs	(working copy)
@@ -24,10 +24,10 @@
 using System.Windows.Forms;
 using TvControl;
 using TvDatabase;
-using TvLibrary.Interfaces;
 using TvLibrary.Log;
 using Gentle.Framework;
 using SetupControls;
+using SetupTv.Sections.Helpers;
 
 namespace SetupTv.Sections
 {
@@ -53,7 +53,6 @@
       DoubleBuffered = true;
     }
 
-
     public override void OnSectionActivated()
     {
       _cards = Card.ListAll();
@@ -539,7 +538,6 @@
       MessageBox.Show("EPG grabber will restart in a few seconds..");
     }
 
-
     /// <summary>
     /// returns the virtualcard which is timeshifting the channel specified
     /// </summary>
@@ -604,92 +602,56 @@
 
     private void comboBoxGroups_SelectedIndexChanged(object sender, EventArgs e)
     {
+      Cursor.Current = Cursors.WaitCursor;
+
       ComboBoxExItem idItem = (ComboBoxExItem)comboBoxGroups.Items[comboBoxGroups.SelectedIndex];
+
+      mpComboBoxChannels.BeginUpdate();
       mpComboBoxChannels.Items.Clear();
+
+      IDictionary<int, IList<TuningDetail>> dTuningDetails = ChannelListHelper.GetDictionaryOfTuningDetailsForGroup(idItem.Id, ChannelType.Tv);
+      IDictionary<int, Channel> dChannels = ChannelListHelper.GetDictionaryOfChannelsForGroup(idItem.Id, ChannelType.Tv);
+      List<ComboBoxExItem> items = new List<ComboBoxExItem>();
+      IList<TuningDetail> tuningDetails;
+      int imageIndex = 0;
+
       if (idItem.Id == -1)
       {
-        SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (Channel));
-        sb.AddOrderByField(true, "sortOrder");
-        SqlStatement stmt = sb.GetStatement(true);
-        IList<Channel> channels = ObjectFactory.GetCollection<Channel>(stmt.Execute());
-        foreach (Channel ch in channels)
+        IList<Channel> channels = Channel.ListAll();
+        foreach (Channel channel in channels)
         {
-          if (ch.IsTv == false) continue;
-          bool hasFta = false;
-          bool hasScrambled = false;
-          IList<TuningDetail> tuningDetails = ch.ReferringTuningDetail();
-          foreach (TuningDetail detail in tuningDetails)
-          {
-            if (detail.FreeToAir)
-            {
-              hasFta = true;
-            }
-            if (!detail.FreeToAir)
-            {
-              hasScrambled = true;
-            }
-          }
+          if (!channel.IsTv) 
+            continue;
 
-          int imageIndex;
-          if (hasFta && hasScrambled)
-          {
-            imageIndex = 5;
-          }
-          else if (hasScrambled)
-          {
-            imageIndex = 4;
-          }
-          else
-          {
-            imageIndex = 3;
-          }
-          ComboBoxExItem item = new ComboBoxExItem(ch.DisplayName, imageIndex, ch.IdChannel);
-
-          mpComboBoxChannels.Items.Add(item);
+          dTuningDetails.TryGetValue(channel.IdChannel, out tuningDetails);
+          imageIndex = ChannelListIcons.GetChannelListIconIndex(channel, tuningDetails);
+          ComboBoxExItem item = new ComboBoxExItem(channel.DisplayName, imageIndex, channel.IdChannel);
+          items.Add(item);
         }
       }
       else
       {
         ChannelGroup group = ChannelGroup.Retrieve(idItem.Id);
         IList<GroupMap> maps = group.ReferringGroupMap();
+        Channel channel;
+
         foreach (GroupMap map in maps)
         {
-          Channel ch = map.ReferencedChannel();
-          if (ch.IsTv == false) continue;
-          bool hasFta = false;
-          bool hasScrambled = false;
-          IList<TuningDetail> tuningDetails = ch.ReferringTuningDetail();
-          foreach (TuningDetail detail in tuningDetails)
+          if (dChannels.TryGetValue(map.IdChannel, out channel))
           {
-            if (detail.FreeToAir)
-            {
-              hasFta = true;
-            }
-            if (!detail.FreeToAir)
-            {
-              hasScrambled = true;
-            }
+            dTuningDetails.TryGetValue(channel.IdChannel, out tuningDetails);
+            imageIndex = ChannelListIcons.GetChannelListIconIndex(channel, tuningDetails);
+            ComboBoxExItem item = new ComboBoxExItem(channel.DisplayName, imageIndex, channel.IdChannel);
+            items.Add(item);
           }
-
-          int imageIndex;
-          if (hasFta && hasScrambled)
-          {
-            imageIndex = 5;
-          }
-          else if (hasScrambled)
-          {
-            imageIndex = 4;
-          }
-          else
-          {
-            imageIndex = 3;
-          }
-          ComboBoxExItem item = new ComboBoxExItem(ch.DisplayName, imageIndex, ch.IdChannel);
-          mpComboBoxChannels.Items.Add(item);
         }
       }
+
+      mpComboBoxChannels.Items.AddRange(items.ToArray());
+      mpComboBoxChannels.EndUpdate();
       if (mpComboBoxChannels.Items.Count > 0)
         mpComboBoxChannels.SelectedIndex = 0;
+      Cursor.Current = Cursors.Default;
     }
   }
 }
\ No newline at end of file
Index: TvEngine3/TVLibrary/SetupTv/Sections/TvChannelMapping.cs
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Sections/TvChannelMapping.cs	(revision 28196)
+++ TvEngine3/TVLibrary/SetupTv/Sections/TvChannelMapping.cs	(working copy)
@@ -22,11 +22,10 @@
 using System.Collections.Generic;
 using System.Windows.Forms;
 using TvControl;
-using Gentle.Framework;
 using TvDatabase;
 using TvLibrary.Interfaces;
 using MediaPortal.UserInterface.Controls;
-using TvLibrary.Log;
+using SetupTv.Sections.Helpers;
 
 namespace SetupTv.Sections
 {
@@ -52,17 +51,16 @@
       }
     }
 
-    public TvChannelMapping()
-      : this("TV Mapping") {}
-
     private readonly MPListViewStringColumnSorter lvwColumnSorter1;
     private readonly MPListViewStringColumnSorter lvwColumnSorter2;
 
+    public TvChannelMapping()
+      : this("TV Mapping") {}
+
     public TvChannelMapping(string name)
       : base(name)
     {
       InitializeComponent();
-      //mpListViewChannels.ListViewItemSorter = new MPListViewSortOnColumn(1);
       lvwColumnSorter1 = new MPListViewStringColumnSorter();
       lvwColumnSorter1.Order = SortOrder.Ascending;
       mpListViewChannels.ListViewItemSorter = lvwColumnSorter1;
@@ -107,7 +105,7 @@
           mpListViewChannels.Items.Remove(item);
           string displayName = channel.DisplayName;
           if (mpCheckBoxMapForEpgOnly.Checked)
-            displayName = channel.DisplayName + " (EPG Only)";
+            displayName += " (EPG Only)";
           ListViewItem newItem = mpListViewMapped.Items.Add(displayName, item.ImageIndex);
           newItem.Tag = map;
         }
@@ -119,7 +117,6 @@
         mpListViewChannels.EndUpdate();
         mpListViewMapped.EndUpdate();
       }
-      //DatabaseManager.Instance.SaveChanges();
     }
 
     private void mpButtonUnmap_Click(object sender, EventArgs e)
@@ -153,58 +150,46 @@
         mpListViewChannels.EndUpdate();
         mpListViewMapped.EndUpdate();
       }
-      // DatabaseManager.Instance.SaveChanges();
     }
 
     private void mpComboBoxCard_SelectedIndexChanged(object sender, EventArgs e)
     {
-      //DatabaseManager.Instance.SaveChanges();
-
+      Application.UseWaitCursor = true;
       mpListViewChannels.BeginUpdate();
       mpListViewMapped.BeginUpdate();
       try
       {
-        mpListViewMapped.Items.Clear();
         mpListViewChannels.Items.Clear();
+        mpListViewMapped.Items.Clear();
 
-        SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (Channel));
-        sb.AddOrderByField(true, "sortOrder");
-        SqlStatement stmt = sb.GetStatement(true);
-        IList<Channel> channels = ObjectFactory.GetCollection<Channel>(stmt.Execute());
-
         Card card = ((CardInfo)mpComboBoxCard.SelectedItem).Card;
-        IList<ChannelMap> maps = card.ReferringChannelMap();
 
-        // get cardtype, dvb, analogue etc.		
+        IList<Channel> channels = ChannelListHelper.GetChannelsOfTypeForGroup(-1, ChannelType.Tv);
+
+        // get cardtype - dvb, analogue etc.
         CardType cardType = RemoteControl.Instance.Type(card.IdCard);
-        //Card card = Card.Retrieve(card.IdCard);
+
         TvBusinessLayer layer = new TvBusinessLayer();
         bool enableDVBS2 = (layer.GetSetting("dvbs" + card.IdCard + "enabledvbs2", "false").Value == "true");
 
-
         List<ListViewItem> items = new List<ListViewItem>();
+
+        IDictionary<int, Channel> dChannels = ChannelListHelper.GetDictionaryOfChannelsForGroup(-1, ChannelType.Tv);
+        IDictionary<int, IList<TuningDetail>> dDetails = ChannelListHelper.GetDictionaryOfTuningDetailsForGroup(-1, ChannelType.Tv);
+        IList<ChannelMap> maps = card.ReferringChannelMap();
         foreach (ChannelMap map in maps)
         {
           Channel channel = null;
-          try
-          {
-            channel = map.ReferencedChannel();
-          }
-          catch (Exception) {}
-          if (channel == null)
+          if (!dChannels.TryGetValue(map.IdChannel, out channel))
             continue;
-          if (channel.IsTv == false)
-            continue;
 
-
-          List<TuningDetail> tuningDetails = GetTuningDetailsByCardType(channel, cardType, enableDVBS2);
-          bool foundValidTuningDetail = tuningDetails.Count > 0;
-          if (foundValidTuningDetail)
+          List<TuningDetail> tuningDetails = ChannelListHelper.GetTuningDetailsByCardType(channel, dDetails, cardType, enableDVBS2);
+          if (tuningDetails.Count > 0)
           {
-            int imageIndex = GetImageIndex(tuningDetails);
             string displayName = channel.DisplayName;
             if (map.EpgOnly)
-              displayName = channel.DisplayName + " (EPG Only)";
+              displayName += " (EPG Only)";
+            int imageIndex = ChannelListIcons.GetChannelListIconIndex(channel, tuningDetails);
             ListViewItem item = new ListViewItem(displayName, imageIndex);
             item.Tag = map;
             items.Add(item);
@@ -220,22 +205,18 @@
             }
           }
           else
-          {
             map.Delete();
-          }
         }
         mpListViewMapped.Items.AddRange(items.ToArray());
+
         items = new List<ListViewItem>();
         foreach (Channel channel in channels)
         {
-          if (channel.IsTv == false)
-            continue;
-          List<TuningDetail> tuningDetails = GetTuningDetailsByCardType(channel, cardType, enableDVBS2);
+          List<TuningDetail> tuningDetails = ChannelListHelper.GetTuningDetailsByCardType(channel, dDetails, cardType, enableDVBS2);
           // only add channel that is tuneable on the device selected.
-          bool foundValidTuningDetail = tuningDetails.Count > 0;
-          if (foundValidTuningDetail)
+          if (tuningDetails.Count > 0)
           {
-            int imageIndex = GetImageIndex(tuningDetails);
+            int imageIndex = ChannelListIcons.GetChannelListIconIndex(channel, tuningDetails); 
             ListViewItem item = new ListViewItem(channel.DisplayName, imageIndex);
             item.Tag = channel;
             items.Add(item);
@@ -248,6 +229,7 @@
       {
         mpListViewChannels.EndUpdate();
         mpListViewMapped.EndUpdate();
+        Application.UseWaitCursor = false;
       }
     }
 
@@ -310,90 +292,5 @@
       }
       map.Persist();
     }
-
-    private static List<TuningDetail> GetTuningDetailsByCardType(Channel channel, CardType cardType, bool enableDVBS2)
-    {
-      List<TuningDetail> result = new List<TuningDetail>();
-      foreach (TuningDetail tDetail in channel.ReferringTuningDetail())
-      {
-        switch (cardType)
-        {
-          case CardType.Analog:
-            if (tDetail.ChannelType == 0)
-              result.Add(tDetail);
-            break;
-          case CardType.Atsc:
-            if (tDetail.ChannelType == 1)
-              result.Add(tDetail);
-            break;
-          case CardType.DvbC:
-            if (tDetail.ChannelType == 2)
-              result.Add(tDetail);
-            break;
-          case CardType.DvbS:
-            if (tDetail.ChannelType == 3)
-            {
-              if (!enableDVBS2 && (tDetail.Pilot > -1 || tDetail.RollOff > -1))
-              {
-                Log.Debug(String.Format(
-                  "Imported channel {0} detected as DVB-S2. Skipped! \n Enable \"DVB-S2 tuning\" option in your TV-Card properties to be able to map these channels.",
-                  tDetail.Name));
-              }
-              else
-              {
-                result.Add(tDetail);
-              }
-            }
-            break;
-          case CardType.DvbT:
-            if (tDetail.ChannelType == 4)
-              result.Add(tDetail);
-            break;
-          case CardType.DvbIP:
-            if (tDetail.ChannelType == 7)
-              result.Add(tDetail);
-            break;
-          case CardType.RadioWebStream:
-            if (tDetail.ChannelType == 5)
-              result.Add(tDetail);
-            break;
-          default:
-            break;
-        }
-      }
-      return result;
-    }
-
-    private static int GetImageIndex(IList<TuningDetail> tuningDetails)
-    {
-      bool hasFta = false;
-      bool hasScrambled = false;
-      foreach (TuningDetail detail in tuningDetails)
-      {
-        if (detail.FreeToAir)
-        {
-          hasFta = true;
-        }
-        if (!detail.FreeToAir)
-        {
-          hasScrambled = true;
-        }
-      }
-
-      int imageIndex;
-      if (hasFta && hasScrambled)
-      {
-        imageIndex = 5;
-      }
-      else if (hasScrambled)
-      {
-        imageIndex = 4;
-      }
-      else
-      {
-        imageIndex = 3;
-      }
-      return imageIndex;
-    }
   }
 }
\ No newline at end of file
Index: TvEngine3/TVLibrary/SetupTv/Sections/TvChannelMapping.Designer.cs
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Sections/TvChannelMapping.Designer.cs	(revision 28196)
+++ TvEngine3/TVLibrary/SetupTv/Sections/TvChannelMapping.Designer.cs	(working copy)
@@ -72,7 +72,7 @@
       this.tabControl1.Name = "tabControl1";
       this.tabControl1.SelectedIndex = 0;
       this.tabControl1.Size = new System.Drawing.Size(454, 392);
-      this.tabControl1.TabIndex = 18;
+      this.tabControl1.TabIndex = 0;
       // 
       // tabPage1
       // 
@@ -103,7 +103,7 @@
       this.mpCheckBoxMapForEpgOnly.Location = new System.Drawing.Point(6, 343);
       this.mpCheckBoxMapForEpgOnly.Name = "mpCheckBoxMapForEpgOnly";
       this.mpCheckBoxMapForEpgOnly.Size = new System.Drawing.Size(355, 17);
-      this.mpCheckBoxMapForEpgOnly.TabIndex = 27;
+      this.mpCheckBoxMapForEpgOnly.TabIndex = 6;
       this.mpCheckBoxMapForEpgOnly.Text = "Perform mapping for EPG grabbing only (you can also use doubleclick)";
       this.mpCheckBoxMapForEpgOnly.UseVisualStyleBackColor = true;
       // 
@@ -122,7 +122,7 @@
       this.mpButtonUnmap.Location = new System.Drawing.Point(211, 103);
       this.mpButtonUnmap.Name = "mpButtonUnmap";
       this.mpButtonUnmap.Size = new System.Drawing.Size(27, 23);
-      this.mpButtonUnmap.TabIndex = 25;
+      this.mpButtonUnmap.TabIndex = 4;
       this.mpButtonUnmap.Text = "<<";
       this.mpButtonUnmap.UseVisualStyleBackColor = true;
       this.mpButtonUnmap.Click += new System.EventHandler(this.mpButtonUnmap_Click);
@@ -132,7 +132,7 @@
       this.mpButtonMap.Location = new System.Drawing.Point(211, 74);
       this.mpButtonMap.Name = "mpButtonMap";
       this.mpButtonMap.Size = new System.Drawing.Size(27, 23);
-      this.mpButtonMap.TabIndex = 24;
+      this.mpButtonMap.TabIndex = 3;
       this.mpButtonMap.Text = ">>";
       this.mpButtonMap.UseVisualStyleBackColor = true;
       this.mpButtonMap.Click += new System.EventHandler(this.mpButtonMap_Click);
@@ -145,7 +145,7 @@
       this.mpLabel3.Location = new System.Drawing.Point(250, 32);
       this.mpLabel3.Name = "mpLabel3";
       this.mpLabel3.Size = new System.Drawing.Size(131, 13);
-      this.mpLabel3.TabIndex = 23;
+      this.mpLabel3.TabIndex = 0;
       this.mpLabel3.Text = "Channels mapped to card:";
       // 
       // mpListViewMapped
@@ -163,11 +163,11 @@
       this.mpListViewMapped.Name = "mpListViewMapped";
       this.mpListViewMapped.Size = new System.Drawing.Size(193, 290);
       this.mpListViewMapped.SmallImageList = this.imageList1;
-      this.mpListViewMapped.TabIndex = 22;
+      this.mpListViewMapped.TabIndex = 5;
       this.mpListViewMapped.UseCompatibleStateImageBehavior = false;
       this.mpListViewMapped.View = System.Windows.Forms.View.Details;
+      this.mpListViewMapped.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.mpListViewMapped_ColumnClick);
       this.mpListViewMapped.DoubleClick += new System.EventHandler(this.mpListViewMapped_DoubleClick);
-      this.mpListViewMapped.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.mpListViewMapped_ColumnClick);
       // 
       // columnHeader2
       // 
@@ -180,7 +180,7 @@
       this.mpLabel2.Location = new System.Drawing.Point(0, 32);
       this.mpLabel2.Name = "mpLabel2";
       this.mpLabel2.Size = new System.Drawing.Size(99, 13);
-      this.mpLabel2.TabIndex = 21;
+      this.mpLabel2.TabIndex = 0;
       this.mpLabel2.Text = "Available channels:";
       // 
       // mpListViewChannels
@@ -197,7 +197,7 @@
       this.mpListViewChannels.Name = "mpListViewChannels";
       this.mpListViewChannels.Size = new System.Drawing.Size(193, 290);
       this.mpListViewChannels.SmallImageList = this.imageList1;
-      this.mpListViewChannels.TabIndex = 20;
+      this.mpListViewChannels.TabIndex = 2;
       this.mpListViewChannels.UseCompatibleStateImageBehavior = false;
       this.mpListViewChannels.View = System.Windows.Forms.View.Details;
       this.mpListViewChannels.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.mpListViewChannels_ColumnClick);
@@ -213,7 +213,7 @@
       this.mpLabel1.Location = new System.Drawing.Point(42, 9);
       this.mpLabel1.Name = "mpLabel1";
       this.mpLabel1.Size = new System.Drawing.Size(32, 13);
-      this.mpLabel1.TabIndex = 19;
+      this.mpLabel1.TabIndex = 0;
       this.mpLabel1.Text = "Card:";
       // 
       // mpComboBoxCard
@@ -225,7 +225,7 @@
       this.mpComboBoxCard.Location = new System.Drawing.Point(80, 6);
       this.mpComboBoxCard.Name = "mpComboBoxCard";
       this.mpComboBoxCard.Size = new System.Drawing.Size(360, 21);
-      this.mpComboBoxCard.TabIndex = 18;
+      this.mpComboBoxCard.TabIndex = 1;
       this.mpComboBoxCard.SelectedIndexChanged += new System.EventHandler(this.mpComboBoxCard_SelectedIndexChanged);
       // 
       // mpLabelChannelCount
@@ -234,7 +234,7 @@
       this.mpLabelChannelCount.Location = new System.Drawing.Point(13, 14);
       this.mpLabelChannelCount.Name = "mpLabelChannelCount";
       this.mpLabelChannelCount.Size = new System.Drawing.Size(0, 13);
-      this.mpLabelChannelCount.TabIndex = 2;
+      this.mpLabelChannelCount.TabIndex = 0;
       // 
       // TvChannelMapping
       // 
Index: TvEngine3/TVLibrary/SetupTv/Sections/TvChannelMapping.resx
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Sections/TvChannelMapping.resx	(revision 28196)
+++ TvEngine3/TVLibrary/SetupTv/Sections/TvChannelMapping.resx	(working copy)
@@ -122,147 +122,146 @@
   </metadata>
   <data name="imageList1.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
     <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
         LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
-        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADC
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACS
         HgAAAk1TRnQBSQFMAgEBBgEAAQwBAAEMAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
-        AwABIAMAAQEBAAEgBgABICIAAwkBDAE/Aj0BbAFXAj8BugFdAjMB0gFcAjcBzAFWAkABtAE6AjgBYAMC
-        AQMQABD/A/MB/wOTAf8DRAH/AywB/wMyAf8DSgH/A58B/wP8Ef+MAAFGAkEBfwMbAf8DRAH/A1cB/wNe
-        Af8DXgH/A1YB/wM/Af8DGAH/AUACPQFvDAAM/wOFAf8DDgH/AzcB/wNKAf8DUQH/A1EB/wNJAf8DMgH/
-        AwsB/wOUDf+IAAFMAkMBkgNIAf8CVwFdAf8CFgFkAf8CDQGBAf8CDQGZAf8CDQGVAf8CDgGBAf8CGwFf
-        Af8DYQH/A0MB/wFIAkMBhQgACP8DeQH/AzsB/wFLAVEBSgH/ARUBZAEKAf8BEwGTAQIB/wEWAbMBAQH/
-        AgABlQH/AgEBeAH/Ag4BUgH/A1QB/wM2Af8Dhgn/hAABRAJAAXsDUQH/AkEBWAH/Ag0BgwH/Ag0BuAH/
-        Ag0B5AH/Ag0C/wINAfwB/wINAeAB/wINAbcB/wIOAYEB/wJOAV0B/wNMAf8BOgI4AWAEAAT/A5UB/wNE
-        Af8BNwFPATQB/wETAZkBAgH/ARYBtQEBAf8BGAG+AQEB/wEZAcsBAQH/AgAB/AH/AgAB4AH/AgABtwH/
-        AgEBdAH/AkEBUAH/Az8B/wOtBf+AAAMJAQwDPwH/Al4BYAH/Ag0BgQH/Ag0BwwH/Ag0C/wINAv8CDQFQ
-        Af8CDQGIAf8CDQL/Ag0C/wINAcAB/wIPAXkB/wNaAf8BWwI4AcsEAAP1Af8DMgH/AVEBUwFRAf8BEwGQ
-        AQIB/wEXAbYBAQH/ARgBxAEBAf8BGgHPAQEB/wEGATgBAAH/AgABiAH/AgAC/wIAAv8CAAHAAf8CAgFs
-        Af8DTQH/A2EF/4AAATwCOgFmA1oB/wIYAV8B/wINAbIB/wINAv8CDQL/Ag0C/wINAVAB/wINAYgB/wIN
-        Av8CDQL/Ag0C/wISAbEB/wIjAVcB/wNgAf8DLgFIA7IB/wNNAf8BFgFeAQwB/wEWAbUBAQH/ARgBwgEB
-        Af8BGgHPAQEB/wEbAdYBAQH/AQYBOQEAAf8CAAGIAf8CAAL/AgAC/wIAAv8CBQGxAf8CFgFKAf8DUwH/
-        A8sB/4AAAVcCQQG3A2AB/wIOAYEB/wINAeQB/wINAv8CDQL/Ag0C/wINAVAB/wINAYgB/wINAv8CDQL/
-        Ag0C/wIiAdYB/wIQAXoB/wNnAf8BTQJDAZMDgQH/A1MB/wEUAZABAwH/ARcBugEBAf8BGQHLAQEB/wEa
-        AdQBAQH/ARsB2gEBAf8BBwE7AQAB/wIAAYgB/wIAAv8CAAL/AgAC/wIVAdYB/wIDAW0B/wNaAf8DoQH/
-        gAABXwItAdsDYgH/Ag4BkgH/Ah8B/AH/Ag0C/wINAv8CDQL/Ag0BUAH/Ag0BiAH/Ag0C/wINAv8CGgL/
-        Aj0B7AH/Ag0BhAH/A2kB/wFWAkABtAN1Af8DVQH/ARYBqgEDAf8BKQHHARQB/wEaAdEBAQH/ARsB2AEB
-        Af8BHAHfAQEB/wEHATwBAAH/AgABiAH/AgAC/wIAAv8CDQL/AjAB7AH/AgABhAH/A1wB/wObAf+AAAFj
-        Ai0B2wNkAf8CGwGBAf8CRwH4Af8CJQL/Ag0C/wINAv8CDQFQAf8CDQGIAf8CDQL/Ah4C/wJGAv8CRwHp
-        Af8CDQGBAf8DbAH/AVYCQAG0A4YB/wNXAf8BHgGFAQ8B/wFOAdMBPAH/ATAB2QEaAf8BGwHbAQEB/wEc
-        AeIBAgH/AQcBPAEAAf8CAAGIAf8CAAL/AhEC/wI5Av8COgHpAf8CAAGBAf8DXwH/A6oB/4AAAVYCQAG0
-        A2kB/wIbAWkB/wJBAbkB/wJPAv8CQgL/AjAC/wISAVAB/wIdAYgB/wI+Av8CTQL/AlMC/wI6AdIB/wIQ
-        AXMB/wN5Af8BTQJDAZMDpwH/A1wB/wEZAWkBDwH/AUQBrAE2Af8BVwHiAUMB/wFMAeYBNwH/ATwB6AEm
-        Af8BDAE8AQYB/wIQAYgB/wIxAv8CQAL/AkYC/wItAdIB/wIDAWYB/wNsAf8DwAH/gAABPAI6AWYDgAH/
-        AiUBRQH/AjIBgQH/AkoB3QH/Aw0B/wMfAf8DLAH/AysB/wMZAf8DDQH/AlMC/wIfAaoB/wIpAVMB/wOG
-        Af8DLgFIA9YB/wNxAf8BHQE+ARkB/wExAYQBJgH/AU4BxgE9Af8DAAH/AxIB/wMfAf8DHgH/AwwB/wMA
-        Af8CRgL/AhIBqgH/AhwBRgH/A4YB/wPiAf+AAAMHAQkDnQH/AmYBZwH/AiQBVQH/AjQBkwH/AlMC/wJT
-        Av8CUwL/AlMC/wJTAv8CUAH6Af8CLAG5Af8CDwFyAf8DagH/AVwCOwHFBAAD/AH/A50B/wFZAVoBWQH/
-        AR4BUQEXAf8BNQGYASgB/wFbAesBSAH/AVoB5gFHAf8BWgHiAUcB/wJGAv8CRgL/AkMB+gH/Ah8BuQH/
-        AgIBZQH/A10B/wO5Bf+EAAFEAkABewOXAf8CUgFUAf8CIwFMAf8CMgF5Af8COgGbAf8CRgHiAf8CRAHj
-        Af8CNgHFAf8CHgGpAf8CEAFkAf8CXgFjAf8DoQH/ATcCNgFaBAAE/wPcAf8DlwH/AUUBRwFFAf8BHAFG
-        ARcB/wEuAXMBJQH/ATsBmQEuAf8BSwHQAToB/wI3AeMB/wIpAcUB/wIRAakB/wIDAVcB/wJRAVYB/wOh
-        Af8D5AX/iAABTAJEAZADngH/A20B/wIqAT8B/wISAWcB/wIOAYEB/wINAYEB/wIQAWoB/wIoAU4B/wNq
-        Af8DqAH/AUgCQwGECAAI/wPcAf8DngH/A2AB/wEgATYBHQH/ARIBaAEGAf8BEwGNAQIB/wIAAXYB/wID
-        AV0B/wIbAUEB/wNdAf8DqAH/A9wJ/4wAAUQCQAF7A8IB/wOKAf8DeQH/A3MB/wN1Af8DewH/A48B/wO/
-        Af8BPwI9AWwMAAz/A+cB/wPCAf8DigH/A2wB/wNmAf8DaAH/A24B/wOPAf8DvwH/A+cN/5AAAwcBCQE/
-        Aj0BbAFYAj8BugFfAjMB0gFeAjcBzAFWAkIBsQE4AjcBXQMCAQMQABD/A/4B/wPtAf8D3gH/A9kB/wPZ
-        Af8D3gH/A+0B/wP+Ef+QAAMJAQwBPwI9AWwBVwI/AboBXQIzAdIBXAI3AcwBVgJAAbQBOgI4AWADAgED
-        IAADCQEMAT8CPQFsAVcCPwG6AV0CMwHSAVwCNwHMAVYCQAG0AToCOAFgAwIBAxAAEP8D8wH/A5MB/wNE
-        Af8DLAH/AzIB/wNKAf8DnwH/A/wR/xAAAwkBDAE/Aj0BbAFXAj8BugFdAjMB0gFcAjcBzAFWAkABtAE6
-        AjgBYAMCAQMcAAFGAkEBfwMbAf8DRAH/A1cB/wNeAf8DXgH/A1YB/wM/Af8DGAH/AUACPQFvGAABRgJB
-        AX8DGwH/A0QB/wNXAf8DXgH/A14B/wNWAf8DPwH/AxgB/wFAAj0BbwwADP8DhQH/Aw4B/wM3Af8DSgH/
-        A1EB/wNRAf8DSQH/AzIB/wMLAf8DlA3/DAABRgJBAX8DGwH/A0QB/wNXAf8DXgH/A14B/wNWAf8DPwH/
-        AxgB/wFAAj0BbxQAAUwCQwGSA0gB/wFYAV4BVwH/ASIBcQEXAf8BIAGTAQ8B/wEjAbMBDgH/ASIBrwEO
-        Af8BIAGNARAB/wElAWsBHAH/A2EB/wNDAf8BSAJDAYUQAAFMAkMBkgNIAf8CVwFdAf8CFgFkAf8CDQGB
-        Af8CDQGZAf8CDQGVAf8CDgGBAf8CGwFfAf8DYQH/A0MB/wFIAkMBhQgACP8DeQH/AzsB/wFLAVEBSgH/
-        ARUBZAEKAf8BEwGTAQIB/wEWAbMBAQH/AgABlQH/AgEBeAH/Ag4BUgH/A1QB/wM2Af8Dhgn/CAABTAJD
-        AZIDSAH/AVgBXgFXAf8BIgFxARcB/wEgAZMBDwH/ASMBswEOAf8BIgGvAQ4B/wEgAY0BEAH/ASUBawEc
-        Af8DYQH/A0MB/wFIAkMBhQwAAUQCQAF7A1EB/wFEAVwBQQH/ASABmQEPAf8BIwG1AQ4B/wElAb4BDgH/
-        ASYBywEOAf8BJwHRAQ4B/wEmAcwBDgH/ASUBwAEOAf8BHwGJAQ8B/wFQAV8BTgH/A0wB/wE6AjgBYAgA
-        AUQCQAF7A1EB/wJBAVgB/wINAYMB/wINAbgB/wINAeQB/wINAv8CDQH8Af8CDQHgAf8CDQG3Af8CDgGB
-        Af8CTgFdAf8DTAH/AToCOAFgBAAE/wOVAf8DRAH/ATcBTwE0Af8BEwGZAQIB/wEWAbUBAQH/ARgBvgEB
-        Af8BGQHLAQEB/wIAAfwB/wIAAeAB/wIAAbcB/wIBAXQB/wJBAVAB/wM/Af8DrQX/BAABRAJAAXsDUQH/
-        AUQBXAFBAf8BIAGZAQ8B/wEjAbUBDgH/ASUBvgEOAf8BJgHLAQ4B/wEnAdEBDgH/ASYBzAEOAf8BJQHA
-        AQ4B/wEfAYkBDwH/AVABXwFOAf8DTAH/AToCOAFgBAADCQEMAz8B/wFeAWABXgH/ASABkAEPAf8BJAG2
-        AQ4B/wEbAYEBDQH/ARABKAENAf8BJwHVAQ4B/wEoAdkBDgH/ARsBgQENAf8BDgEbAQ0B/wEgAZwBDgH/
-        AR8BgQEQAf8DWgH/AVsCOAHLBAADCQEMAz8B/wJeAWAB/wINAYEB/wINAcMB/wINAZkB/wINAS4B/wIN
-        Av8CDQL/Ag0BiAH/Ag0BHQH/Ag0BmgH/Ag8BeQH/A1oB/wFbAjgBywQAA/UB/wMyAf8BUQFTAVEB/wET
-        AZABAgH/ARcBtgEBAf8BDgF1AQAB/wEDARsBAAH/ARoB1QEBAf8CAAL/AgABiAH/AgABEAH/AgABmgH/
-        AgIBbAH/A00B/wNhBf8DCQEMAz8B/wFeAWABXgH/ASABkAEPAf8BJAG2AQ4B/wElAcQBDgH/AScBzwEO
-        Af8BEwFFAQ0B/wEbAYEBDQH/ASgB3gEOAf8BKQHlAQ8B/wElAcMBDgH/AR8BgQEQAf8DWgH/AVsCOAHL
-        BAABPAI6AWYDWgH/ASMBawEZAf8BIwG1AQ4B/wElAcIBDgH/ARwBgQENAf8BEAEpAQ0B/wEoAdsBDgH/
-        ASMBswEOAf8DDQH/ATIBqAEgAf8BKAHYAQ4B/wEpAbsBFAH/ASsBYAEkAf8DYAH/Ay4BSAE8AjoBZgNa
-        Af8CGAFfAf8CDQGyAf8CDQL/Ag0BmQH/Ag0BLgH/Ag0C/wINAcwB/wMNAf8CHgG8Af8CDQL/AhIBsQH/
-        AiMBVwH/A2AB/wMuAUgDsgH/A00B/wEWAV4BDAH/ARYBtQEBAf8BGAHCAQEB/wEPAXsBAAH/AQMBHAEA
-        Af8BGwHbAQEB/wIAAcwB/wMAAf8CEQG8Af8CAAL/AgUBsQH/AhYBSgH/A1MB/wPLAf8BPAI6AWYDWgH/
-        ASMBawEZAf8BIwG1AQ4B/wElAcIBDgH/AScBzwEOAf8BKAHWAQ4B/wETAUYBDQH/ARsBgQEOAf8BKQHk
-        AQ8B/wEpAeABDwH/ASgB2AEOAf8BKQG7ARQB/wErAWABJAH/A2AB/wMuAUgBVwJBAbcDYAH/ASEBkAEQ
-        Af8BJAG6AQ4B/wEmAcsBDgH/ARwBgQENAf8BEAEpAQ0B/wEnAdEBDwH/ARABKgENAf8BIwGBARYB/wEo
-        Ad4BDgH/ASgB1gEOAf8BOQHGASQB/wEgAYEBEQH/A2cB/wFNAkMBkwFXAkEBtwNgAf8CDgGBAf8CDQHk
-        Af8CDQL/Ag0BmQH/Ag0BLgH/Ag0B7gH/Ag0BLgH/AhQBkAH/Ag0C/wINAv8CIgHWAf8CEAF6Af8DZwH/
-        AU0CQwGTA4EB/wNTAf8BFAGQAQMB/wEXAboBAQH/ARkBywEBAf8BDwF+AQAB/wEDARwBAAH/ARoB0QEC
-        Af8CAAEhAf8CBwGQAf8CAAL/AgAC/wIVAdYB/wIDAW0B/wNaAf8DoQH/AVcCQQG3A2AB/wEhAZABEAH/
-        ASQBugEOAf8BJgHLAQ4B/wEnAdQBDgH/ASgB2gEOAf8BFAFIAQ0B/wEbAYEBDgH/ASkB4wEPAf8BKAHe
-        AQ4B/wEoAdYBDgH/ATkBxgEkAf8BIAGBAREB/wNnAf8BTQJDAZMBXwItAdsDYgH/ASMBqgEQAf8BNgHH
-        ASEB/wEnAdEBDgH/AR0BggENAf8DDQH/AyEB/wEWASQBFQH/ARsBgQEOAf8BKAHaAQ4B/wE0AdUBHAH/
-        AVEBzgE/Af8BIAGaAQ4B/wNpAf8BVgJAAbQBXwItAdsDYgH/Ag4BkgH/Ah8B/AH/Ag0C/wINAZkB/wMN
-        Af8DIQH/AhQBJQH/Ag0BiAH/Ag0C/wIaAv8CPQHsAf8CDQGEAf8DaQH/AVYCQAG0A3UB/wNVAf8BFgGq
-        AQMB/wEpAccBFAH/ARoB0QEBAf8BEAGCAQAB/wMAAf8DFAH/AgcBGAH/AgABiAH/AgAC/wINAv8CMAHs
-        Af8CAAGEAf8DXAH/A5sB/wFfAi0B2wNiAf8BIwGqARAB/wE2AccBIQH/AScB0QEOAf8BKAHYAQ4B/wEp
-        Ad8BDgH/ARQBSQENAf8BGwGBAQ4B/wEpAeEBDwH/ASgB2gEOAf8BNAHVARwB/wFRAc4BPwH/ASABmgEO
-        Af8DaQH/AVYCQAG0AWMCLQHbA2QB/wErAYUBHAH/AVsB0wFJAf8BPQHZAScB/wEdAYMBDQH/ATMBTQEv
-        Af8BKQHlAQ8B/wEqAckBEwH/AQ4BGwENAf8BLAGgARsB/wFbAdoBSAH/AVoBzQFIAf8BIAGWAQ4B/wNs
-        Af8BVgJAAbQBYwItAdsDZAH/AhsBgQH/AkcB+AH/AiUC/wINAZkB/wIvAVEB/wINAv8CEQHiAf8CDQEd
-        Af8CGQG7Af8CRgL/AkcB6QH/Ag0BgQH/A2wB/wFWAkABtAOGAf8DVwH/AR4BhQEPAf8BTgHTATwB/wEw
-        AdkBGgH/ARABgwEAAf8BJgFAASIB/wEcAeUBAgH/AgQB4gH/AgABEAH/AgwBuwH/AjkC/wI6AekB/wIA
-        AYEB/wNfAf8DqgH/AWMCLQHbA2QB/wErAYUBHAH/AVsB0wFJAf8BPQHZAScB/wEoAdsBDgH/ASkB4gEP
-        Af8BFAFJAQ0B/wEbAYEBDgH/ASgB3gEOAf8BOAHaASAB/wFbAdoBSAH/AVoBzQFIAf8BIAGWAQ4B/wNs
-        Af8BVgJAAbQBVgJAAbQDaQH/ASYBdgEcAf8BUQGsAUMB/wFkAeIBUAH/AToBigEuAf8BFAErAREB/wE+
-        AeUBJwH/AUEB1AEsAf8BEQEbAQ8B/wFDAYkBOAH/AWYB1wFUAf8BTQHEATsB/wEfAYEBEgH/A3kB/wFN
-        AkMBkwFWAkABtANpAf8CGwFpAf8CQQG5Af8CTwL/AiwBmQH/AhEBLgH/AiQC/wIqAe4B/wIPAR0B/wI3
-        AZ0B/wJTAv8COgHSAf8CEAFzAf8DeQH/AU0CQwGTA6cB/wNcAf8BGQFpAQ8B/wFEAawBNgH/AVcB4gFD
-        Af8BLQGKASEB/wEHAR4BBAH/ATEB5QEaAf8CHQHuAf8CAgEQAf8CKgGdAf8CRgL/Ai0B0gH/AgMBZgH/
-        A2wB/wPAAf8BVgJAAbQDaQH/ASYBdgEcAf8BUQGsAUMB/wFkAeIBUAH/AVkB5gFEAf8BSQHoATMB/wEZ
-        AUkBEwH/ASoBgQEeAf8BVQHgAUAB/wFhAd4BTgH/AWYB1wFUAf8BTQHEATsB/wEfAYEBEgH/A3kB/wFN
-        AkMBkwE8AjoBZgOAAf8BKgFLASYB/wE+AYQBMwH/AWcB5AFUAf8BVAGdAUgB/wM4Af8DJQH/Ay4B/wFP
-        AXIBSgH/AWYB2gFUAf8BZQHRAVQB/wE1AbkBIQH/AS8BWgEqAf8DhgH/Ay4BSAE8AjoBZgOAAf8CJQFF
-        Af8CMgGBAf8CUwL/AkcBqQH/AzgB/wMlAf8DLgH/AkkBewH/AlMC/wJTAv8CHwGqAf8CKQFTAf8DhgH/
-        Ay4BSAPWAf8DcQH/AR0BPgEZAf8BMQGEASYB/wFaAeQBRwH/AUcBnQE7Af8DKwH/AxgB/wMhAf8CPAFu
-        Af8CRgL/AkYC/wISAaoB/wIcAUYB/wOGAf8D4gH/ATwCOgFmA4AB/wEqAUsBJgH/AT4BhAEzAf8BWwHG
-        AUoB/wMNAf8DHwH/AywB/wMrAf8DGQH/Aw0B/wFlAdEBVAH/ATUBuQEhAf8BLwFaASoB/wOGAf8DLgFI
-        AwcBCQOdAf8BZgFnAWYB/wErAV4BJAH/AUIBmAE1Af8BaAHrAVUB/wFnAeYBVAH/AWcB4gFUAf8BZgHf
-        AVQB/wFmAdkBVAH/AWMB0QFSAf8BQAG+AS0B/wEeAYEBEAH/A2oB/wFcAjsBxQQAAwcBCQOdAf8CZgFn
-        Af8CJAFVAf8CNAGTAf8CUwL/AlMC/wJTAv8CUwL/AlMC/wJQAfoB/wIsAbkB/wIPAXIB/wNqAf8BXAI7
-        AcUEAAP8Af8DnQH/AVkBWgFZAf8BHgFRARcB/wE1AZgBKAH/AVsB6wFIAf8BWgHmAUcB/wFaAeIBRwH/
-        AkYC/wJGAv8CQwH6Af8CHwG5Af8CAgFlAf8DXQH/A7kF/wMHAQkDnQH/AWYBZwFmAf8BKwFeASQB/wFC
-        AZgBNQH/AWgB6wFVAf8BZwHmAVQB/wFnAeIBVAH/AWYB3wFUAf8BZgHZAVQB/wFjAdEBUgH/AUABvgEt
-        Af8BHgGBARAB/wNqAf8BXAI7AcUIAAFEAkABewOXAf8BUgFUAVIB/wEpAVMBJAH/ATsBgQEyAf8BSAGZ
-        ATsB/wFYAdABRwH/AVgBzgFFAf8BSQG8ATcB/wEzAbkBHwH/ARwBcwERAf8BXwFkAV4B/wOhAf8BNwI2
-        AVoIAAFEAkABewOXAf8CUgFUAf8CIwFMAf8CMgF5Af8COgGbAf8CRgHiAf8CRAHjAf8CNgHFAf8CHgGp
-        Af8CEAFkAf8CXgFjAf8DoQH/ATcCNgFaBAAE/wPcAf8DlwH/AUUBRwFFAf8BHAFGARcB/wEuAXMBJQH/
-        ATsBmQEuAf8BSwHQAToB/wI3AeMB/wIpAcUB/wIRAakB/wIDAVcB/wJRAVYB/wOhAf8D5AX/BAABRAJA
-        AXsDlwH/AVIBVAFSAf8BKQFTASQB/wE7AYEBMgH/AUgBmQE7Af8BWAHQAUcB/wFYAc4BRQH/AUkBvAE3
-        Af8BMwG5AR8B/wEcAXMBEQH/AV8BZAFeAf8DoQH/ATcCNgFaDAABTAJEAZADngH/A20B/wEtAUMBKgH/
-        AR8BdQETAf8BIAGNAQ8B/wEfAYsBDwH/AR0BeQERAf8BLgFUASgB/wNqAf8DqAH/AUgCQwGEEAABTAJE
-        AZADngH/A20B/wIqAT8B/wISAWcB/wIOAYEB/wINAYEB/wIQAWoB/wIoAU4B/wNqAf8DqAH/AUgCQwGE
-        CAAI/wPcAf8DngH/A2AB/wEgATYBHQH/ARIBaAEGAf8BEwGNAQIB/wIAAXYB/wIDAV0B/wIbAUEB/wNd
-        Af8DqAH/A9wJ/wgAAUwCRAGQA54B/wNtAf8BLQFDASoB/wEfAXUBEwH/ASABjQEPAf8BHwGLAQ8B/wEd
-        AXkBEQH/AS4BVAEoAf8DagH/A6gB/wFIAkMBhBQAAUQCQAF7A8IB/wOKAf8DeQH/A3MB/wN1Af8DewH/
-        A48B/wO/Af8BPwI9AWwYAAFEAkABewPCAf8DigH/A3kB/wNzAf8DdQH/A3sB/wOPAf8DvwH/AT8CPQFs
-        DAAM/wPnAf8DwgH/A4oB/wNsAf8DZgH/A2gB/wNuAf8DjwH/A78B/wPnDf8MAAFEAkABewPCAf8DigH/
-        A3kB/wNzAf8DdQH/A3sB/wOPAf8DvwH/AT8CPQFsHAADBwEJAT8CPQFsAVgCPwG6AV8CMwHSAV4CNwHM
-        AVYCQgGxATgCNwFdAwIBAyAAAwcBCQE/Aj0BbAFYAj8BugFfAjMB0gFeAjcBzAFWAkIBsQE4AjcBXQMC
-        AQMQABD/A/4B/wPtAf8D3gH/A9kB/wPZAf8D3gH/A+0B/wP+Ef8QAAMHAQkBPwI9AWwBWAI/AboBXwIz
-        AdIBXgI3AcwBVgJCAbEBOAI3AV0DAgEDEAABQgFNAT4HAAE+AwABKAMAAUADAAEgAwABAQEAAQEGAAEB
-        FgAD/wEAAfABDwYAAeABBwYAAcABAwYAAYABAQcAAQE3AAEBBgABgAEBBgABwAEDBgAB4AEHBgAB8AEP
-        BgAB8AEPAfABDwIAAfABDwHgAQcB4AEHAgAB4AEHAcABAwHAAQMCAAHAAQMBgAEBAYABAQIAAYABAQEA
-        AQEBAAEBAwABATEAAQEBAAEBAwABAQGAAQEBgAEBAgABgAEBAcABAwHAAQMCAAHAAQMB4AEHAeABBwIA
-        AeABBwHwAQ8B8AEPAgAB8AEPCw==
+        AwABIAMAAQEBAAEgBgABICIAAwoBDAFAAj8BbAFYAkwBugFfAkEB0gFdAkYBzAFXAkwBtAE7AjoBYAQD
+        EAAQ/wPzAf8DkwH/A0UB/wMtAf8DMwH/A0sB/wOfAf8D/BH/jAABRwJFAX8DHAH/A0UB/wNYAf8DXwH/
+        A18B/wNXAf8DQAH/AxkB/wFBAkABbwwADP8DhQH/Aw8B/wM4Af8DSwH/A1IB/wNSAf8DSgH/AzMB/wMM
+        Af8DlA3/iAABTQJKAZIDSQH/AlgBXgH/AhcBZQH/Ag4BgQH/Ag4BmQH/Ag4BlQH/Ag8BgQH/AhwBYAH/
+        A2IB/wNEAf8BSQJIAYUIAAj/A3oB/wM8Af8BTAFSAUsB/wEWAWUBCwH/ARQBkwEDAf8BFwGzAQIB/wIB
+        AZUB/wICAXkB/wIPAVMB/wNVAf8DNwH/A4YJ/4QAAUUCRAF7A1IB/wJCAVkB/wIOAYMB/wIOAbgB/wIO
+        AeQB/wIOAv8CDgH8Af8CDgHgAf8CDgG3Af8CDwGBAf8CTwFeAf8DTQH/ATsCOgFgBAAE/wOVAf8DRQH/
+        ATgBUAE1Af8BFAGZAQMB/wEXAbUBAgH/ARkBvgECAf8BGgHLAQIB/wIBAfwB/wIBAeAB/wIBAbcB/wIC
+        AXUB/wJCAVEB/wNAAf8DrQX/gAADCgEMA0AB/wJfAWEB/wIOAYEB/wIOAcMB/wIOAv8CDgL/Ag4BUQH/
+        Ag4BiAH/Ag4C/wIOAv8CDgHAAf8CEAF6Af8DWwH/AVwCRwHLBAAD9QH/AzMB/wFSAVQBUgH/ARQBkAED
+        Af8BGAG2AQIB/wEZAcQBAgH/ARsBzwECAf8BBwE5AQEB/wIBAYgB/wIBAv8CAQL/AgEBwAH/AgMBbQH/
+        A04B/wNiBf+AAAM9AWYDWwH/AhkBYAH/Ag4BsgH/Ag4C/wIOAv8CDgL/Ag4BUQH/Ag4BiAH/Ag4C/wIO
+        Av8CDgL/AhMBsQH/AiQBWAH/A2EB/wMvAUgDsgH/A04B/wEXAV8BDQH/ARcBtQECAf8BGQHCAQIB/wEb
+        Ac8BAgH/ARwB1gECAf8BBwE6AQEB/wIBAYgB/wIBAv8CAQL/AgEC/wIGAbEB/wIXAUsB/wNUAf8DywH/
+        gAABWAJNAbcDYQH/Ag8BgQH/Ag4B5AH/Ag4C/wIOAv8CDgL/Ag4BUQH/Ag4BiAH/Ag4C/wIOAv8CDgL/
+        AiMB1gH/AhEBewH/A2gB/wFNAksBkwOBAf8DVAH/ARUBkAEEAf8BGAG6AQIB/wEaAcsBAgH/ARsB1AEC
+        Af8BHAHaAQIB/wEIATwBAQH/AgEBiAH/AgEC/wIBAv8CAQL/AhYB1gH/AgQBbgH/A1sB/wOhAf+AAAFh
+        AjwB2wNjAf8CDwGSAf8CIAH8Af8CDgL/Ag4C/wIOAv8CDgFRAf8CDgGIAf8CDgL/Ag4C/wIbAv8CPgHs
+        Af8CDgGEAf8DagH/AVcCTAG0A3YB/wNWAf8BFwGqAQQB/wEqAccBFQH/ARsB0QECAf8BHAHYAQIB/wEd
+        Ad8BAgH/AQgBPQEBAf8CAQGIAf8CAQL/AgEC/wIOAv8CMQHsAf8CAQGEAf8DXQH/A5sB/4AAAWMCPAHb
+        A2UB/wIcAYEB/wJIAfgB/wImAv8CDgL/Ag4C/wIOAVEB/wIOAYgB/wIOAv8CHwL/AkcC/wJIAekB/wIO
+        AYEB/wNtAf8BVwJMAbQDhgH/A1gB/wEfAYUBEAH/AU8B0wE9Af8BMQHZARsB/wEcAdsBAgH/AR0B4gED
+        Af8BCAE9AQEB/wIBAYgB/wIBAv8CEgL/AjoC/wI7AekB/wIBAYEB/wNgAf8DqgH/gAABVwJMAbQDagH/
+        AhwBagH/AkIBuQH/AlAC/wJDAv8CMQL/AhMBUQH/Ah4BiAH/Aj8C/wJOAv8CVAL/AjsB0gH/AhEBdAH/
+        A3oB/wFNAksBkwOnAf8DXQH/ARoBagEQAf8BRQGsATcB/wFYAeIBRAH/AU0B5gE4Af8BPQHoAScB/wEN
+        AT0BBwH/AhEBiAH/AjIC/wJBAv8CRwL/Ai4B0gH/AgQBZwH/A20B/wPAAf+AAAM9AWYDgQH/AiYBRgH/
+        AjMBgQH/AksB3QH/Aw4B/wMgAf8DLQH/AywB/wMaAf8DDgH/AlQC/wIgAaoB/wIqAVQB/wOGAf8DLwFI
+        A9YB/wNyAf8BHgE/ARoB/wEyAYQBJwH/AU8BxgE+Af8DAQH/AxMB/wMgAf8DHwH/Aw0B/wMBAf8CRwL/
+        AhMBqgH/Ah0BRwH/A4YB/wPiAf+AAAMIAQkDnQH/AmcBaAH/AiUBVgH/AjUBkwH/AlQC/wJUAv8CVAL/
+        AlQC/wJUAv8CUQH6Af8CLQG5Af8CEAFzAf8DawH/AVwCSQHFBAAD/AH/A50B/wFaAVsBWgH/AR8BUgEY
+        Af8BNgGYASkB/wFcAesBSQH/AVsB5gFIAf8BWwHiAUgB/wJHAv8CRwL/AkQB+gH/AiABuQH/AgMBZgH/
+        A14B/wO5Bf+EAAFFAkQBewOXAf8CUwFVAf8CJAFNAf8CMwF6Af8COwGbAf8CRwHiAf8CRQHjAf8CNwHF
+        Af8CHwGpAf8CEQFlAf8CXwFkAf8DoQH/AzgBWgQABP8D3AH/A5cB/wFGAUgBRgH/AR0BRwEYAf8BLwF0
+        ASYB/wE8AZkBLwH/AUwB0AE7Af8COAHjAf8CKgHFAf8CEgGpAf8CBAFYAf8CUgFXAf8DoQH/A+QF/4gA
+        AU0CSgGQA54B/wNuAf8CKwFAAf8CEwFoAf8CDwGBAf8CDgGBAf8CEQFrAf8CKQFPAf8DawH/A6gB/wFJ
+        AkgBhAgACP8D3AH/A54B/wNhAf8BIQE3AR4B/wETAWkBBwH/ARQBjQEDAf8CAQF3Af8CBAFeAf8CHAFC
+        Af8DXgH/A6gB/wPcCf+MAAFFAkQBewPCAf8DigH/A3oB/wN0Af8DdgH/A3wB/wOPAf8DvwH/AUACPwFs
+        DAAM/wPnAf8DwgH/A4oB/wNtAf8DZwH/A2kB/wNvAf8DjwH/A78B/wPnDf+QAAMIAQkBQAI/AWwBWAJM
+        AboBXwJBAdIBXQJGAcwBVwJOAbEDOQFdBAMQABD/A/4B/wPtAf8D3gH/A9kB/wPZAf8D3gH/A+0B/wP+
+        Ef+QAAMKAQwBQAI/AWwBWAJMAboBXwJBAdIBXQJGAcwBVwJMAbQBOwI6AWAEAyAAAwoBDAFAAj8BbAFY
+        AkwBugFfAkEB0gFdAkYBzAFXAkwBtAE7AjoBYAQDEAAQ/wPzAf8DkwH/A0UB/wMtAf8DMwH/A0sB/wOf
+        Af8D/BH/EAADCgEMAUACPwFsAVgCTAG6AV8CQQHSAV0CRgHMAVcCTAG0ATsCOgFgBAMcAAFHAkUBfwMc
+        Af8DRQH/A1gB/wNfAf8DXwH/A1cB/wNAAf8DGQH/AUECQAFvGAABRwJFAX8DHAH/A0UB/wNYAf8DXwH/
+        A18B/wNXAf8DQAH/AxkB/wFBAkABbwwADP8DhQH/Aw8B/wM4Af8DSwH/A1IB/wNSAf8DSgH/AzMB/wMM
+        Af8DlA3/DAABRwJFAX8DHAH/A0UB/wNYAf8DXwH/A18B/wNXAf8DQAH/AxkB/wFBAkABbxQAAU0CSgGS
+        A0kB/wFZAV8BWAH/ASMBcgEYAf8BIQGTARAB/wEkAbMBDwH/ASMBrwEPAf8BIQGNAREB/wEmAWwBHQH/
+        A2IB/wNEAf8BSQJIAYUQAAFNAkoBkgNJAf8CWAFeAf8CFwFlAf8CDgGBAf8CDgGZAf8CDgGVAf8CDwGB
+        Af8CHAFgAf8DYgH/A0QB/wFJAkgBhQgACP8DegH/AzwB/wFMAVIBSwH/ARYBZQELAf8BFAGTAQMB/wEX
+        AbMBAgH/AgEBlQH/AgIBeQH/Ag8BUwH/A1UB/wM3Af8Dhgn/CAABTQJKAZIDSQH/AVkBXwFYAf8BIwFy
+        ARgB/wEhAZMBEAH/ASQBswEPAf8BIwGvAQ8B/wEhAY0BEQH/ASYBbAEdAf8DYgH/A0QB/wFJAkgBhQwA
+        AUUCRAF7A1IB/wFFAV0BQgH/ASEBmQEQAf8BJAG1AQ8B/wEmAb4BDwH/AScBywEPAf8BKAHRAQ8B/wEn
+        AcwBDwH/ASYBwAEPAf8BIAGJARAB/wFRAWABTwH/A00B/wE7AjoBYAgAAUUCRAF7A1IB/wJCAVkB/wIO
+        AYMB/wIOAbgB/wIOAeQB/wIOAv8CDgH8Af8CDgHgAf8CDgG3Af8CDwGBAf8CTwFeAf8DTQH/ATsCOgFg
+        BAAE/wOVAf8DRQH/ATgBUAE1Af8BFAGZAQMB/wEXAbUBAgH/ARkBvgECAf8BGgHLAQIB/wIBAfwB/wIB
+        AeAB/wIBAbcB/wICAXUB/wJCAVEB/wNAAf8DrQX/BAABRQJEAXsDUgH/AUUBXQFCAf8BIQGZARAB/wEk
+        AbUBDwH/ASYBvgEPAf8BJwHLAQ8B/wEoAdEBDwH/AScBzAEPAf8BJgHAAQ8B/wEgAYkBEAH/AVEBYAFP
+        Af8DTQH/ATsCOgFgBAADCgEMA0AB/wFfAWEBXwH/ASEBkAEQAf8BJQG2AQ8B/wEcAYEBDgH/AREBKQEO
+        Af8BKAHVAQ8B/wEpAdkBDwH/ARwBgQEOAf8BDwEcAQ4B/wEhAZwBDwH/ASABgQERAf8DWwH/AVwCRwHL
+        BAADCgEMA0AB/wJfAWEB/wIOAYEB/wIOAcMB/wIOAZkB/wIOAS8B/wIOAv8CDgL/Ag4BiAH/Ag4BHgH/
+        Ag4BmgH/AhABegH/A1sB/wFcAkcBywQAA/UB/wMzAf8BUgFUAVIB/wEUAZABAwH/ARgBtgECAf8BDwF2
+        AQEB/wEEARwBAQH/ARsB1QECAf8CAQL/AgEBiAH/AgEBEQH/AgEBmgH/AgMBbQH/A04B/wNiBf8DCgEM
+        A0AB/wFfAWEBXwH/ASEBkAEQAf8BJQG2AQ8B/wEmAcQBDwH/ASgBzwEPAf8BFAFGAQ4B/wEcAYEBDgH/
+        ASkB3gEPAf8BKgHlARAB/wEmAcMBDwH/ASABgQERAf8DWwH/AVwCRwHLBAADPQFmA1sB/wEkAWwBGgH/
+        ASQBtQEPAf8BJgHCAQ8B/wEdAYEBDgH/AREBKgEOAf8BKQHbAQ8B/wEkAbMBDwH/Aw4B/wEzAagBIQH/
+        ASkB2AEPAf8BKgG7ARUB/wEsAWEBJQH/A2EB/wMvAUgDPQFmA1sB/wIZAWAB/wIOAbIB/wIOAv8CDgGZ
+        Af8CDgEvAf8CDgL/Ag4BzAH/Aw4B/wIfAbwB/wIOAv8CEwGxAf8CJAFYAf8DYQH/Ay8BSAOyAf8DTgH/
+        ARcBXwENAf8BFwG1AQIB/wEZAcIBAgH/ARABfAEBAf8BBAEdAQEB/wEcAdsBAgH/AgEBzAH/AwEB/wIS
+        AbwB/wIBAv8CBgGxAf8CFwFLAf8DVAH/A8sB/wM9AWYDWwH/ASQBbAEaAf8BJAG1AQ8B/wEmAcIBDwH/
+        ASgBzwEPAf8BKQHWAQ8B/wEUAUcBDgH/ARwBgQEPAf8BKgHkARAB/wEqAeABEAH/ASkB2AEPAf8BKgG7
+        ARUB/wEsAWEBJQH/A2EB/wMvAUgBWAJNAbcDYQH/ASIBkAERAf8BJQG6AQ8B/wEnAcsBDwH/AR0BgQEO
+        Af8BEQEqAQ4B/wEoAdEBEAH/AREBKwEOAf8BJAGBARcB/wEpAd4BDwH/ASkB1gEPAf8BOgHGASUB/wEh
+        AYEBEgH/A2gB/wFNAksBkwFYAk0BtwNhAf8CDwGBAf8CDgHkAf8CDgL/Ag4BmQH/Ag4BLwH/Ag4B7gH/
+        Ag4BLwH/AhUBkAH/Ag4C/wIOAv8CIwHWAf8CEQF7Af8DaAH/AU0CSwGTA4EB/wNUAf8BFQGQAQQB/wEY
+        AboBAgH/ARoBywECAf8BEAF/AQEB/wEEAR0BAQH/ARsB0QEDAf8CAQEiAf8CCAGQAf8CAQL/AgEC/wIW
+        AdYB/wIEAW4B/wNbAf8DoQH/AVgCTQG3A2EB/wEiAZABEQH/ASUBugEPAf8BJwHLAQ8B/wEoAdQBDwH/
+        ASkB2gEPAf8BFQFJAQ4B/wEcAYEBDwH/ASoB4wEQAf8BKQHeAQ8B/wEpAdYBDwH/AToBxgElAf8BIQGB
+        ARIB/wNoAf8BTQJLAZMBYQI8AdsDYwH/ASQBqgERAf8BNwHHASIB/wEoAdEBDwH/AR4BggEOAf8DDgH/
+        AyIB/wEXASUBFgH/ARwBgQEPAf8BKQHaAQ8B/wE1AdUBHQH/AVIBzgFAAf8BIQGaAQ8B/wNqAf8BVwJM
+        AbQBYQI8AdsDYwH/Ag8BkgH/AiAB/AH/Ag4C/wIOAZkB/wMOAf8DIgH/AhUBJgH/Ag4BiAH/Ag4C/wIb
+        Av8CPgHsAf8CDgGEAf8DagH/AVcCTAG0A3YB/wNWAf8BFwGqAQQB/wEqAccBFQH/ARsB0QECAf8BEQGC
+        AQEB/wMBAf8DFQH/AggBGQH/AgEBiAH/AgEC/wIOAv8CMQHsAf8CAQGEAf8DXQH/A5sB/wFhAjwB2wNj
+        Af8BJAGqAREB/wE3AccBIgH/ASgB0QEPAf8BKQHYAQ8B/wEqAd8BDwH/ARUBSgEOAf8BHAGBAQ8B/wEq
+        AeEBEAH/ASkB2gEPAf8BNQHVAR0B/wFSAc4BQAH/ASEBmgEPAf8DagH/AVcCTAG0AWMCPAHbA2UB/wEs
+        AYUBHQH/AVwB0wFKAf8BPgHZASgB/wEeAYMBDgH/ATQBTgEwAf8BKgHlARAB/wErAckBFAH/AQ8BHAEO
+        Af8BLQGgARwB/wFcAdoBSQH/AVsBzQFJAf8BIQGWAQ8B/wNtAf8BVwJMAbQBYwI8AdsDZQH/AhwBgQH/
+        AkgB+AH/AiYC/wIOAZkB/wIwAVIB/wIOAv8CEgHiAf8CDgEeAf8CGgG7Af8CRwL/AkgB6QH/Ag4BgQH/
+        A20B/wFXAkwBtAOGAf8DWAH/AR8BhQEQAf8BTwHTAT0B/wExAdkBGwH/AREBgwEBAf8BJwFBASMB/wEd
+        AeUBAwH/AgUB4gH/AgEBEQH/Ag0BuwH/AjoC/wI7AekB/wIBAYEB/wNgAf8DqgH/AWMCPAHbA2UB/wEs
+        AYUBHQH/AVwB0wFKAf8BPgHZASgB/wEpAdsBDwH/ASoB4gEQAf8BFQFKAQ4B/wEcAYEBDwH/ASkB3gEP
+        Af8BOQHaASEB/wFcAdoBSQH/AVsBzQFJAf8BIQGWAQ8B/wNtAf8BVwJMAbQBVwJMAbQDagH/AScBdwEd
+        Af8BUgGsAUQB/wFlAeIBUQH/ATsBigEvAf8BFQEsARIB/wE/AeUBKAH/AUIB1AEtAf8BEgEcARAB/wFE
+        AYkBOQH/AWcB1wFVAf8BTgHEATwB/wEgAYEBEwH/A3oB/wFNAksBkwFXAkwBtANqAf8CHAFqAf8CQgG5
+        Af8CUAL/Ai0BmQH/AhIBLwH/AiUC/wIrAe4B/wIQAR4B/wI4AZ0B/wJUAv8COwHSAf8CEQF0Af8DegH/
+        AU0CSwGTA6cB/wNdAf8BGgFqARAB/wFFAawBNwH/AVgB4gFEAf8BLgGKASIB/wEIAR8BBQH/ATIB5QEb
+        Af8CHgHuAf8CAwERAf8CKwGdAf8CRwL/Ai4B0gH/AgQBZwH/A20B/wPAAf8BVwJMAbQDagH/AScBdwEd
+        Af8BUgGsAUQB/wFlAeIBUQH/AVoB5gFFAf8BSgHoATQB/wEaAUoBFAH/ASsBgQEfAf8BVgHgAUEB/wFi
+        Ad4BTwH/AWcB1wFVAf8BTgHEATwB/wEgAYEBEwH/A3oB/wFNAksBkwM9AWYDgQH/ASsBTAEnAf8BPwGE
+        ATQB/wFoAeQBVQH/AVUBnQFJAf8DOQH/AyYB/wMvAf8BUAFzAUsB/wFnAdoBVQH/AWYB0QFVAf8BNgG5
+        ASIB/wEwAVsBKwH/A4YB/wMvAUgDPQFmA4EB/wImAUYB/wIzAYEB/wJUAv8CSAGpAf8DOQH/AyYB/wMv
+        Af8CSgF8Af8CVAL/AlQC/wIgAaoB/wIqAVQB/wOGAf8DLwFIA9YB/wNyAf8BHgE/ARoB/wEyAYQBJwH/
+        AVsB5AFIAf8BSAGdATwB/wMsAf8DGQH/AyIB/wI9AW8B/wJHAv8CRwL/AhMBqgH/Ah0BRwH/A4YB/wPi
+        Af8DPQFmA4EB/wErAUwBJwH/AT8BhAE0Af8BXAHGAUsB/wMOAf8DIAH/Ay0B/wMsAf8DGgH/Aw4B/wFm
+        AdEBVQH/ATYBuQEiAf8BMAFbASsB/wOGAf8DLwFIAwgBCQOdAf8BZwFoAWcB/wEsAV8BJQH/AUMBmAE2
+        Af8BaQHrAVYB/wFoAeYBVQH/AWgB4gFVAf8BZwHfAVUB/wFnAdkBVQH/AWQB0QFTAf8BQQG+AS4B/wEf
+        AYEBEQH/A2sB/wFcAkkBxQQAAwgBCQOdAf8CZwFoAf8CJQFWAf8CNQGTAf8CVAL/AlQC/wJUAv8CVAL/
+        AlQC/wJRAfoB/wItAbkB/wIQAXMB/wNrAf8BXAJJAcUEAAP8Af8DnQH/AVoBWwFaAf8BHwFSARgB/wE2
+        AZgBKQH/AVwB6wFJAf8BWwHmAUgB/wFbAeIBSAH/AkcC/wJHAv8CRAH6Af8CIAG5Af8CAwFmAf8DXgH/
+        A7kF/wMIAQkDnQH/AWcBaAFnAf8BLAFfASUB/wFDAZgBNgH/AWkB6wFWAf8BaAHmAVUB/wFoAeIBVQH/
+        AWcB3wFVAf8BZwHZAVUB/wFkAdEBUwH/AUEBvgEuAf8BHwGBAREB/wNrAf8BXAJJAcUIAAFFAkQBewOX
+        Af8BUwFVAVMB/wEqAVQBJQH/ATwBgQEzAf8BSQGZATwB/wFZAdABSAH/AVkBzgFGAf8BSgG8ATgB/wE0
+        AbkBIAH/AR0BdAESAf8BYAFlAV8B/wOhAf8DOAFaCAABRQJEAXsDlwH/AlMBVQH/AiQBTQH/AjMBegH/
+        AjsBmwH/AkcB4gH/AkUB4wH/AjcBxQH/Ah8BqQH/AhEBZQH/Al8BZAH/A6EB/wM4AVoEAAT/A9wB/wOX
+        Af8BRgFIAUYB/wEdAUcBGAH/AS8BdAEmAf8BPAGZAS8B/wFMAdABOwH/AjgB4wH/AioBxQH/AhIBqQH/
+        AgQBWAH/AlIBVwH/A6EB/wPkBf8EAAFFAkQBewOXAf8BUwFVAVMB/wEqAVQBJQH/ATwBgQEzAf8BSQGZ
+        ATwB/wFZAdABSAH/AVkBzgFGAf8BSgG8ATgB/wE0AbkBIAH/AR0BdAESAf8BYAFlAV8B/wOhAf8DOAFa
+        DAABTQJKAZADngH/A24B/wEuAUQBKwH/ASABdgEUAf8BIQGNARAB/wEgAYsBEAH/AR4BegESAf8BLwFV
+        ASkB/wNrAf8DqAH/AUkCSAGEEAABTQJKAZADngH/A24B/wIrAUAB/wITAWgB/wIPAYEB/wIOAYEB/wIR
+        AWsB/wIpAU8B/wNrAf8DqAH/AUkCSAGECAAI/wPcAf8DngH/A2EB/wEhATcBHgH/ARMBaQEHAf8BFAGN
+        AQMB/wIBAXcB/wIEAV4B/wIcAUIB/wNeAf8DqAH/A9wJ/wgAAU0CSgGQA54B/wNuAf8BLgFEASsB/wEg
+        AXYBFAH/ASEBjQEQAf8BIAGLARAB/wEeAXoBEgH/AS8BVQEpAf8DawH/A6gB/wFJAkgBhBQAAUUCRAF7
+        A8IB/wOKAf8DegH/A3QB/wN2Af8DfAH/A48B/wO/Af8BQAI/AWwYAAFFAkQBewPCAf8DigH/A3oB/wN0
+        Af8DdgH/A3wB/wOPAf8DvwH/AUACPwFsDAAM/wPnAf8DwgH/A4oB/wNtAf8DZwH/A2kB/wNvAf8DjwH/
+        A78B/wPnDf8MAAFFAkQBewPCAf8DigH/A3oB/wN0Af8DdgH/A3wB/wOPAf8DvwH/AUACPwFsHAADCAEJ
+        AUACPwFsAVgCTAG6AV8CQQHSAV0CRgHMAVcCTgGxAzkBXQQDIAADCAEJAUACPwFsAVgCTAG6AV8CQQHS
+        AV0CRgHMAVcCTgGxAzkBXQQDEAAQ/wP+Af8D7QH/A94B/wPZAf8D2QH/A94B/wPtAf8D/hH/EAADCAEJ
+        AUACPwFsAVgCTAG6AV8CQQHSAV0CRgHMAVcCTgGxAzkBXQQDEAABQgFNAT4HAAE+AwABKAMAAUADAAEg
+        AwABAQEAAQEGAAEBFgAD/wEAAfABDwYAAeABBwYAAcABAwYAAYABAQcAAQE3AAEBBgABgAEBBgABwAED
+        BgAB4AEHBgAB8AEPBgAB8AEPAfABDwIAAfABDwHgAQcB4AEHAgAB4AEHAcABAwHAAQMCAAHAAQMBgAEB
+        AYABAQIAAYABAQEAAQEBAAEBAwABATEAAQEBAAEBAwABAQGAAQEBgAEBAgABgAEBAcABAwHAAQMCAAHA
+        AQMB4AEHAeABBwIAAeABBwHwAQ8B8AEPAgAB8AEPCw==
 </value>
   </data>
   <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
   <data name="pictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
-        R0lGODlhIQAXAIcAAAAAAIAAAACAAICAAAAAgIAAgACAgMDAwE9lfYOZsV8/P38/P58/P78/P98/P/8/
+        R0lGODlhIQAXAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgMDAwE9lfYOZsV8/P38/P58/P78/P98/P/8/
         Pz9fP19fP39fP59fP79fP99fP/9fPz9/P19/P39/P59/P79/P99/P/9/Pz+fP1+fP3+fP5+fP7+fP9+f
         P/+fPz+/P1+/P3+/P5+/P7+/P9+/P/+/Pz/fP1/fP3/fP5/fP7/fP9/fP//fPz//P1//P3//P5//P7//
         P9//P///Pz8/X18/X38/X58/X78/X98/X/8/Xz9fX19fX39fX59fX79fX99fX/9fXz9/X19/X39/X59/
@@ -275,11 +274,11 @@
         n9/fn//fnz//n1//n3//n5//n7//n9//n///nz8/v18/v38/v58/v78/v98/v/8/vz9fv19fv39fv59f
         v79fv99fv/9fvz9/v19/v39/v59/v79/v99/v/9/vz+fv1+fv3+fv5+fv7+fv9+fv/+fvz+/v1+/v3+/
         v5+/v7+/v9+/v/+/vz/fv1/fv3/fv5/fv7/fv9/fv8HM2aCgpICAgP8AAAD/AP//AAAA//8A/wD/////
-        /yH/C05FVFNDQVBFMi4wAwEBAAAh+QQBAAAHACwAAAAAIQAXAAAI6gAPCBxIsKDBgwXxKVzIsKHDh/gA
-        DMT3D6HFixIFUhTA8QDHjh896jugT8DIjwI8Csh4gGI+kCFjppQJk+VGARUPAMApcKdKlTl1puwZseW/
-        jgp9Jp3JtOVSlQD+SXS5EoDVqld/In3KUeLUoyjDdhy4NeJQnWhv5ty5lulHq3CZejX60qlSsyrFypx7
-        E+5Ov2dJChwpGGpasHppJn57mGPbtnntply6svFkvFy7xgWM1ajmq4DzLu46EbHbpigDcFQtgHVljRBj
-        yy7a069tv/j26d7N2/bFg7l5C2f5G7jw4cUt3r6dvHnygAA7
+        /yH5BAEAAAcALAAAAAAhABcAAAjqAA8IHEiwoMGDBfEpXMiwocOH+AAMxPcPocWLEgVSFMDxAMeOHz3q
+        O6BPwMiPAjwKyHiAYj6QIWOmlAmT5UYBFQ8AwClwp0qVOXWm7Bmx5b+OCn0mncm05VKVAP5JdLkSgNWq
+        V38ifcpR4tSjKMN2HLg14lCdaG/m3LmW6UercJl6NfrSqVKzKsXKnHsT7k6/Z0kKHCkYalqwemkmfnuY
+        Y9u2ee2mXLqy8WS8XLvGBYzVqOargPMu7joRsdumKANwVC2AdWWNEGPLLtrTr22/+Pbp3s3b9sWDuXkL
+        Z/kbuPDhxS3evp28efKAADs=
 </value>
   </data>
 </root>
\ No newline at end of file
Index: TvEngine3/TVLibrary/SetupTv/Sections/TVChannels.cs
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Sections/TVChannels.cs	(revision 28196)
+++ TvEngine3/TVLibrary/SetupTv/Sections/TVChannels.cs	(working copy)
@@ -20,13 +20,11 @@
 
 using System;
 using System.Collections.Generic;
-using System.Text;
 using System.Windows.Forms;
 using SetupTv.Dialogs;
 using TvControl;
 using Gentle.Framework;
 using TvDatabase;
-using TvLibrary.Log;
 using TvLibrary.Interfaces;
 using MediaPortal.UserInterface.Controls;
 using System.Threading;
@@ -79,6 +77,7 @@
       : base(name)
     {
       InitializeComponent();
+
       lvwColumnSorter = new MPListViewStringColumnSorter();
       lvwColumnSorter.Order = SortOrder.None;
       lvwColumnSorter2 = new MPListViewStringColumnSorter();
@@ -123,13 +122,13 @@
         TabPage page = new TabPage(group.GroupName);
         page.SuspendLayout();
 
-        ChannelsInGroupControl channelsInRadioGroupControl = new ChannelsInGroupControl();
-        channelsInRadioGroupControl.Location = new System.Drawing.Point(9, 9);
-        channelsInRadioGroupControl.Anchor = ((AnchorStyles.Top | AnchorStyles.Bottom)
+        ChannelsInGroupControl channelsInGroupControl = new ChannelsInGroupControl();
+        channelsInGroupControl.Location = new System.Drawing.Point(9, 9);
+        channelsInGroupControl.Anchor = ((AnchorStyles.Top | AnchorStyles.Bottom)
                                               | AnchorStyles.Left)
                                              | AnchorStyles.Right;
 
-        page.Controls.Add(channelsInRadioGroupControl);
+        page.Controls.Add(channelsInGroupControl);
 
         page.Tag = group;
         page.Location = new System.Drawing.Point(4, 22);
@@ -375,7 +374,6 @@
         //mpListView1.Items[i].Text = (i + 1).ToString();
 
         Channel channel = (Channel)mpListView1.Items[i].Tag;
-
         if (channel.SortOrder != i)
         {
           channel.SortOrder = i;
Index: TvEngine3/TVLibrary/SetupTv/Sections/TvEpgGrabber.cs
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Sections/TvEpgGrabber.cs	(revision 28196)
+++ TvEngine3/TVLibrary/SetupTv/Sections/TvEpgGrabber.cs	(working copy)
@@ -21,12 +21,11 @@
 using System;
 using System.Collections.Generic;
 using System.Windows.Forms;
-using TvControl;
-using Gentle.Framework;
 using TvDatabase;
 using TvLibrary.Log;
 using TvLibrary.Interfaces;
 using MediaPortal.UserInterface.Controls;
+using SetupTv.Sections.Helpers;
 
 namespace SetupTv.Sections
 {
@@ -108,139 +107,48 @@
     public override void OnSectionActivated()
     {
       mpListView1.BeginUpdate();
+      base.OnSectionActivated();
+      mpListView1.Items.Clear();
+      List<ListViewItem> items = new List<ListViewItem>();
       try
       {
         LoadLanguages();
         TvBusinessLayer layer = new TvBusinessLayer();
         Setting setting = layer.GetSetting("epgStoreOnlySelected");
         mpCheckBoxStoreOnlySelected.Checked = (setting.Value == "yes");
-        Dictionary<string, CardType> cards = new Dictionary<string, CardType>();
-        IList<Card> dbsCards = Card.ListAll();
-        foreach (Card card in dbsCards)
-        {
-          cards[card.DevicePath] = RemoteControl.Instance.Type(card.IdCard);
-        }
-        base.OnSectionActivated();
-        mpListView1.Items.Clear();
 
-        SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof(Channel));
-        sb.AddOrderByField(true, "sortOrder");
-        SqlStatement stmt = sb.GetStatement(true);
-        IList<Channel> channels = ObjectFactory.GetCollection<Channel>(stmt.Execute());
+        IDictionary<int, IList<ChannelMap>> dChannelMaps = ChannelListHelper.GetDictionaryOfChannelMaps(ChannelType.Tv);
+        IDictionary<int, IList<TuningDetail>> dTuningDetails = ChannelListHelper.GetDictionaryOfTuningDetailsForGroup(-1, ChannelType.Tv);
+        IDictionary<int, CardType> dCardTypes = ChannelListHelper.GetDictionaryOfInstalledCardTypes();
 
+        IList<TuningDetail> tuningDetails;
+        IList<ChannelMap> maps;
+        IList<Channel> channels = ChannelListHelper.GetChannelsOfTypeForGroup(-1, ChannelType.Tv);
         foreach (Channel ch in channels)
         {
-          bool analog = false;
-          bool dvbc = false;
-          bool dvbt = false;
-          bool dvbs = false;
-          bool atsc = false;
-          bool dvbip = false;
-          bool hasFta = false;
-          bool hasScrambled = false;         
-          if (ch.IsTv == false)
+          dTuningDetails.TryGetValue(ch.IdChannel, out tuningDetails);
+
+          if (ChannelListHelper.HasWebstreamTuningDetails(tuningDetails))
             continue;
-          if (ch.IsWebstream())
-            continue;
+          int imageIndex = ChannelListIcons.GetChannelListIconIndex(ch, tuningDetails);
+          ListViewItem item = new ListViewItem(ch.DisplayName, imageIndex);
+          items.Add(item);
 
-          IList<TuningDetail> tuningDetails = ch.ReferringTuningDetail();
-          foreach (TuningDetail detail in tuningDetails)
-          {
-            if (detail.FreeToAir)
-            {
-              hasFta = true;
-            }
-            if (!detail.FreeToAir)
-            {
-              hasScrambled = true;
-            }
-          }
+          dChannelMaps.TryGetValue(ch.IdChannel, out maps);
+          string MappingNames = ChannelListHelper.GetMappingNames(maps, dCardTypes, tuningDetails);
 
-          int imageIndex;
-          if (hasFta && hasScrambled)
-          {
-            imageIndex = 5;
-          }
-          else if (hasScrambled)
-          {
-            imageIndex = 4;
-          }
-          else
-          {
-            imageIndex = 3;
-          }
-
-          ListViewItem item = mpListView1.Items.Add(ch.DisplayName, imageIndex);
-          foreach (ChannelMap map in ch.ReferringChannelMap())
-          {
-            if (cards.ContainsKey(map.ReferencedCard().DevicePath))
-            {
-              CardType type = cards[map.ReferencedCard().DevicePath];
-              switch (type)
-              {
-                case CardType.Analog:
-                  analog = true;
-                  break;
-                case CardType.DvbC:
-                  dvbc = true;
-                  break;
-                case CardType.DvbT:
-                  dvbt = true;
-                  break;
-                case CardType.DvbS:
-                  dvbs = true;
-                  break;
-                case CardType.Atsc:
-                  atsc = true;
-                  break;
-                case CardType.DvbIP:
-                  dvbip = true;
-                  break;
-              }
-            }
-          }
-          string line = "";
-          if (analog)
-          {
-            line += "Analog";
-          }
-          if (dvbc)
-          {
-            if (line != "")
-              line += ",";
-            line += "DVB-C";
-          }
-          if (dvbt)
-          {
-            if (line != "")
-              line += ",";
-            line += "DVB-T";
-          }
-          if (dvbs)
-          {
-            if (line != "")
-              line += ",";
-            line += "DVB-S";
-          }
-          if (atsc)
-          {
-            if (line != "")
-              line += ",";
-            line += "ATSC";
-          }
-          if (dvbip)
-          {
-            if (line != "")
-              line += ",";
-            line += "DVB-IP";
-          }
-          item.SubItems.Add(line);
+          item.SubItems.Add(MappingNames);
           item.Checked = ch.GrabEpg;
           item.Tag = ch;
         }
       }
+      catch (Exception exp)
+      {
+        Log.Error("SetupTV.TvEpgGrabber.OnSectionActivated error: {0}", exp.StackTrace);
+      }
       finally
       {
+        mpListView1.Items.AddRange(items.ToArray());
         mpListView1.EndUpdate();
       }
     }
Index: TvEngine3/TVLibrary/SetupTv/SetupTv.csproj
===================================================================
--- TvEngine3/TVLibrary/SetupTv/SetupTv.csproj	(revision 28196)
+++ TvEngine3/TVLibrary/SetupTv/SetupTv.csproj	(working copy)
@@ -214,6 +214,7 @@
     <Compile Include="Sections\Epg.Designer.cs">
       <DependentUpon>Epg.cs</DependentUpon>
     </Compile>
+    <Compile Include="Sections\Helpers\ChannelListHelper.cs" />
     <Compile Include="Sections\Helpers\ChannelListViewHandler.cs" />
     <Compile Include="Sections\TestChannels.cs">
       <SubType>UserControl</SubType>
Index: TvEngine3/TVLibrary/TVDatabase/Channel.cs
===================================================================
--- TvEngine3/TVLibrary/TVDatabase/Channel.cs	(revision 28196)
+++ TvEngine3/TVLibrary/TVDatabase/Channel.cs	(working copy)
@@ -26,6 +26,21 @@
 namespace TvDatabase
 {
   /// <summary>
+  /// Enum for channel provider type (Analog/DVBx/WebStream)
+  /// </summary>
+  public enum ChannelProviderType
+  {
+    Analog = 0,  //0
+    ATSC,        //1
+    DVBC,        //2
+    DVBS,        //3
+    DVBT,        //4
+    WebStream,   //5
+    NotUsed,     //6
+    DVBIP        //7
+  }
+
+  /// <summary>
   /// Instances of this class represent the properties and methods of a row in the table <b>Channel</b>.
   /// </summary>
   [TableName("Channel")]
@@ -301,7 +316,7 @@
               ChannelGroup channelGroup = ObjectFactory.GetInstance<ChannelGroup>(stmt.Execute());
               groupNames.Add(channelGroup.GroupName);
             }
-            catch (Exception ex)
+            catch (Exception)
             {
               Log.Error("channelgroup for channel id={0} with channelgroup id={1} does not exist", idChannel,
                         groupMap.IdGroup);
@@ -323,10 +338,16 @@
             sb.AddConstraint(Operator.Equals, "idGroup", groupMap.IdGroup);
 
             stmt = sb.GetStatement();
-
-            RadioChannelGroup channelGroup = ObjectFactory.GetInstance<RadioChannelGroup>(stmt.Execute());
-
-            groupNames.Add(channelGroup.GroupName);
+            try
+            {
+              RadioChannelGroup channelGroup = ObjectFactory.GetInstance<RadioChannelGroup>(stmt.Execute());
+              groupNames.Add(channelGroup.GroupName);
+            }
+            catch (Exception)
+            {
+              Log.Error("radiochannelgroup for channel id={0} with radiochannelgroup id={1} does not exist", idChannel,
+                        groupMap.IdGroup);
+            }
           }
         }
 
@@ -737,7 +758,7 @@
       Remove();
     }
 
-    public bool ContainsChannelType(int channelType)
+    public bool ContainsChannelType(ChannelProviderType channelType)
     {
       foreach (TuningDetail detail in ReferringTuningDetail())
       {
@@ -751,14 +772,18 @@
 
     public bool IsWebstream()
     {
-      IList<TuningDetail> details = ReferringTuningDetail();
+      return HasWebstreamTuningDetails(ReferringTuningDetail());
+    }
+
+    public static bool HasWebstreamTuningDetails(IList<TuningDetail> details)
+    {
       if (details == null)
       {
         return false;
       }
       foreach (TuningDetail detail in details)
       {
-        if (detail.ChannelType == 5)
+        if (detail.ChannelType == ChannelProviderType.WebStream)
         {
           return true;
         }
Index: TvEngine3/TVLibrary/TVDatabase/TuningDetail.cs
===================================================================
--- TvEngine3/TVLibrary/TVDatabase/TuningDetail.cs	(revision 28196)
+++ TvEngine3/TVLibrary/TVDatabase/TuningDetail.cs	(working copy)
@@ -76,7 +76,7 @@
     /// <summary> 
     /// Create a new object by specifying all fields (except the auto-generated primary key field). 
     /// </summary> 
-    public TuningDetail(int idChannel, string name, string provider, int channelType, int channelNumber, int frequency,
+    public TuningDetail(int idChannel, string name, string provider, ChannelProviderType channelType, int channelNumber, int frequency,
                         int countryId, bool isRadio, bool isTv, int networkId, int transportId, int serviceId,
                         int pmtPid, bool freeToAir, int modulation, int polarisation, int symbolrate, int diseqc,
                         int switchingFrequency, int bandwidth, int majorChannel, int minorChannel,
@@ -88,7 +88,7 @@
       this.idChannel = idChannel;
       this.name = name;
       this.provider = provider;
-      this.channelType = channelType;
+      this.channelType = (int)channelType;
       this.channelNumber = channelNumber;
       this.frequency = frequency;
       this.countryId = countryId;
@@ -124,7 +124,7 @@
     /// Create an object from an existing row of data. This will be used by Gentle to 
     /// construct objects from retrieved rows. 
     /// </summary> 
-    public TuningDetail(int idTuning, int idChannel, string name, string provider, int channelType, int channelNumber,
+    public TuningDetail(int idTuning, int idChannel, string name, string provider, ChannelProviderType channelType, int channelNumber,
                         int frequency, int countryId, bool isRadio, bool isTv, int networkId, int transportId,
                         int serviceId, int pmtPid, bool freeToAir, int modulation, int polarisation, int symbolrate,
                         int diseqc, int switchingFrequency, int bandwidth, int majorChannel, int minorChannel,
@@ -136,7 +136,7 @@
       this.idChannel = idChannel;
       this.name = name;
       this.provider = provider;
-      this.channelType = channelType;
+      this.channelType = (int)channelType;
       this.channelNumber = channelNumber;
       this.frequency = frequency;
       this.countryId = countryId;
@@ -243,13 +243,13 @@
     /// <summary>
     /// Property relating to database column channelType
     /// </summary>
-    public int ChannelType
+    public ChannelProviderType ChannelType
     {
-      get { return channelType; }
+      get { return (ChannelProviderType)channelType; }
       set
       {
-        isChanged |= channelType != value;
-        channelType = value;
+        isChanged |= channelType != (int)value;
+        channelType = (int)value;
       }
     }
 
Index: TvEngine3/TVLibrary/TVDatabase/TvBusinessLayer/BusinessLayer.cs
===================================================================
--- TvEngine3/TVLibrary/TVDatabase/TvBusinessLayer/BusinessLayer.cs	(revision 28196)
+++ TvEngine3/TVLibrary/TVDatabase/TvBusinessLayer/BusinessLayer.cs	(working copy)
@@ -2,17 +2,17 @@
 
 // Copyright (C) 2005-2011 Team MediaPortal
 // http://www.team-mediaportal.com
-// 
+//
 // MediaPortal is free software: you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
 // the Free Software Foundation, either version 2 of the License, or
 // (at your option) any later version.
-// 
+//
 // MediaPortal is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 // GNU General Public License for more details.
-// 
+//
 // You should have received a copy of the GNU General Public License
 // along with MediaPortal. If not, see <http://www.gnu.org/licenses/>.
 
@@ -36,7 +36,6 @@
 using DirectShowLib.BDA;
 using Gentle.Framework;
 using MySql.Data.MySqlClient;
-using TvDatabase;
 using TvLibrary;
 using TvLibrary.Channels;
 using TvLibrary.Implementations;
@@ -49,7 +48,6 @@
 
 namespace TvDatabase
 {
-
   #region enums
 
   public enum DeleteBeforeImportOption
@@ -171,7 +169,7 @@
 
     public IList<Card> ListAllEnabledCardsOrderedByPriority()
     {
-      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (Card));
+      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof(Card));
       sb.AddConstraint("enabled=1");
       sb.AddOrderByField(false, "priority");
       SqlStatement stmt = sb.GetStatement(true);
@@ -192,7 +190,7 @@
 
     public ChannelGroup CreateGroup(string groupName)
     {
-      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (ChannelGroup));
+      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof(ChannelGroup));
       sb.AddConstraint(Operator.Like, "groupName", "%" + groupName + "%");
       SqlStatement stmt = sb.GetStatement(true);
       IList<ChannelGroup> groups = ObjectFactory.GetCollection<ChannelGroup>(stmt.Execute());
@@ -308,7 +306,7 @@
 
     public Channel GetChannel(int idChannel)
     {
-      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (Channel));
+      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof(Channel));
       sb.AddConstraint(Operator.Equals, "idChannel", idChannel);
 
       SqlStatement stmt = sb.GetStatement(true);
@@ -326,7 +324,7 @@
 
     public Channel GetChannelByTuningDetail(int networkId, int transportId, int serviceId)
     {
-      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (TuningDetail));
+      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof(TuningDetail));
       sb.AddConstraint(Operator.Equals, "networkId", networkId);
       sb.AddConstraint(Operator.Equals, "transportId", transportId);
       sb.AddConstraint(Operator.Equals, "serviceId", serviceId);
@@ -348,7 +346,7 @@
 
     public TuningDetail GetTuningDetail(int networkId, int serviceId, int channelType)
     {
-      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (TuningDetail));
+      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof(TuningDetail));
       sb.AddConstraint(Operator.Equals, "networkId", networkId);
       sb.AddConstraint(Operator.Equals, "serviceId", serviceId);
       sb.AddConstraint(Operator.Equals, "channelType", channelType);
@@ -389,7 +387,7 @@
 
     public TuningDetail GetTuningDetail(int networkId, int transportId, int serviceId, int channelType)
     {
-      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (TuningDetail));
+      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof(TuningDetail));
       sb.AddConstraint(Operator.Equals, "networkId", networkId);
       sb.AddConstraint(Operator.Equals, "serviceId", serviceId);
       sb.AddConstraint(Operator.Equals, "transportId", transportId);
@@ -411,7 +409,7 @@
 
     public IList<TuningDetail> GetTuningDetailsByName(string name, int channelType)
     {
-      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (TuningDetail));
+      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof(TuningDetail));
       sb.AddConstraint(Operator.Equals, "name", name);
       sb.AddConstraint(Operator.Equals, "channelType", channelType);
 
@@ -422,29 +420,29 @@
 
     public static int GetChannelType(DVBBaseChannel channel)
     {
-      int channelType;
+      ChannelProviderType channelType;
 
       if (channel is DVBTChannel)
       {
-        channelType = 4;
+        channelType = ChannelProviderType.DVBT;
       }
       else if (channel is DVBSChannel)
       {
-        channelType = 3;
+        channelType = ChannelProviderType.DVBS;
       }
       else if (channel is DVBCChannel)
       {
-        channelType = 2;
+        channelType = ChannelProviderType.DVBC;
       }
       else if (channel is DVBIPChannel)
       {
-        channelType = 7;
+        channelType = ChannelProviderType.DVBIP;
       }
       else // must be ATSCChannel
       {
-        channelType = 1;
+        channelType = ChannelProviderType.ATSC;
       }
-      return channelType;
+      return (int)channelType;
     }
 
     public TuningDetail GetTuningDetail(DVBBaseChannel channel)
@@ -455,7 +453,7 @@
 
     public IList<Channel> GetChannelsByName(string name)
     {
-      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (Channel));
+      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof(Channel));
       sb.AddConstraint(Operator.Equals, "displayName", name);
       SqlStatement stmt = sb.GetStatement(true);
       IList<Channel> channels = ObjectFactory.GetCollection<Channel>(stmt.Execute());
@@ -464,12 +462,12 @@
 
     public IList<Channel> GetChannelsInGroup(ChannelGroup group)
     {
-      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (Channel));
+      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof(Channel));
       SqlStatement origStmt = sb.GetStatement(true);
       string sql = "select c.* from channel c inner join groupmap gm on (c.idChannel = gm.idChannel and gm.idGroup =" +
                    group.IdGroup + ") order by gm.SortOrder asc";
       SqlStatement statement = new SqlStatement(StatementType.Select, origStmt.Command, sql,
-                                                typeof (Channel));
+                                                typeof(Channel));
       return ObjectFactory.GetCollection<Channel>(statement.Execute());
     }
 
@@ -526,7 +524,7 @@
       SqlBuilder sb;
       try
       {
-        sb = new SqlBuilder(StatementType.Select, typeof (Setting));
+        sb = new SqlBuilder(StatementType.Select, typeof(Setting));
       }
       catch (TypeInitializationException)
       {
@@ -555,7 +553,7 @@
       SqlBuilder sb;
       try
       {
-        sb = new SqlBuilder(StatementType.Select, typeof (Setting));
+        sb = new SqlBuilder(StatementType.Select, typeof(Setting));
       }
       catch (TypeInitializationException)
       {
@@ -575,7 +573,7 @@
       return settingsFound[0];
     }
 
-    public IChannel GetTuningChannelByType(Channel channel, int channelType)
+    public IChannel GetTuningChannelByType(Channel channel, ChannelProviderType channelType)
     {
       IList<TuningDetail> tuningDetails = channel.ReferringTuningDetail();
       for (int i = 0; i < tuningDetails.Count; ++i)
@@ -606,7 +604,7 @@
     {
       switch (detail.ChannelType)
       {
-        case 0: //AnalogChannel
+        case ChannelProviderType.Analog:
           AnalogChannel analogChannel = new AnalogChannel();
           analogChannel.ChannelNumber = detail.ChannelNumber;
           CountryCollection collection = new CountryCollection();
@@ -619,7 +617,7 @@
           analogChannel.VideoSource = (AnalogChannel.VideoInputType)detail.VideoSource;
           analogChannel.AudioSource = (AnalogChannel.AudioInputType)detail.AudioSource;
           return analogChannel;
-        case 1: //ATSCChannel
+        case ChannelProviderType.ATSC:
           ATSCChannel atscChannel = new ATSCChannel();
           atscChannel.MajorChannel = detail.MajorChannel;
           atscChannel.MinorChannel = detail.MinorChannel;
@@ -637,7 +635,7 @@
           atscChannel.TransportId = detail.TransportId;
           atscChannel.ModulationType = (ModulationType)detail.Modulation;
           return atscChannel;
-        case 2: //DVBCChannel
+        case ChannelProviderType.DVBC:
           DVBCChannel dvbcChannel = new DVBCChannel();
           dvbcChannel.ModulationType = (ModulationType)detail.Modulation;
           dvbcChannel.FreeToAir = detail.FreeToAir;
@@ -653,7 +651,7 @@
           dvbcChannel.TransportId = detail.TransportId;
           dvbcChannel.LogicalChannelNumber = detail.ChannelNumber;
           return dvbcChannel;
-        case 3: //DVBSChannel
+        case ChannelProviderType.DVBS:
           DVBSChannel dvbsChannel = new DVBSChannel();
           dvbsChannel.DisEqc = (DisEqcType)detail.Diseqc;
           dvbsChannel.Polarisation = (Polarisation)detail.Polarisation;
@@ -677,7 +675,7 @@
           dvbsChannel.Rolloff = (RollOff)detail.RollOff;
           dvbsChannel.LogicalChannelNumber = detail.ChannelNumber;
           return dvbsChannel;
-        case 4: //DVBTChannel
+        case ChannelProviderType.DVBT:
           DVBTChannel dvbtChannel = new DVBTChannel();
           dvbtChannel.BandWidth = detail.Bandwidth;
           dvbtChannel.FreeToAir = detail.FreeToAir;
@@ -692,7 +690,7 @@
           dvbtChannel.TransportId = detail.TransportId;
           dvbtChannel.LogicalChannelNumber = detail.ChannelNumber;
           return dvbtChannel;
-        case 7: //DVBIPChannel
+        case ChannelProviderType.DVBIP:
           DVBIPChannel dvbipChannel = new DVBIPChannel();
           dvbipChannel.FreeToAir = detail.FreeToAir;
           dvbipChannel.IsRadio = detail.IsRadio;
@@ -732,12 +730,12 @@
     /// <returns>a list of TVDatabase Channels</returns>
     public List<Channel> GetRadioGuideChannelsForGroup(int groupID)
     {
-      SqlBuilder sb1 = new SqlBuilder(StatementType.Select, typeof (Channel));
+      SqlBuilder sb1 = new SqlBuilder(StatementType.Select, typeof(Channel));
       SqlStatement stmt1 = sb1.GetStatement(true);
       SqlStatement ManualJoinSQL = new SqlStatement(stmt1.StatementType, stmt1.Command,
                                                     String.Format(
                                                       "select c.* from Channel c inner join RadioGroupMap g on (c.idChannel=g.idChannel and g.idGroup = '{0}') where visibleInGuide = 1 and isRadio = 1 order by g.sortOrder",
-                                                      groupID), typeof (Channel));
+                                                      groupID), typeof(Channel));
       return ObjectFactory.GetCollection<Channel>(ManualJoinSQL.Execute()) as List<Channel>;
     }
 
@@ -747,18 +745,18 @@
     /// <returns>a list of TVDatabase Channels</returns>
     public List<Channel> GetTVGuideChannelsForGroup(int groupID)
     {
-      SqlBuilder sb1 = new SqlBuilder(StatementType.Select, typeof (Channel));
+      SqlBuilder sb1 = new SqlBuilder(StatementType.Select, typeof(Channel));
       SqlStatement stmt1 = sb1.GetStatement(true);
       SqlStatement ManualJoinSQL = new SqlStatement(stmt1.StatementType, stmt1.Command,
                                                     String.Format(
                                                       "select c.* from Channel c inner join GroupMap g on (c.idChannel=g.idChannel and g.idGroup = '{0}') where visibleInGuide = 1 and isTv = 1 order by g.sortOrder",
-                                                      groupID), typeof (Channel));
+                                                      groupID), typeof(Channel));
       return ObjectFactory.GetCollection<Channel>(ManualJoinSQL.Execute()) as List<Channel>;
     }
 
     public IList<Channel> GetAllRadioChannels()
     {
-      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (Channel));
+      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof(Channel));
       sb.AddConstraint(Operator.Equals, "isRadio", 1);
       SqlStatement stmt = sb.GetStatement(true);
       IList<Channel> radioChannels = ObjectFactory.GetCollection<Channel>(stmt.Execute());
@@ -803,7 +801,7 @@
       int minorChannel = -1;
       int majorChannel = -1;
       string provider = "";
-      int channelType = 0;
+      ChannelProviderType channelType = ChannelProviderType.Analog;
       int band = 0;
       int satIndex = -1;
       int innerFecRate = (int)BinaryConvolutionCodeRate.RateNotSet;
@@ -824,7 +822,7 @@
         videoInputType = (int)analogChannel.VideoSource;
         audioInputType = (int)analogChannel.AudioSource;
         isVCRSignal = analogChannel.IsVCRSignal;
-        channelType = 0;
+        channelType = ChannelProviderType.Analog;
       }
 
       ATSCChannel atscChannel = tvChannel as ATSCChannel;
@@ -836,7 +834,7 @@
         //videoPid = atscChannel.VideoPid;
         //audioPid = atscChannel.AudioPid;
         modulation = (int)atscChannel.ModulationType;
-        channelType = 1;
+        channelType = ChannelProviderType.ATSC;
       }
 
       DVBCChannel dvbcChannel = tvChannel as DVBCChannel;
@@ -845,7 +843,7 @@
         symbolRate = dvbcChannel.SymbolRate;
         modulation = (int)dvbcChannel.ModulationType;
         channelNumber = dvbcChannel.LogicalChannelNumber > 999 ? channel.IdChannel : dvbcChannel.LogicalChannelNumber;
-        channelType = 2;
+        channelType = ChannelProviderType.DVBC;
       }
 
       DVBSChannel dvbsChannel = tvChannel as DVBSChannel;
@@ -862,7 +860,7 @@
         pilot = (int)dvbsChannel.Pilot;
         rollOff = (int)dvbsChannel.Rolloff;
         channelNumber = dvbsChannel.LogicalChannelNumber > 999 ? channel.IdChannel : dvbsChannel.LogicalChannelNumber;
-        channelType = 3;
+        channelType = ChannelProviderType.DVBS;
       }
 
       DVBTChannel dvbtChannel = tvChannel as DVBTChannel;
@@ -870,7 +868,7 @@
       {
         bandwidth = dvbtChannel.BandWidth;
         channelNumber = dvbtChannel.LogicalChannelNumber;
-        channelType = 4;
+        channelType = ChannelProviderType.DVBT;
       }
 
       DVBIPChannel dvbipChannel = tvChannel as DVBIPChannel;
@@ -878,7 +876,7 @@
       {
         url = dvbipChannel.Url;
         channelNumber = dvbipChannel.LogicalChannelNumber;
-        channelType = 7;
+        channelType = ChannelProviderType.DVBIP;
       }
 
       DVBBaseChannel dvbChannel = tvChannel as DVBBaseChannel;
@@ -934,7 +932,7 @@
       int minorChannel = -1;
       int majorChannel = -1;
       string provider = "";
-      int channelType = 0;
+      ChannelProviderType channelType = ChannelProviderType.Analog;
       int band = 0;
       int satIndex = -1;
       int innerFecRate = (int)BinaryConvolutionCodeRate.RateNotSet;
@@ -955,7 +953,7 @@
         videoInputType = (int)analogChannel.VideoSource;
         audioInputType = (int)analogChannel.AudioSource;
         isVCRSignal = analogChannel.IsVCRSignal;
-        channelType = 0;
+        channelType = ChannelProviderType.Analog;
       }
       ATSCChannel atscChannel = tvChannel as ATSCChannel;
       if (atscChannel != null)
@@ -966,7 +964,7 @@
         //videoPid = atscChannel.VideoPid;
         //audioPid = atscChannel.AudioPid;
         modulation = (int)atscChannel.ModulationType;
-        channelType = 1;
+        channelType = ChannelProviderType.ATSC;
       }
 
       DVBCChannel dvbcChannel = tvChannel as DVBCChannel;
@@ -975,7 +973,7 @@
         symbolRate = dvbcChannel.SymbolRate;
         modulation = (int)dvbcChannel.ModulationType;
         channelNumber = dvbcChannel.LogicalChannelNumber > 999 ? channel.IdChannel : dvbcChannel.LogicalChannelNumber;
-        channelType = 2;
+        channelType = ChannelProviderType.DVBC;
       }
 
       DVBSChannel dvbsChannel = tvChannel as DVBSChannel;
@@ -992,7 +990,7 @@
         pilot = (int)dvbsChannel.Pilot;
         rollOff = (int)dvbsChannel.Rolloff;
         channelNumber = dvbsChannel.LogicalChannelNumber > 999 ? channel.IdChannel : dvbsChannel.LogicalChannelNumber;
-        channelType = 3;
+        channelType = ChannelProviderType.DVBS;
       }
 
       DVBTChannel dvbtChannel = tvChannel as DVBTChannel;
@@ -1000,7 +998,7 @@
       {
         bandwidth = dvbtChannel.BandWidth;
         channelNumber = dvbtChannel.LogicalChannelNumber;
-        channelType = 4;
+        channelType = ChannelProviderType.DVBT;
       }
 
       DVBIPChannel dvbipChannel = tvChannel as DVBIPChannel;
@@ -1008,7 +1006,7 @@
       {
         url = dvbipChannel.Url;
         channelNumber = dvbipChannel.LogicalChannelNumber;
-        channelType = 7;
+        channelType = ChannelProviderType.DVBIP;
       }
 
       DVBBaseChannel dvbChannel = tvChannel as DVBBaseChannel;
@@ -1086,7 +1084,7 @@
       const int minorChannel = -1;
       const int majorChannel = -1;
       const string provider = "";
-      const int channelType = 5;
+      const ChannelProviderType channelType = ChannelProviderType.WebStream;
       const int band = 0;
       const int satIndex = -1;
       const int innerFecRate = (int)BinaryConvolutionCodeRate.RateNotSet;
@@ -1120,7 +1118,7 @@
         if (pmap.Count > 0)
           return pmap;
       }
-      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (ChannelLinkageMap));
+      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof(ChannelLinkageMap));
       sb.AddConstraint(Operator.Equals, "idLinkedChannel", channel.IdChannel);
       SqlStatement stmt = sb.GetStatement(true);
       return ObjectFactory.GetCollection<ChannelLinkageMap>(stmt.Execute());
@@ -1155,7 +1153,7 @@
 
     public void RemoveOldPrograms()
     {
-      SqlBuilder sb = new SqlBuilder(StatementType.Delete, typeof (Program));
+      SqlBuilder sb = new SqlBuilder(StatementType.Delete, typeof(Program));
       DateTime dtYesterday = DateTime.Now.AddHours(-EpgKeepDuration);
       IFormatProvider mmddFormat = new CultureInfo(String.Empty, false);
       sb.AddConstraint(String.Format("endTime < '{0}'", dtYesterday.ToString(GetDateTimeString(), mmddFormat)));
@@ -1165,7 +1163,7 @@
 
     public void RemoveOldPrograms(int idChannel)
     {
-      SqlBuilder sb = new SqlBuilder(StatementType.Delete, typeof (Program));
+      SqlBuilder sb = new SqlBuilder(StatementType.Delete, typeof(Program));
       DateTime dtToKeep = DateTime.Now.AddHours(-EpgKeepDuration);
       IFormatProvider mmddFormat = new CultureInfo(String.Empty, false);
       sb.AddConstraint(Operator.Equals, "idChannel", idChannel);
@@ -1176,7 +1174,7 @@
 
     public void RemoveAllPrograms(int idChannel)
     {
-      SqlBuilder sb = new SqlBuilder(StatementType.Delete, typeof (Program));
+      SqlBuilder sb = new SqlBuilder(StatementType.Delete, typeof(Program));
       sb.AddConstraint(Operator.Equals, "idChannel", idChannel);
       SqlStatement stmt = sb.GetStatement(true);
       ObjectFactory.GetCollection<Program>(stmt.Execute());
@@ -1184,7 +1182,7 @@
 
     public IList<Program> GetOnairNow()
     {
-      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (Program));
+      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof(Program));
       IFormatProvider mmddFormat = new CultureInfo(String.Empty, false);
       sb.AddConstraint(String.Format("startTime <= '{0}' and endTime >= '{1}'",
                                      DateTime.Now.ToString(GetDateTimeString(), mmddFormat),
@@ -1201,7 +1199,7 @@
         startTime = startTime.AddYears(1900);
       }
       IFormatProvider mmddFormat = new CultureInfo(String.Empty, false);
-      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (Program));
+      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof(Program));
 
       sb.AddConstraint(Operator.Equals, "idChannel", channel.IdChannel);
       sb.AddConstraint(String.Format("startTime>='{0}'", startTime.ToString(GetDateTimeString(), mmddFormat)));
@@ -1214,7 +1212,7 @@
     public IList<Program> GetPrograms(Channel channel, DateTime startTime, DateTime endTime)
     {
       IFormatProvider mmddFormat = new CultureInfo(String.Empty, false);
-      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (Program));
+      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof(Program));
 
       string sub1 = String.Format("(EndTime > '{0}' and EndTime < '{1}')",
                                   startTime.ToString(GetDateTimeString(), mmddFormat),
@@ -1237,7 +1235,7 @@
     public IList<Program> GetProgramExists(Channel channel, DateTime startTime, DateTime endTime)
     {
       IFormatProvider mmddFormat = new CultureInfo(String.Empty, false);
-      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (Program));
+      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof(Program));
 
       string sub1 =
         String.Format("( (StartTime >= '{0}' and StartTime < '{1}') or ( EndTime > '{0}' and EndTime <= '{1}' ) )",
@@ -1479,15 +1477,15 @@
         "where ((EndTime > '{0}' and EndTime < '{1}') or (StartTime >= '{0}' and StartTime <= '{1}') or (StartTime <= '{0}' and EndTime >= '{1}')) and c.visibleInGuide = 1 order by startTime",
         StartTimeString, EndTimeString
         );
-      SqlStatement stmt = new SqlBuilder(StatementType.Select, typeof (Program)).GetStatement(true);
+      SqlStatement stmt = new SqlBuilder(StatementType.Select, typeof(Program)).GetStatement(true);
       SqlStatement ManualJoinSQL = new SqlStatement(StatementType.Select, stmt.Command, SqlSelectCommand.ToString(),
-                                                    typeof (Program));
+                                                    typeof(Program));
       return ObjectFactory.GetCollection<Program>(ManualJoinSQL.Execute());
     }
 
     public DateTime GetNewestProgramForChannel(int idChannel)
     {
-      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (Program));
+      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof(Program));
       sb.AddConstraint(Operator.Equals, "idChannel", idChannel);
       sb.AddOrderByField(false, "startTime");
       sb.SetRowLimit(1);
@@ -1499,7 +1497,7 @@
     public IList<Program> GetProgramsByTitle(Channel channel, DateTime startTime, DateTime endTime, string title)
     {
       IFormatProvider mmddFormat = new CultureInfo(String.Empty, false);
-      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (Program));
+      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof(Program));
 
       string sub1 = String.Format("(EndTime > '{0}' and EndTime < '{1}')",
                                   startTime.ToString(GetDateTimeString(), mmddFormat),
@@ -1531,9 +1529,9 @@
         "where ((EndTime > '{0}' and EndTime < '{1}') or (StartTime >= '{0}' and StartTime <= '{1}') or (StartTime <= '{0}' and EndTime >= '{1}')) and title = '{2}' and c.visibleInGuide = 1 order by startTime",
         StartTimeString, EndTimeString, EscapeSQLString(title)
         );
-      SqlStatement stmt = new SqlBuilder(StatementType.Select, typeof (Program)).GetStatement(true);
+      SqlStatement stmt = new SqlBuilder(StatementType.Select, typeof(Program)).GetStatement(true);
       SqlStatement ManualJoinSQL = new SqlStatement(StatementType.Select, stmt.Command, SqlSelectCommand.ToString(),
-                                                    typeof (Program));
+                                                    typeof(Program));
       return ObjectFactory.GetCollection<Program>(ManualJoinSQL.Execute());
     }
 
@@ -1626,9 +1624,9 @@
           break;
       }
       SqlSelectCommand.Append("and c.visibleInGuide = 1 order by title, startTime");
-      SqlStatement stmt = new SqlBuilder(StatementType.Select, typeof (Program)).GetStatement(true);
+      SqlStatement stmt = new SqlBuilder(StatementType.Select, typeof(Program)).GetStatement(true);
       SqlStatement ManualJoinSQL = new SqlStatement(StatementType.Select, stmt.Command, SqlSelectCommand.ToString(),
-                                                    typeof (Program));
+                                                    typeof(Program));
       return ObjectFactory.GetCollection<Program>(ManualJoinSQL.Execute());
     }
 
@@ -1659,9 +1657,9 @@
           break;
       }
       SqlSelectCommand.Append("and c.visibleInGuide = 1 order by title,startTime");
-      SqlStatement stmt = new SqlBuilder(StatementType.Select, typeof (Program)).GetStatement(true);
+      SqlStatement stmt = new SqlBuilder(StatementType.Select, typeof(Program)).GetStatement(true);
       SqlStatement ManualJoinSQL = new SqlStatement(StatementType.Select, stmt.Command, SqlSelectCommand.ToString(),
-                                                    typeof (Program));
+                                                    typeof(Program));
       return ObjectFactory.GetCollection<Program>(ManualJoinSQL.Execute());
     }
 
@@ -1691,9 +1689,9 @@
           break;
       }
       SqlSelectCommand.Append("and c.visibleInGuide = 1 order by description, startTime");
-      SqlStatement stmt = new SqlBuilder(StatementType.Select, typeof (Program)).GetStatement(true);
+      SqlStatement stmt = new SqlBuilder(StatementType.Select, typeof(Program)).GetStatement(true);
       SqlStatement ManualJoinSQL = new SqlStatement(StatementType.Select, stmt.Command, SqlSelectCommand.ToString(),
-                                                    typeof (Program));
+                                                    typeof(Program));
       return ObjectFactory.GetCollection<Program>(ManualJoinSQL.Execute());
     }
 
@@ -1943,7 +1941,7 @@
     } ;
 
     /// <summary>
-    /// Batch inserts programs - intended for faster EPG import. You must make sure before that there are no duplicates 
+    /// Batch inserts programs - intended for faster EPG import. You must make sure before that there are no duplicates
     /// (e.g. delete all program data of the current channel).
     /// Also you MUST provide a true copy of "aProgramList". If you update it's reference in your own code the values will get overwritten
     /// (possibly before they are written to disk)!
@@ -1957,7 +1955,7 @@
     }
 
     /// <summary>
-    /// Batch inserts programs - intended for faster EPG import. You must make sure before that there are no duplicates 
+    /// Batch inserts programs - intended for faster EPG import. You must make sure before that there are no duplicates
     /// (e.g. delete all program data of the current channel).
     /// Also you MUST provide a true copy of "aProgramList". If you update it's reference in your own code the values will get overwritten
     /// (possibly before they are written to disk)!
@@ -1967,7 +1965,7 @@
     /// <param name="aThreadPriority">Use "Lowest" for Background imports allowing LiveTV, AboveNormal for full speed</param>
     /// <returns>The record count of programs if successful, 0 on errors</returns>
     /// <remarks><para>Inserts are queued to be performed in the background. Each batch of inserts is executed in a single transaction.
-    /// You may also optionally specify to delete either all existing programs in the same channel(s) as the programs to be inserted 
+    /// You may also optionally specify to delete either all existing programs in the same channel(s) as the programs to be inserted
     /// (<see cref="DeleteBeforeImportOption.ProgramsOnSameChannel"/>), or existing programs that would otherwise overlap new programs
     /// (<see cref="DeleteBeforeImportOption.OverlappingPrograms"/>), or none (<see cref="DeleteBeforeImportOption.None"/>).
     /// The deletion is also performed in the same transaction as the inserts so that EPG will not be at any time empty.</para>
@@ -2183,7 +2181,7 @@
             }
           }
           // Now all queued inserts have been processed, clear Gentle cache
-          Gentle.Common.CacheManager.ClearQueryResultsByType(typeof (Program));
+          Gentle.Common.CacheManager.ClearQueryResultsByType(typeof(Program));
         }
       }
       catch (Exception ex)
@@ -3082,7 +3080,7 @@
     public Schedule GetSchedule(int idChannel, string programName, DateTime startTime, DateTime endTime,
                                 int scheduleType)
     {
-      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (Schedule));
+      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof(Schedule));
       sb.AddConstraint(Operator.Equals, "idChannel", idChannel);
       sb.AddConstraint(Operator.Equals, "programName", programName);
       sb.AddConstraint(Operator.Equals, "startTime", startTime);
@@ -3108,7 +3106,7 @@
 
     public Recording GetRecordingByFileName(string fileName)
     {
-      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (Recording));
+      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof(Recording));
       sb.AddConstraint(Operator.Equals, "fileName", fileName);
       sb.SetRowLimit(1);
       SqlStatement stmt = sb.GetStatement(true);
@@ -3126,7 +3124,7 @@
 
     public RadioChannelGroup GetRadioChannelGroupByName(string name)
     {
-      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (RadioChannelGroup));
+      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof(RadioChannelGroup));
       sb.AddConstraint(Operator.Equals, "groupName", name);
       SqlStatement stmt = sb.GetStatement(true);
       IList<RadioChannelGroup> groups = ObjectFactory.GetCollection<RadioChannelGroup>(stmt.Execute());
@@ -3149,7 +3147,7 @@
 
     public ChannelGroup GetGroupByName(string aGroupName, int aSortOrder)
     {
-      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (ChannelGroup));
+      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof(ChannelGroup));
       sb.AddConstraint(Operator.Like, "groupName", "%" + aGroupName + "%");
       // use like here since the user might have changed the casing
       if (aSortOrder > -1)
@@ -3184,7 +3182,7 @@
 
     public IList<SoftwareEncoder> GetSofwareEncodersVideo()
     {
-      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (SoftwareEncoder));
+      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof(SoftwareEncoder));
       sb.AddConstraint(Operator.Equals, "type", 0);
       sb.AddOrderByField(true, "priority");
       SqlStatement stmt = sb.GetStatement(true);
@@ -3193,7 +3191,7 @@
 
     public IList<SoftwareEncoder> GetSofwareEncodersAudio()
     {
-      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (SoftwareEncoder));
+      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof(SoftwareEncoder));
       sb.AddConstraint(Operator.Equals, "type", 1);
       sb.AddOrderByField(true, "priority");
       SqlStatement stmt = sb.GetStatement(true);
@@ -3204,12 +3202,12 @@
 
     public bool IsChannelMappedToCard(Channel dbChannel, Card card, bool forEpg)
     {
-      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (ChannelMap));
+      SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof(ChannelMap));
       SqlStatement origStmt = sb.GetStatement(true);
       string sql = "select cm.* from ChannelMap cm where cm.idChannel =" +
                    dbChannel.IdChannel + " and cm.idCard=" + card.IdCard + (forEpg ? "" : " and cm.epgOnly=0");
       SqlStatement statement = new SqlStatement(StatementType.Select, origStmt.Command, sql,
-                                                typeof (Channel));
+                                                typeof(Channel));
       IList<ChannelMap> maps = ObjectFactory.GetCollection<ChannelMap>(statement.Execute());
       return maps != null && maps.Count > 0;
     }
Index: TvEngine3/TVLibrary/TVDatabase/TvBusinessLayer/TvBusinessLayer.csproj
===================================================================
--- TvEngine3/TVLibrary/TVDatabase/TvBusinessLayer/TvBusinessLayer.csproj	(revision 28196)
+++ TvEngine3/TVLibrary/TVDatabase/TvBusinessLayer/TvBusinessLayer.csproj	(working copy)
@@ -74,6 +74,9 @@
     </Reference>
     <Reference Include="System.Data" />
     <Reference Include="System.Xml" />
+    <Reference Include="TvControl">
+      <HintPath>..\..\TvControl\bin\Release\TvControl.dll</HintPath>
+    </Reference>
   </ItemGroup>
   <ItemGroup>
     <Compile Include="..\..\..\..\Common-MP-TVE3\SolutionInfo.cs">
Index: TvEngine3/TVLibrary/TVDatabase/TVDatabase.csproj
===================================================================
--- TvEngine3/TVLibrary/TVDatabase/TVDatabase.csproj	(revision 28196)
+++ TvEngine3/TVLibrary/TVDatabase/TVDatabase.csproj	(working copy)
@@ -110,6 +110,10 @@
     <Compile Include="CardGroupMap.cs" />
   </ItemGroup>
   <ItemGroup>
+    <ProjectReference Include="..\..\..\Common-MP-TVE3\DirectShowLib\DirectShowLib.csproj">
+      <Project>{CE009BFA-5EF6-4153-B2A1-2FA79698A9AE}</Project>
+      <Name>DirectShowLib</Name>
+    </ProjectReference>
     <ProjectReference Include="..\TvLibrary.Interfaces\TvLibrary.Interfaces.csproj">
       <Project>{AE752FB4-7450-4150-9BAD-19EFA9D2AC37}</Project>
       <Name>TvLibrary.Interfaces</Name>
Index: TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/ATSC/TvCardATSC.cs
===================================================================
--- TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/ATSC/TvCardATSC.cs	(revision 28196)
+++ TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/ATSC/TvCardATSC.cs	(working copy)
@@ -320,7 +320,7 @@
         }
         foreach (TuningDetail detail in dbchannel.ReferringTuningDetail())
         {
-          if (detail.ChannelType == 1)
+          if (detail.ChannelType == ChannelProviderType.ATSC)
           {
             atscchannel.MajorChannel = detail.MajorChannel;
             atscchannel.MinorChannel = detail.MinorChannel;
@@ -369,6 +369,14 @@
       return true;
     }
 
+    /// <summary>
+    /// Method to create channel and fill it with given in arguments parameters
+    /// </summary>
+    /// <param name="networkid"></param>
+    /// <param name="transportid"></param>
+    /// <param name="serviceid"></param>
+    /// <param name="name"></param>
+    /// <returns>new ATSCChannel</returns>
     protected override DVBBaseChannel CreateChannel(int networkid, int transportid, int serviceid, string name)
     {
       ATSCChannel channel = new ATSCChannel();
Index: TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/DVBC/TvCardDVBC.cs
===================================================================
--- TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/DVBC/TvCardDVBC.cs	(revision 28196)
+++ TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/DVBC/TvCardDVBC.cs	(working copy)
@@ -313,7 +313,7 @@
         }
         foreach (TuningDetail detail in dbchannel.ReferringTuningDetail())
         {
-          if (detail.ChannelType == 2)
+          if (detail.ChannelType == ChannelProviderType.DVBC)
           {
             dvbcchannel.Frequency = detail.Frequency;
             dvbcchannel.ModulationType = (ModulationType)detail.Modulation;
Index: TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/DVBS/TvCardDVBS.cs
===================================================================
--- TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/DVBS/TvCardDVBS.cs	(revision 28196)
+++ TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/DVBS/TvCardDVBS.cs	(working copy)
@@ -428,7 +428,7 @@
         }
         foreach (TuningDetail detail in dbchannel.ReferringTuningDetail())
         {
-          if (detail.ChannelType == 3)
+          if (detail.ChannelType == ChannelProviderType.DVBS)
           {
             dvbschannel.Frequency = detail.Frequency;
             dvbschannel.Polarisation = (Polarisation)detail.Polarisation;
Index: TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/DVBT/TvCardDVBT.cs
===================================================================
--- TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/DVBT/TvCardDVBT.cs	(revision 28196)
+++ TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/DVBT/TvCardDVBT.cs	(working copy)
@@ -302,7 +302,7 @@
         }
         foreach (TuningDetail detail in dbchannel.ReferringTuningDetail())
         {
-          if (detail.ChannelType == 4)
+          if (detail.ChannelType == ChannelProviderType.DVBT)
           {
             dvbtchannel.Frequency = detail.Frequency;
             dvbtchannel.BandWidth = detail.Bandwidth;
Index: TvEngine3/TVLibrary/TVLibrary/TimeShiftingEPGGrabber.cs
===================================================================
--- TvEngine3/TVLibrary/TVLibrary/TimeShiftingEPGGrabber.cs	(revision 28196)
+++ TvEngine3/TVLibrary/TVLibrary/TimeShiftingEPGGrabber.cs	(working copy)
@@ -54,7 +54,7 @@
       double timeout;
       if (!double.TryParse(layer.GetSetting("timeshiftingEpgGrabberTimeout", "2").Value, out timeout))
         timeout = 2;
-      _epgTimer.Interval = timeout * 60000;
+      _epgTimer.Interval = timeout * 1000;
     }
 
     public bool StartGrab()
Index: TvEngine3/TVLibrary/TvService/Epg/EpgGrabber.cs
===================================================================
--- TvEngine3/TVLibrary/TvService/Epg/EpgGrabber.cs	(revision 28196)
+++ TvEngine3/TVLibrary/TvService/Epg/EpgGrabber.cs	(working copy)
@@ -269,15 +269,15 @@
           continue;
 
         //check if card type is the same as the channel type of the transponder
-        if (type == CardType.Atsc && TransponderList.Instance.CurrentTransponder.TuningDetail.ChannelType != 1)
+        if (type == CardType.Atsc && TransponderList.Instance.CurrentTransponder.TuningDetail.ChannelType != ChannelProviderType.ATSC)
           continue;
-        if (type == CardType.DvbC && TransponderList.Instance.CurrentTransponder.TuningDetail.ChannelType != 2)
+        if (type == CardType.DvbC && TransponderList.Instance.CurrentTransponder.TuningDetail.ChannelType != ChannelProviderType.DVBC)
           continue;
-        if (type == CardType.DvbS && TransponderList.Instance.CurrentTransponder.TuningDetail.ChannelType != 3)
+        if (type == CardType.DvbS && TransponderList.Instance.CurrentTransponder.TuningDetail.ChannelType != ChannelProviderType.DVBS)
           continue;
-        if (type == CardType.DvbT && TransponderList.Instance.CurrentTransponder.TuningDetail.ChannelType != 4)
+        if (type == CardType.DvbT && TransponderList.Instance.CurrentTransponder.TuningDetail.ChannelType != ChannelProviderType.DVBT)
           continue;
-        if (type == CardType.DvbIP && TransponderList.Instance.CurrentTransponder.TuningDetail.ChannelType != 7)
+        if (type == CardType.DvbIP && TransponderList.Instance.CurrentTransponder.TuningDetail.ChannelType != ChannelProviderType.DVBIP)
           continue;
 
         //find next channel to grab
Index: TvEngine3/TVLibrary/TvService/Epg/Transponder.cs
===================================================================
--- TvEngine3/TVLibrary/TvService/Epg/Transponder.cs	(revision 28196)
+++ TvEngine3/TVLibrary/TvService/Epg/Transponder.cs	(working copy)
@@ -176,7 +176,7 @@
     /// </summary>
     public override int GetHashCode()
     {
-      return TuningDetail.Frequency + TuningDetail.ChannelType;
+      return TuningDetail.Frequency + (int)TuningDetail.ChannelType;
     }
 
     /// <summary>
@@ -267,7 +267,7 @@
         foreach (TuningDetail detail in channel.ReferringTuningDetail())
         {
           //skip analog channels and webstream channels
-          if (detail.ChannelType == 0 || detail.ChannelType == 5)
+          if (detail.ChannelType == ChannelProviderType.Analog || detail.ChannelType == ChannelProviderType.WebStream)
             continue;
 
           //create a new transponder
