Index: libs/libmythtv/osdtypeteletext.cpp
===================================================================
--- libs/libmythtv/osdtypeteletext.cpp	(revision 9261)
+++ libs/libmythtv/osdtypeteletext.cpp	(working copy)
@@ -147,10 +147,12 @@
                                     const unsigned char* buf,
                                     int vbimode, int lang, int flags)
 {
-    if (page < 256)
-        return;
 
     int magazine = MAGAZINE(page);
+
+    if (magazine < 1 || magazine > 8)
+        return;
+
     int lastPage = m_magazines[magazine - 1].current_page;
     int lastSubPage = m_magazines[magazine - 1].current_subpage;
 
@@ -228,7 +230,7 @@
             if (vbimode == VBI_DVB || vbimode == VBI_DVB_SUBTITLE)
             {
                 for (int j = 0; j < 40; j++)
-                ttpage->data[row][j] = bitswap[buf[j]];
+                    ttpage->data[row][j] = bitswap[buf[j]];
             } 
             else 
             {
@@ -842,10 +844,7 @@
     int dy = (int)round(m_tt_rowspace / 3)+1;
 
     if (doubleheight != 0)
-    {
-        dx *= 2;
         dy *= 2;
-    }
 
     if (code & 0x10) DrawRect(x,      y + 2*dy, dx, dy);
     if (code & 0x40) DrawRect(x + dx, y + 2*dy, dx, dy);
@@ -904,7 +903,7 @@
     {
         if (startbox)
         {
-            bgcolor = bgcolor = TTColor::BLACK;
+            bgcolor = TTColor::BLACK;
             startbox = false;
         }
 
@@ -1002,7 +1001,7 @@
 
             DrawBackground(x, row);
             if (doubleheight != 0)
-                    DrawBackground(x, row +1);
+                DrawBackground(x, row +1);
 
             if ((mosaic) && (ch < 0x40 || ch > 0x5F))
             {
@@ -1011,12 +1010,12 @@
             }
             else 
             {
-                if (doubleheight != 0)
+                if (doubleheight != 0 && row < kTeletextRows)
                     DrawCharacter(x, row+1, CharConversion(ch, lang),
                                   doubleheight);
                 else
                     DrawCharacter(x, row, CharConversion(ch, lang),
-                                  doubleheight);
+                                  0);
             }
         }
     }
Index: libs/libmythtv/tv_play.cpp
===================================================================
--- libs/libmythtv/tv_play.cpp	(revision 9261)
+++ libs/libmythtv/tv_play.cpp	(working copy)
@@ -127,18 +127,6 @@
             "T");
     REG_KEY("TV Playback", "TOGGLECC708",
             "Toggle ATSC CC", "^");
-    REG_KEY("TV Playback", "MENURED",
-            "Menu Red",    "F2");
-    REG_KEY("TV Playback", "MENUGREEN",
-            "Menu Green",  "F3");
-    REG_KEY("TV Playback", "MENUYELLOW",
-            "Menu Yellow", "F4");
-    REG_KEY("TV Playback", "MENUBLUE",
-            "Menu Blue",   "F5");
-    REG_KEY("TV Playback", "MENUWHITE",
-            "Menu White",  "F6");
-    REG_KEY("TV Playback", "REVEAL",
-            "Teletext reveal hidden Text", "F12");
     REG_KEY("TV Playback", "DISPCC608_1", "Display CC1", "");
     REG_KEY("TV Playback", "DISPCC608_2", "Display CC2", "");
     REG_KEY("TV Playback", "DISPCC608_3", "Display CC3", "");
@@ -186,6 +174,31 @@
     REG_KEY("TV Editing", "BIGJUMPFWD", "Jump forward 10x the normal amount",
             ">,.");
     REG_KEY("TV Editing", "TOGGLEEDIT", "Exit out of Edit Mode", "E");
+    /* Teletext keys */
+    REG_KEY("TV Playback TXT", "NEXTPAGE", 
+            "Next Teletext Page",        "Down");
+    REG_KEY("TV Playback TXT", "PREVPAGE", 
+            "Previous Teletext Page",    "Up");
+    REG_KEY("TV Playback TXT", "NEXTSUBPAGE",
+            "Next Teletext Subpage",     "Right");
+    REG_KEY("TV Playback TXT", "PREVSUBPAGE",
+            "Previous Teletext Subpage", "Left");
+    REG_KEY("TV Playback TXT", "TOGGLEBACKGROUND",
+            "Toggle Background",         "F11");
+    REG_KEY("TV Playback TXT", "TOGGLECC",      
+            "Toggle Teletext",           "T"); 
+    REG_KEY("TV Playback TXT", "MENURED",
+            "Menu Red",    "F2");
+    REG_KEY("TV Playback TXT", "MENUGREEN",
+            "Menu Green",  "F3");
+    REG_KEY("TV Playback TXT", "MENUYELLOW",
+            "Menu Yellow", "F4");
+    REG_KEY("TV Playback TXT", "MENUBLUE",
+            "Menu Blue",   "F5");
+    REG_KEY("TV Playback TXT", "MENUWHITE",
+            "Menu White",  "F6");
+    REG_KEY("TV Playback TXT", "REVEAL",
+            "Teletext reveal hidden Text", "F12");
 /*
   keys already used:
 
@@ -1808,11 +1821,18 @@
         }
     }
 
-    if (!gContext->GetMainWindow()->TranslateKeyPress(
-            "TV Playback", e, actions))
+    if (teletextmode)
     {
-        return;
+        if (!gContext->GetMainWindow()->TranslateKeyPress(
+                "TV Playback TXT", e, actions))
+            return;
     }
+    else
+    {
+        if (!gContext->GetMainWindow()->TranslateKeyPress(
+                "TV Playback", e, actions))
+            return;
+    }
 
     bool handled = false;
 
@@ -1886,15 +1906,15 @@
         {
             QString action = actions[i];
             handled = true;
-            if (action == "UP")
+            if (action == "NEXTPAGE")
                 TeletextNavigate(-1);
-            else if (action == "DOWN")
+            else if (action == "PREVPAGE")
                 TeletextNavigate(-2);
-            else if (action == "RIGHT")
+            else if (action == "NEXTSUBPAGE")
                 TeletextNavigate(-3);
-            else if (action == "LEFT")
+            else if (action == "PREVSUBPAGE")
                 TeletextNavigate(-4);
-            else if (action == "TOGGLEASPECT")
+            else if (action == "TOGGLEBACKGROUND")
                 TeletextNavigate(-5);
             else if (action == "MENURED")
                 TeletextNavigate(-6);
Index: libs/libmythtv/ttfont.cpp
===================================================================
--- libs/libmythtv/ttfont.cpp	(revision 9261)
+++ libs/libmythtv/ttfont.cpp	(working copy)
@@ -309,7 +309,7 @@
            ymin = 0;
        }
        else
-           ioff = (rmap->rows - ymin - 1) * rmap->cols;
+           ioff = (rmap->rows - ( (double_size) ? (ymin << 1) : ymin) - 1) * rmap->cols;
 
        if (ymax >= rmap->rows)
            ymax = rmap->rows - 1;
@@ -473,23 +473,23 @@
       height = h;
 
    if (x < 0)
-     {
-	clipx = -x;
-	width += x;
-	x = 0;
-     }
+   {
+       clipx = -x;
+       width += x;
+       x = 0;
+   }
    if (y < 0)
-     {
-	clipy = -y;
-	height += y;
-	y = 0;
-     }
+   {
+       clipy = -y;
+       height += y;
+       y = 0;
+   }
    if ((width <= 0) || (height <= 0))
-     {
-	destroy_font_raster(rmap);
-	destroy_font_raster(rtmp);
-	return;
-     }
+   {
+       destroy_font_raster(rmap);
+       destroy_font_raster(rtmp);
+       return;
+   }
 
    if (m_shadowxoff > 0 || m_shadowyoff > 0)
    {
