Index: libs/libmythui/mythuibuttontree.h
===================================================================
--- libs/libmythui/mythuibuttontree.h	(revision 23020)
+++ libs/libmythui/mythuibuttontree.h	(working copy)
@@ -62,7 +62,9 @@
     uint m_visibleLists;
     uint m_currentDepth;
     uint m_oldDepth;
+    QString m_columnWidths;
     QList<MythUIButtonList*> m_buttonlists;
+    QList<MythUIButtonList*> m_listColumns;
     MythUIButtonList *m_listTemplate;
     MythUIButtonList *m_activeList;
     uint m_activeListID;
Index: libs/libmythui/mythuibuttontree.cpp
===================================================================
--- libs/libmythui/mythuibuttontree.cpp	(revision 23020)
+++ libs/libmythui/mythuibuttontree.cpp	(working copy)
@@ -10,6 +10,7 @@
 
 // Mythui Headers
 #include "mythmainwindow.h"
+#include "mythuihelper.h"
 
 MythUIButtonTree::MythUIButtonTree(MythUIType *parent, const QString &name)
                  : MythUIType(parent, name)
@@ -56,22 +57,48 @@
 
     m_listTemplate->SetVisible(false);
 
-    int width = (m_Area.width() - (m_listSpacing * (m_numLists-1))) / m_numLists;
+
+    if(m_listColumns.size() == 0)
+    {
+        int i = 1;
+        while ( i <= (int)m_numLists )
+        {
+            QString columnname = QString("listcolumn_%1").arg(i);
+            MythUIButtonList *column = dynamic_cast<MythUIButtonList *>(GetChild(columnname));
+            if (column) column->SetVisible(false);
+            m_listColumns.append(column);
+            i++;
+        };
+    };
+
+
+
+    QStringList widthlist = m_columnWidths.split(',', QString::SkipEmptyParts);
+    int defaultwidth = (m_Area.width() - (m_listSpacing * (m_numLists-1))) / m_numLists;
     int height = m_Area.height();
 
+    float scalex, scaley;
+    GetMythUI()->GetScreenSettings(scalex, scaley);
+
+    int x = 0;
     int i = 0;
     while ( i < (int)m_numLists )
     {
+        int width = (widthlist.size() == (int)m_numLists) ? (int)widthlist[i].toInt()*scalex : defaultwidth;
+        MythUIButtonList *column = m_listColumns[i];
+        if (!column) column = m_listTemplate;
+
+
         QString listname = QString("buttontree list %1").arg(i);
         MythUIButtonList *list = new MythUIButtonList(this, listname);
-        list->CopyFrom(m_listTemplate);
+        list->CopyFrom(column);
         list->SetVisible(false);
         list->SetActive(false);
         list->SetCanTakeFocus(false);
-        int x = i * (width + m_listSpacing);
         MythRect listArea = MythRect(x,0,width,height);
         list->SetArea(listArea);
         m_buttonlists.append(list);
+        x += width + m_listSpacing;
         i++;
     }
 
@@ -565,6 +592,10 @@
     {
         m_numLists = getFirstText(element).toInt();
     }
+    else if (element.tagName() == "columnwidths")
+    {
+        m_columnWidths = getFirstText(element);
+    }
     else
         return MythUIType::ParseElement(element);
 
