diff -Naur vdr-2.4.0-orig/channels.c vdr-2.4.0-patched/channels.c
--- vdr-2.4.0-orig/channels.c	2017-06-10 17:08:56.000000000 +0200
+++ vdr-2.4.0-patched/channels.c	2018-04-21 13:54:40.363044125 +0200
@@ -536,6 +536,11 @@
   refChannel = RefChannel;
 }
 
+void cChannel::SetGroupSep(bool Sep)
+{
+   groupSep = Sep;
+}
+
 cString cChannel::TransponderDataToString(void) const
 {
   if (cSource::IsTerr(source))
@@ -1077,6 +1082,16 @@
   return Result;
 }
 
+cChannel *cChannels::GetByName(const char *Name) const
+{
+  for (cChannel *channel = (cChannel*)First(); channel; channel = (cChannel*)Next(channel))
+  {
+      if (strcmp(channel->Name(), Name)==0)
+         return channel;
+  }
+  return NULL;
+}
+
 cChannel *cChannels::NewChannel(const cChannel *Transponder, const char *Name, const char *ShortName, const char *Provider, int Nid, int Tid, int Sid, int Rid)
 {
   if (Transponder) {
@@ -1086,7 +1101,29 @@
      NewChannel->SetId(this, 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.4.0-orig/channels.h vdr-2.4.0-patched/channels.h
--- vdr-2.4.0-orig/channels.h	2017-06-10 17:06:40.000000000 +0200
+++ vdr-2.4.0-patched/channels.h	2018-04-21 13:49:46.603517025 +0200
@@ -202,6 +202,7 @@
   void SetRefChannel(cChannel *RefChannel);
   bool SetSubtitlingDescriptors(uchar *SubtitlingTypes, uint16_t *CompositionPageIds, uint16_t *AncillaryPageIds);
   void SetSeen(void);
+  void SetGroupSep(bool Sep = true);
   void DelLinkChannel(cChannel *LinkChannel);
   };
 
@@ -239,6 +240,7 @@
   cChannel *GetByChannelID(tChannelID ChannelID, bool TryWithoutRid = false, bool TryWithoutPolarization = false) { return const_cast<cChannel *>(static_cast<const cChannels *>(this)->GetByChannelID(ChannelID, TryWithoutRid, TryWithoutPolarization)); }
   const cChannel *GetByTransponderID(tChannelID ChannelID) const;
   cChannel *GetByTransponderID(tChannelID ChannelID) { return const_cast<cChannel *>(static_cast<const cChannels *>(this)->GetByTransponderID(ChannelID)); }
+  cChannel *GetByName(const char *Name) const;
   bool HasUniqueChannelID(const cChannel *NewChannel, const cChannel *OldChannel = NULL) const;
   bool SwitchTo(int Number) const;
   static int MaxNumber(void) { return maxNumber; }
