Index: libs/libmythtv/NuppelVideoPlayer.cpp
===================================================================
--- libs/libmythtv/NuppelVideoPlayer.cpp	(revision 7892)
+++ libs/libmythtv/NuppelVideoPlayer.cpp	(working copy)
@@ -412,8 +412,10 @@
     if (osd)
     {
         QRect visible, total;
-        videoOutput->GetOSDBounds(total, visible);
-        osd->Reinit(total.width(),   total.height(), frame_interval,
+        float aspect;
+        videoOutput->GetOSDBounds(total, visible, aspect);
+        osd->Reinit(total.width(),   total.height(),
+                    aspect,          frame_interval,
                     visible.left(),  visible.top(),
                     visible.width(), visible.height());
     }
@@ -2056,8 +2058,10 @@
     if (!using_null_videoout)
     {
         QRect visible, total;
-        videoOutput->GetOSDBounds(total, visible);
-        osd = new OSD(total.width(),   total.height(), frame_interval,
+        float aspect;
+        videoOutput->GetOSDBounds(total, visible, aspect);
+        osd = new OSD(total.width(),   total.height(),
+                      aspect,          frame_interval,
                       visible.left(),  visible.top(),
                       visible.width(), visible.height());
 
Index: libs/libmythtv/osd.h
===================================================================
--- libs/libmythtv/osd.h	(revision 7892)
+++ libs/libmythtv/osd.h	(working copy)
@@ -42,7 +42,7 @@
 {
     Q_OBJECT
  public:
-    OSD(int width, int height, int framerate,
+    OSD(int width, int height, float aspect, int framerate,
         int dispx, int dispy, int dispw, int disph);
    ~OSD(void);
 
@@ -108,7 +108,8 @@
 
     int getTimeType(void) { return timeType; }
 
-    void Reinit(int width, int height, int frint, int dispx, int dispy, 
+    void Reinit(int width, int height, float aspect, int frint,
+                int dispx, int dispy, 
                 int dispw, int disph);
 
     void SetFrameInterval(int frint);
@@ -152,6 +153,8 @@
 
     int vid_width;
     int vid_height;
+    float vid_aspect;
+    float wscale;
     int frameint;
 
     QString themepath;
Index: libs/libmythtv/videooutbase.cpp
===================================================================
--- libs/libmythtv/videooutbase.cpp	(revision 7892)
+++ libs/libmythtv/videooutbase.cpp	(working copy)
@@ -501,10 +501,20 @@
     height = imgh;
 }
 
-void VideoOutput::GetOSDBounds(QRect &total, QRect &visible) const
+void VideoOutput::GetOSDBounds(QRect &total, QRect &visible, float &aspect) const
 {
     total   = GetTotalOSDBounds();
     visible = GetVisibleOSDBounds();
+    aspect  = XJ_aspect;
+    switch (letterbox)
+    {
+        case kLetterbox_16_9_Zoom:
+            aspect = 4.0/3;
+            break;
+
+        default:
+            break;
+    }
 }
 
 /**
Index: libs/libmythtv/videooutbase.h
===================================================================
--- libs/libmythtv/videooutbase.h	(revision 7892)
+++ libs/libmythtv/videooutbase.h	(working copy)
@@ -146,7 +146,7 @@
     virtual void Zoom(int direction);
  
     virtual void GetDrawSize(int &xoff, int &yoff, int &width, int &height);
-    virtual void GetOSDBounds(QRect &visible, QRect &total) const;
+    virtual void GetOSDBounds(QRect &visible, QRect &total, float &aspect) const;
 
     virtual int GetRefreshRate(void) = 0;
 
Index: libs/libmythtv/ttfont.cpp
===================================================================
--- libs/libmythtv/ttfont.cpp	(revision 7892)
+++ libs/libmythtv/ttfont.cpp	(working copy)
@@ -525,7 +525,7 @@
     glyphs.clear();
 }
 
-TTFFont::TTFFont(char *file, int size, int video_width, int video_height,
+TTFFont::TTFFont(char *file, int size, float wscale,
                  float hmult)
 {
    FT_Error            error;
@@ -559,8 +559,7 @@
    fontsize = size;
    library = the_library;
 
-   vid_width = video_width;
-   vid_height = video_height;
+   m_wscale = wscale;
    m_file = file;
    m_hmult = hmult;
 
@@ -609,13 +608,8 @@
    }
 
    loadedfontsize = (int)(fontsize * m_hmult);
+   xdpi = (int)(xdpi * m_wscale);
 
-   if (vid_width != vid_height * 4 / 3)
-   {
-       xdpi = (int)(xdpi * 
-              (float)(vid_width / (float)(vid_height * 4 / 3)));
-   }
-
    FT_Set_Char_Size(face, 0, loadedfontsize * 64, xdpi, ydpi);
 
    n = face->num_charmaps;
@@ -650,10 +644,9 @@
    spacewidth = twidth - (mwidth * 2);
 }
 
-void TTFFont::Reinit(int width, int height, float hmult)
+void TTFFont::Reinit(float wscale, float hmult)
 {
-    vid_width = width;
-    vid_height = height;
+    m_wscale = wscale;
     m_hmult = hmult;
 
     KillFace();
Index: libs/libmythtv/osd.cpp
===================================================================
--- libs/libmythtv/osd.cpp	(revision 7892)
+++ libs/libmythtv/osd.cpp	(working copy)
@@ -27,13 +27,14 @@
 
 #include "osdlistbtntype.h"
 
-OSD::OSD(int width, int height, int frint,
+OSD::OSD(int width, int height, float aspect, int frint,
          int dispx, int dispy, int dispw, int disph)
    : QObject()
 {
     changed = false;
     vid_width = width;
     vid_height = height;
+    vid_aspect = aspect;
     frameint = frint;
 
     editarrowleft = editarrowright = NULL;
@@ -45,6 +46,7 @@
     yoffset = dispy;   
     displaywidth = dispw;
     displayheight = disph;
+    wscale = (float)displaywidth/(vid_aspect*displayheight);
 
     timeType = 0; 
     totalfadetime = 0;
@@ -143,8 +145,25 @@
                                frameint);
         AddSet(container, name);
 
-        OSDTypeCC *ccpage = new OSDTypeCC(name, ccfont, xoffset, yoffset,
-                                          displaywidth, displayheight);
+        int sub_xoff, sub_yoff, sub_dispw, sub_disph;
+        if (vid_aspect > 4.0f/3.0f)
+        {
+            // widescreen -- need to "pillarbox" captions
+            sub_dispw = (int)(wscale * 4.0f*displayheight/3.0f);
+            sub_disph = displayheight;
+            sub_xoff = xoffset + (displaywidth-sub_dispw)/2;
+            sub_yoff = yoffset;
+        }
+        else
+        {
+            sub_dispw = displaywidth;
+            sub_disph = displayheight;
+            sub_xoff = xoffset;
+            sub_yoff = yoffset;
+        }
+
+        OSDTypeCC *ccpage = new OSDTypeCC(name, ccfont, sub_xoff, sub_yoff,
+                                          sub_dispw, sub_disph);
         container->AddType(ccpage);
     }
 
@@ -169,8 +188,8 @@
         lb->SetItemRegColor(QColor("#505050"), QColor("#000000"), 100);
         lb->SetItemSelColor(QColor("#52CA38"), QColor("#349838"), 255);
  
-        lb->SetSpacing((int)(2 * hmult));
-        lb->SetMargin((int)(3 * wmult));
+        lb->SetSpacing(2);
+        lb->SetMargin(3);
 
         TTFFont *actfont = GetFont("infofont");
         TTFFont *inactfont = GetFont("infofont");
@@ -209,13 +228,15 @@
     }
 }
 
-void OSD::Reinit(int width, int height, int frint, int dispx, int dispy, 
+void OSD::Reinit(int width, int height, float aspect, int frint,
+                 int dispx, int dispy, 
                  int dispw, int disph)
 {
     osdlock.lock();
 
     vid_width = width;
     vid_height = height;
+    vid_aspect = aspect;
     if (frint != -1)
         frameint = frint;
 
@@ -226,13 +247,14 @@
     yoffset = dispy;
     displaywidth = dispw;
     displayheight = disph;
+    wscale = (float)displaywidth/(vid_aspect*displayheight);
 
     QMap<QString, TTFFont *>::iterator fonts = fontMap.begin();
     for (; fonts != fontMap.end(); ++fonts)
     {
         TTFFont *font = (*fonts);
         if (font)
-            font->Reinit(dispw, disph, hmult);
+            font->Reinit(wscale, hmult);
     }
 
     QMap<QString, OSDSet *>::iterator sets = setMap.begin();
@@ -240,8 +262,26 @@
     {
         OSDSet *set = (*sets);
         if (set)
-            set->Reinit(vid_width, vid_height, dispx, dispy, dispw, disph, 
+        {
+            int sub_xoff, sub_yoff, sub_dispw, sub_disph;
+            if (set->GetName() == "cc_page" && vid_aspect > 4.0f/3.0f)
+            {
+                // widescreen -- need to "pillarbox" captions
+                sub_dispw = (int)(wscale * 4.0f*displayheight/3.0f);
+                sub_disph = displayheight;
+                sub_xoff = xoffset + (displaywidth-sub_dispw)/2;
+                sub_yoff = yoffset;
+            }
+            else
+            {
+                sub_dispw = displaywidth;
+                sub_disph = displayheight;
+                sub_xoff = xoffset;
+                sub_yoff = yoffset;
+            }
+            set->Reinit(vid_width, vid_height, sub_xoff, sub_yoff, sub_dispw, sub_disph, 
                         wmult, hmult, frameint);
+        }
     }
 
     delete drawSurface;
@@ -274,8 +314,8 @@
 TTFFont *OSD::LoadFont(QString name, int size)
 {
     QString fullname = MythContext::GetConfDir() + "/" + name;
-    TTFFont *font = new TTFFont((char *)fullname.ascii(), size, vid_width,
-                                vid_height, hmult);
+    TTFFont *font = new TTFFont((char *)fullname.ascii(), size, wscale,
+                                hmult);
 
     if (font->isValid())
         return font;
@@ -283,8 +323,8 @@
     delete font;
     fullname = gContext->GetShareDir() + name;
 
-    font = new TTFFont((char *)fullname.ascii(), size, vid_width,
-                       vid_height, hmult);
+    font = new TTFFont((char *)fullname.ascii(), size, wscale,
+                       hmult);
 
     if (font->isValid())
         return font;
@@ -293,8 +333,8 @@
     if (themepath != "")
     {
         fullname = themepath + "/" + name;
-        font = new TTFFont((char *)fullname.ascii(), size, vid_width,
-                           vid_height, hmult);
+        font = new TTFFont((char *)fullname.ascii(), size, wscale,
+                           hmult);
         if (font->isValid())
             return font;
     }
@@ -302,7 +342,7 @@
     delete font;
 
     fullname = name;
-    font = new TTFFont((char *)fullname.ascii(), size, vid_width, vid_height,
+    font = new TTFFont((char *)fullname.ascii(), size, wscale,
                        hmult);
 
     if (font->isValid())
@@ -1050,8 +1090,8 @@
     lb->SetFontInactive(fpInactive);
     lb->SetItemRegColor(grUnselectedBeg, grUnselectedEnd, grUnselectedAlpha);
     lb->SetItemSelColor(grSelectedBeg, grSelectedEnd, grSelectedAlpha);
-    lb->SetSpacing((int)(spacing * hmult));
-    lb->SetMargin((int)(margin * wmult));
+    lb->SetSpacing(spacing);
+    lb->SetMargin(margin);
 
     container->AddType(lb);
 }
Index: libs/libmythtv/ttfont.h
===================================================================
--- libs/libmythtv/ttfont.h	(revision 7892)
+++ libs/libmythtv/ttfont.h	(working copy)
@@ -27,7 +27,7 @@
 class TTFFont
 {
   public:
-     TTFFont(char *file, int size, int video_width, int video_height,
+     TTFFont(char *file, int size, float wscale,
              float hmult);
     ~TTFFont();
 
@@ -46,9 +46,9 @@
      void CalcWidth(const QString &text, int *width_return);
 
      int SpaceWidth() { return spacewidth; }
-     int Size() { return m_size; }
+     int Size() { return loadedfontsize; }
 
-     void Reinit(int width, int height, float hmult);
+     void Reinit(float wscale, float hmult);
 
   private:
      void KillFace(void);
@@ -100,6 +100,7 @@
      QString m_file;
 
      int loadedfontsize;
+     float m_wscale;
      float m_hmult;
 };
 
