Index: configure
===================================================================
--- configure	(revision 14918)
+++ configure	(working copy)
@@ -2374,6 +2374,33 @@
 check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
 
 ##########################################
+# fribidi check
+
+disable fribidi
+FRIBIDI_CONFIG="pkg-config fribidi"
+if ( pkg-config fribidi --version ) >/dev/null 2>&1 ; then
+	_fribidi_version=`${FRIBIDI_CONFIG} --version | sed 's/[^0-9]//g'`
+	if test "$_fribidi_version" -lt 022 ; then
+		disable fribidi
+	else
+
+		check_cc `${FRIBIDI_CONFIG} --cflags` `${FRIBIDI_CONFIG} --libs` << EOF && enable fribidi		
+#include <stdio.h>
+#include <fribidi/fribidi.h>
+int main()
+{
+  if(fribidi_parse_charset("UTF-8") != FRIBIDI_CHAR_SET_UTF8) {
+    printf("Fribidi headers are not consistents with the library!\n");
+    exit(1);
+  }
+  return 0;
+}
+EOF
+		
+	fi
+
+fi
+##########################################
 # SDL check
 
 disable sdl_too_old
@@ -2904,6 +2931,12 @@
 BLOCK_QUOTE
 
 echo
+if test x"$frontend" = x"yes" ; then
+  echo "# OSD Bidi languages support"
+  echo "Fribi present    $fribidi"
+fi
+
+echo
 if enabled frontend; then
   echo "# Input Support"
   echo "Joystick menu             ${joystick_menu-no}"
@@ -3037,6 +3070,12 @@
   echo "FREETYPE_CFLAGS=`freetype-config --cflags`" >> $MYTH_CONFIG_MAK
   echo "FREETYPE_LIBS=`freetype-config --libs`" >> $MYTH_CONFIG_MAK
 fi
+if enabled fribidi; then
+  echo "#define HAVE_FRIBIDI 1" >> $TMPH
+  echo "HAVE_FRIBIDI=yes" >> $MYTH_CONFIG_MAK
+  echo "FRIBIDI_LIBS=`${FRIBIDI_CONFIG} --libs`" >> $MYTH_CONFIG_MAK
+  echo "FRIBIDI_CFLAGS=`${FRIBIDI_CONFIG} --cflags`" >> $MYTH_CONFIG_MAK
+fi
 if enabled sdl; then
   echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> $MYTH_CONFIG_MAK
   echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> $MYTH_CONFIG_MAK
Index: settings.pro
===================================================================
--- settings.pro	(revision 14918)
+++ settings.pro	(working copy)
@@ -99,5 +99,6 @@
 EXTRA_LIBS += $$CONFIG_XRANDR_LIBS
 EXTRA_LIBS += $$CONFIG_XVMC_LIBS
 EXTRA_LIBS += $$CONFIG_OPENGL_LIBS
+EXTRA_LIBS += $$FRIBIDI_LIBS
 
 LIRC_LIBS = $$CONFIG_LIRC_LIBS
Index: libs/libmythtv/osdtypes.cpp
===================================================================
--- libs/libmythtv/osdtypes.cpp	(revision 14918)
+++ libs/libmythtv/osdtypes.cpp	(working copy)
@@ -16,6 +16,12 @@
 #include "mythcontext.h"
 #include "mythdialogs.h"
 
+#include "../libmyth/mythconfig.h"
+#ifdef HAVE_FRIBIDI
+	#include "fribidi/fribidi.h"
+	#include <qtextcodec.h> 
+#endif
+
 /// Shared OSD image cache
 OSDImageCache OSDTypeImage::c_cache;
 
@@ -790,7 +796,40 @@
         }
     }
 
-    return QDeepCopy<QString>(rtl_string_composer.join(""));
+    QString output = rtl_string_composer.join("");
+
+#ifdef HAVE_FRIBIDI
+
+    static QTextCodec *codeci =NULL;
+    if (codeci==NULL) codeci = QTextCodec::codecForName("utf8");
+		
+    QCString temp = codeci->fromUnicode(output);
+			
+    FriBidiCharType base;
+    size_t len;
+	
+    bool fribidi_flip_commas = true;			
+    base = fribidi_flip_commas?FRIBIDI_TYPE_ON:FRIBIDI_TYPE_L;
+			
+    const char* ip = temp;
+    FriBidiChar logical[strlen(ip)+1], visual[strlen(ip)+1];
+		
+    int char_set_num = fribidi_parse_charset ("UTF-8");
+
+    len = fribidi_charset_to_unicode ((FriBidiCharSet)char_set_num, ip, strlen(ip), logical);
+		
+    bool log2vis = fribidi_log2vis (logical, len, &base,			
+	visual, NULL, NULL, NULL); // output 
+		
+    if(log2vis)
+        len = fribidi_remove_bidi_marks (visual, len, NULL, NULL,NULL);
+		  	   
+    output = "";
+    for (int i = 0; i < len ; i++)
+        output+=QChar(visual[i]);
+	   
+#endif //HAVE_FRIBIDI
+    return QDeepCopy<QString>(output);
 }
 
 void OSDTypeText::SetText(const QString &text)
