Index: libs/libmythtv/NuppelVideoPlayer.cpp
===================================================================
--- libs/libmythtv/NuppelVideoPlayer.cpp	(revision 22982)
+++ libs/libmythtv/NuppelVideoPlayer.cpp	(working copy)
@@ -7726,6 +7726,9 @@
         if ((1<<i) & window_map)
             GetCCWin(service_num, i).visible = true;
     }
+
+    if (GetOSD())
+        GetOSD()->CC708Updated();
 }
 
 void NuppelVideoPlayer::HideWindows(uint service_num, int window_map)
Index: libs/libmythtv/osdtypes.cpp
===================================================================
--- libs/libmythtv/osdtypes.cpp	(revision 22982)
+++ libs/libmythtv/osdtypes.cpp	(working copy)
@@ -2728,6 +2728,8 @@
                         const CC708Window &win,
                         const vector<CC708String*> &list)
 {
+    if (!win.visible) return;
+
     int maxx = surface->width;
     int maxy = surface->height;
     uint max_width = 0, total_height = 0, i = 0;
Index: libs/libmythtv/cc708window.cpp
===================================================================
--- libs/libmythtv/cc708window.cpp	(revision 22982)
+++ libs/libmythtv/cc708window.cpp	(working copy)
@@ -155,7 +155,22 @@
     true_row_count    = (row_lock) ? row_count : max(row_count + 1, (uint)2);
     true_column_count = column_count;
 
-    if (text && (!exists || (old_row != true_row_count) ||
+    if (text && exists && (old_col == true_column_count)
+                       && (old_row < true_row_count))
+    {
+        // We need to add more rows to an existing window
+        uint num = true_row_count * true_column_count;
+        CC708Character *new_text = new CC708Character[num];
+        pen.column = 0;
+        pen.row = 0;
+        for (uint i = 0; i < old_row * old_col; i++)
+            new_text[i] = text[i];
+        for (uint i = old_row * old_col; i < num; i++)
+            new_text[i].attr = pen.attr;
+        delete [] text;
+        text = new_text;
+    }
+    else if (text && (!exists || (old_row != true_row_count) ||
                  (old_col != true_column_count)))
     {
         delete [] text;
@@ -367,12 +382,12 @@
     if (k708DirLeftToRight == print_dir || k708DirRightToLeft == print_dir)
     {
         // basic wrapping for l->r, r->l languages
-        if (new_column >= (int)true_column_count)
+        if (!row_lock && column_lock && (new_column >= (int)true_column_count))
         {
             new_column  = 0;
             new_row    += 1;
         }
-        else if (new_column < 0)
+        else if (!row_lock && column_lock && (new_column < 0))
         {
             new_column  = (int)true_column_count - 1;
             new_row    -= 1;

