Index: libs/libmythtv/diseqc.h
===================================================================
--- libs/libmythtv/diseqc.h	(revision 11294)
+++ libs/libmythtv/diseqc.h	(working copy)
@@ -359,12 +359,14 @@
     void SetLOFSwitch(uint lof_switch)    { m_lof_switch = lof_switch; }
     void SetLOFHigh(  uint lof_hi)        { m_lof_hi     = lof_hi;     }
     void SetLOFLow(   uint lof_lo)        { m_lof_lo     = lof_lo;     }
+    void SetReversed(bool reversed)       { m_reversed   = reversed;   }
 
     // Gets
     dvbdev_lnb_t GetType(void)      const { return m_type;             }
     uint         GetLOFSwitch(void) const { return m_lof_switch;       }
     uint         GetLOFHigh(void)   const { return m_lof_hi;           }
     uint         GetLOFLow(void)    const { return m_lof_lo;           }
+    bool         IsReversed(void)   const { return m_reversed;         }
     bool         IsHighBand(const DVBTuning&) const;
     bool         IsHorizontal(const DVBTuning&) const;
     uint32_t     GetIntermediateFrequency(const DiSEqCDevSettings&,
@@ -383,6 +385,7 @@
     uint         m_lof_switch;
     uint         m_lof_hi;
     uint         m_lof_lo;
+    bool         m_reversed;
 
     static const TypeTable LNBTypeTable[5];
 };
Index: libs/libmythtv/dbcheck.cpp
===================================================================
--- libs/libmythtv/dbcheck.cpp	(revision 11294)
+++ libs/libmythtv/dbcheck.cpp	(working copy)
@@ -10,7 +10,7 @@
 #include "mythdbcon.h"
 
 /// This is the DB schema version expected by the running MythTV instance.
-const QString currentDatabaseVersion = "1160";
+const QString currentDatabaseVersion = "1161";
 
 static bool UpdateDBVersionNumber(const QString &newnumber);
 static bool performActualUpdate(const QString updates[], QString version,
@@ -2546,6 +2546,17 @@
             return false;
     }
 
+    if (dbver == "1160")
+    {
+        const QString updates[] = {
+"ALTER TABLE diseqc_tree ADD COLUMN reversed TINYINT NOT NULL DEFAULT '0';",
+""
+};
+
+        if (!performActualUpdate(updates, "1161", dbver))
+            return false;
+    }
+
 //"ALTER TABLE capturecard DROP COLUMN dvb_recordts;" in 0.21
 //"ALTER TABLE capturecard DROP COLUMN dvb_hw_decoder;" in 0.21
 //"ALTER TABLE cardinput DROP COLUMN preference;" in 0.22
Index: libs/libmythtv/diseqcsettings.cpp
===================================================================
--- libs/libmythtv/diseqcsettings.cpp	(revision 11294)
+++ libs/libmythtv/diseqcsettings.cpp	(working copy)
@@ -457,25 +457,39 @@
     uint                       lof_sw;
     uint                       lof_lo;
     uint                       lof_hi;
+    bool                       reversed;
 };
 
 static lnb_preset lnb_presets[] =
 {
-    /* description, type, LOF switch, LOF low, LOF high */
+    /* description, type, LOF switch, LOF low, LOF high, Reversed Polarity */
     { DeviceTree::tr("Single (Europe)"),
-      DiSEqCDevLNB::kTypeVoltageControl,               0,  9750000,        0 },
+      DiSEqCDevLNB::kTypeVoltageControl,
+             0,  9750000,        0, false },
     { DeviceTree::tr("Universal (Europe)"),
-      DiSEqCDevLNB::kTypeVoltageAndToneControl, 11700000,  9750000, 10600000 },
+      DiSEqCDevLNB::kTypeVoltageAndToneControl,
+      11700000,  9750000, 10600000, false },
     { DeviceTree::tr("Circular (N. America)"),
-      DiSEqCDevLNB::kTypeVoltageControl,               0, 11250000,        0 },
+      DiSEqCDevLNB::kTypeVoltageControl,
+             0, 11250000,        0, false },
+    { DeviceTree::tr("Reverse Circular (N. America)"),
+      DiSEqCDevLNB::kTypeVoltageControl,
+             0, 11250000,        0,  true },
     { DeviceTree::tr("Linear (N. America)"),
-      DiSEqCDevLNB::kTypeVoltageControl,               0, 10750000,        0 },
+      DiSEqCDevLNB::kTypeVoltageControl,
+             0, 10750000,        0, false },
     { DeviceTree::tr("C Band"),
-      DiSEqCDevLNB::kTypeVoltageControl,               0,  5150000,        0 },
+      DiSEqCDevLNB::kTypeVoltageControl,
+             0,  5150000,        0, false },
     { DeviceTree::tr("DishPro Bandstacked"),
-      DiSEqCDevLNB::kTypeBandstacked,                  0, 11250000, 14350000 },
+      DiSEqCDevLNB::kTypeBandstacked,
+             0, 11250000, 14350000, false },
+    { DeviceTree::tr("Reverse DishPro Bandstacked"),
+      DiSEqCDevLNB::kTypeBandstacked,
+             0, 11250000, 14350000,  true },
     { QString::null,
-      DiSEqCDevLNB::kTypeVoltageControl,               0,        0,        0 },
+      DiSEqCDevLNB::kTypeVoltageControl,
+             0,        0,        0, false },
 };
 
 uint FindPreset(const DiSEqCDevLNB &lnb)
@@ -483,10 +497,11 @@
     uint i;
     for (i = 0; !lnb_presets[i].name.isEmpty(); i++)
     {
-        if (lnb_presets[i].type   == lnb.GetType()      &&
-            lnb_presets[i].lof_sw == lnb.GetLOFSwitch() &&
-            lnb_presets[i].lof_lo == lnb.GetLOFLow()    &&
-            lnb_presets[i].lof_hi == lnb.GetLOFHigh())
+        if (lnb_presets[i].type     == lnb.GetType()      &&
+            lnb_presets[i].lof_sw   == lnb.GetLOFSwitch() &&
+            lnb_presets[i].lof_lo   == lnb.GetLOFLow()    &&
+            lnb_presets[i].lof_hi   == lnb.GetLOFHigh()   &&
+            lnb_presets[i].reversed == lnb.IsReversed())
         {
             break;
         }
@@ -645,6 +660,33 @@
     DiSEqCDevLNB &m_lnb;
 };
 
+class LNBReversedSetting : public CheckBoxSetting
+{
+  public:
+    LNBReversedSetting(DiSEqCDevLNB &lnb) : m_lnb(lnb)
+    {
+        setLabel(DeviceTree::tr("LNB Reversed"));
+        QString help = DeviceTree::tr(
+            "This defines whether the signal reaching the LNB "
+            "is reversed from normal polarization. This happens "
+            "to circular signals bouncing twice on a toroidal "
+            "dish.");
+        setHelpText(help);
+    }
+
+    virtual void load(void)
+    {
+        setValue(m_lnb.IsReversed());
+    }
+
+    virtual void save(void)
+    {
+        m_lnb.SetReversed(getValue());
+    }
+  private:
+    DiSEqCDevLNB &m_lnb;
+};
+
 //////////////////////////////////////// LNBConfig
 
 LNBConfig::LNBConfig(DiSEqCDevLNB &lnb)
@@ -664,6 +706,8 @@
     group->addChild(m_lof_lo);
     m_lof_hi = new LNBLOFHighSetting(lnb);
     group->addChild(m_lof_hi);
+    m_reversed = new LNBReversedSetting(lnb);
+    group->addChild(m_reversed);
     connect(m_type, SIGNAL(valueChanged(const QString&)),
             this,   SLOT(  UpdateType(  void)));
     connect(preset, SIGNAL(valueChanged(const QString&)),
@@ -690,10 +734,12 @@
         m_lof_switch->setValue(QString::number(preset.lof_sw / 1000));
         m_lof_lo->setValue(QString::number(preset.lof_lo / 1000));
         m_lof_hi->setValue(QString::number(preset.lof_hi / 1000));
+        m_reversed->setValue(preset.reversed);
         m_type->setEnabled(false);
         m_lof_switch->setEnabled(false);
         m_lof_hi->setEnabled(false);
         m_lof_lo->setEnabled(false);
+        m_reversed->setEnabled(false);
     }
 }
 
@@ -709,16 +755,19 @@
             m_lof_switch->setEnabled(false);
             m_lof_hi->setEnabled(false);
             m_lof_lo->setEnabled(true);
+            m_reversed->setEnabled(true);
             break;
         case DiSEqCDevLNB::kTypeVoltageAndToneControl:
             m_lof_switch->setEnabled(true);
             m_lof_hi->setEnabled(true);
             m_lof_lo->setEnabled(true);
+            m_reversed->setEnabled(true);
             break;
         case DiSEqCDevLNB::kTypeBandstacked:
             m_lof_switch->setEnabled(false);
             m_lof_hi->setEnabled(true);
             m_lof_lo->setEnabled(true);
+            m_reversed->setEnabled(true);
             break;
     }
 }
Index: libs/libmythtv/diseqcsettings.h
===================================================================
--- libs/libmythtv/diseqcsettings.h	(revision 11294)
+++ libs/libmythtv/diseqcsettings.h	(working copy)
@@ -75,6 +75,7 @@
 class LNBLOFSwitchSetting;
 class LNBLOFLowSetting;
 class LNBLOFHighSetting;
+class LNBReversedSetting;
 
 class LNBConfig : public ConfigurationWizard
 {
@@ -92,6 +93,7 @@
     LNBLOFSwitchSetting *m_lof_switch;
     LNBLOFLowSetting    *m_lof_lo;
     LNBLOFHighSetting   *m_lof_hi;
+    LNBReversedSetting  *m_reversed;
 };
 
 class DeviceTree : public ListBoxSetting
Index: libs/libmythtv/diseqc.cpp
===================================================================
--- libs/libmythtv/diseqc.cpp	(revision 11294)
+++ libs/libmythtv/diseqc.cpp	(working copy)
@@ -1849,7 +1849,8 @@
 DiSEqCDevLNB::DiSEqCDevLNB(DiSEqCDevTree &tree, uint devid)
     : DiSEqCDevDevice(tree, devid),
       m_type(kTypeVoltageAndToneControl), m_lof_switch(11700000),
-      m_lof_hi(10600000),       m_lof_lo(9750000)
+      m_lof_hi(10600000),       m_lof_lo(9750000),
+      m_reversed(false)
 {
     Reset();
 }
@@ -1883,7 +1884,8 @@
     MSqlQuery query(MSqlQuery::InitCon());
     query.prepare(
         "SELECT subtype,         lnb_lof_switch, "
-        "       lnb_lof_hi,      lnb_lof_lo "
+        "       lnb_lof_hi,      lnb_lof_lo, "
+        "       reversed "
         "FROM diseqc_tree "
         "WHERE diseqcid = :DEVID");
     query.bindValue(":DEVID", GetDeviceID());
@@ -1899,6 +1901,7 @@
         m_lof_switch = query.value(1).toInt();
         m_lof_hi     = query.value(2).toInt();
         m_lof_lo     = query.value(3).toInt();
+        m_reversed   = query.value(4).toInt();
     }
 
     return true;
@@ -1921,7 +1924,8 @@
             "    subtype         = :TYPE,    "
             "    lnb_lof_switch  = :LOFSW,   "
             "    lnb_lof_lo      = :LOFLO,   "
-            "    lnb_lof_hi      = :LOFHI    "
+            "    lnb_lof_hi      = :LOFHI,   "
+            "    reversed        = :REVERSED "
             "WHERE diseqcid = :DEVID");
     }
     else
@@ -1930,11 +1934,11 @@
             "INSERT INTO diseqc_tree"
             " ( parentid,      ordinal,         type, "
             "   description,   subtype,         lnb_lof_switch, "
-            "   lnb_lof_lo,    lnb_lof_hi ) "
+            "   lnb_lof_lo,    lnb_lof_hi,      reversed ) "
             "VALUES "
             " (:PARENT,       :ORDINAL,         'lnb', "
             "  :DESC,         :TYPE,            :LOFSW, "
-            "  :LOFLO,        :LOFHI ) ");
+            "  :LOFLO,        :LOFHI,           :REVERSED ) ");
     }
 
     if (m_parent)
@@ -1946,6 +1950,7 @@
     query.bindValue(":LOFSW",   m_lof_switch);
     query.bindValue(":LOFLO",   m_lof_lo);
     query.bindValue(":LOFHI",   m_lof_hi);
+    query.bindValue(":REVERSED",m_reversed);
     query.bindValue(":DEVID",   GetDeviceID());
 
     // update dev_id
@@ -1996,7 +2001,10 @@
     (void) tuning;
 #ifdef USING_DVB
     char pol = tuning.PolarityChar();
-    return (pol == 'h' || pol == 'l');
+    bool horizontal = (pol == 'h' || pol == 'l');
+    if (IsReversed())
+	horizontal = !horizontal;
+    return horizontal;
 #else
     return false;
 #endif // !USING_DVB
