diff -Nurp a/receiver.c b/receiver.c
--- a/receiver.c	2017-05-01 10:49:20.000000000 +0200
+++ b/receiver.c	2019-03-24 13:33:19.747247776 +0100
@@ -43,7 +43,13 @@ bool cReceiver::AddPid(int Pid)
 {
   if (Pid) {
      if (numPids < MAXRECEIVEPIDS) {
-        if (!WantsPid(Pid)) {
+        int i = FindPid(Pid);
+        if (i >= 0) {
+           pref[i]++;
+           dsyslog("cReceiver: add shared PID (Pid = %d #%d)", Pid, pref[i]);
+           }
+        else {
+           pref[numPids] = 1;
            pids[numPids++] = Pid;
            if (device)
               device->AddPid(Pid);
@@ -92,9 +98,13 @@ void cReceiver::DelPid(int Pid)
   if (Pid) {
      for (int i = 0; i < numPids; i++) {
          if (pids[i] == Pid) {
-            for ( ; i < numPids; i++) // we also copy the terminating 0!
-                pids[i] = pids[i + 1];
+            if (--pref[i]) {
+               dsyslog("cReceiver: keep shared PID (Pid = %d #%d)", Pid, pref[i]);
+               return;
+               }
             numPids--;
+            pids[i] = pids[numPids]; // shorten by moving the last pid entry
+            pref[i] = pref[numPids];
             if (device)
                device->DelPid(Pid);
             return;
@@ -111,15 +121,15 @@ void cReceiver::DelPids(const int *Pids)
      }
 }
 
-bool cReceiver::WantsPid(int Pid)
+int cReceiver::FindPid(int Pid)
 {
   if (Pid) {
      for (int i = 0; i < numPids; i++) {
          if (pids[i] == Pid)
-            return true;
+            return i;
          }
      }
-  return false;
+  return -1;
 }
 
 void cReceiver::Detach(void)
diff -Nurp a/receiver.h b/receiver.h
--- a/receiver.h	2017-05-01 10:48:34.000000000 +0200
+++ b/receiver.h	2019-03-24 12:02:55.830059424 +0100
@@ -21,13 +21,15 @@ private:
   tChannelID channelID;
   int priority;
   int pids[MAXRECEIVEPIDS];
+  int pref[MAXRECEIVEPIDS];
   int numPids;
   time_t lastScrambledPacket;
   time_t startScrambleDetection;
   int scramblingTimeout;
   time_t startEitInjection;
   time_t lastEitInjection;
-  bool WantsPid(int Pid);
+  int FindPid(int Pid);
+  bool WantsPid(int Pid) { return FindPid(Pid) >= 0; }
 protected:
   cDevice *Device(void) { return device; }
   void Detach(void);
