diff -ruN vdr-2.1.5/CONTRIBUTORS vdr-2.1.6/CONTRIBUTORS
--- vdr-2.1.5/CONTRIBUTORS	2014-02-21 16:14:14.000000000 +0100
+++ vdr-2.1.6/CONTRIBUTORS	2014-03-16 13:53:47.000000000 +0100
@@ -709,6 +709,8 @@
  for suggesting to eliminate MAXDVBDEVICES
  for reporting that there are channels that need even more than 10 TS packets in order
  to detect the frame type
+ for suggesting to ignore channels with an RID that is not 0 when checking for obsolete
+ channels
 
 Reinhard Walter Buchner <rw.buchner@freenet.de>
  for adding some satellites to 'sources.conf'
@@ -1183,6 +1185,9 @@
  existing edited version of a recording
  for adding code for parsing LCN and AVC descriptors to libsi
  for fixing clearing non-editable members in the channel editor
+ for reporting a problem with adding new source types in case they are already
+ registered
+ for adding support for "Pilot", "T2-System-Id" and "SISO/MISO" parameters
 
 Ralf Klueber <ralf.klueber@vodafone.com>
  for reporting a bug in cutting a recording if there is only a single editing mark
@@ -2515,6 +2520,7 @@
  for updating 'S13E' in 'sources.conf'
  for adding maximum SNR value for PCTV Systems nanoStick T2 290e
  for updating 'sources.conf'
+ for translating OSD texts to the Finnish language
 
 Bernd Melcher <bernd@bernd-melcher.de>
  for reporting a problem with the 'servicedemo' plugin having no PLUGIN macro
@@ -2917,7 +2923,7 @@
  for suggesting to add handling MPEG audio type "ISO/IEC 14496-3 Audio with LATM
  transport syntax"
 
-Christopher Reimer <reimer.christopher@freenet.de>
+Christopher Reimer <vdr@creimer.net>
  for reporting a problem with external Dolby Digital processing via the '-a' option
  in live mode and with TS recordings
  for contributing to a patch that implements FHS support
@@ -2929,6 +2935,7 @@
  VDR source directory when doing "make plugins"
  for reverting the change from version 1.5.7 that made all logging go to LOG_ERR
  for reporting a possible crash in the OSD demo
+ for adding support for systemd
 
 Stefan Huskamp <coca_cola1@gmx.de>
  for suggesting to make entering characters via the number keys
@@ -3141,6 +3148,8 @@
  for pointing out that FindHeader() can also be used in cMpeg2Fixer::AdjTref()
  for reporting a problem with detecting user inactivity in case the system time is
  changed after VDR has been started
+ for reporting that the change "Fixed some compiler warnings with Clang 3.4.1" caused
+ ci.c to no longer compile with older versions of gcc
 
 Peter M�nster <pmlists@free.fr>
  for fixing 'make install' to not overwrite existing configuration files
@@ -3271,3 +3280,7 @@
  warning with Clang 3.4.1
  for suggesting to replace the NULL pointer assignment in ~cReceiver() to force a
  segfault with a call to abort()
+
+Christian Winkler <winkler_chr@yahoo.de>
+ for reporting a problem with transfer mode on full featured DVB cards for encrypted
+ channels that have no audio pid
diff -ruN vdr-2.1.5/HISTORY vdr-2.1.6/HISTORY
--- vdr-2.1.5/HISTORY	2014-02-23 14:05:38.000000000 +0100
+++ vdr-2.1.6/HISTORY	2014-03-16 13:53:19.000000000 +0100
@@ -8202,3 +8202,61 @@
 - Fixed the replay progress display for very long recordings.
 - Fixed detecting broken video data streams when recording.
 - Fixed handling frame detection buffer length (reported by Eike Sauer).
+
+2014-03-16: Version 2.1.6
+
+- Revoked "Fixed some compiler warnings with Clang 3.4.1" from ci.c, because this
+  did not compile with older versions of gcc (thanks to S�ren Moch).
+- Fixed keeping the current position in the Recordings menu if a recording was
+  deleted in a sub folder.
+- Fixed handling transfer mode on full featured DVB cards for encrypted channels
+  that have no audio pid (reported by Christian Winkler).
+- Fixed a possible endless loop in cH264Parser::GetGolombUe(), which caused recordings
+  on some HD channels to get stuck and resulted in buffer overflows.
+- Fixed handling PAT packets when detecting frames, so that they can be properly
+  taken into account when regenerating the index of a recording.
+- Fixed adding new source types in case they are already registered (reported by Rolf
+  Ahrenberg).
+- Removed an unnecessary assignment from cMenuRecordings::~cMenuRecordings().
+- The Recordings menu now remembers the last recording the cursor was positioned on,
+  independent of the last replayed recording. When a replay ends, however, the cursor
+  will initially be positioned to the last replayed recording again when the menu
+  is opened.
+- Updated the Finnish OSD texts (thanks to Antti Hartikainen).
+- Fixed drawing the live indicator in the LCARS skin in case there are no devices.
+- When checking for obsolete channels, those with an RID that is not 0 are now
+  ignored (suggested by Oliver Endriss).
+- The SDT is now only parsed *after* the NIT has been read, and it explicitly uses
+  the source value derived from the NIT. This should prevent new channels from being
+  created with the wrong source.
+- Added a log message in case a receiver is detached from its device because the
+  assigned CAM can't decrypt the channel.
+- Refactored setup parameter handling for output devices:
+  + The function cDevice::GetVideoSystem() has been deprecated and will be removed
+    in a future version. In order to check whether a particular plugin needs to be
+    modified if this function is removed, you can comment out the line
+    #define DEPRECATED_VIDEOSYSTEM
+    in device.h.
+  + Handling the "video (display) format" (things like 16:9, 4:3, pan&scan, letterbox
+    etc) shall now be done by the individual output devices, because the types and
+    numbers of parameters are too device specific. The Setup/DVB parameters
+    "Video format" and "Video display format" are still there for now and can be used
+    by SD devices. HD devices, however, shall not use these parameters (any more),
+    but rather implement their own setup menu with the necessary parameters for
+    controlling output.
+  + The dvbhdffdevice plugin has been modified accordingly.
+  + Made it clear that cDevice::SetDigitalAudioDevice() merely tells the output device
+    that the current audio track is Dolby Digital. This function was only used by the
+    original "full featured" DVB cards - do not use it for new developments!
+    If an output device has several ways of replaying audio (like HDMI or analog jack)
+    it shall implement the proper options in its plugin's SetupMenu() function.
+- Added support for "Pilot", "T2-System-Id" and "SISO/MISO" parameters (thanks to
+  Rolf Ahrenberg).
+- Now initializing the isOnVideoDirectoryFileSystem member of cRecording when
+  scanning the video directory, so that it won't cause a delay when opening the menu
+  on a system with a large number of recordings.
+- Now resetting the isOnVideoDirectoryFileSystem member of a cRecording to -1 after
+  renaming it, so that it will be re-checked upon the next call to
+  IsOnVideoDirectoryFileSystem().
+- Added support for systemd (thanks to Christopher Reimer). To activate this you
+  need to add "SDNOTIFY=1" to the 'make' call.
diff -ruN vdr-2.1.5/MANUAL vdr-2.1.6/MANUAL
--- vdr-2.1.5/MANUAL	2013-11-03 14:40:49.000000000 +0100
+++ vdr-2.1.6/MANUAL	2014-03-15 14:40:37.000000000 +0100
@@ -731,13 +731,13 @@
                          1 = ANSI/SCTE
 
   Video format = 4:3     The video format (or aspect ratio) of the tv set in use
-                         (4:3 or 16:9).
+                         (4:3 or 16:9). Applies only to SD output devices.
 
   Video display format = letterbox
                          The display format to use for playing wide screen video on
                          a 4:3 tv set ("pan & scan", "letterbox" or "center cut out").
                          This option is only available if "Video format" is set to
-                         4:3.
+                         4:3. Applies only to SD output devices.
 
   Use Dolby Digital = yes
                          Controls whether Dolby Digital tracks appear in the "Audio"
diff -ruN vdr-2.1.5/Makefile vdr-2.1.6/Makefile
--- vdr-2.1.5/Makefile	2013-04-14 14:18:08.000000000 +0200
+++ vdr-2.1.6/Makefile	2014-03-16 13:47:35.000000000 +0100
@@ -4,7 +4,7 @@
 # See the main source file 'vdr.c' for copyright information and
 # how to reach the author.
 #
-# $Id: Makefile 3.1 2013/04/14 12:18:08 kls Exp $
+# $Id: Makefile 3.2 2014/03/16 12:47:35 kls Exp $
 
 .DELETE_ON_ERROR:
 
@@ -93,6 +93,11 @@
 DEFINES += -DBIDI
 LIBS += $(shell pkg-config --libs fribidi)
 endif
+ifdef SDNOTIFY
+INCLUDES += $(shell pkg-config --cflags libsystemd-daemon)
+DEFINES += -DSDNOTIFY
+LIBS += $(shell pkg-config --libs libsystemd-daemon)
+endif
 
 LIRC_DEVICE ?= /var/run/lirc/lircd
 
diff -ruN vdr-2.1.5/PLUGINS/src/dvbhddevice/HISTORY vdr-2.1.6/PLUGINS/src/dvbhddevice/HISTORY
--- vdr-2.1.5/PLUGINS/src/dvbhddevice/HISTORY	2014-01-17 10:26:25.000000000 +0100
+++ vdr-2.1.6/PLUGINS/src/dvbhddevice/HISTORY	2014-03-15 14:38:50.000000000 +0100
@@ -93,3 +93,8 @@
 2014-01-17: Version 2.1.4
 
 - Using PCR based clock recovery in transfer mode.
+
+2014-03-15: Version 2.1.6
+
+- The function cDevice::GetVideoSystem() has been deprecated.
+- Removed old-style video format setting functions.
diff -ruN vdr-2.1.5/PLUGINS/src/dvbhddevice/dvbhddevice.c vdr-2.1.6/PLUGINS/src/dvbhddevice/dvbhddevice.c
--- vdr-2.1.5/PLUGINS/src/dvbhddevice/dvbhddevice.c	2014-02-08 13:52:07.000000000 +0100
+++ vdr-2.1.6/PLUGINS/src/dvbhddevice/dvbhddevice.c	2014-03-11 12:25:40.000000000 +0100
@@ -10,7 +10,7 @@
 #include "menu.h"
 #include "setup.h"
 
-static const char *VERSION        = "2.1.5";
+static const char *VERSION        = "2.1.6";
 static const char *DESCRIPTION    = trNOOP("HD Full Featured DVB device");
 static const char *MAINMENUENTRY  = "dvbhddevice";
 
diff -ruN vdr-2.1.5/PLUGINS/src/dvbhddevice/dvbhdffdevice.c vdr-2.1.6/PLUGINS/src/dvbhddevice/dvbhdffdevice.c
--- vdr-2.1.5/PLUGINS/src/dvbhddevice/dvbhdffdevice.c	2014-01-15 21:16:52.000000000 +0100
+++ vdr-2.1.6/PLUGINS/src/dvbhddevice/dvbhdffdevice.c	2014-03-15 14:11:00.000000000 +0100
@@ -108,8 +108,16 @@
 
 void cDvbHdFfDevice::MakePrimaryDevice(bool On)
 {
-  if (On)
+  if (On) {
      new cHdffOsdProvider(mHdffCmdIf);
+     //TODO the same code is also used in cHdffSetupPage::Store() and cHdffMenu::SetVideoConversion() - combine?
+     HdffVideoFormat_t videoFormat;
+     videoFormat.AutomaticEnabled = true;
+     videoFormat.AfdEnabled = false;
+     videoFormat.TvFormat = (HdffTvFormat_t) gHdffSetup.TvFormat;
+     videoFormat.VideoConversion = (HdffVideoConversion_t) gHdffSetup.VideoConversion;
+     mHdffCmdIf->CmdAvSetVideoFormat(0, &videoFormat);
+     }
   cDvbDevice::MakePrimaryDevice(On);
 }
 
@@ -235,37 +243,6 @@
     return result;
 }
 
-void cDvbHdFfDevice::SetVideoDisplayFormat(eVideoDisplayFormat VideoDisplayFormat)
-{
-  //TODO???
-  cDevice::SetVideoDisplayFormat(VideoDisplayFormat);
-}
-
-void cDvbHdFfDevice::SetVideoFormat(bool VideoFormat16_9)
-{
-  HdffVideoFormat_t videoFormat;
-  videoFormat.AutomaticEnabled = true;
-  videoFormat.AfdEnabled = false;
-  videoFormat.TvFormat = (HdffTvFormat_t) gHdffSetup.TvFormat;
-  videoFormat.VideoConversion = (HdffVideoConversion_t) gHdffSetup.VideoConversion;
-  mHdffCmdIf->CmdAvSetVideoFormat(0, &videoFormat);
-}
-
-eVideoSystem cDvbHdFfDevice::GetVideoSystem(void)
-{
-  eVideoSystem VideoSystem = vsPAL;
-  if (fd_video >= 0) {
-     video_size_t vs;
-     if (ioctl(fd_video, VIDEO_GET_SIZE, &vs) == 0) {
-        if (vs.h == 480 || vs.h == 240)
-           VideoSystem = vsNTSC;
-        }
-     else
-        LOG_ERROR;
-     }
-  return VideoSystem;
-}
-
 void cDvbHdFfDevice::GetVideoSize(int &Width, int &Height, double &VideoAspect)
 {
   if (fd_video >= 0) {
@@ -383,8 +360,8 @@
 
   bool DoTune = !IsTunedToTransponder(Channel);
 
-  bool pidHandlesVideo = pidHandles[ptVideo].pid == vpid;
-  bool pidHandlesAudio = pidHandles[ptAudio].pid == apid;
+  bool pidHandlesVideo = vpid && pidHandles[ptVideo].pid == vpid;
+  bool pidHandlesAudio = apid && pidHandles[ptAudio].pid == apid;
 
   bool TurnOffLivePIDs = DoTune
                          || !IsPrimaryDevice()
@@ -443,11 +420,6 @@
   mHdffCmdIf->CmdMuxSetVolume(Volume * 100 / 255);
 }
 
-void cDvbHdFfDevice::SetDigitalAudioDevice(bool On)
-{
-  // not needed
-}
-
 void cDvbHdFfDevice::SetAudioTrackDevice(eTrackType Type)
 {
     //printf("SetAudioTrackDevice %d\n", Type);
diff -ruN vdr-2.1.5/PLUGINS/src/dvbhddevice/dvbhdffdevice.h vdr-2.1.6/PLUGINS/src/dvbhddevice/dvbhdffdevice.h
--- vdr-2.1.5/PLUGINS/src/dvbhddevice/dvbhdffdevice.h	2014-01-15 21:16:52.000000000 +0100
+++ vdr-2.1.6/PLUGINS/src/dvbhddevice/dvbhdffdevice.h	2014-03-14 12:51:37.000000000 +0100
@@ -51,9 +51,6 @@
 // Video format facilities
 
 public:
-  virtual void SetVideoDisplayFormat(eVideoDisplayFormat VideoDisplayFormat);
-  virtual void SetVideoFormat(bool VideoFormat16_9);
-  virtual eVideoSystem GetVideoSystem(void);
   virtual void GetVideoSize(int &Width, int &Height, double &VideoAspect);
   virtual void GetOsdSize(int &Width, int &Height, double &PixelAspect);
 
@@ -70,7 +67,6 @@
   virtual int GetAudioChannelDevice(void);
   virtual void SetAudioChannelDevice(int AudioChannel);
   virtual void SetVolumeDevice(int Volume);
-  virtual void SetDigitalAudioDevice(bool On);
 
 // Player facilities
 
diff -ruN vdr-2.1.5/PLUGINS/src/dvbsddevice/HISTORY vdr-2.1.6/PLUGINS/src/dvbsddevice/HISTORY
--- vdr-2.1.5/PLUGINS/src/dvbsddevice/HISTORY	2014-01-05 11:53:47.000000000 +0100
+++ vdr-2.1.6/PLUGINS/src/dvbsddevice/HISTORY	2014-03-15 13:30:44.000000000 +0100
@@ -55,3 +55,7 @@
 
 - Avoiding unnecessary pkg-config warnings in plugin Makefiles.
 - cDevice::TrickSpeed() now has an additional parameter named Forward.
+
+2014-03-15: Version 2.1.2
+
+- The function cDevice::GetVideoSystem() has been deprecated.
diff -ruN vdr-2.1.5/PLUGINS/src/dvbsddevice/dvbsddevice.c vdr-2.1.6/PLUGINS/src/dvbsddevice/dvbsddevice.c
--- vdr-2.1.5/PLUGINS/src/dvbsddevice/dvbsddevice.c	2014-01-01 14:43:28.000000000 +0100
+++ vdr-2.1.6/PLUGINS/src/dvbsddevice/dvbsddevice.c	2014-03-15 13:28:14.000000000 +0100
@@ -3,14 +3,14 @@
  *
  * See the README file for copyright information and how to reach the author.
  *
- * $Id: dvbsddevice.c 3.2 2014/01/01 13:43:28 kls Exp $
+ * $Id: dvbsddevice.c 3.3 2014/03/15 12:28:14 kls Exp $
  */
 
 #include <getopt.h>
 #include <vdr/plugin.h>
 #include "dvbsdffdevice.h"
 
-static const char *VERSION        = "2.1.1";
+static const char *VERSION        = "2.1.2";
 static const char *DESCRIPTION    = "SD Full Featured DVB device";
 
 class cPluginDvbsddevice : public cPlugin {
diff -ruN vdr-2.1.5/PLUGINS/src/dvbsddevice/dvbsdffdevice.c vdr-2.1.6/PLUGINS/src/dvbsddevice/dvbsdffdevice.c
--- vdr-2.1.5/PLUGINS/src/dvbsddevice/dvbsdffdevice.c	2014-01-01 14:39:24.000000000 +0100
+++ vdr-2.1.6/PLUGINS/src/dvbsddevice/dvbsdffdevice.c	2014-03-15 13:35:21.000000000 +0100
@@ -3,7 +3,7 @@
  *
  * See the README file for copyright information and how to reach the author.
  *
- * $Id: dvbsdffdevice.c 3.1 2014/01/01 13:39:24 kls Exp $
+ * $Id: dvbsdffdevice.c 3.3 2014/03/15 12:35:21 kls Exp $
  */
 
 #include "dvbsdffdevice.h"
@@ -241,21 +241,6 @@
   SetVideoDisplayFormat(eVideoDisplayFormat(Setup.VideoDisplayFormat));
 }
 
-eVideoSystem cDvbSdFfDevice::GetVideoSystem(void)
-{
-  eVideoSystem VideoSystem = vsPAL;
-  if (fd_video >= 0) {
-     video_size_t vs;
-     if (ioctl(fd_video, VIDEO_GET_SIZE, &vs) == 0) {
-        if (vs.h == 480 || vs.h == 240)
-           VideoSystem = vsNTSC;
-        }
-     else
-        LOG_ERROR;
-     }
-  return VideoSystem;
-}
-
 void cDvbSdFfDevice::GetVideoSize(int &Width, int &Height, double &VideoAspect)
 {
   if (fd_video >= 0) {
@@ -400,8 +385,8 @@
 
   bool DoTune = !IsTunedToTransponder(Channel);
 
-  bool pidHandlesVideo = pidHandles[ptVideo].pid == vpid;
-  bool pidHandlesAudio = pidHandles[ptAudio].pid == apid;
+  bool pidHandlesVideo = vpid && pidHandles[ptVideo].pid == vpid;
+  bool pidHandlesAudio = apid && pidHandles[ptAudio].pid == apid;
 
   bool TurnOffLivePIDs = DoTune
                          || !IsPrimaryDevice()
diff -ruN vdr-2.1.5/PLUGINS/src/dvbsddevice/dvbsdffdevice.h vdr-2.1.6/PLUGINS/src/dvbsddevice/dvbsdffdevice.h
--- vdr-2.1.5/PLUGINS/src/dvbsddevice/dvbsdffdevice.h	2014-01-01 14:39:30.000000000 +0100
+++ vdr-2.1.6/PLUGINS/src/dvbsddevice/dvbsdffdevice.h	2014-03-15 13:36:35.000000000 +0100
@@ -3,7 +3,7 @@
  *
  * See the README file for copyright information and how to reach the author.
  *
- * $Id: dvbsdffdevice.h 3.1 2014/01/01 13:39:30 kls Exp $
+ * $Id: dvbsdffdevice.h 3.2 2014/03/15 12:36:35 kls Exp $
  */
 
 #ifndef __DVBSDFFDEVICE_H
@@ -63,7 +63,6 @@
 public:
   virtual void SetVideoDisplayFormat(eVideoDisplayFormat VideoDisplayFormat);
   virtual void SetVideoFormat(bool VideoFormat16_9);
-  virtual eVideoSystem GetVideoSystem(void);
   virtual void GetVideoSize(int &Width, int &Height, double &VideoAspect);
   virtual void GetOsdSize(int &Width, int &Height, double &PixelAspect);
 
diff -ruN vdr-2.1.5/channels.c vdr-2.1.6/channels.c
--- vdr-2.1.5/channels.c	2014-01-04 16:01:52.000000000 +0100
+++ vdr-2.1.6/channels.c	2014-03-10 14:14:02.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: channels.c 3.4 2014/01/04 15:01:52 kls Exp $
+ * $Id: channels.c 3.5 2014/03/10 13:14:02 kls Exp $
  */
 
 #include "channels.h"
@@ -1039,7 +1039,7 @@
 void cChannels::MarkObsoleteChannels(int Source, int Nid, int Tid)
 {
   for (cChannel *channel = First(); channel; channel = Next(channel)) {
-      if (time(NULL) - channel->Seen() > CHANNELTIMEOBSOLETE && channel->Source() == Source && channel->Nid() == Nid && channel->Tid() == Tid) {
+      if (time(NULL) - channel->Seen() > CHANNELTIMEOBSOLETE && channel->Source() == Source && channel->Nid() == Nid && channel->Tid() == Tid && channel->Rid() == 0) {
          if (!endswith(channel->Name(), CHANNELMARKOBSOLETE))
             channel->SetName(cString::sprintf("%s %s", channel->Name(), CHANNELMARKOBSOLETE), channel->ShortName(), cString::sprintf("%s %s", CHANNELMARKOBSOLETE, channel->Provider()));
          }
diff -ruN vdr-2.1.5/ci.c vdr-2.1.6/ci.c
--- vdr-2.1.5/ci.c	2014-02-08 13:25:55.000000000 +0100
+++ vdr-2.1.6/ci.c	2014-02-25 10:59:55.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: ci.c 3.11 2014/02/08 12:25:55 kls Exp $
+ * $Id: ci.c 3.12 2014/02/25 09:59:55 kls Exp $
  */
 
 #include "ci.h"
@@ -864,7 +864,7 @@
 #pragma pack(1)
      struct tTime { uint16_t mjd; uint8_t h, m, s; short offset; };
 #pragma pack()
-     tTime T = { .mjd = htons(MJD), .h = DEC2BCD(tm_gmt.tm_hour), .m = DEC2BCD(tm_gmt.tm_min), .s = DEC2BCD(tm_gmt.tm_sec), .offset = short(htons(tm_loc.tm_gmtoff / 60)) };
+     tTime T = { mjd : htons(MJD), h : DEC2BCD(tm_gmt.tm_hour), m : DEC2BCD(tm_gmt.tm_min), s : DEC2BCD(tm_gmt.tm_sec), offset : short(htons(tm_loc.tm_gmtoff / 60)) };
      bool OldDumpTPDUDataTransfer = DumpTPDUDataTransfer;
      DumpTPDUDataTransfer &= DumpDateTime;
      if (DumpDateTime)
@@ -1004,7 +1004,7 @@
                  case DCC_SET_MMI_MODE:
                       if (l == 2 && *++d == MM_HIGH_LEVEL) {
                          struct tDisplayReply { uint8_t id; uint8_t mode; };
-                         tDisplayReply dr = { .id = DRI_MMI_MODE_ACK, .mode = MM_HIGH_LEVEL };
+                         tDisplayReply dr = { id : DRI_MMI_MODE_ACK, mode : MM_HIGH_LEVEL };
                          dbgprotocol("Slot %d: ==> Display Reply (%d)\n", Tc()->CamSlot()->SlotNumber(), SessionId());
                          SendData(AOT_DISPLAY_REPLY, 2, (uint8_t *)&dr);
                          }
diff -ruN vdr-2.1.5/config.h vdr-2.1.6/config.h
--- vdr-2.1.5/config.h	2014-01-26 13:31:58.000000000 +0100
+++ vdr-2.1.6/config.h	2014-02-25 11:00:23.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: config.h 3.7 2014/01/26 12:31:58 kls Exp $
+ * $Id: config.h 3.8 2014/02/25 10:00:23 kls Exp $
  */
 
 #ifndef __CONFIG_H
@@ -22,13 +22,13 @@
 
 // VDR's own version number:
 
-#define VDRVERSION  "2.1.5"
-#define VDRVERSNUM   20105  // Version * 10000 + Major * 100 + Minor
+#define VDRVERSION  "2.1.6"
+#define VDRVERSNUM   20106  // Version * 10000 + Major * 100 + Minor
 
 // The plugin API's version number:
 
-#define APIVERSION  "2.1.5"
-#define APIVERSNUM   20105  // Version * 10000 + Major * 100 + Minor
+#define APIVERSION  "2.1.6"
+#define APIVERSNUM   20106  // Version * 10000 + Major * 100 + Minor
 
 // When loading plugins, VDR searches them by their APIVERSION, which
 // may be smaller than VDRVERSION in case there have been no changes to
diff -ruN vdr-2.1.5/device.c vdr-2.1.6/device.c
--- vdr-2.1.5/device.c	2014-02-18 14:12:39.000000000 +0100
+++ vdr-2.1.6/device.c	2014-03-15 14:23:28.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: device.c 3.12 2014/02/18 13:12:39 kls Exp $
+ * $Id: device.c 3.15 2014/03/15 13:23:28 kls Exp $
  */
 
 #include "device.h"
@@ -430,11 +430,6 @@
 {
 }
 
-eVideoSystem cDevice::GetVideoSystem(void)
-{
-  return vsPAL;
-}
-
 void cDevice::GetVideoSize(int &Width, int &Height, double &VideoAspect)
 {
   Width = 0;
@@ -575,7 +570,7 @@
      AttachFilter(eitFilter = new cEitFilter);
      AttachFilter(patFilter = new cPatFilter);
      AttachFilter(sdtFilter = new cSdtFilter(patFilter));
-     AttachFilter(nitFilter = new cNitFilter);
+     AttachFilter(nitFilter = new cNitFilter(sdtFilter));
      }
 }
 
@@ -1608,6 +1603,7 @@
                  for (int i = 0; i < MAXRECEIVERS; i++) {
                      if (receiver[i] && receiver[i]->WantsPid(Pid)) {
                         if (DetachReceivers) {
+                           dsyslog("detaching receiver - won't decrypt channel %s with CAM %d", *receiver[i]->ChannelID().ToString(), CamSlotNumber);
                            ChannelCamRelations.SetChecked(receiver[i]->ChannelID(), CamSlotNumber);
                            Detach(receiver[i]);
                            }
diff -ruN vdr-2.1.5/device.h vdr-2.1.6/device.h
--- vdr-2.1.5/device.h	2014-01-02 11:47:08.000000000 +0100
+++ vdr-2.1.6/device.h	2014-03-15 15:04:58.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: device.h 3.8 2014/01/02 10:47:08 kls Exp $
+ * $Id: device.h 3.9 2014/03/15 14:04:58 kls Exp $
  */
 
 #ifndef __DEVICE_H
@@ -55,9 +55,12 @@
                  // KNOWN TO YOUR PLAYER.
                };
 
+#define DEPRECATED_VIDEOSYSTEM
+#ifdef DEPRECATED_VIDEOSYSTEM
 enum eVideoSystem { vsPAL,
                     vsNTSC
                   };
+#endif
 
 enum eVideoDisplayFormat { vdfPanAndScan,
                            vdfLetterBox,
@@ -462,12 +465,19 @@
          ///< Sets the video display format to the given one (only useful
          ///< if this device has an MPEG decoder).
          ///< A derived class must first call the base class function!
+         ///< NOTE: this is only for SD devices. HD devices shall implement their
+         ///< own setup menu with the necessary parameters for controlling output.
   virtual void SetVideoFormat(bool VideoFormat16_9);
          ///< Sets the output video format to either 16:9 or 4:3 (only useful
          ///< if this device has an MPEG decoder).
-  virtual eVideoSystem GetVideoSystem(void);
+         ///< NOTE: this is only for SD devices. HD devices shall implement their
+         ///< own setup menu with the necessary parameters for controlling output.
+#ifdef DEPRECATED_VIDEOSYSTEM
+  virtual eVideoSystem GetVideoSystem(void) { return vsPAL; }
          ///< Returns the video system of the currently displayed material
          ///< (default is PAL).
+         ///< This function is deprecated and will be removed in a future version!
+#endif
   virtual void GetVideoSize(int &Width, int &Height, double &VideoAspect);
          ///< Returns the Width, Height and VideoAspect ratio of the currently
          ///< displayed video material. Width and Height are given in pixel
@@ -566,8 +576,9 @@
   virtual void SetVolumeDevice(int Volume);
        ///< Sets the audio volume on this device (Volume = 0...255).
   virtual void SetDigitalAudioDevice(bool On);
-       ///< Tells the actual device that digital audio output shall be switched
-       ///< on or off.
+       ///< Tells the output device that the current audio track is Dolby Digital.
+       ///< Only used by the original "full featured" DVB cards - do not use for new
+       ///< developments!
 public:
   bool IsMute(void) const { return mute; }
   bool ToggleMute(void);
diff -ruN vdr-2.1.5/dvbdevice.c vdr-2.1.6/dvbdevice.c
--- vdr-2.1.5/dvbdevice.c	2014-01-20 12:46:26.000000000 +0100
+++ vdr-2.1.6/dvbdevice.c	2014-03-16 11:38:31.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: dvbdevice.c 3.10 2014/01/20 11:46:26 kls Exp $
+ * $Id: dvbdevice.c 3.11 2014/03/16 10:38:31 kls Exp $
  */
 
 #include "dvbdevice.h"
@@ -36,6 +36,13 @@
 
 // --- DVB Parameter Maps ----------------------------------------------------
 
+const tDvbParameterMap PilotValues[] = {
+  {   0, PILOT_OFF,  trNOOP("off") },
+  {   1, PILOT_ON,   trNOOP("on") },
+  { 999, PILOT_AUTO, trNOOP("auto") },
+  {  -1, 0, NULL }
+  };
+
 const tDvbParameterMap InversionValues[] = {
   {   0, INVERSION_OFF,  trNOOP("off") },
   {   1, INVERSION_ON,   trNOOP("on") },
@@ -206,6 +213,9 @@
   hierarchy    = HIERARCHY_AUTO;
   rollOff      = ROLLOFF_AUTO;
   streamId     = 0;
+  t2systemId   = 0;
+  sisoMiso     = 0;
+  pilot        = PILOT_AUTO;
   Parse(Parameters);
 }
 
@@ -227,10 +237,13 @@
   ST("   T*")  q += PrintParameter(q, 'G', MapToUser(guard, GuardValues));
   ST("ACST*")  q += PrintParameter(q, 'I', MapToUser(inversion, InversionValues));
   ST("ACST*")  q += PrintParameter(q, 'M', MapToUser(modulation, ModulationValues));
+  ST("  S 2")  q += PrintParameter(q, 'N', MapToUser(pilot, PilotValues));
   ST("  S 2")  q += PrintParameter(q, 'O', MapToUser(rollOff, RollOffValues));
   ST("  ST2")  q += PrintParameter(q, 'P', streamId);
+  ST("   T2")  q += PrintParameter(q, 'Q', t2systemId);
   ST("  ST*")  q += PrintParameter(q, 'S', MapToUser(system, SystemValuesSat)); // we only need the numerical value, so Sat or Terr doesn't matter
   ST("   T*")  q += PrintParameter(q, 'T', MapToUser(transmission, TransmissionValues));
+  ST("   T2")  q += PrintParameter(q, 'X', sisoMiso);
   ST("   T*")  q += PrintParameter(q, 'Y', MapToUser(hierarchy, HierarchyValues));
   return buffer;
 }
@@ -263,12 +276,15 @@
           case 'I': s = ParseParameter(s, inversion, InversionValues); break;
           case 'L': polarization = 'L'; s++; break;
           case 'M': s = ParseParameter(s, modulation, ModulationValues); break;
+          case 'N': s = ParseParameter(s, pilot, PilotValues); break;
           case 'O': s = ParseParameter(s, rollOff, RollOffValues); break;
           case 'P': s = ParseParameter(s, streamId); break;
+          case 'Q': s = ParseParameter(s, t2systemId); break;
           case 'R': polarization = 'R'; s++; break;
           case 'S': s = ParseParameter(s, system, SystemValuesSat); break; // we only need the numerical value, so Sat or Terr doesn't matter
           case 'T': s = ParseParameter(s, transmission, TransmissionValues); break;
           case 'V': polarization = 'V'; s++; break;
+          case 'X': s = ParseParameter(s, sisoMiso); break;
           case 'Y': s = ParseParameter(s, hierarchy, HierarchyValues); break;
           default: esyslog("ERROR: unknown parameter key '%c'", *s);
                    return false;
@@ -839,7 +855,7 @@
      SETCMD(DTV_INVERSION, dtp.Inversion());
      if (frontendType == SYS_DVBS2) {
         // DVB-S2
-        SETCMD(DTV_PILOT, PILOT_AUTO);
+        SETCMD(DTV_PILOT, dtp.Pilot());
         SETCMD(DTV_ROLLOFF, dtp.RollOff());
         if (DvbApiVersion >= 0x0508)
            SETCMD(DTV_STREAM_ID, dtp.StreamId());
@@ -1038,6 +1054,9 @@
     case 10: ST("   T")  return new cMenuEditMapItem( tr("Hierarchy"),    &dtp.hierarchy,    HierarchyValues);    else return GetOsdItem();
     case 11: ST("  S ")  return new cMenuEditMapItem( tr("Rolloff"),      &dtp.rollOff,      RollOffValues);      else return GetOsdItem();
     case 12: ST("  ST")  return new cMenuEditIntItem( tr("StreamId"),     &dtp.streamId,     0, 255);             else return GetOsdItem();
+    case 13: ST("  S ")  return new cMenuEditMapItem( tr("Pilot"),        &dtp.pilot,        PilotValues);        else return GetOsdItem();
+    case 14: ST("   T")  return new cMenuEditIntItem( tr("T2SystemId"),   &dtp.t2systemId,   0, 65535);           else return GetOsdItem();
+    case 15: ST("   T")  return new cMenuEditIntItem( tr("SISO/MISO"),    &dtp.sisoMiso,     0, 1);               else return GetOsdItem();
     default: return NULL;
     }
   return NULL;
diff -ruN vdr-2.1.5/dvbdevice.h vdr-2.1.6/dvbdevice.h
--- vdr-2.1.5/dvbdevice.h	2014-01-16 12:45:35.000000000 +0100
+++ vdr-2.1.6/dvbdevice.h	2014-03-16 11:38:31.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: dvbdevice.h 3.4 2014/01/16 11:45:35 kls Exp $
+ * $Id: dvbdevice.h 3.5 2014/03/16 10:38:31 kls Exp $
  */
 
 #ifndef __DVBDEVICE_H
@@ -92,6 +92,7 @@
 int UserIndex(int Value, const tDvbParameterMap *Map);
 int DriverIndex(int Value, const tDvbParameterMap *Map);
 
+extern const tDvbParameterMap PilotValues[];
 extern const tDvbParameterMap InversionValues[];
 extern const tDvbParameterMap BandwidthValues[];
 extern const tDvbParameterMap CoderateValues[];
@@ -118,6 +119,9 @@
   int hierarchy;
   int rollOff;
   int streamId;
+  int t2systemId;
+  int sisoMiso;
+  int pilot;
   int PrintParameter(char *p, char Name, int Value) const;
   const char *ParseParameter(const char *s, int &Value, const tDvbParameterMap *Map = NULL);
 public:
@@ -134,6 +138,9 @@
   int Hierarchy(void) const { return hierarchy; }
   int RollOff(void) const { return rollOff; }
   int StreamId(void) const { return streamId; }
+  int T2SystemId(void) const { return t2systemId; }
+  int SisoMiso(void) const { return sisoMiso; }
+  int Pilot(void) const { return pilot; }
   void SetPolarization(char Polarization) { polarization = Polarization; }
   void SetInversion(int Inversion) { inversion = Inversion; }
   void SetBandwidth(int Bandwidth) { bandwidth = Bandwidth; }
@@ -146,6 +153,9 @@
   void SetHierarchy(int Hierarchy) { hierarchy = Hierarchy; }
   void SetRollOff(int RollOff) { rollOff = RollOff; }
   void SetStreamId(int StreamId) { streamId = StreamId; }
+  void SetT2SystemId(int T2SystemId) { t2systemId = T2SystemId; }
+  void SetSisoMiso(int SisoMiso) { sisoMiso = SisoMiso; }
+  void SetPilot(int Pilot) { pilot = Pilot; }
   cString ToString(char Type) const;
   bool Parse(const char *s);
   };
diff -ruN vdr-2.1.5/menu.c vdr-2.1.6/menu.c
--- vdr-2.1.5/menu.c	2014-02-08 13:36:12.000000000 +0100
+++ vdr-2.1.6/menu.c	2014-03-16 11:38:31.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: menu.c 3.19 2014/02/08 12:36:12 kls Exp $
+ * $Id: menu.c 3.23 2014/03/16 10:38:31 kls Exp $
  */
 
 #include "menu.h"
@@ -214,9 +214,9 @@
   Add(new cMenuEditIntItem( tr("Tpid"),         &data.tpid,  0, 0x1FFF));
   Add(new cMenuEditCaItem(  tr("CA"),           &data.caids[0]));
   Add(new cMenuEditIntItem( tr("Sid"),          &data.sid, 1, 0xFFFF));
-  /* XXX not yet used
   Add(new cMenuEditIntItem( tr("Nid"),          &data.nid, 0));
   Add(new cMenuEditIntItem( tr("Tid"),          &data.tid, 0));
+  /* XXX not yet used
   Add(new cMenuEditIntItem( tr("Rid"),          &data.rid, 0));
   XXX*/
   // Parameters for specific types of sources:
@@ -2533,6 +2533,7 @@
   int Level(void) { return level; }
   cRecording *Recording(void) { return recording; }
   bool IsDirectory(void) { return name != NULL; }
+  void SetRecording(cRecording *Recording) { recording = Recording; }
   virtual void SetMenuItem(cSkinDisplayMenu *DisplayMenu, int Index, bool Current, bool Selectable);
   };
 
@@ -2596,7 +2597,10 @@
 
 cMenuRecordings::~cMenuRecordings()
 {
-  helpKeys = -1;
+  if (cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current())) {
+     if (!ri->IsDirectory())
+        SetRecording(ri->Recording()->FileName());
+     }
   free(base);
 }
 
@@ -2782,6 +2786,7 @@
            Display();
            if (!Count())
               return osBack;
+           return osUser2;
            }
         else
            Skins.Message(mtError, tr("Error while deleting recording!"));
@@ -2861,6 +2866,14 @@
      path = NULL;
      fileName = NULL;
      }
+  else if (state == osUser2) {
+     // a recording in a sub folder was deleted, so update the current item
+     cOsdMenu *m = HasSubMenu() ? SubMenu() : this;
+     if (cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current())) {
+        if (cMenuRecordingItem *riSub = (cMenuRecordingItem *)m->Get(m->Current()))
+           ri->SetRecording(riSub->Recording());
+        }
+     }
   if (Key == kYellow && HadSubMenu && !HasSubMenu()) {
      // the last recording in a subdirectory was deleted, so let's go back up
      cOsdMenu::Del(Current());
@@ -4952,6 +4965,7 @@
         }
      }
   cDvbPlayerControl::Stop();
+  cMenuRecordings::SetRecording(NULL); // make sure opening the Recordings menu navigates to the last replayed recording
 }
 
 void cReplayControl::SetRecording(const char *FileName)
diff -ruN vdr-2.1.5/nit.c vdr-2.1.6/nit.c
--- vdr-2.1.5/nit.c	2013-03-07 10:42:29.000000000 +0100
+++ vdr-2.1.6/nit.c	2014-03-16 11:38:31.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: nit.c 3.0 2013/03/07 09:42:29 kls Exp $
+ * $Id: nit.c 3.3 2014/03/16 10:38:31 kls Exp $
  */
 
 #include "nit.h"
@@ -19,8 +19,9 @@
 #define DVB_SYSTEM_1 0 // see also dvbdevice.c
 #define DVB_SYSTEM_2 1
 
-cNitFilter::cNitFilter(void)
+cNitFilter::cNitFilter(cSdtFilter *SdtFilter)
 {
+  sdtFilter = SdtFilter;
   numNits = 0;
   networkId = 0;
   Set(0x10, 0x40);  // NIT
@@ -183,6 +184,7 @@
                            }
                        }
                     }
+                 sdtFilter->Trigger(Source);
                  }
                  break;
             case SI::S2SatelliteDeliverySystemDescriptorTag: {
@@ -243,7 +245,7 @@
                            }
                         }
                     if (!found || forceTransponderUpdate) {
-                        for (int n = 0; n < NumFrequencies; n++) {
+                       for (int n = 0; n < NumFrequencies; n++) {
                            cChannel *Channel = new cChannel;
                            Channel->SetId(ts.getOriginalNetworkId(), ts.getTransportStreamId(), 0, 0);
                            if (Channel->SetTransponderData(Source, Frequencies[n], SymbolRate, dtp.ToString('C')))
@@ -253,6 +255,7 @@
                            }
                        }
                     }
+                 sdtFilter->Trigger(Source);
                  }
                  break;
             case SI::TerrestrialDeliverySystemDescriptorTag: {
@@ -314,8 +317,9 @@
                            else
                               delete Channel;
                            }
-                        }
+                       }
                     }
+                 sdtFilter->Trigger(Source);
                  }
                  break;
             case SI::ExtensionDescriptorTag: {
@@ -329,11 +333,12 @@
                                   SI::T2DeliverySystemDescriptor *td = (SI::T2DeliverySystemDescriptor *)d;
                                   int Frequency = Channel->Frequency();
                                   int SymbolRate = Channel->Srate();
-                                  //int SystemId = td->getSystemId();
                                   cDvbTransponderParameters dtp(Channel->Parameters());
                                   dtp.SetSystem(DVB_SYSTEM_2);
                                   dtp.SetStreamId(td->getPlpId());
+                                  dtp.SetT2SystemId(td->getT2SystemId());
                                   if (td->getExtendedDataFlag()) {
+                                     dtp.SetSisoMiso(td->getSisoMiso());
                                      static int T2Bandwidths[] = { 8000000, 7000000, 6000000, 5000000, 10000000, 1712000, 0, 0 };
                                      dtp.SetBandwidth(T2Bandwidths[td->getBandwidth()]);
                                      static int T2GuardIntervals[] = { GUARD_INTERVAL_1_32, GUARD_INTERVAL_1_16, GUARD_INTERVAL_1_8, GUARD_INTERVAL_1_4, GUARD_INTERVAL_1_128, GUARD_INTERVAL_19_128, GUARD_INTERVAL_19_256, 0 };
diff -ruN vdr-2.1.5/nit.h vdr-2.1.6/nit.h
--- vdr-2.1.5/nit.h	2007-06-10 10:50:21.000000000 +0200
+++ vdr-2.1.6/nit.h	2014-03-10 15:12:05.000000000 +0100
@@ -4,13 +4,14 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: nit.h 3.0 2007/06/10 08:50:21 kls Exp $
+ * $Id: nit.h 3.1 2014/03/10 14:12:05 kls Exp $
  */
 
 #ifndef __NIT_H
 #define __NIT_H
 
 #include "filter.h"
+#include "sdt.h"
 
 #define MAXNITS 16
 #define MAXNETWORKNAME Utf8BufSize(256)
@@ -26,13 +27,14 @@
     };
 
   cSectionSyncer sectionSyncer;
+  cSdtFilter *sdtFilter;
   cNit nits[MAXNITS];
   u_short networkId;
   int numNits;
 protected:
   virtual void Process(u_short Pid, u_char Tid, const u_char *Data, int Length);
 public:
-  cNitFilter(void);
+  cNitFilter(cSdtFilter *SdtFilter);
   virtual void SetStatus(bool On);
   };
 
diff -ruN vdr-2.1.5/po/ar.po vdr-2.1.6/po/ar.po
--- vdr-2.1.5/po/ar.po	2014-02-22 14:16:01.615577312 +0100
+++ vdr-2.1.6/po/ar.po	2014-03-16 12:06:52.096281218 +0100
@@ -80,6 +80,15 @@
 msgid "StreamId"
 msgstr "StreamId"
 
+msgid "Pilot"
+msgstr ""
+
+msgid "T2SystemId"
+msgstr ""
+
+msgid "SISO/MISO"
+msgstr ""
+
 msgid "Starting EPG scan"
 msgstr "EPG ا لبدء بالبحث على دليل القنوات الالكترونى "
 
@@ -567,6 +576,12 @@
 msgid "Sid"
 msgstr "Sid"
 
+msgid "Nid"
+msgstr ""
+
+msgid "Tid"
+msgstr ""
+
 msgid "Channel settings are not unique!"
 msgstr "اعدادات القناة غبر موحد"
 
diff -ruN vdr-2.1.5/po/ca_ES.po vdr-2.1.6/po/ca_ES.po
--- vdr-2.1.5/po/ca_ES.po	2014-02-22 14:16:00.841435741 +0100
+++ vdr-2.1.6/po/ca_ES.po	2014-03-16 12:06:51.118106213 +0100
@@ -79,6 +79,15 @@
 msgid "StreamId"
 msgstr "StreamId"
 
+msgid "Pilot"
+msgstr ""
+
+msgid "T2SystemId"
+msgstr ""
+
+msgid "SISO/MISO"
+msgstr ""
+
 msgid "Starting EPG scan"
 msgstr "Iniciant exploraci� EPG"
 
@@ -566,6 +575,12 @@
 msgid "Sid"
 msgstr "Sid"
 
+msgid "Nid"
+msgstr ""
+
+msgid "Tid"
+msgstr ""
+
 msgid "Channel settings are not unique!"
 msgstr "Propietats del canal duplicades!"
 
diff -ruN vdr-2.1.5/po/cs_CZ.po vdr-2.1.6/po/cs_CZ.po
--- vdr-2.1.5/po/cs_CZ.po	2014-02-22 14:16:01.535562680 +0100
+++ vdr-2.1.6/po/cs_CZ.po	2014-03-16 12:06:52.035270303 +0100
@@ -79,6 +79,15 @@
 msgid "StreamId"
 msgstr "StreamId"
 
+msgid "Pilot"
+msgstr ""
+
+msgid "T2SystemId"
+msgstr ""
+
+msgid "SISO/MISO"
+msgstr ""
+
 msgid "Starting EPG scan"
 msgstr "Začíná prohledávání EPG"
 
@@ -566,6 +575,12 @@
 msgid "Sid"
 msgstr "Sid"
 
+msgid "Nid"
+msgstr ""
+
+msgid "Tid"
+msgstr ""
+
 msgid "Channel settings are not unique!"
 msgstr "Nastavení kanálu není jedinečné!"
 
diff -ruN vdr-2.1.5/po/da_DK.po vdr-2.1.6/po/da_DK.po
--- vdr-2.1.5/po/da_DK.po	2014-02-22 14:16:00.966458603 +0100
+++ vdr-2.1.6/po/da_DK.po	2014-03-16 12:06:51.684207494 +0100
@@ -76,6 +76,15 @@
 msgid "StreamId"
 msgstr ""
 
+msgid "Pilot"
+msgstr ""
+
+msgid "T2SystemId"
+msgstr ""
+
+msgid "SISO/MISO"
+msgstr ""
+
 msgid "Starting EPG scan"
 msgstr "Starter EPG skanning"
 
@@ -563,6 +572,12 @@
 msgid "Sid"
 msgstr "Sid"
 
+msgid "Nid"
+msgstr ""
+
+msgid "Tid"
+msgstr ""
+
 msgid "Channel settings are not unique!"
 msgstr "Kanalindstillinger er ikke entydige!"
 
diff -ruN vdr-2.1.5/po/de_DE.po vdr-2.1.6/po/de_DE.po
--- vdr-2.1.5/po/de_DE.po	2014-02-22 14:16:02.015650477 +0100
+++ vdr-2.1.6/po/de_DE.po	2014-03-16 12:06:52.326322374 +0100
@@ -76,6 +76,15 @@
 msgid "StreamId"
 msgstr "StreamId"
 
+msgid "Pilot"
+msgstr "Pilot"
+
+msgid "T2SystemId"
+msgstr "T2-Systemkennung"
+
+msgid "SISO/MISO"
+msgstr "SISO/MISO"
+
 msgid "Starting EPG scan"
 msgstr "Aktualisiere EPG-Daten"
 
@@ -563,6 +572,12 @@
 msgid "Sid"
 msgstr "Sid"
 
+msgid "Nid"
+msgstr "Nid"
+
+msgid "Tid"
+msgstr "Tid"
+
 msgid "Channel settings are not unique!"
 msgstr "Kanaleinstellungen sind nicht eindeutig!"
 
diff -ruN vdr-2.1.5/po/el_GR.po vdr-2.1.6/po/el_GR.po
--- vdr-2.1.5/po/el_GR.po	2014-02-22 14:16:01.401538170 +0100
+++ vdr-2.1.6/po/el_GR.po	2014-03-16 12:06:51.894245071 +0100
@@ -76,6 +76,15 @@
 msgid "StreamId"
 msgstr ""
 
+msgid "Pilot"
+msgstr ""
+
+msgid "T2SystemId"
+msgstr ""
+
+msgid "SISO/MISO"
+msgstr ""
+
 msgid "Starting EPG scan"
 msgstr "���� ������ EPG"
 
@@ -563,6 +572,12 @@
 msgid "Sid"
 msgstr "Sid"
 
+msgid "Nid"
+msgstr ""
+
+msgid "Tid"
+msgstr ""
+
 msgid "Channel settings are not unique!"
 msgstr "�� ��������� ��� �������� ����������������!"
 
diff -ruN vdr-2.1.5/po/es_ES.po vdr-2.1.6/po/es_ES.po
--- vdr-2.1.5/po/es_ES.po	2014-02-22 14:16:01.040472139 +0100
+++ vdr-2.1.6/po/es_ES.po	2014-03-16 12:06:51.754220019 +0100
@@ -77,6 +77,15 @@
 msgid "StreamId"
 msgstr "StreamId"
 
+msgid "Pilot"
+msgstr ""
+
+msgid "T2SystemId"
+msgstr ""
+
+msgid "SISO/MISO"
+msgstr ""
+
 msgid "Starting EPG scan"
 msgstr "Iniciando la exploraci�n de EPG"
 
@@ -564,6 +573,12 @@
 msgid "Sid"
 msgstr "Sid"
 
+msgid "Nid"
+msgstr ""
+
+msgid "Tid"
+msgstr ""
+
 msgid "Channel settings are not unique!"
 msgstr "!Propiedades de canal duplicadas!"
 
diff -ruN vdr-2.1.5/po/et_EE.po vdr-2.1.6/po/et_EE.po
--- vdr-2.1.5/po/et_EE.po	2014-02-22 14:16:00.804428974 +0100
+++ vdr-2.1.6/po/et_EE.po	2014-03-16 12:06:51.085100308 +0100
@@ -76,6 +76,15 @@
 msgid "StreamId"
 msgstr "Stream-tunnus"
 
+msgid "Pilot"
+msgstr ""
+
+msgid "T2SystemId"
+msgstr ""
+
+msgid "SISO/MISO"
+msgstr ""
+
 msgid "Starting EPG scan"
 msgstr "EPG skaneerimine käivitatud"
 
@@ -563,6 +572,12 @@
 msgid "Sid"
 msgstr "Sid"
 
+msgid "Nid"
+msgstr ""
+
+msgid "Tid"
+msgstr ""
+
 msgid "Channel settings are not unique!"
 msgstr "Kanaliseaded ei ole unikaalsed!"
 
diff -ruN vdr-2.1.5/po/fi_FI.po vdr-2.1.6/po/fi_FI.po
--- vdr-2.1.5/po/fi_FI.po	2014-02-22 14:16:01.003465372 +0100
+++ vdr-2.1.6/po/fi_FI.po	2014-03-16 12:06:51.720213936 +0100
@@ -80,6 +80,15 @@
 msgid "StreamId"
 msgstr "Lähetetunniste"
 
+msgid "Pilot"
+msgstr "Pilotti"
+
+msgid "T2SystemId"
+msgstr "T2-tunniste"
+
+msgid "SISO/MISO"
+msgstr "SISO/MISO"
+
 msgid "Starting EPG scan"
 msgstr "Ohjelmaoppaan päivitys aloitettu"
 
@@ -567,6 +576,12 @@
 msgid "Sid"
 msgstr "Palvelu-ID"
 
+msgid "Nid"
+msgstr "Verkko-ID"
+
+msgid "Tid"
+msgstr "Lähete-ID"
+
 msgid "Channel settings are not unique!"
 msgstr "Kanava-asetukset eivät ole yksilölliset!"
 
@@ -1427,7 +1442,7 @@
 
 #, c-format
 msgid "Moving dish to %.1f..."
-msgstr "Käännetaan lautasta %.1f..."
+msgstr "Käännetään lautasta %.1f..."
 
 msgid "ST:TNG Panels"
 msgstr "ST:TNG konsoli"
diff -ruN vdr-2.1.5/po/fr_FR.po vdr-2.1.6/po/fr_FR.po
--- vdr-2.1.5/po/fr_FR.po	2014-02-22 14:16:01.503556826 +0100
+++ vdr-2.1.6/po/fr_FR.po	2014-03-16 12:06:52.007265293 +0100
@@ -86,6 +86,15 @@
 msgid "StreamId"
 msgstr "StreamId"
 
+msgid "Pilot"
+msgstr ""
+
+msgid "T2SystemId"
+msgstr ""
+
+msgid "SISO/MISO"
+msgstr ""
+
 msgid "Starting EPG scan"
 msgstr "Mise à jour du guide des programmes"
 
@@ -573,6 +582,12 @@
 msgid "Sid"
 msgstr "Sid"
 
+msgid "Nid"
+msgstr ""
+
+msgid "Tid"
+msgstr ""
+
 msgid "Channel settings are not unique!"
 msgstr "Cette chaîne n'est pas unique !"
 
diff -ruN vdr-2.1.5/po/hr_HR.po vdr-2.1.6/po/hr_HR.po
--- vdr-2.1.5/po/hr_HR.po	2014-02-22 14:16:01.742600542 +0100
+++ vdr-2.1.6/po/hr_HR.po	2014-03-16 12:06:52.207301080 +0100
@@ -78,6 +78,15 @@
 msgid "StreamId"
 msgstr ""
 
+msgid "Pilot"
+msgstr ""
+
+msgid "T2SystemId"
+msgstr ""
+
+msgid "SISO/MISO"
+msgstr ""
+
 msgid "Starting EPG scan"
 msgstr "Po�injem EPG pretragu"
 
@@ -565,6 +574,12 @@
 msgid "Sid"
 msgstr "Sid"
 
+msgid "Nid"
+msgstr ""
+
+msgid "Tid"
+msgstr ""
+
 msgid "Channel settings are not unique!"
 msgstr "Postavke programa nisu jedinstvene!"
 
diff -ruN vdr-2.1.5/po/hu_HU.po vdr-2.1.6/po/hu_HU.po
--- vdr-2.1.5/po/hu_HU.po	2014-02-22 14:16:00.932452386 +0100
+++ vdr-2.1.6/po/hu_HU.po	2014-03-16 12:06:51.648201053 +0100
@@ -80,6 +80,15 @@
 msgid "StreamId"
 msgstr "Stream azonosító"
 
+msgid "Pilot"
+msgstr ""
+
+msgid "T2SystemId"
+msgstr ""
+
+msgid "SISO/MISO"
+msgstr ""
+
 msgid "Starting EPG scan"
 msgstr "EPG adatok aktualizálása"
 
@@ -567,6 +576,12 @@
 msgid "Sid"
 msgstr "Sid"
 
+msgid "Nid"
+msgstr ""
+
+msgid "Tid"
+msgstr ""
+
 msgid "Channel settings are not unique!"
 msgstr "Az adóbeállítások nem egyértelműek"
 
diff -ruN vdr-2.1.5/po/it_IT.po vdr-2.1.6/po/it_IT.po
--- vdr-2.1.5/po/it_IT.po	2014-02-22 14:16:01.323524964 +0100
+++ vdr-2.1.6/po/it_IT.po	2014-03-16 12:06:51.828233261 +0100
@@ -11,7 +11,7 @@
 msgstr ""
 "Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2013-10-14 11:56+0200\n"
+"POT-Creation-Date: 2013-11-03 15:59+0100\n"
 "PO-Revision-Date: 2013-11-10 23:02+0100\n"
 "Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
 "Language-Team: Italian <vdr@linuxtv.org>\n"
@@ -83,6 +83,15 @@
 msgid "StreamId"
 msgstr "StreamId"
 
+msgid "Pilot"
+msgstr ""
+
+msgid "T2SystemId"
+msgstr ""
+
+msgid "SISO/MISO"
+msgstr ""
+
 msgid "Starting EPG scan"
 msgstr "Inizio scansione EPG"
 
@@ -570,6 +579,12 @@
 msgid "Sid"
 msgstr "Sid"
 
+msgid "Nid"
+msgstr ""
+
+msgid "Tid"
+msgstr ""
+
 msgid "Channel settings are not unique!"
 msgstr "Parametri canale non univoci!"
 
diff -ruN vdr-2.1.5/po/lt_LT.po vdr-2.1.6/po/lt_LT.po
--- vdr-2.1.5/po/lt_LT.po	2014-02-22 14:16:01.433544024 +0100
+++ vdr-2.1.6/po/lt_LT.po	2014-03-16 12:06:51.933252050 +0100
@@ -76,6 +76,15 @@
 msgid "StreamId"
 msgstr "StreamId"
 
+msgid "Pilot"
+msgstr ""
+
+msgid "T2SystemId"
+msgstr ""
+
+msgid "SISO/MISO"
+msgstr ""
+
 msgid "Starting EPG scan"
 msgstr "Pradedamas EPG skanavimas"
 
@@ -563,6 +572,12 @@
 msgid "Sid"
 msgstr "Serviso id"
 
+msgid "Nid"
+msgstr ""
+
+msgid "Tid"
+msgstr ""
+
 msgid "Channel settings are not unique!"
 msgstr "Kanalų nustatymai neunikalūs!"
 
diff -ruN vdr-2.1.5/po/mk_MK.po vdr-2.1.6/po/mk_MK.po
--- vdr-2.1.5/po/mk_MK.po	2014-02-22 14:16:01.582571277 +0100
+++ vdr-2.1.6/po/mk_MK.po	2014-03-16 12:06:52.065275671 +0100
@@ -77,6 +77,15 @@
 msgid "StreamId"
 msgstr "StreamId"
 
+msgid "Pilot"
+msgstr ""
+
+msgid "T2SystemId"
+msgstr ""
+
+msgid "SISO/MISO"
+msgstr ""
+
 msgid "Starting EPG scan"
 msgstr "Започнувам скенирање на EPG"
 
@@ -564,6 +573,12 @@
 msgid "Sid"
 msgstr "Sid"
 
+msgid "Nid"
+msgstr ""
+
+msgid "Tid"
+msgstr ""
+
 msgid "Channel settings are not unique!"
 msgstr "Уредбите на каналот не се уникатни!"
 
diff -ruN vdr-2.1.5/po/nl_NL.po vdr-2.1.6/po/nl_NL.po
--- vdr-2.1.5/po/nl_NL.po	2014-02-22 14:16:01.356529993 +0100
+++ vdr-2.1.6/po/nl_NL.po	2014-03-16 12:06:51.862239345 +0100
@@ -81,6 +81,15 @@
 msgid "StreamId"
 msgstr "StreamId"
 
+msgid "Pilot"
+msgstr ""
+
+msgid "T2SystemId"
+msgstr ""
+
+msgid "SISO/MISO"
+msgstr ""
+
 msgid "Starting EPG scan"
 msgstr "Bezig met starten EPG scan"
 
@@ -568,6 +577,12 @@
 msgid "Sid"
 msgstr "Sid"
 
+msgid "Nid"
+msgstr ""
+
+msgid "Tid"
+msgstr ""
+
 msgid "Channel settings are not unique!"
 msgstr "Kanaalinstellingen zijn niet uniek!"
 
diff -ruN vdr-2.1.5/po/nn_NO.po vdr-2.1.6/po/nn_NO.po
--- vdr-2.1.5/po/nn_NO.po	2014-02-22 14:16:01.711594872 +0100
+++ vdr-2.1.6/po/nn_NO.po	2014-03-16 12:06:52.174295175 +0100
@@ -77,6 +77,15 @@
 msgid "StreamId"
 msgstr ""
 
+msgid "Pilot"
+msgstr ""
+
+msgid "T2SystemId"
+msgstr ""
+
+msgid "SISO/MISO"
+msgstr ""
+
 msgid "Starting EPG scan"
 msgstr ""
 
@@ -564,6 +573,12 @@
 msgid "Sid"
 msgstr "Sid"
 
+msgid "Nid"
+msgstr ""
+
+msgid "Tid"
+msgstr ""
+
 msgid "Channel settings are not unique!"
 msgstr ""
 
diff -ruN vdr-2.1.5/po/pl_PL.po vdr-2.1.6/po/pl_PL.po
--- vdr-2.1.5/po/pl_PL.po	2014-02-22 14:16:00.694408854 +0100
+++ vdr-2.1.6/po/pl_PL.po	2014-03-16 12:06:50.988082950 +0100
@@ -78,6 +78,15 @@
 msgid "StreamId"
 msgstr "StreamId"
 
+msgid "Pilot"
+msgstr ""
+
+msgid "T2SystemId"
+msgstr ""
+
+msgid "SISO/MISO"
+msgstr ""
+
 msgid "Starting EPG scan"
 msgstr "Rozpoczynam skanowanie EPG"
 
@@ -565,6 +574,12 @@
 msgid "Sid"
 msgstr "Sid"
 
+msgid "Nid"
+msgstr ""
+
+msgid "Tid"
+msgstr ""
+
 msgid "Channel settings are not unique!"
 msgstr "Ustawienia kana�u nie s� unikalne!"
 
diff -ruN vdr-2.1.5/po/pt_PT.po vdr-2.1.6/po/pt_PT.po
--- vdr-2.1.5/po/pt_PT.po	2014-02-22 14:16:00.642399342 +0100
+++ vdr-2.1.6/po/pt_PT.po	2014-03-16 12:06:50.947075613 +0100
@@ -77,6 +77,15 @@
 msgid "StreamId"
 msgstr ""
 
+msgid "Pilot"
+msgstr ""
+
+msgid "T2SystemId"
+msgstr ""
+
+msgid "SISO/MISO"
+msgstr ""
+
 msgid "Starting EPG scan"
 msgstr "A iniciar a busca do EPG"
 
@@ -564,6 +573,12 @@
 msgid "Sid"
 msgstr "Sid"
 
+msgid "Nid"
+msgstr ""
+
+msgid "Tid"
+msgstr ""
+
 msgid "Channel settings are not unique!"
 msgstr "Par�metros do canal n�o s�o �nicos!"
 
diff -ruN vdr-2.1.5/po/ro_RO.po vdr-2.1.6/po/ro_RO.po
--- vdr-2.1.5/po/ro_RO.po	2014-02-22 14:16:00.768422388 +0100
+++ vdr-2.1.6/po/ro_RO.po	2014-03-16 12:06:51.057095298 +0100
@@ -78,6 +78,15 @@
 msgid "StreamId"
 msgstr "Identificator Stream"
 
+msgid "Pilot"
+msgstr ""
+
+msgid "T2SystemId"
+msgstr ""
+
+msgid "SISO/MISO"
+msgstr ""
+
 msgid "Starting EPG scan"
 msgstr "Pornesc achiziţia EPG"
 
@@ -565,6 +574,12 @@
 msgid "Sid"
 msgstr "Sid"
 
+msgid "Nid"
+msgstr ""
+
+msgid "Tid"
+msgstr ""
+
 msgid "Channel settings are not unique!"
 msgstr "Parametrii canalului nu sunt univoci!"
 
diff -ruN vdr-2.1.5/po/ru_RU.po vdr-2.1.6/po/ru_RU.po
--- vdr-2.1.5/po/ru_RU.po	2014-02-22 14:16:01.771605846 +0100
+++ vdr-2.1.6/po/ru_RU.po	2014-03-16 12:06:52.248308417 +0100
@@ -77,6 +77,15 @@
 msgid "StreamId"
 msgstr "StreamId"
 
+msgid "Pilot"
+msgstr ""
+
+msgid "T2SystemId"
+msgstr ""
+
+msgid "SISO/MISO"
+msgstr ""
+
 msgid "Starting EPG scan"
 msgstr "������� EPG-������������"
 
@@ -564,6 +573,12 @@
 msgid "Sid"
 msgstr "Sid"
 
+msgid "Nid"
+msgstr ""
+
+msgid "Tid"
+msgstr ""
+
 msgid "Channel settings are not unique!"
 msgstr "��������� ������ �� ���������!"
 
diff -ruN vdr-2.1.5/po/sk_SK.po vdr-2.1.6/po/sk_SK.po
--- vdr-2.1.5/po/sk_SK.po	2014-02-22 14:16:01.678588835 +0100
+++ vdr-2.1.6/po/sk_SK.po	2014-03-16 12:06:52.134288018 +0100
@@ -76,6 +76,15 @@
 msgid "StreamId"
 msgstr "StreamId"
 
+msgid "Pilot"
+msgstr ""
+
+msgid "T2SystemId"
+msgstr ""
+
+msgid "SISO/MISO"
+msgstr ""
+
 msgid "Starting EPG scan"
 msgstr "Sp���a sa sn�manie EPG"
 
@@ -563,6 +572,12 @@
 msgid "Sid"
 msgstr "Sid"
 
+msgid "Nid"
+msgstr ""
+
+msgid "Tid"
+msgstr ""
+
 msgid "Channel settings are not unique!"
 msgstr "Nastavenia kan�lu nie s� v�nimo�n�!"
 
diff -ruN vdr-2.1.5/po/sl_SI.po vdr-2.1.6/po/sl_SI.po
--- vdr-2.1.5/po/sl_SI.po	2014-02-22 14:16:01.802611517 +0100
+++ vdr-2.1.6/po/sl_SI.po	2014-03-16 12:06:52.285315038 +0100
@@ -77,6 +77,15 @@
 msgid "StreamId"
 msgstr "StreamId"
 
+msgid "Pilot"
+msgstr ""
+
+msgid "T2SystemId"
+msgstr ""
+
+msgid "SISO/MISO"
+msgstr ""
+
 msgid "Starting EPG scan"
 msgstr "Pri�enjam EPG-scan"
 
@@ -564,6 +573,12 @@
 msgid "Sid"
 msgstr "Sid"
 
+msgid "Nid"
+msgstr ""
+
+msgid "Tid"
+msgstr ""
+
 msgid "Channel settings are not unique!"
 msgstr "Nastavitve kanala niso edinstvene!"
 
diff -ruN vdr-2.1.5/po/sr_RS.po vdr-2.1.6/po/sr_RS.po
--- vdr-2.1.5/po/sr_RS.po	2014-02-22 14:16:00.732415804 +0100
+++ vdr-2.1.6/po/sr_RS.po	2014-03-16 12:06:51.024089391 +0100
@@ -77,6 +77,15 @@
 msgid "StreamId"
 msgstr "StreamId"
 
+msgid "Pilot"
+msgstr ""
+
+msgid "T2SystemId"
+msgstr ""
+
+msgid "SISO/MISO"
+msgstr ""
+
 msgid "Starting EPG scan"
 msgstr "Po�inje EPG pretra�ivanje"
 
@@ -564,6 +573,12 @@
 msgid "Sid"
 msgstr "Sid"
 
+msgid "Nid"
+msgstr ""
+
+msgid "Tid"
+msgstr ""
+
 msgid "Channel settings are not unique!"
 msgstr "Postavke kanala nisu jedinstvene!"
 
diff -ruN vdr-2.1.5/po/sv_SE.po vdr-2.1.6/po/sv_SE.po
--- vdr-2.1.5/po/sv_SE.po	2014-02-22 14:16:01.463549510 +0100
+++ vdr-2.1.6/po/sv_SE.po	2014-03-16 12:06:51.975259565 +0100
@@ -80,6 +80,15 @@
 msgid "StreamId"
 msgstr "StreamId"
 
+msgid "Pilot"
+msgstr ""
+
+msgid "T2SystemId"
+msgstr ""
+
+msgid "SISO/MISO"
+msgstr ""
+
 msgid "Starting EPG scan"
 msgstr "P�b�rjar EPG-avs�kning"
 
@@ -567,6 +576,12 @@
 msgid "Sid"
 msgstr "Sid"
 
+msgid "Nid"
+msgstr ""
+
+msgid "Tid"
+msgstr ""
+
 msgid "Channel settings are not unique!"
 msgstr "Kanalinst�llningarna �r ej unika!"
 
diff -ruN vdr-2.1.5/po/tr_TR.po vdr-2.1.6/po/tr_TR.po
--- vdr-2.1.5/po/tr_TR.po	2014-02-22 14:16:00.903447081 +0100
+++ vdr-2.1.6/po/tr_TR.po	2014-03-16 12:06:51.607193742 +0100
@@ -76,6 +76,15 @@
 msgid "StreamId"
 msgstr ""
 
+msgid "Pilot"
+msgstr ""
+
+msgid "T2SystemId"
+msgstr ""
+
+msgid "SISO/MISO"
+msgstr ""
+
 msgid "Starting EPG scan"
 msgstr "EPG tarama ba�l�yor"
 
@@ -563,6 +572,12 @@
 msgid "Sid"
 msgstr "Sid"
 
+msgid "Nid"
+msgstr ""
+
+msgid "Tid"
+msgstr ""
+
 msgid "Channel settings are not unique!"
 msgstr "Kanal ayarlar� belli de��l!"
 
diff -ruN vdr-2.1.5/po/uk_UA.po vdr-2.1.6/po/uk_UA.po
--- vdr-2.1.5/po/uk_UA.po	2014-02-22 14:16:01.083480005 +0100
+++ vdr-2.1.6/po/uk_UA.po	2014-03-16 12:06:51.784225389 +0100
@@ -77,6 +77,15 @@
 msgid "StreamId"
 msgstr "StreamId"
 
+msgid "Pilot"
+msgstr ""
+
+msgid "T2SystemId"
+msgstr ""
+
+msgid "SISO/MISO"
+msgstr ""
+
 msgid "Starting EPG scan"
 msgstr "Починаю EPG-сканування"
 
@@ -564,6 +573,12 @@
 msgid "Sid"
 msgstr "Sid"
 
+msgid "Nid"
+msgstr ""
+
+msgid "Tid"
+msgstr ""
+
 msgid "Channel settings are not unique!"
 msgstr "Настройки каналу не єдині!"
 
diff -ruN vdr-2.1.5/po/zh_CN.po vdr-2.1.6/po/zh_CN.po
--- vdr-2.1.5/po/zh_CN.po	2014-02-22 14:16:00.874441776 +0100
+++ vdr-2.1.6/po/zh_CN.po	2014-03-16 12:06:51.356148794 +0100
@@ -78,6 +78,15 @@
 msgid "StreamId"
 msgstr "StreamId"
 
+msgid "Pilot"
+msgstr ""
+
+msgid "T2SystemId"
+msgstr ""
+
+msgid "SISO/MISO"
+msgstr ""
+
 msgid "Starting EPG scan"
 msgstr "开始节目单扫描"
 
@@ -565,6 +574,12 @@
 msgid "Sid"
 msgstr "Sid"
 
+msgid "Nid"
+msgstr ""
+
+msgid "Tid"
+msgstr ""
+
 msgid "Channel settings are not unique!"
 msgstr "频道设置不是唯一的！"
 
diff -ruN vdr-2.1.5/recording.c vdr-2.1.6/recording.c
--- vdr-2.1.5/recording.c	2014-02-08 12:16:02.000000000 +0100
+++ vdr-2.1.6/recording.c	2014-03-16 12:09:17.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: recording.c 3.16 2014/02/08 11:16:02 kls Exp $
+ * $Id: recording.c 3.18 2014/03/16 11:09:17 kls Exp $
  */
 
 #include "recording.h"
@@ -1237,6 +1237,7 @@
         fileName = strdup(OldFileName);
         return false;
         }
+     isOnVideoDirectoryFileSystem = -1; // it might have been moved to a different file system
      ClearSortName();
      Recordings.ChangeState();
      Recordings.TouchUpdate();
@@ -1425,6 +1426,7 @@
                     if (r->Name()) {
                        r->NumFrames(); // initializes the numFrames member
                        r->FileSizeMB(); // initializes the fileSizeMB member
+                       r->IsOnVideoDirectoryFileSystem(); // initializes the isOnVideoDirectoryFileSystem member
                        if (deleted)
                           r->deleted = time(NULL);
                        Lock();
diff -ruN vdr-2.1.5/remux.c vdr-2.1.6/remux.c
--- vdr-2.1.5/remux.c	2014-02-21 12:51:55.000000000 +0100
+++ vdr-2.1.6/remux.c	2014-03-08 16:05:35.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: remux.c 3.3 2014/02/21 11:51:55 kls Exp $
+ * $Id: remux.c 3.5 2014/03/08 15:05:35 kls Exp $
  */
 
 #include "remux.h"
@@ -272,7 +272,7 @@
             if (data[index] == TS_SYNC_BYTE && index + TS_SIZE <= length) { // to make sure we are at a TS header start and drop incomplete TS packets at the end
                uchar *p = data + index;
                if (TsPid(p) == pid) { // only handle TS packets for the initial PID
-                  if (numPacketsPid++ > MAX_TS_PACKETS_FOR_VIDEO_FRAME_DETECTION)
+                  if (++numPacketsPid > MAX_TS_PACKETS_FOR_VIDEO_FRAME_DETECTION)
                      return SetEof();
                   if (TsHasPayload(p)) {
                      if (index > 0 && TsPayloadStart(p)) // checking index to not skip the very first TS packet
@@ -281,6 +281,8 @@
                      break;
                      }
                   }
+               else if (TsPid(p) == PATPID)
+                  return SetEof(); // caller must see PAT packets in case of index regeneration
                else
                   numPacketsOther++;
                }
@@ -1252,7 +1254,7 @@
 uint32_t cH264Parser::GetGolombUe(void)
 {
   int z = -1;
-  for (int b = 0; !b; z++)
+  for (int b = 0; !b && z < 32; z++) // limiting z to no get stuck if GetBit() always returns 0
       b = GetBit();
   return (1 << z) - 1 + GetBits(z);
 }
@@ -1288,8 +1290,10 @@
            case nutAccessUnitDelimiter:  ParseAccessUnitDelimiter();
                                          gotAccessUnitDelimiter = true;
                                          break;
-           case nutSequenceParameterSet: ParseSequenceParameterSet();
-                                         gotSequenceParameterSet = true;
+           case nutSequenceParameterSet: if (gotAccessUnitDelimiter) {
+                                            ParseSequenceParameterSet();
+                                            gotSequenceParameterSet = true;
+                                            }
                                          break;
            case nutCodedSliceNonIdr:
            case nutCodedSliceIdr:        if (gotAccessUnitDelimiter && gotSequenceParameterSet) {
diff -ruN vdr-2.1.5/sdt.c vdr-2.1.6/sdt.c
--- vdr-2.1.5/sdt.c	2014-02-18 11:37:50.000000000 +0100
+++ vdr-2.1.6/sdt.c	2014-03-10 15:42:20.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: sdt.c 3.2 2014/02/18 10:37:50 kls Exp $
+ * $Id: sdt.c 3.3 2014/03/10 14:42:20 kls Exp $
  */
 
 #include "sdt.h"
@@ -17,19 +17,30 @@
 
 cSdtFilter::cSdtFilter(cPatFilter *PatFilter)
 {
+  source = cSource::stNone;
   patFilter = PatFilter;
   Set(0x11, 0x42);  // SDT
 }
 
 void cSdtFilter::SetStatus(bool On)
 {
+  cMutexLock MutexLock(&mutex);
   cFilter::SetStatus(On);
   sectionSyncer.Reset();
+  if (!On)
+     source = cSource::stNone;
+}
+
+void cSdtFilter::Trigger(int Source)
+{
+  cMutexLock MutexLock(&mutex);
+  source = Source;
 }
 
 void cSdtFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length)
 {
-  if (!(Source() && Transponder()))
+  cMutexLock MutexLock(&mutex);
+  if (!(source && Transponder()))
      return;
   SI::SDT sdt(Data, false);
   if (!sdt.CheckCRCAndParse())
@@ -40,9 +51,9 @@
      return;
   SI::SDT::Service SiSdtService;
   for (SI::Loop::Iterator it; sdt.serviceLoop.getNext(SiSdtService, it); ) {
-      cChannel *channel = Channels.GetByChannelID(tChannelID(Source(), sdt.getOriginalNetworkId(), sdt.getTransportStreamId(), SiSdtService.getServiceId()));
+      cChannel *channel = Channels.GetByChannelID(tChannelID(source, sdt.getOriginalNetworkId(), sdt.getTransportStreamId(), SiSdtService.getServiceId()));
       if (!channel)
-         channel = Channels.GetByChannelID(tChannelID(Source(), 0, Transponder(), SiSdtService.getServiceId()));
+         channel = Channels.GetByChannelID(tChannelID(source, 0, Transponder(), SiSdtService.getServiceId()));
       if (channel)
          channel->SetSeen();
 
@@ -66,7 +77,7 @@
                         sd->serviceName.getText(NameBuf, ShortNameBuf, sizeof(NameBuf), sizeof(ShortNameBuf));
                         char *pn = compactspace(NameBuf);
                         char *ps = compactspace(ShortNameBuf);
-                        if (!*ps && cSource::IsCable(Source())) {
+                        if (!*ps && cSource::IsCable(source)) {
                            // Some cable providers don't mark short channel names according to the
                            // standard, but rather go their own way and use "name>short name":
                            char *p = strchr(pn, '>'); // fix for UPC Wien
@@ -117,7 +128,7 @@
                  SI::NVODReferenceDescriptor *nrd = (SI::NVODReferenceDescriptor *)d;
                  SI::NVODReferenceDescriptor::Service Service;
                  for (SI::Loop::Iterator it; nrd->serviceLoop.getNext(Service, it); ) {
-                     cChannel *link = Channels.GetByChannelID(tChannelID(Source(), Service.getOriginalNetworkId(), Service.getTransportStream(), Service.getServiceId()));
+                     cChannel *link = Channels.GetByChannelID(tChannelID(source, Service.getOriginalNetworkId(), Service.getTransportStream(), Service.getServiceId()));
                      if (!link && Setup.UpdateChannels >= 4) {
                         link = Channels.NewChannel(Channel(), "NVOD", "", "", Service.getOriginalNetworkId(), Service.getTransportStream(), Service.getServiceId());
                         patFilter->Trigger(Service.getServiceId());
@@ -142,6 +153,6 @@
          }
       }
   if (sdt.getSectionNumber() == sdt.getLastSectionNumber())
-     Channels.MarkObsoleteChannels(Source(), sdt.getOriginalNetworkId(), sdt.getTransportStreamId());
+     Channels.MarkObsoleteChannels(source, sdt.getOriginalNetworkId(), sdt.getTransportStreamId());
   Channels.Unlock();
 }
diff -ruN vdr-2.1.5/sdt.h vdr-2.1.6/sdt.h
--- vdr-2.1.5/sdt.h	2004-01-05 15:30:14.000000000 +0100
+++ vdr-2.1.6/sdt.h	2014-03-10 15:40:54.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: sdt.h 3.0 2004/01/05 14:30:14 kls Exp $
+ * $Id: sdt.h 3.1 2014/03/10 14:40:54 kls Exp $
  */
 
 #ifndef __SDT_H
@@ -15,13 +15,16 @@
 
 class cSdtFilter : public cFilter {
 private:
+  cMutex mutex;
   cSectionSyncer sectionSyncer;
+  int source;
   cPatFilter *patFilter;
 protected:
   virtual void Process(u_short Pid, u_char Tid, const u_char *Data, int Length);
 public:
   cSdtFilter(cPatFilter *PatFilter);
   virtual void SetStatus(bool On);
+  void Trigger(int Source);
   };
 
 #endif //__SDT_H
diff -ruN vdr-2.1.5/skinlcars.c vdr-2.1.6/skinlcars.c
--- vdr-2.1.5/skinlcars.c	2013-11-16 14:20:19.000000000 +0100
+++ vdr-2.1.6/skinlcars.c	2014-03-10 13:04:06.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: skinlcars.c 3.6 2013/11/16 13:20:19 kls Exp $
+ * $Id: skinlcars.c 3.7 2014/03/10 12:04:06 kls Exp $
  */
 
 // "Star Trek: The Next Generation"(R) is a registered trademark of Paramount Pictures,
@@ -1361,7 +1361,7 @@
   if (initial || y != lastLiveIndicatorY || Transferring != lastLiveIndicatorTransferring) {
      if (lastLiveIndicatorY >= 0)
         osd->DrawRectangle(xs12, lastLiveIndicatorY, xs13 - 1, lastLiveIndicatorY + lineHeight - 1, Theme.Color(clrBackground));
-     if (y >= 0) {
+     if (y > 0) {
         tColor ColorBg = Theme.Color(clrChannelFrameBg);
         osd->DrawRectangle(xs12, y, xs12 + lineHeight / 2 - 1, y + lineHeight - 1, ColorBg);
         osd->DrawEllipse  (xs12 + lineHeight / 2, y, xs13 - 1, y + lineHeight - 1, ColorBg, 5);
diff -ruN vdr-2.1.5/sourceparams.c vdr-2.1.6/sourceparams.c
--- vdr-2.1.5/sourceparams.c	2010-03-06 12:13:39.000000000 +0100
+++ vdr-2.1.6/sourceparams.c	2014-03-09 13:03:09.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: sourceparams.c 3.0 2010/03/06 11:13:39 kls Exp $
+ * $Id: sourceparams.c 3.1 2014/03/09 12:03:09 kls Exp $
  */
 
 #include "sourceparams.h"
@@ -21,8 +21,8 @@
         return;
         }
      SourceParams.Add(this);
-     if (!strchr("ACST", Source)) // no, it's not "ATSC" ;-)
-        Sources.Add(new cSource(Source, Description));
+     if (!Sources.ContainsSourceType(source))
+        Sources.Add(new cSource(source, Description));
      dsyslog("registered source parameters for '%c - %s'", source, Description);
      }
   else
diff -ruN vdr-2.1.5/sources.c vdr-2.1.6/sources.c
--- vdr-2.1.5/sources.c	2013-12-28 12:33:08.000000000 +0100
+++ vdr-2.1.6/sources.c	2014-03-09 13:05:42.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: sources.c 3.5 2013/12/28 11:33:08 kls Exp $
+ * $Id: sources.c 3.6 2014/03/09 12:05:42 kls Exp $
  */
 
 #include "sources.h"
@@ -124,3 +124,12 @@
       }
   return NULL;
 }
+
+bool cSources::ContainsSourceType(char SourceType)
+{
+  for (cSource *p = First(); p; p = Next(p)) {
+      if (cSource::ToChar(p->Code()) == SourceType)
+         return true;
+      }
+  return false;
+}
diff -ruN vdr-2.1.5/sources.h vdr-2.1.6/sources.h
--- vdr-2.1.5/sources.h	2013-08-21 12:27:32.000000000 +0200
+++ vdr-2.1.6/sources.h	2014-03-09 12:59:49.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: sources.h 3.2 2013/08/21 10:27:32 kls Exp $
+ * $Id: sources.h 3.3 2014/03/09 11:59:49 kls Exp $
  */
 
 #ifndef __SOURCES_H
@@ -62,6 +62,7 @@
 class cSources : public cConfig<cSource> {
 public:
   cSource *Get(int Code);
+  bool ContainsSourceType(char SourceType);
   };
 
 extern cSources Sources;
diff -ruN vdr-2.1.5/vdr.5 vdr-2.1.6/vdr.5
--- vdr-2.1.5/vdr.5	2013-08-11 15:50:42.000000000 +0200
+++ vdr-2.1.6/vdr.5	2014-03-16 11:38:31.000000000 +0100
@@ -8,7 +8,7 @@
 .\" License as specified in the file COPYING that comes with the
 .\" vdr distribution.
 .\"
-.\" $Id: vdr.5 3.1 2013/08/11 13:50:42 kls Exp $
+.\" $Id: vdr.5 3.2 2014/03/16 10:38:31 kls Exp $
 .\"
 .TH vdr 5 "31 Mar 2013" "2.0" "Video Disk Recorder Files"
 .SH NAME
@@ -99,12 +99,15 @@
 \fBI\fR@Inversion (0, 1)
 \fBL\fR@Left circular polarization
 \fBM\fR@Modulation (2, 5, 6, 7, 10, 11, 12, 16, 32, 64, 128, 256, 999)
+\fBN\fR@pilot mode (0, 1, 999)
 \fBO\fR@rollOff (0, 20, 25, 35)
 \fBP\fR@stream id (0-255)
+\fBQ\fR@t2 system id (0-65535)
 \fBR\fR@Right circular polarization
 \fBS\fR@delivery System (0, 1)
 \fBT\fR@Transmission mode (1, 2, 4, 8, 16, 32)
 \fBV\fR@Vertical polarization
+\fBX\fR@siso/miso mode (0, 1)
 \fBY\fR@hierarchY (0, 1, 2, 4)
 .TE
 
@@ -139,6 +142,8 @@
 \fB256\fR@QAM256 (DVB-C, DVB-T2)
 .TE
 
+\fBPilot mode:\fR The pilot mode (0 = "off", 1 = "on", 999 = "auto") for DVB-S2 multiplex (DVB-S2 only).
+
 \fBRolloff:\fR The Nyquist filter rolloff factor for DVB-S (\fB35\fR) and DVB-S2 (\fB35\fR, 25, 20),
 35 = 0.35, 25 = 0.25, 20 = 0.20, DVB-S/DVB-S2 default value is 0.35
 
@@ -146,8 +151,12 @@
 Physical Layer Pipe (PLP) id (\fB0\fR-255) for DVB-T2 multiplex (DVB-S2/DVB-T2 only,
 with devices that support "multi streaming").
 
+\fBT2 System id:\fR Unique identifier (\fB0\fR-65535) of T2 system within the DVB network (DVB-T2).
+
 \fBTransmission mode:\fR Number of DVB-T OFDM carriers, 32 = 32k, 16 = 16k, 8 = 8k, 4 = 4k, 2 = 2k, 1 = 1k. If in doubt, try 8k.
 
+\fBSISO/MISO mode:\fR Specifies the Single-Input/Multiple-Input Single-Output mode (\fB0\fR = SISO, 1 = MISO) (DVB-T2).
+
 \fBHierarchy:\fR If set to 1, this transponder uses two streams, high priority and low priority.
 If in doubt, try 0 (off). (DVB-T/DVB-T2 only).
 
diff -ruN vdr-2.1.5/vdr.c vdr-2.1.6/vdr.c
--- vdr-2.1.5/vdr.c	2014-01-26 13:27:51.000000000 +0100
+++ vdr-2.1.6/vdr.c	2014-03-16 13:49:13.000000000 +0100
@@ -22,7 +22,7 @@
  *
  * The project's page is at http://www.tvdr.de
  *
- * $Id: vdr.c 3.10 2014/01/26 12:27:51 kls Exp $
+ * $Id: vdr.c 3.11 2014/03/16 12:49:13 kls Exp $
  */
 
 #include <getopt.h>
@@ -34,6 +34,9 @@
 #include <stdlib.h>
 #include <sys/capability.h>
 #include <sys/prctl.h>
+#ifdef SDNOTIFY
+#include <systemd/sd-daemon.h>
+#endif
 #include <termios.h>
 #include <unistd.h>
 #include "audio.h"
@@ -845,6 +848,10 @@
      alarm(WatchdogTimeout); // Initial watchdog timer start
      }
 
+#ifdef SDNOTIFY
+  sd_notify(0, "READY=1");
+#endif
+
   // Main program loop:
 
 #define DELETE_MENU ((IsInfoMenu &= (Menu == NULL)), delete Menu, Menu = NULL)
