diff -Naur vdr-2.2.0-orig/channels.c vdr-2.2.0-patched/channels.c
--- vdr-2.2.0-orig/channels.c	2015-02-01 14:47:05.000000000 +0100
+++ vdr-2.2.0-patched/channels.c	2016-01-03 11:30:31.496449412 +0100
@@ -509,6 +509,11 @@
   refChannel = RefChannel;
 }
 
+void cChannel::SetGroupSep(bool Sep)
+{
+   groupSep = Sep;
+}
+
 cString cChannel::TransponderDataToString(void) const
 {
   if (cSource::IsTerr(source))
@@ -975,6 +980,16 @@
   return NULL;
 }
 
+cChannel *cChannels::GetByName(char *Name)
+{
+  for (cChannel *channel = First(); channel; channel = Next(channel))
+  {
+      if (strcmp(channel->Name(), Name)==0)
+         return channel;
+  }
+  return NULL;
+}
+
 bool cChannels::HasUniqueChannelID(cChannel *NewChannel, cChannel *OldChannel)
 {
   tChannelID NewChannelID = NewChannel->GetChannelID();
@@ -1035,7 +1050,29 @@
      NewChannel->SetId(Nid, Tid, Sid, Rid);
      NewChannel->SetName(Name, ShortName, Provider);
      NewChannel->SetSeen();
-     Add(NewChannel);
+
+     {
+         char buffer[64];
+         snprintf(buffer, sizeof(buffer), "New Channels @ %s", *cSource::ToString(NewChannel->Source()) );
+         cChannel *groupSep = GetByName(buffer);
+         if(!groupSep) // group separator for this source doesn't exist, so lets create it
+         {
+             groupSep = new cChannel();
+             groupSep->SetName(buffer, "", "");
+             groupSep->SetGroupSep(true);
+             Add(groupSep);
+         } else  // find next separator or last channel 
+         {
+             cChannel *nextChannel=Next(groupSep);
+             while (nextChannel &&  !nextChannel->GroupSep())
+             {
+                groupSep=nextChannel;
+                nextChannel=Next(nextChannel);
+             }
+         }
+         Add(NewChannel, groupSep);
+     }
+     
      ReNumber();
      return NewChannel;
      }
diff -Naur vdr-2.2.0-orig/channels.h vdr-2.2.0-patched/channels.h
--- vdr-2.2.0-orig/channels.h	2015-02-01 14:30:26.000000000 +0100
+++ vdr-2.2.0-patched/channels.h	2016-01-03 11:30:31.496449412 +0100
@@ -202,6 +202,7 @@
   void SetCaDescriptors(int Level);
   void SetLinkChannels(cLinkChannels *LinkChannels);
   void SetRefChannel(cChannel *RefChannel);
+  void SetGroupSep(bool Sep = true);
   void SetSubtitlingDescriptors(uchar *SubtitlingTypes, uint16_t *CompositionPageIds, uint16_t *AncillaryPageIds);
   void SetSeen(void);
   };
@@ -229,6 +230,7 @@
   cChannel *GetByServiceID(int Source, int Transponder, unsigned short ServiceID);
   cChannel *GetByChannelID(tChannelID ChannelID, bool TryWithoutRid = false, bool TryWithoutPolarization = false);
   cChannel *GetByTransponderID(tChannelID ChannelID);
+  cChannel *GetByName(char *Name);
   int BeingEdited(void) { return beingEdited; }
   void IncBeingEdited(void) { beingEdited++; }
   void DecBeingEdited(void) { beingEdited--; }
