diff -Naur vdr-2.0.0/dvbdevice.c vdr-2.0.0-s2apiwrapper-light/dvbdevice.c
--- vdr-2.0.0/dvbdevice.c	2013-03-16 16:23:35.000000000 +0100
+++ vdr-2.0.0-s2apiwrapper-light/dvbdevice.c	2013-03-31 19:36:39.000000000 +0200
@@ -21,11 +21,6 @@
 #include "menuitems.h"
 #include "sourceparams.h"
 
-#if (DVB_API_VERSION << 8 | DVB_API_VERSION_MINOR) < 0x0508
-#define DTV_STREAM_ID DTV_DVBT2_PLP_ID
-#define FE_CAN_MULTISTREAM 0x4000000
-#endif
-
 #define DVBS_TUNE_TIMEOUT  9000 //ms
 #define DVBS_LOCK_TIMEOUT  2000 //ms
 #define DVBC_TUNE_TIMEOUT  9000 //ms
@@ -801,7 +796,9 @@
         // DVB-S2
         SETCMD(DTV_PILOT, PILOT_AUTO);
         SETCMD(DTV_ROLLOFF, dtp.RollOff());
-        SETCMD(DTV_STREAM_ID, dtp.StreamId());
+        if (device->DvbApiVersion() >= 0x0508) {
+           SETCMD(DTV_STREAM_ID, dtp.StreamId());
+	        }
         }
      else {
         // DVB-S
@@ -835,7 +832,12 @@
      SETCMD(DTV_HIERARCHY, dtp.Hierarchy());
      if (frontendType == SYS_DVBT2) {
         // DVB-T2
-        SETCMD(DTV_STREAM_ID, dtp.StreamId());
+        if (device->DvbApiVersion() >= 0x0508) {
+           SETCMD(DTV_STREAM_ID, dtp.StreamId());
+	        }
+	     else if (device->DvbApiVersion() >= 0x0503) {
+           SETCMD(DTV_DVBT2_PLP_ID_LEGACY, dtp.StreamId());
+	        }
         }
 
      tuneTimeout = DVBT_TUNE_TIMEOUT;
@@ -1178,28 +1180,39 @@
      LOG_ERROR;
      return false;
      }
-#if (DVB_API_VERSION << 8 | DVB_API_VERSION_MINOR) >= 0x0505
   dtv_property Frontend[1];
   memset(&Frontend, 0, sizeof(Frontend));
   dtv_properties CmdSeq;
   memset(&CmdSeq, 0, sizeof(CmdSeq));
   CmdSeq.props = Frontend;
-  SETCMD(DTV_ENUM_DELSYS, 0);
-  int Result = ioctl(fd_frontend, FE_GET_PROPERTY, &CmdSeq);
-  if (Result == 0) {
-     for (uint i = 0; i < Frontend[0].u.buffer.len; i++) {
-         if (numDeliverySystems >= MAXDELIVERYSYSTEMS) {
-            esyslog("ERROR: too many delivery systems on frontend %d/%d", adapter, frontend);
-            break;
+  SETCMD(DTV_API_VERSION, 0);
+  if (ioctl(fd_frontend, FE_GET_PROPERTY, &CmdSeq) != 0) {
+     LOG_ERROR;
+     return false;
+     }
+  dvbApiVersion = Frontend[0].u.data;
+  bool LegacyMode = true;
+  if (dvbApiVersion >= 0x0505) {
+     memset(&Frontend, 0, sizeof(Frontend));
+     memset(&CmdSeq, 0, sizeof(CmdSeq));
+     CmdSeq.props = Frontend;
+     SETCMD(DTV_ENUM_DELSYS, 0);
+     int Result = ioctl(fd_frontend, FE_GET_PROPERTY, &CmdSeq);
+     if (Result == 0) {
+        for (uint i = 0; i < Frontend[0].u.buffer.len; i++) {
+            if (numDeliverySystems >= MAXDELIVERYSYSTEMS) {
+               esyslog("ERROR: too many delivery systems on frontend %d/%d", adapter, frontend);
+               break;
+               }
+            deliverySystems[numDeliverySystems++] = Frontend[0].u.buffer.data[i];
             }
-         deliverySystems[numDeliverySystems++] = Frontend[0].u.buffer.data[i];
-         }
+        LegacyMode = false;
+        }
+     else {
+        esyslog("ERROR: can't query delivery systems on frontend %d/%d - falling back to legacy mode", adapter, frontend);
+        }
      }
-  else {
-     esyslog("ERROR: can't query delivery systems on frontend %d/%d - falling back to legacy mode", adapter, frontend);
-#else
-     {
-#endif
+  if (LegacyMode) {
      // Legacy mode (DVB-API < 5.5):
      switch (frontendInfo.type) {
        case FE_QPSK: deliverySystems[numDeliverySystems++] = SYS_DVBS;
diff -Naur vdr-2.0.0/dvbdevice.h vdr-2.0.0-s2apiwrapper-light/dvbdevice.h
--- vdr-2.0.0/dvbdevice.h	2013-03-07 10:42:29.000000000 +0100
+++ vdr-2.0.0-s2apiwrapper-light/dvbdevice.h	2013-03-31 17:43:07.000000000 +0200
@@ -13,9 +13,10 @@
 #include <linux/dvb/frontend.h>
 #include <linux/dvb/version.h>
 #include "device.h"
-
-#if (DVB_API_VERSION << 8 | DVB_API_VERSION_MINOR) < 0x0503
-#error VDR requires Linux DVB driver API version 5.3 or higher!
+#include "s2apiwrapper.h"
+ 
+#if DVB_API_VERSION < 5
+#error VDR requires Linux DVB driver API version 5!
 #endif
 
 #define MAXDVBDEVICES  8
@@ -124,6 +125,7 @@
   int adapter, frontend;
 private:
   dvb_frontend_info frontendInfo;
+  int dvbApiVersion;
   int deliverySystems[MAXDELIVERYSYSTEMS];
   int numDeliverySystems;
   int numModulations;
@@ -137,6 +139,7 @@
   virtual ~cDvbDevice();
   int Adapter(void) const { return adapter; }
   int Frontend(void) const { return frontend; }
+  int DvbApiVersion(void) const { return dvbApiVersion; }
   virtual bool Ready(void);
   virtual cString DeviceType(void) const;
   virtual cString DeviceName(void) const;
diff -Naur vdr-2.0.0/s2apiwrapper.h vdr-2.0.0-s2apiwrapper-light/s2apiwrapper.h
--- vdr-2.0.0/s2apiwrapper.h	1970-01-01 01:00:00.000000000 +0100
+++ vdr-2.0.0-s2apiwrapper-light/s2apiwrapper.h	2013-03-31 19:17:31.000000000 +0200
@@ -0,0 +1,255 @@
+/*
+ * s2apiwrapper.h:
+ * Wrapper to translate DVB S2API to DVB 3.0 API calls
+ *
+ * See the main source file 'vdr.c' for copyright information and
+ * how to reach the author.
+ *
+ * $Id: $
+ */
+
+#ifndef __S2API_WRAPPER_H
+#define __S2API_WRAPPER_H
+
+#include <linux/dvb/frontend.h>
+#include <linux/dvb/version.h>
+#include <sys/ioctl.h>
+
+#if DVB_API_VERSION < 5
+#error VDR requires Linux DVB driver API version 5!
+#endif
+
+#if (DVB_API_VERSION << 8 | DVB_API_VERSION_MINOR) < 0x0501
+
+enum fe_s2caps_5_1 {
+	FE_CAN_2G_MODULATION		= 0x10000000, /* frontend supports "2nd generation modulation" (DVB-S2) */
+};
+
+enum fe_transmit_mode_5_1 {
+	TRANSMISSION_MODE_4K = TRANSMISSION_MODE_AUTO+1
+};
+
+
+#define DTV_ISDBT_PARTIAL_RECEPTION	18
+#define DTV_ISDBT_SOUND_BROADCASTING	19
+
+#define DTV_ISDBT_SB_SUBCHANNEL_ID	20
+#define DTV_ISDBT_SB_SEGMENT_IDX	21
+#define DTV_ISDBT_SB_SEGMENT_COUNT	22
+
+#define DTV_ISDBT_LAYERA_FEC			23
+#define DTV_ISDBT_LAYERA_MODULATION		24
+#define DTV_ISDBT_LAYERA_SEGMENT_COUNT		25
+#define DTV_ISDBT_LAYERA_TIME_INTERLEAVING	26
+
+#define DTV_ISDBT_LAYERB_FEC			27
+#define DTV_ISDBT_LAYERB_MODULATION		28
+#define DTV_ISDBT_LAYERB_SEGMENT_COUNT		29
+#define DTV_ISDBT_LAYERB_TIME_INTERLEAVING	30
+
+#define DTV_ISDBT_LAYERC_FEC			31
+#define DTV_ISDBT_LAYERC_MODULATION		32
+#define DTV_ISDBT_LAYERC_SEGMENT_COUNT		33
+#define DTV_ISDBT_LAYERC_TIME_INTERLEAVING	34
+
+#define DTV_ISDBT_LAYER_ENABLED	41
+
+#define DTV_ISDBS_TS_ID		42
+
+#undef DTV_MAX_COMMAND
+#define DTV_MAX_COMMAND				DTV_ISDBS_TS_ID
+
+#endif // (DVB_API_VERSION << 8 | DVB_API_VERSION_MINOR) < 0x0501
+
+
+
+#if (DVB_API_VERSION << 8 | DVB_API_VERSION_MINOR) < 0x0502
+
+enum fe_s2caps_5_2 {
+	FE_CAN_TURBO_FEC			= 0x8000000,  // frontend supports "turbo fec modulation"
+};
+
+#endif // (DVB_API_VERSION << 8 | DVB_API_VERSION_MINOR) < 0x0502
+
+
+
+#if (DVB_API_VERSION << 8 | DVB_API_VERSION_MINOR) < 0x0503
+
+enum fe_transmit_mode_5_3 {
+	TRANSMISSION_MODE_1K = TRANSMISSION_MODE_4K + 1,
+	TRANSMISSION_MODE_16K,
+	TRANSMISSION_MODE_32K,
+};
+
+enum fe_bandwidth_5_3 {
+	BANDWIDTH_5_MHZ = BANDWIDTH_AUTO + 1,
+	BANDWIDTH_10_MHZ,
+	BANDWIDTH_1_712_MHZ,
+};
+
+enum fe_guard_interval_5_3 {
+	GUARD_INTERVAL_1_128 = GUARD_INTERVAL_AUTO + 1,
+	GUARD_INTERVAL_19_128,
+	GUARD_INTERVAL_19_256,
+};
+
+enum fe_delivery_system_5_3 {
+	SYS_DVBT2 = SYS_DAB + 1,
+};
+
+#define DTV_DVBT2_PLP_ID	43
+
+#undef DTV_MAX_COMMAND
+#define DTV_MAX_COMMAND				DTV_DVBT2_PLP_ID
+
+#endif // (DVB_API_VERSION << 8 | DVB_API_VERSION_MINOR) < 0x0503
+
+
+
+#if (DVB_API_VERSION << 8 | DVB_API_VERSION_MINOR) < 0x0504
+
+enum fe_delivery_system_5_4 {
+	SYS_TURBO = SYS_DVBT2 + 1,
+};
+
+#endif // (DVB_API_VERSION << 8 | DVB_API_VERSION_MINOR) < 0x0504
+
+
+#if (DVB_API_VERSION << 8 | DVB_API_VERSION_MINOR) < 0x0505
+
+#define DTV_ENUM_DELSYS		44
+
+#undef DTV_MAX_COMMAND
+#define DTV_MAX_COMMAND				DTV_ENUM_DELSYS
+
+enum fe_rolloff_5_5 {
+	ROLLOFF_15 = ROLLOFF_AUTO + 1,	/* DVB-C Annex A */
+	ROLLOFF_13,	/* DVB-C Annex C */
+};
+
+#endif // (DVB_API_VERSION << 8 | DVB_API_VERSION_MINOR) < 0x0505
+
+
+#if (DVB_API_VERSION << 8 | DVB_API_VERSION_MINOR) < 0x0506
+
+/* ATSC-MH */
+#define DTV_ATSCMH_FIC_VER		45
+#define DTV_ATSCMH_PARADE_ID		46
+#define DTV_ATSCMH_NOG			47
+#define DTV_ATSCMH_TNOG			48
+#define DTV_ATSCMH_SGN			49
+#define DTV_ATSCMH_PRC			50
+#define DTV_ATSCMH_RS_FRAME_MODE	51
+#define DTV_ATSCMH_RS_FRAME_ENSEMBLE	52
+#define DTV_ATSCMH_RS_CODE_MODE_PRI	53
+#define DTV_ATSCMH_RS_CODE_MODE_SEC	54
+#define DTV_ATSCMH_SCCC_BLOCK_MODE	55
+#define DTV_ATSCMH_SCCC_CODE_MODE_A	56
+#define DTV_ATSCMH_SCCC_CODE_MODE_B	57
+#define DTV_ATSCMH_SCCC_CODE_MODE_C	58
+#define DTV_ATSCMH_SCCC_CODE_MODE_D	59
+
+#undef DTV_MAX_COMMAND
+#define DTV_MAX_COMMAND				DTV_ATSCMH_SCCC_CODE_MODE_D
+
+
+enum fe_delivery_system_5_6 {
+	SYS_DVBC_ANNEX_A = SYS_DVBC_ANNEX_AC,
+	SYS_DVBC_ANNEX_C = SYS_TURBO + 1
+};
+
+/* ATSC-MH */
+
+enum atscmh_sccc_block_mode {
+	ATSCMH_SCCC_BLK_SEP      = 0,
+	ATSCMH_SCCC_BLK_COMB     = 1,
+	ATSCMH_SCCC_BLK_RES      = 2,
+};
+
+enum atscmh_sccc_code_mode {
+	ATSCMH_SCCC_CODE_HLF     = 0,
+	ATSCMH_SCCC_CODE_QTR     = 1,
+	ATSCMH_SCCC_CODE_RES     = 2,
+};
+
+enum atscmh_rs_frame_ensemble {
+	ATSCMH_RSFRAME_ENS_PRI   = 0,
+	ATSCMH_RSFRAME_ENS_SEC   = 1,
+};
+
+enum atscmh_rs_frame_mode {
+	ATSCMH_RSFRAME_PRI_ONLY  = 0,
+	ATSCMH_RSFRAME_PRI_SEC   = 1,
+	ATSCMH_RSFRAME_RES       = 2,
+};
+
+enum atscmh_rs_code_mode {
+	ATSCMH_RSCODE_211_187    = 0,
+	ATSCMH_RSCODE_223_187    = 1,
+	ATSCMH_RSCODE_235_187    = 2,
+	ATSCMH_RSCODE_RES        = 3,
+};
+
+
+#endif // (DVB_API_VERSION << 8 | DVB_API_VERSION_MINOR) < 0x0506
+
+
+#if (DVB_API_VERSION << 8 | DVB_API_VERSION_MINOR) < 0x0507
+
+enum fe_code_rate_5_7 {
+	FEC_2_5 = FEC_9_10 + 1,
+};
+
+enum fe_modulation_5_7 {
+	QAM_4_NR = DQPSK + 1,
+};
+
+enum fe_transmit_mode_5_7 {
+	TRANSMISSION_MODE_C1 = TRANSMISSION_MODE_32K + 1,
+	TRANSMISSION_MODE_C3780,
+};
+
+enum fe_guard_interval_5_7 {
+	GUARD_INTERVAL_PN420 = GUARD_INTERVAL_19_256 + 1,
+	GUARD_INTERVAL_PN595,
+	GUARD_INTERVAL_PN945,
+};
+
+enum fe_interleaving {
+	INTERLEAVING_NONE,
+	INTERLEAVING_AUTO,
+	INTERLEAVING_240,
+	INTERLEAVING_720,
+};
+
+#define DTV_INTERLEAVING			60
+
+#undef DTV_MAX_COMMAND
+#define DTV_MAX_COMMAND				DTV_INTERLEAVING
+
+enum fe_delivery_system_5_7 {
+	SYS_DTMB = SYS_DMBTH
+};
+
+#endif // (DVB_API_VERSION << 8 | DVB_API_VERSION_MINOR) < 0x0507
+
+
+#if (DVB_API_VERSION << 8 | DVB_API_VERSION_MINOR) < 0x0508
+
+enum fe_caps_5_8 {
+	FE_CAN_MULTISTREAM		= 0x4000000,  /* frontend supports multistream filtering */
+};
+
+
+#undef DTV_ISDBS_TS_ID
+#undef DTV_DVBT2_PLP_ID
+
+#define DTV_STREAM_ID          42
+#define DTV_ISDBS_TS_ID_LEGACY DTV_STREAM_ID
+#define DTV_DVBT2_PLP_ID_LEGACY        43
+
+#define NO_STREAM_ID_FILTER    (~0U)
+
+#endif // (DVB_API_VERSION << 8 | DVB_API_VERSION_MINOR) < 0x0508
+
+#endif // ifndef __S2API_WRAPPER_H
