Index: libs/libmythtv/mpeg/dvbdescriptors.cpp
===================================================================
--- libs/libmythtv/mpeg/dvbdescriptors.cpp	(revision 9206)
+++ libs/libmythtv/mpeg/dvbdescriptors.cpp	(working copy)
@@ -7,6 +7,7 @@
 // Decode a text string according to ETSI EN 300 468 Annex A
 QString dvb_decode_text(const unsigned char *src, uint length)
 {
+    static QTextCodec * codecs[16];
     QString result;
 
     if (!length)
@@ -30,9 +31,13 @@
         }
         else if ((buf[0] >= 0x01) && (buf[0] <= 0x0B))
         {
-            QString coding = "ISO8859-" + QString::number(4 + buf[0]);
-            QTextCodec *codec = QTextCodec::codecForName(coding);
-            result = codec->toUnicode((const char*)buf + 1, length - 1);
+	    uint code = 4 + buf[0];
+           
+	    if (!codecs[code-1]) {
+	        QString coding = "ISO8859-" + QString::number(code);
+		codecs[code-1] = QTextCodec::codecForName(coding);
+	    }
+            result = codecs[code-1]->toUnicode((const char*)buf + 1, length - 1);
         }
         else if (buf[0] == 0x10)
         {
@@ -44,9 +49,11 @@
 
             uint code = 1;
             swab(buf + 1, &code, 2);
-            QString coding = "ISO8859-" + QString::number(code);
-            QTextCodec *codec = QTextCodec::codecForName(coding);
-            result = codec->toUnicode((const char*)buf + 3, length - 3);
+	    if (!codecs[code-1]) {
+	        QString coding = "ISO8859-" + QString::number(code);
+		codecs[code-1] = QTextCodec::codecForName(coding);
+	    }
+            result = codecs[code-1]->toUnicode((const char*)buf + 3, length - 3);
         }
         else
         {
