--- /dev/null
+diff -u tuxtxt_orig/tuxtxt.c tuxtxt/tuxtxt.c
+--- tuxtxt_orig/tuxtxt.c 2009-01-29 21:38:42.000000000 +0100
++++ tuxtxt/tuxtxt.c 2009-01-29 21:44:29.000000000 +0100
+@@ -173,6 +173,7 @@
+ char cvs_revision[] = "$Revision: 1.108 $";
+
+ int cnt=0;
++ int rc_num = 0;
+ #if !TUXTXT_CFG_STANDALONE
+ int initialized = tuxtxt_init();
+ if ( initialized )
+@@ -186,7 +187,7 @@
+
+ tuxtxt_SetRenderingDefaults(&renderinfo);
+ /* get params */
+- tuxtxt_cache.vtxtpid = renderinfo.fb = lcd = rc = renderinfo.sx = renderinfo.ex = renderinfo.sy = renderinfo.ey = -1;
++ tuxtxt_cache.vtxtpid = renderinfo.fb = lcd = renderinfo.sx = renderinfo.ex = renderinfo.sy = renderinfo.ey = -1;
+ if (argc==1)
+ {
+ printf("\nUSAGE: tuxtxt vtpid\n");
+@@ -204,8 +205,8 @@
+ perror("TuxTxt <open /dev/fb/0>");
+ return 0;
+ }
+- rc=-1;
+- while(1)
++ rc[0] = rc[1] =-1;
++ while(rc_num < 2)
+ {
+ struct stat s;
+ char tmp[128];
+@@ -213,23 +214,26 @@
+ if (stat(tmp, &s))
+ break;
+ /* open Remote Control */
+- if ((rc=open(tmp, O_RDONLY)) == -1)
++ if ((rc[rc_num]=open(tmp, O_RDONLY)) == -1)
+ {
+ perror("TuxTxt <open remote control>");
+ return 0;
+ }
+- if (ioctl(rc, EVIOCGNAME(128), tmp) < 0)
++ if (ioctl(rc[rc_num], EVIOCGNAME(128), tmp) < 0)
+ perror("EVIOCGNAME failed");
+- if (strstr(tmp, "remote control"))
+- break;
+- close(rc);
+- rc=-1;
++ if (!strstr(tmp, "remote control"))
++ {
++ close(rc[rc_num]);
++ rc[rc_num] = -1;
++ }
++ else
++ ++rc_num;
+ ++cnt;
+ }
+
+- if (rc == -1)
++ if (rc[0] == -1)
+ {
+- printf("couldnt find correct input device!!!\n");
++ printf("couldnt find usable input device!!!\n");
+ return -1;
+ }
+
+@@ -247,7 +251,7 @@
+ renderinfo.sy = 30;
+ renderinfo.ey = 555;
+
+- if (tuxtxt_cache.vtxtpid == -1 || renderinfo.fb == -1 || rc == -1 || renderinfo.sx == -1 || renderinfo.ex == -1 || renderinfo.sy == -1 || renderinfo.ey == -1)
++ if (tuxtxt_cache.vtxtpid == -1 || renderinfo.fb == -1 || renderinfo.sx == -1 || renderinfo.ex == -1 || renderinfo.sy == -1 || renderinfo.ey == -1)
+ {
+ printf("TuxTxt <Invalid Param(s)>\n");
+ return;
+@@ -623,7 +627,8 @@
+ writeproc("/proc/stb/avs/0/sb", fncmodes[renderinfo.screen_mode1]);
+
+ /* setup rc */
+- ioctl(rc, RC_IOCTL_BCODES, 1);
++ if (rc[0] >= 0) ioctl(rc[0], RC_IOCTL_BCODES, 1);
++ if (rc[1] >= 0) ioctl(rc[1], RC_IOCTL_BCODES, 1);
+
+
+
+@@ -682,9 +687,12 @@
+ close(lcd);
+
+ /* close rc */
+- close(rc);
++ if (rc[0] >= 0)
++ close(rc[0]);
++ if (rc[1] >= 0)
++ close(rc[1]);
+
+- lcd = rc = -1;
++ lcd = rc[0] = rc[1] = -1;
+
+ if (hotlistchanged)
+ savehotlist();
+@@ -2819,20 +2827,28 @@
+ timeout.tv_sec = 0;
+ timeout.tv_usec = 100000;
+ /* get code */
+- if (rc >= 0)
++ if (rc[0] >= 0)
++ {
++ FD_SET(rc[0], &rset);
++ if (rc[0] > maxfd)
++ {
++ maxfd = rc[0];
++ }
++ }
++ if (rc[1] >= 0)
+ {
+- FD_SET(rc, &rset);
+- if (rc > maxfd)
++ FD_SET(rc[1], &rset);
++ if (rc[1] > maxfd)
+ {
+- maxfd = rc;
++ maxfd = rc[1];
+ }
+ }
+ if (select(maxfd + 1, &rset, NULL, NULL, &timeout) > 0)
+ {
+- if (rc >= 0 && FD_ISSET(rc, &rset))
++ if (rc[0] >= 0 && FD_ISSET(rc[0], &rset))
+ {
+ #if HAVE_DVB_API_VERSION < 3
+- read(rc, &RCCode, 2);
++ read(rc[0], &RCCode, 2);
+ }
+ if (RCCode != LastKey)
+ {
+@@ -2842,7 +2858,11 @@
+ {
+ switch (RCCode)
+ #else
+- read(rc, &ev, sizeof(ev));
++ read(rc[0], &ev, sizeof(ev));
++ }
++ else if (rc[1] >= 0 && FD_ISSET(rc[1], &rset))
++ {
++ read(rc[1], &ev, sizeof(ev));
+ }
+ if (ev.value)
+ {
+Only in tuxtxt_orig/: tuxtxt.c.orig
+diff -u tuxtxt_orig/tuxtxt.h tuxtxt/tuxtxt.h
+--- tuxtxt_orig/tuxtxt.h 2009-01-29 21:38:18.000000000 +0100
++++ tuxtxt/tuxtxt.h 2009-01-29 21:44:29.000000000 +0100
+@@ -209,7 +209,7 @@
+ int hotlist[10];
+ int maxhotlist;
+
+-int rc, lcd;
++int rc[2], lcd;
+ int lastpage;
+ int savedscreenmode;
+ char dumpl25;