Index: gst-plugins-bad0.10-0.10.22/gst/mpegdemux/gstmpegdesc.h
===================================================================
--- gst-plugins-bad0.10-0.10.22.orig/gst/mpegdemux/gstmpegdesc.h	2011-07-10 23:29:27.422142184 +0100
+++ gst-plugins-bad0.10-0.10.22/gst/mpegdemux/gstmpegdesc.h	2011-07-11 00:02:37.326143305 +0100
@@ -281,7 +281,9 @@
 #define DESC_DVB_SATELLITE_DELIVERY_SYSTEM_orbital_position(desc)	(desc + 6)
 #define DESC_DVB_SATELLITE_DELIVERY_SYSTEM_west_east_flag(desc)	((desc[8] & 0x80) == 0x80)
 #define DESC_DVB_SATELLITE_DELIVERY_SYSTEM_polarization(desc)	((desc[8] >> 5) & 0x3)
-#define DESC_DVB_SATELLITE_DELIVERY_SYSTEM_modulation(desc)	(desc[8] & 0x1F)
+#define DESC_DVB_SATELLITE_DELIVERY_SYSTEM_roll_off(desc)	((desc[8] >> 3) & 0x3)
+#define DESC_DVB_SATELLITE_DELIVERY_SYSTEM_modulation_system(desc)	((desc[8] >> 2) & 0x1)
+#define DESC_DVB_SATELLITE_DELIVERY_SYSTEM_modulation(desc)	(desc[8] & 0x7)
 #define DESC_DVB_SATELLITE_DELIVERY_SYSTEM_symbol_rate(desc)	(desc + 9)
 #define DESC_DVB_SATELLITE_DELIVERY_SYSTEM_fec_inner(desc)	(desc[12] & 0x0F)
 
Index: gst-plugins-bad0.10-0.10.22/gst/mpegdemux/mpegtspacketizer.c
===================================================================
--- gst-plugins-bad0.10-0.10.22.orig/gst/mpegdemux/mpegtspacketizer.c	2011-07-10 23:29:27.450142184 +0100
+++ gst-plugins-bad0.10-0.10.22/gst/mpegdemux/mpegtspacketizer.c	2011-07-11 16:45:09.090767509 +0100
@@ -811,6 +811,11 @@
         guint8 polarization =
             DESC_DVB_SATELLITE_DELIVERY_SYSTEM_polarization (delivery);
         const gchar *polarization_str;
+        gboolean dvbs2 =
+            (DESC_DVB_SATELLITE_DELIVERY_SYSTEM_modulation_system (delivery) != 0);
+        guint8 roll_off =
+            DESC_DVB_SATELLITE_DELIVERY_SYSTEM_roll_off (delivery);
+        const gchar *roll_off_str;
         guint8 modulation =
             DESC_DVB_SATELLITE_DELIVERY_SYSTEM_modulation (delivery);
         const gchar *modulation_str;
@@ -893,6 +898,20 @@
           default:
             modulation_str = "reserved";
         }
+        switch (roll_off) {
+          case 0x00:
+            roll_off_str = "35";
+            break;
+          case 0x01:
+            roll_off_str = "25";
+            break;
+          case 0x02:
+            roll_off_str = "20";
+            break;
+          case 0x03:
+            roll_off_str = "reserved";
+            break;
+        }
         delivery_structure = gst_structure_new ("satellite",
             "orbital", G_TYPE_FLOAT, orbital,
             "east-or-west", G_TYPE_STRING, east ? "east" : "west",
@@ -900,7 +919,10 @@
             "frequency", G_TYPE_UINT, frequency,
             "polarization", G_TYPE_STRING, polarization_str,
             "symbol-rate", G_TYPE_UINT, symbol_rate,
-            "inner-fec", G_TYPE_STRING, fec_inner_str, NULL);
+            "inner-fec", G_TYPE_STRING, fec_inner_str,
+            "dvb-s2", G_TYPE_BOOLEAN, dvbs2,
+            "roll-off", G_TYPE_STRING, roll_off_str,
+            NULL);
         gst_structure_set (transport, "delivery", GST_TYPE_STRUCTURE,
             delivery_structure, NULL);
       } else if ((delivery =
Index: gst-plugins-bad0.10-0.10.22/gst/mpegtsdemux/gstmpegdesc.h
===================================================================
--- gst-plugins-bad0.10-0.10.22.orig/gst/mpegtsdemux/gstmpegdesc.h	2011-07-10 23:29:27.378142184 +0100
+++ gst-plugins-bad0.10-0.10.22/gst/mpegtsdemux/gstmpegdesc.h	2011-07-11 00:01:46.962142438 +0100
@@ -277,7 +277,9 @@
 #define DESC_DVB_SATELLITE_DELIVERY_SYSTEM_orbital_position(desc)	(desc + 6)
 #define DESC_DVB_SATELLITE_DELIVERY_SYSTEM_west_east_flag(desc)	((desc[8] & 0x80) == 0x80)
 #define DESC_DVB_SATELLITE_DELIVERY_SYSTEM_polarization(desc)	((desc[8] >> 5) & 0x3)
-#define DESC_DVB_SATELLITE_DELIVERY_SYSTEM_modulation(desc)	(desc[8] & 0x1F)
+#define DESC_DVB_SATELLITE_DELIVERY_SYSTEM_roll_off(desc)	((desc[8] >> 3) & 0x3)
+#define DESC_DVB_SATELLITE_DELIVERY_SYSTEM_modulation_system(desc)	((desc[8] >> 2) & 0x1)
+#define DESC_DVB_SATELLITE_DELIVERY_SYSTEM_modulation(desc)	(desc[8] & 0x7)
 #define DESC_DVB_SATELLITE_DELIVERY_SYSTEM_symbol_rate(desc)	(desc + 9)
 #define DESC_DVB_SATELLITE_DELIVERY_SYSTEM_fec_inner(desc)	(desc[12] & 0x0F)
 
Index: gst-plugins-bad0.10-0.10.22/gst/mpegtsdemux/mpegtspacketizer.c
===================================================================
--- gst-plugins-bad0.10-0.10.22.orig/gst/mpegtsdemux/mpegtspacketizer.c	2011-07-10 23:29:27.402142184 +0100
+++ gst-plugins-bad0.10-0.10.22/gst/mpegtsdemux/mpegtspacketizer.c	2011-07-11 16:45:14.542767514 +0100
@@ -858,6 +858,11 @@
         guint8 polarization =
             DESC_DVB_SATELLITE_DELIVERY_SYSTEM_polarization (delivery);
         const gchar *polarization_str;
+        gboolean dvbs2 =
+            (DESC_DVB_SATELLITE_DELIVERY_SYSTEM_modulation_system (delivery) != 0);
+        guint8 roll_off =
+            DESC_DVB_SATELLITE_DELIVERY_SYSTEM_roll_off (delivery);
+        const gchar *roll_off_str;
         guint8 modulation =
             DESC_DVB_SATELLITE_DELIVERY_SYSTEM_modulation (delivery);
         const gchar *modulation_str;
@@ -940,6 +945,20 @@
           default:
             modulation_str = "reserved";
         }
+        switch (roll_off) {
+          case 0x00:
+            roll_off_str = "35";
+            break;
+          case 0x01:
+            roll_off_str = "25";
+            break;
+          case 0x02:
+            roll_off_str = "20";
+            break;
+          case 0x03:
+            roll_off_str = "reserved";
+            break;
+        }
         delivery_structure = gst_structure_new ("satellite",
             "orbital", G_TYPE_FLOAT, orbital,
             "east-or-west", G_TYPE_STRING, east ? "east" : "west",
@@ -947,7 +966,10 @@
             "frequency", G_TYPE_UINT, frequency,
             "polarization", G_TYPE_STRING, polarization_str,
             "symbol-rate", G_TYPE_UINT, symbol_rate,
-            "inner-fec", G_TYPE_STRING, fec_inner_str, NULL);
+            "inner-fec", G_TYPE_STRING, fec_inner_str,
+            "dvb-s2", G_TYPE_BOOLEAN, dvbs2,
+            "roll-off", G_TYPE_STRING, roll_off_str,
+            NULL);
         gst_structure_set (transport, "delivery", GST_TYPE_STRUCTURE,
             delivery_structure, NULL);
       } else if ((delivery =
Index: gst-plugins-bad0.10-0.10.22/sys/dvb/gstdvbsrc.c
===================================================================
--- gst-plugins-bad0.10-0.10.22.orig/sys/dvb/gstdvbsrc.c	2011-07-10 23:29:27.334142184 +0100
+++ gst-plugins-bad0.10-0.10.22/sys/dvb/gstdvbsrc.c	2011-07-11 16:44:58.906767491 +0100
@@ -87,7 +87,10 @@
   ARG_DVBSRC_HIERARCHY_INF,
   ARG_DVBSRC_TUNE,
   ARG_DVBSRC_INVERSION,
-  ARG_DVBSRC_STATS_REPORTING_INTERVAL
+  ARG_DVBSRC_STATS_REPORTING_INTERVAL,
+  ARG_DVBSRC_ROLL_OFF,
+  ARG_DVBSRC_GEN2,
+  ARG_DVBSRC_DVBS2,
 };
 
 #define DEFAULT_ADAPTER 0
@@ -106,6 +109,7 @@
 #define DEFAULT_HIERARCHY HIERARCHY_1
 #define DEFAULT_INVERSION INVERSION_ON
 #define DEFAULT_STATS_REPORTING_INTERVAL 100
+#define DEFAULT_ROLL_OFF ROLLOFF_AUTO
 
 #define DEFAULT_BUFFER_SIZE 8192        /* not a property */
 
@@ -262,6 +266,26 @@
   return dvbsrc_inversion_type;
 }
 
+#define GST_TYPE_DVBSRC_ROLL_OFF (gst_dvbsrc_roll_off_get_type ())
+static GType
+gst_dvbsrc_roll_off_get_type (void)
+{
+  static GType dvbsrc_roll_off_type = 0;
+  static GEnumValue roll_off_types[] = {
+    {ROLLOFF_35, "35", "35"},
+    {ROLLOFF_25, "25", "25"},
+    {ROLLOFF_20, "20", "20"},
+    {ROLLOFF_AUTO, "AUTO", "auto"},
+    {0, NULL, NULL},
+  };
+
+  if (!dvbsrc_roll_off_type) {
+    dvbsrc_roll_off_type =
+        g_enum_register_static ("GstDvbSrcRollOff", roll_off_types);
+  }
+  return dvbsrc_roll_off_type;
+}
+
 static void gst_dvbsrc_finalize (GObject * object);
 static void gst_dvbsrc_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec);
@@ -444,6 +468,21 @@
           "stats-reporting-interval",
           "The number of reads before reporting frontend stats",
           0, G_MAXUINT, DEFAULT_STATS_REPORTING_INTERVAL, G_PARAM_READWRITE));
+
+  g_object_class_install_property (gobject_class, ARG_DVBSRC_GEN2,
+      g_param_spec_boolean ("gen2", "gen2",
+          "Device supports 2G modulation (DVB-S2)", FALSE,
+          G_PARAM_READABLE));
+
+  g_object_class_install_property (gobject_class, ARG_DVBSRC_ROLL_OFF,
+      g_param_spec_enum ("roll-off", "roll-off",
+          "Roll-off factor (DVB-S2)",
+          GST_TYPE_DVBSRC_ROLL_OFF, DEFAULT_ROLL_OFF, G_PARAM_READWRITE));
+
+  g_object_class_install_property (gobject_class, ARG_DVBSRC_GEN2,
+      g_param_spec_boolean ("dvb-s2", "DVB-S2",
+          "Tuning properties are for DVB-S2 (DVB-S and DVB-S2)", FALSE,
+          G_PARAM_READABLE));
 }
 
 /* initialize the new element
@@ -583,7 +622,7 @@
     case ARG_DVBSRC_SYM_RATE:
       object->sym_rate = g_value_get_uint (value);
       GST_INFO_OBJECT (object, "Set Property: ARG_DVBSRC_SYM_RATE to value %d",
-          g_value_get_int (value));
+          g_value_get_uint (value));
       break;
 
     case ARG_DVBSRC_BANDWIDTH:
@@ -625,6 +664,12 @@
       object->stats_interval = g_value_get_uint (value);
       object->stats_counter = 0;
       break;
+    case ARG_DVBSRC_ROLL_OFF:
+      object->roll_off = g_value_get_enum (value);
+      break;
+    case ARG_DVBSRC_DVBS2:
+      object->dvbs2 = g_value_get_boolean (value);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
   }
@@ -689,6 +734,15 @@
     case ARG_DVBSRC_STATS_REPORTING_INTERVAL:
       g_value_set_uint (value, object->stats_interval);
       break;
+    case ARG_DVBSRC_ROLL_OFF:
+      g_value_set_enum (value, object->roll_off);
+      break;
+    case ARG_DVBSRC_GEN2:
+      g_value_set_boolean (value, object->gen2);
+      break;
+    case ARG_DVBSRC_DVBS2:
+      g_value_set_boolean (value, object->dvbs2);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
   }
@@ -752,9 +806,13 @@
   adapter_name = g_strdup (fe_info.name);
 
   object->adapter_type = fe_info.type;
+  object->gen2 = (fe_info.caps & FE_CAN_2G_MODULATION) != 0;
   switch (object->adapter_type) {
     case FE_QPSK:
-      adapter_desc = "DVB-S";
+      if (object->gen2)
+        adapter_desc = "DVB-S2";
+      else
+        adapter_desc = "DVB-S";
       adapter_structure = gst_structure_new ("dvb-adapter",
           "type", G_TYPE_STRING, adapter_desc,
           "name", G_TYPE_STRING, adapter_name,
@@ -1235,11 +1293,26 @@
 
 }
 
+#if DVB_API_VERSION >= 5
+inline static void
+set_prop (struct dtv_property *props, int *n, guint32 cmd, guint32 data)
+{
+  props[*n].cmd = cmd;
+  props[(*n)++].u.data = data;
+}
+#endif
 
 static gboolean
 gst_dvbsrc_tune (GstDvbSrc * object)
 {
-#if DVB_API_VERSION == 3 && DVB_API_VERSION_MINOR == 3
+#if DVB_API_VERSION >= 5
+#define NUM_DTV_PROPS 16
+  struct dtv_property fe_props_array[NUM_DTV_PROPS];
+  struct dtv_properties fe_props;
+  int n;
+  unsigned int del_sys = SYS_UNDEFINED;
+  unsigned int bandwidth;
+#elif DVB_API_VERSION == 3 && DVB_API_VERSION_MINOR == 3
   struct dvbfe_params feparams;
 #else
   struct dvb_frontend_parameters feparams;
@@ -1250,6 +1323,7 @@
   int j;
   unsigned int freq = object->freq;
   unsigned int sym_rate = object->sym_rate * 1000;
+  int inversion = object->inversion;
 
   /* found in mail archive on linuxtv.org
    * What works well for us is:
@@ -1268,25 +1342,44 @@
 
   gst_dvbsrc_unset_pes_filters (object);
   for (j = 0; j < 5; j++) {
+#if DVB_API_VERSION >= 5
+    GST_DEBUG_OBJECT (object, "using s2api");
+    memset (fe_props_array, 0, sizeof (fe_props_array));
+    fe_props_array[0].cmd = DTV_CLEAR;
+    fe_props.num = 1;
+    fe_props.props = fe_props_array;
+    if (ioctl (object->fd_frontend, FE_SET_PROPERTY, &fe_props) < 0) {
+      g_warning ("Error resetting tuner: %s", strerror (errno));
+    }
+#endif
+    n = 3;
     switch (object->adapter_type) {
       case FE_QPSK:
         object->tone = SEC_TONE_OFF;
         if (freq > 2200000) {
           // this must be an absolute frequency
           if (freq < SLOF) {
-            feparams.frequency = (freq - LOF1);
+            freq -= LOF1;
           } else {
-            feparams.frequency = (freq - LOF2);
+            freq -= LOF2;
             object->tone = SEC_TONE_ON;
           }
-        } else {
-          // this is an L-Band frequency
-          feparams.frequency = freq;
         }
-        feparams.inversion = INVERSION_AUTO;
         GST_DEBUG_OBJECT (object, "api version %d.%d", DVB_API_VERSION,
             DVB_API_VERSION_MINOR);
-#if DVB_API_VERSION == 3 && DVB_API_VERSION_MINOR == 3
+        inversion = INVERSION_AUTO;
+#if DVB_API_VERSION >= 5
+        set_prop (fe_props_array, &n, DTV_SYMBOL_RATE, sym_rate);
+        set_prop (fe_props_array, &n, DTV_INNER_FEC, object->code_rate_hp);
+        del_sys = SYS_DVBS;
+        if (object->gen2 && object->dvbs2) {
+          del_sys = SYS_DVBS2;
+          set_prop (fe_props_array, &n, DTV_ROLLOFF, object->roll_off);
+          set_prop (fe_props_array, &n, DTV_PILOT, PILOT_AUTO);
+        } else if (object->gen2) {
+          set_prop (fe_props_array, &n, DTV_ROLLOFF, ROLLOFF_35);
+        }
+#elif DVB_API_VERSION == 3 && DVB_API_VERSION_MINOR == 3
         GST_DEBUG_OBJECT (object, "using multiproto driver");
         feparams.delsys.dvbs.symbol_rate = sym_rate;
         feparams.delsys.dvbs.fec = object->code_rate_hp;
@@ -1296,7 +1389,7 @@
 #endif
         GST_INFO_OBJECT (object,
             "tuning DVB-S to L-Band:%u, Pol:%d, srate=%u, 22kHz=%s",
-            feparams.frequency, object->pol, sym_rate,
+            freq, object->pol, sym_rate,
             object->tone == SEC_TONE_ON ? "on" : "off");
 
         if (object->pol == DVB_POL_H)
@@ -1305,10 +1398,16 @@
           voltage = SEC_VOLTAGE_13;
 
         if (object->diseqc_src == -1 || object->send_diseqc == FALSE) {
+#if DVB_API_VERSION >= 5
+          set_prop (fe_props_array, &n, DTV_VOLTAGE, voltage);
+          // DTV_TONE not yet implemented
+          // set_prop (fe_props_array, &n, DTV_TONE, object->tone);
+#else
           if (ioctl (object->fd_frontend, FE_SET_VOLTAGE, voltage) < 0) {
             g_warning ("Unable to set voltage on dvb frontend device");
           }
 
+#endif
           if (ioctl (object->fd_frontend, FE_SET_TONE, object->tone) < 0) {
             g_warning ("Error setting tone: %s", strerror (errno));
           }
@@ -1323,9 +1422,37 @@
 
         break;
       case FE_OFDM:
-
-        feparams.frequency = freq;
-#if DVB_API_VERSION == 3 && DVB_API_VERSION_MINOR == 3
+#if DVB_API_VERSION >= 5
+        del_sys = SYS_DVBT;
+        bandwidth = 0;
+        if (object->bandwidth != BANDWIDTH_AUTO) {
+          /* Presumably not specifying bandwidth with s2api is equivalent
+           * to BANDWIDTH_AUTO.
+           */
+          switch (object->bandwidth) {
+          case BANDWIDTH_8_MHZ:
+            bandwidth = 8000000;
+            break;
+          case BANDWIDTH_7_MHZ:
+            bandwidth = 7000000;
+            break;
+          case BANDWIDTH_6_MHZ:
+            bandwidth = 6000000;
+            break;
+          default:
+            break;
+          }
+        }
+        if (bandwidth) {
+          set_prop (fe_props_array, &n, DTV_BANDWIDTH_HZ, bandwidth);
+        }
+        set_prop (fe_props_array, &n, DTV_CODE_RATE_HP, object->code_rate_hp);
+        set_prop (fe_props_array, &n, DTV_CODE_RATE_LP, object->code_rate_lp);
+        set_prop (fe_props_array, &n, DTV_MODULATION, object->modulation);
+        set_prop (fe_props_array, &n, DTV_TRANSMISSION_MODE, object->transmission_mode);
+        set_prop (fe_props_array, &n, DTV_GUARD_INTERVAL, object->guard_interval);
+        set_prop (fe_props_array, &n, DTV_HIERARCHY, object->hierarchy_information);
+#elif DVB_API_VERSION == 3 && DVB_API_VERSION_MINOR == 3
         feparams.delsys.dvbs.fec = object->code_rate_hp;
         feparams.delsys.dvbs.modulation = object->modulation;
         feparams.delsys.dvbs.symbol_rate = sym_rate;
@@ -1338,16 +1465,18 @@
         feparams.u.ofdm.guard_interval = object->guard_interval;
         feparams.u.ofdm.hierarchy_information = object->hierarchy_information;
 #endif
-        feparams.inversion = object->inversion;
 
         GST_INFO_OBJECT (object, "tuning DVB-T to %d Hz\n", freq);
         break;
       case FE_QAM:
         GST_INFO_OBJECT (object, "Tuning DVB-C to %d, srate=%d", freq,
             sym_rate);
-        feparams.frequency = freq;
-        feparams.inversion = object->inversion;
-#if DVB_API_VERSION == 3 && DVB_API_VERSION_MINOR == 3
+#if DVB_API_VERSION >= 5
+        del_sys = SYS_DVBC_ANNEX_AC;
+        set_prop (fe_props_array, &n, DTV_INNER_FEC, object->code_rate_hp);
+        set_prop (fe_props_array, &n, DTV_MODULATION, object->modulation);
+        set_prop (fe_props_array, &n, DTV_SYMBOL_RATE, sym_rate);
+#elif DVB_API_VERSION == 3 && DVB_API_VERSION_MINOR == 3
         feparams.delsys.dvbs.fec = object->code_rate_hp;
         feparams.delsys.dvbs.modulation = object->modulation;
         feparams.delsys.dvbs.symbol_rate = sym_rate;
@@ -1359,8 +1488,10 @@
         break;
       case FE_ATSC:
         GST_INFO_OBJECT (object, "Tuning ATSC to %d", freq);
-        feparams.frequency = freq;
-#if DVB_API_VERSION == 3 && DVB_API_VERSION_MINOR == 3
+#if DVB_API_VERSION >= 5
+        del_sys = SYS_ATSC;
+        set_prop (fe_props_array, &n, DTV_MODULATION, object->modulation);
+#elif DVB_API_VERSION == 3 && DVB_API_VERSION_MINOR == 3
         feparams.delsys.atsc.modulation = object->modulation;
 #else
         feparams.u.vsb.modulation = object->modulation;
@@ -1372,7 +1503,21 @@
     }
     usleep (100000);
     /* now tune the frontend */
-#if DVB_API_VERSION == 3 && DVB_API_VERSION_MINOR == 3
+#if DVB_API_VERSION >= 5
+    set_prop (fe_props_array, &n, DTV_TUNE, 0);
+    fe_props.num = n;
+    fe_props.props = fe_props_array;
+    n = 0;
+    set_prop (fe_props_array, &n, DTV_DELIVERY_SYSTEM, del_sys);
+    set_prop (fe_props_array, &n, DTV_FREQUENCY, freq);
+    set_prop (fe_props_array, &n, DTV_INVERSION, inversion);
+#else
+    feparams.frequency = freq;
+    feparams.inversion = inversion;
+#endif
+#if DVB_API_VERSION >= 5
+    if (ioctl (object->fd_frontend, FE_SET_PROPERTY, &fe_props) < 0) {
+#elif DVB_API_VERSION == 3 && DVB_API_VERSION_MINOR == 3
     if (ioctl (object->fd_frontend, DVBFE_SET_PARAMS, &feparams) < 0) {
 #else
     if (ioctl (object->fd_frontend, FE_SET_FRONTEND, &feparams) < 0) {
Index: gst-plugins-bad0.10-0.10.22/sys/dvb/gstdvbsrc.h
===================================================================
--- gst-plugins-bad0.10-0.10.22.orig/sys/dvb/gstdvbsrc.h	2011-07-10 23:29:27.358142184 +0100
+++ gst-plugins-bad0.10-0.10.22/sys/dvb/gstdvbsrc.h	2011-07-10 23:29:48.722142183 +0100
@@ -45,6 +45,7 @@
     gboolean need_tune;
 
     int adapter_type;
+    gboolean gen2;            /* FE_CAN_2G_MODULATION (DVB-S2) */
 
     int adapter_number;       /* the device directory with the sub-devices */
     int frontend_number;
@@ -59,6 +60,8 @@
     int tone;
     int diseqc_src;
     gboolean send_diseqc;
+    int roll_off;
+    gboolean dvbs2;
 
     int bandwidth;
     int code_rate_hp;
Index: gst-plugins-bad0.10-0.10.22/sys/dvb/dvbbasebin.c
===================================================================
--- gst-plugins-bad0.10-0.10.22.orig/sys/dvb/dvbbasebin.c	2011-07-12 15:50:53.966449077 +0100
+++ gst-plugins-bad0.10-0.10.22/sys/dvb/dvbbasebin.c	2011-07-12 15:51:01.450449009 +0100
@@ -69,7 +69,10 @@
   PROP_HIERARCHY,
   PROP_INVERSION,
   PROP_PROGRAM_NUMBERS,
-  PROP_STATS_REPORTING_INTERVAL
+  PROP_STATS_REPORTING_INTERVAL,
+  PROP_ROLL_OFF,
+  PROP_GEN2,
+  PROP_DVBS2,
       /* FILL ME */
 };
 
@@ -239,6 +242,9 @@
     {PROP_HIERARCHY, "hierarchy"},
     {PROP_INVERSION, "inversion"},
     {PROP_STATS_REPORTING_INTERVAL, "stats-reporting-interval"},
+    {PROP_ROLL_OFF, "roll-off"},
+    {PROP_GEN2, "gen2"},
+    {PROP_DVBS2, "dvb-s2"},
     {0, NULL}
   };
 
@@ -426,6 +432,8 @@
     case PROP_HIERARCHY:
     case PROP_INVERSION:
     case PROP_STATS_REPORTING_INTERVAL:
+    case PROP_ROLL_OFF:
+    case PROP_DVBS2:
       /* FIXME: check if we can tune (state < PLAYING || program-numbers == "") */
       g_object_set_property (G_OBJECT (dvbbasebin->dvbsrc), pspec->name, value);
       break;
@@ -460,6 +468,9 @@
     case PROP_HIERARCHY:
     case PROP_INVERSION:
     case PROP_STATS_REPORTING_INTERVAL:
+    case PROP_ROLL_OFF:
+    case PROP_GEN2:
+    case PROP_DVBS2:
       g_object_get_property (G_OBJECT (dvbbasebin->dvbsrc), pspec->name, value);
       break;
     case PROP_PROGRAM_NUMBERS:
