diff --git a/mythtv/libs/libmythui/mythuibuttonlist.cpp b/mythtv/libs/libmythui/mythuibuttonlist.cpp
index d2c3f6c..d9b404e 100644
--- a/mythtv/libs/libmythui/mythuibuttonlist.cpp
+++ b/mythtv/libs/libmythui/mythuibuttonlist.cpp
@@ -1503,6 +1503,7 @@ void MythUIButtonList::SetValueByData(QVariant data)
 
 void MythUIButtonList::SetItemCurrent(MythUIButtonListItem *item)
 {
+    if (!item->isEnabled()) return;
     int newIndex = m_itemList.indexOf(item);
     SetItemCurrent(newIndex);
 }
@@ -1515,6 +1516,8 @@ void MythUIButtonList::SetItemCurrent(int current, int topPosition)
     if (current == -1 || current >= m_itemList.size())
         return;
 
+    if (!m_itemList.at(current)->isEnabled()) return;
+
     if (current == m_selPosition &&
         (topPosition == -1 || topPosition == m_topPosition))
         return;
@@ -1902,6 +1905,8 @@ bool MythUIButtonList::MoveUp(MovementUnit unit, uint amount)
             else if (m_wrapStyle == WrapCaptive)
                 return true;
 
+            findEnabledUp(unit);
+
             break;
 
         case MoveColumn:
@@ -1916,6 +1921,7 @@ bool MythUIButtonList::MoveUp(MovementUnit unit, uint amount)
                 m_selPosition = pos + (m_columns - 1);
             else if (m_wrapStyle == WrapCaptive)
                 return true;
+            findEnabledUp(unit);
 
             break;
 
@@ -1944,6 +1950,7 @@ bool MythUIButtonList::MoveUp(MovementUnit unit, uint amount)
             }
             else if (m_wrapStyle == WrapCaptive)
                 return true;
+            findEnabledUp(unit);
 
             break;
 
@@ -1952,15 +1959,18 @@ bool MythUIButtonList::MoveUp(MovementUnit unit, uint amount)
                 m_selPosition = qMax(0, m_selPosition - (int)m_itemsVisible);
             else
                 m_selPosition = PageUp();
+            findEnabledUp(unit);
 
             break;
 
         case MoveMid:
             m_selPosition = (int)(m_itemList.size() / 2);
+            findEnabledDown(unit);
             break;
 
         case MoveMax:
             m_selPosition = 0;
+            findEnabledDown(unit);
             break;
 
         case MoveByAmount:
@@ -1971,6 +1981,7 @@ bool MythUIButtonList::MoveUp(MovementUnit unit, uint amount)
                 else if (m_wrapStyle > WrapNone)
                     m_selPosition = m_itemList.size() - 1;
             }
+            findEnabledUp(unit);
 
             break;
     }
@@ -1988,6 +1999,116 @@ bool MythUIButtonList::MoveUp(MovementUnit unit, uint amount)
     return true;
 }
 
+
+/**
+ * If the current item is not enabled, find the next enabled one
+ */
+void MythUIButtonList::findEnabledDown(MovementUnit unit)
+{
+
+    if (m_selPosition<0 || m_selPosition >= m_itemList.size()
+            || m_itemList.at(m_selPosition)->isEnabled()) 
+        return;
+
+    LOG(VB_GENERAL, LOG_ERR, QString("MythUIButtonList::findEnabledDown() pos =>%1")
+        .arg(m_selPosition));
+
+    int step = (unit==MoveRow)?m_columns:1;
+    if (unit == MoveRow && m_wrapStyle == WrapFlowing)unit=MoveItem;
+    if (unit == MoveColumn)
+    {
+        while ((m_selPosition + 1) % m_columns > 0 && !m_itemList.at(m_selPosition)->isEnabled())
+            ++m_selPosition;
+
+        if (m_itemList.at(m_selPosition)->isEnabled()) return;
+        if (m_wrapStyle > WrapNone)
+        {
+            m_selPosition = m_selPosition - (m_columns - 1);
+            while ((m_selPosition + 1) % m_columns > 0 && !m_itemList.at(m_selPosition)->isEnabled())
+                ++m_selPosition;
+        }
+    }
+    else 
+    {
+
+        while (!m_itemList.at(m_selPosition)->isEnabled()
+                &&  (m_selPosition < m_itemList.size() - step))
+            m_selPosition+=step;
+
+        if (!m_itemList.at(m_selPosition)->isEnabled() && m_wrapStyle > WrapNone)
+        {
+            m_selPosition=(m_selPosition+step)%m_itemList.size();
+
+            while (!m_itemList.at(m_selPosition)->isEnabled()
+                                &&  (m_selPosition < m_itemList.size() - step))
+                m_selPosition+=step;
+        }
+    }
+}
+
+void MythUIButtonList::findEnabledUp(MovementUnit unit)
+{
+    
+    if (m_selPosition<0 || m_selPosition >= m_itemList.size()
+            || m_itemList.at(m_selPosition)->isEnabled()) 
+        return;
+
+
+    LOG(VB_GENERAL, LOG_ERR, QString("MythUIButtonList::findEnabledUp() pos =>%1")
+        .arg(m_selPosition));
+
+    int step = (unit==MoveRow)?m_columns:1;
+    if (unit == MoveRow && m_wrapStyle == WrapFlowing)unit=MoveItem;
+    if (unit == MoveColumn)
+    {
+        LOG(VB_GENERAL, LOG_ERR, QString("MythUIButtonList::findEnabledUp() 2 pos =>%1")
+            .arg(m_selPosition));
+/*        while (m_selPosition>0 && (m_selPosition - 1) % m_columns > 0 && !m_itemList.at(m_selPosition)->isEnabled())
+        {
+            --m_selPosition;
+            LOG(VB_GENERAL, LOG_ERR, QString("MythUIButtonList::findEnabledUp() 3 pos =>%1")
+                .arg(m_selPosition));
+        }*/
+
+        return;
+
+        if (m_itemList.at(m_selPosition)->isEnabled()) return;
+        if (m_wrapStyle > WrapNone)
+        {
+            m_selPosition = m_selPosition - (m_columns - 1);
+            while ((m_selPosition + 1) % m_columns > 0 && !m_itemList.at(m_selPosition)->isEnabled())
+                ++m_selPosition;
+        }
+       /* while ((m_selPosition + 1) % m_columns > 0 && !m_itemList.at(m_selPosition)->isEnabled())
+            ++m_selPosition;
+
+        if (m_itemList.at(m_selPosition)->isEnabled()) return;
+        if (m_wrapStyle > WrapNone)
+        {
+            m_selPosition = m_selPosition - (m_columns - 1);
+            while ((m_selPosition + 1) % m_columns > 0 && !m_itemList.at(m_selPosition)->isEnabled())
+                ++m_selPosition;
+        }*/
+    }
+    else
+    {
+        while (!m_itemList.at(m_selPosition)->isEnabled()
+                &&  (m_selPosition - step >= 0 ))
+            m_selPosition-=step;
+
+
+        if (!m_itemList.at(m_selPosition)->isEnabled() && m_wrapStyle > WrapNone)
+        {
+            m_selPosition=m_itemList.size()-1;
+
+            while (m_selPosition>0 && !m_itemList.at(m_selPosition)->isEnabled()
+                                &&  (m_selPosition - step >= 0 ))
+                m_selPosition-=step;
+        }
+    }
+}
+
+
 bool MythUIButtonList::MoveDown(MovementUnit unit, uint amount)
 {
     int pos = m_selPosition;
@@ -2004,6 +2125,7 @@ bool MythUIButtonList::MoveDown(MovementUnit unit, uint amount)
                 m_selPosition = 0;
             else if (m_wrapStyle == WrapCaptive)
                 return true;
+            findEnabledDown(unit);
 
             break;
 
@@ -2019,6 +2141,7 @@ bool MythUIButtonList::MoveDown(MovementUnit unit, uint amount)
                 m_selPosition = pos - (m_columns - 1);
             else if (m_wrapStyle == WrapCaptive)
                 return true;
+            findEnabledDown(unit);
 
             break;
 
@@ -2039,7 +2162,7 @@ bool MythUIButtonList::MoveDown(MovementUnit unit, uint amount)
                 m_selPosition = (pos % m_columns);
             else if (m_wrapStyle == WrapCaptive)
                 return true;
-
+            findEnabledDown(unit);
             break;
 
         case MovePage:
@@ -2048,11 +2171,12 @@ bool MythUIButtonList::MoveDown(MovementUnit unit, uint amount)
                                      m_selPosition + (int)m_itemsVisible);
             else
                 m_selPosition = PageDown();
-
+            findEnabledDown(unit);
             break;
 
         case MoveMax:
             m_selPosition = m_itemCount - 1;
+            findEnabledUp(unit);
             break;
 
         case MoveByAmount:
@@ -2063,6 +2187,7 @@ bool MythUIButtonList::MoveDown(MovementUnit unit, uint amount)
                 else if (m_wrapStyle > WrapNone)
                     m_selPosition = 0;
             }
+            findEnabledDown(unit);
 
             break;
     }
@@ -2406,7 +2531,7 @@ bool MythUIButtonList::keyPressEvent(QKeyEvent *e)
         {
             MythUIButtonListItem *item = GetItemCurrent();
 
-            if (item)
+            if (item && item->isEnabled())
                 emit itemClicked(item);
         }
         else if (action == "SEARCH")
@@ -2929,6 +3054,8 @@ MythUIButtonListItem::MythUIButtonListItem(MythUIButtonList *lbtype,
     m_checkable = checkable;
     m_state     = state;
     m_showArrow = showArrow;
+    m_enabled   = true;
+
     m_data      = 0;
 
     if (state >= NotChecked)
@@ -2954,6 +3081,7 @@ MythUIButtonListItem::MythUIButtonListItem(MythUIButtonList *lbtype,
     m_checkable = false;
     m_state     = CantCheck;
     m_showArrow = false;
+    m_enabled   = true;
 
     if (m_parent)
         m_parent->InsertItem(this, listPosition);
@@ -3274,6 +3402,15 @@ void MythUIButtonListItem::setDrawArrow(bool flag)
     m_showArrow = flag;
 }
 
+bool MythUIButtonListItem::isEnabled() const
+{
+    return m_enabled;
+}
+void MythUIButtonListItem::setEnabled(bool flag)
+{
+    m_enabled = flag;
+}
+
 void MythUIButtonListItem::SetData(QVariant data)
 {
     m_data = data;
@@ -3299,7 +3436,11 @@ void MythUIButtonListItem::SetToRealButton(MythUIStateType *button, bool selecte
 
     QString state;
 
-    if (selected)
+    if (!m_enabled)
+    {
+        state = m_parent->m_active ? "disabledactive" : "disabledinactive";
+    }
+    else if (selected)
     {
         button->MoveToTop();
         state = m_parent->m_active ? "selectedactive" : "selectedinactive";
diff --git a/mythtv/libs/libmythui/mythuibuttonlist.h b/mythtv/libs/libmythui/mythuibuttonlist.h
index d42a204..091cd1d 100644
--- a/mythtv/libs/libmythui/mythuibuttonlist.h
+++ b/mythtv/libs/libmythui/mythuibuttonlist.h
@@ -74,6 +74,9 @@ class MUI_PUBLIC MythUIButtonListItem
     bool checkable() const;
     void setCheckable(bool flag);
 
+    bool isEnabled() const;
+    void setEnabled(bool flag);
+
     CheckState state() const;
     void setChecked(CheckState state);
 
@@ -96,6 +99,7 @@ class MUI_PUBLIC MythUIButtonListItem
     CheckState      m_state;
     QVariant        m_data;
     bool            m_showArrow;
+    bool            m_enabled;
 
     QMap<QString, TextProperties> m_strings;
     QMap<QString, MythImage*> m_images;
@@ -239,6 +243,9 @@ class MUI_PUBLIC MythUIButtonList : public MythUIType
 
     bool DoFind(bool doMove, bool searchForward);
 
+    void findEnabledUp(MovementUnit unit);
+    void findEnabledDown(MovementUnit unit);
+
     /* methods for subclasses to override */
     virtual void CalculateVisibleItems(void);
     virtual QPoint GetButtonPosition(int column, int row) const;
