diff -ruN vdr-1.3.39/CONTRIBUTORS vdr-1.3.40/CONTRIBUTORS
--- vdr-1.3.39/CONTRIBUTORS	2006-01-15 16:06:19.000000000 +0100
+++ vdr-1.3.40/CONTRIBUTORS	2006-01-22 17:10:35.000000000 +0100
@@ -936,6 +936,9 @@
  for reporting a bug in handling key macros with keys after @plugin
  for adding compiler options "-fPIC -g" to all plugins
  for adding a leading '0' to the day in the DayDateTime() function
+ for reporting a crash in the Schedule menu with events that have no title
+ for a patch that was used to implement automatic cursor advance when entering text
+ via the numeric keys
 
 Ralf Klueber <ralf.klueber@vodafone.com>
  for reporting a bug in cutting a recording if there is only a single editing mark
@@ -1154,11 +1157,14 @@
  for reporting a problem with messages when a cOsdObject uses the raw OSD
  for implementing palette replace mode in the OSD bitmaps
 
-Thomas Bergwinkl <Thomas.Bergwinkl@t-online.de>
+Thomas Bergwinkl <Thomas.Bergwinkl@vr-web.de>
  for fixing the validity check for channel IDs, because some providers use TIDs
  with value 0
  for pointing out that transponder handling didn't work with satellites that provide
  two transponders on the same frequency, with different polarization
+ for fixing detecting if there can be any useful further input when entering channel
+ numbers
+ for fixing handling the '0' key for switching between the last two channels
 
 Stéphane Esté-Gracias <sestegra@free.fr>
  for fixing a typo in libsi/si.h
@@ -1655,3 +1661,25 @@
 Jürgen Schilling <juergen_schilling@web.de>
  for reporting that color buttons were displayed in the recording info menu if it
  has been invoked from a player
+
+Jesus Bravo Alvarez <jba@pobox.com>
+ for reporting a second place where a message should be given when an instant
+ recording is started
+ for updating the Spanish OSD texts
+
+Francois-Xavier Kowalski <francois-xavier.kowalski@hp.com>
+ for suggesting how to modify logging so that even on NPTL systems each line in
+ the log file shows the individual thread's pid
+
+Franz Gangkofer <Franz.Gangkofer@cadsoft.de>
+ for reporting a problem with @plugin in keymacros.conf in case the named plugin
+ is not loaded
+
+Malte Schröder <MalteSch@gmx.de>
+ for reporting a crash after executing the SVDRP command CLRE
+
+Markus Hahn <mhahn@reel-multimedia.com>
+ for suggesting to only start recordings if there is at least 300MB free disk space
+
+Jaroslaw Swierczynski <swiergot@gmail.com>
+ for updating the Polish OSD texts and the fontosd-iso8859-2.c file
diff -ruN vdr-1.3.39/HISTORY vdr-1.3.40/HISTORY
--- vdr-1.3.39/HISTORY	2006-01-15 16:05:21.000000000 +0100
+++ vdr-1.3.40/HISTORY	2006-01-22 17:10:13.000000000 +0100
@@ -4189,3 +4189,41 @@
   Ahrenberg).
 - No longer displaying color buttons in the recording info menu if it has been
   invoked from a player (reported by Jürgen Schilling).
+
+2006-01-22: Version 1.3.40
+
+- Fixed a second place where a message should be given when an instant recording
+  is started (reported by Jesus Bravo Alvarez).
+- Modified logging so that even on NPTL systems each line in the log file shows
+  the individual thread's pid (based on a suggestion from Francois-Xavier Kowalski).
+- Fixed a problem with @plugin in keymacros.conf in case the named plugin is not
+  loaded (reported by Franz Gangkofer).
+- Fixed a crash after executing the SVDRP command CLRE, caused by dangling 'schedule'
+  pointers from cChannel objects (reported by Malte Schröder).
+- Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
+- Improved NULL checking in strreplace().
+- Fixed a crash in the Schedule menu with events that have no title (reported by
+  Rolf Ahrenberg). cEvent::FixEpgBugs() now assigns a "No title" string to events
+  that have no title.
+- Updated the Estonian OSD texts (thanks to Arthur Konovalov).
+- Recordings are now only started if there is at least 300MB free disk space
+  (suggested by Markus Hahn).
+- When entering text via the numeric keys, the cursor now automatically advances
+  (based on a patch from Rolf Ahrenberg).
+- Updated the Polish OSD texts and the fontosd-iso8859-2.c file (thanks to Jaroslaw
+  Swierczynski).
+- Disabled the "buffer reserve" in Transfer Mode. Last chance to complain if you
+  really need it - it will be completely removed in the next version. If you are
+  experiencing problems with a/v running out of sync, try the latest driver and
+  firmware (if you are using a full featured DVB card).
+- Switching channels with the Up/Down or Channel+/Channel- keys now works a lot
+  faster when the repeat function kicks in, by not actually switching the
+  channel every time, but rather only displaying the channel info and doing
+  the final switch when the key is released.
+- The channel display is now updated _before_ the channel is switched.
+- Added a missing initialization of 'timeout' in the cDisplayChannel constructor.
+- Fixed detecting if there can be any useful further input when entering channel
+  numbers (thanks to Thomas Bergwinkl).
+- Updated the Spanish OSD texts (thanks to Jesus Bravo Alvarez).
+- Fixed handling the '0' key for switching between the last two channels (thanks
+  to Thomas Bergwinkl).
diff -ruN vdr-1.3.39/channels.conf vdr-1.3.40/channels.conf
--- vdr-1.3.39/channels.conf	2006-01-15 16:12:04.000000000 +0100
+++ vdr-1.3.40/channels.conf	2006-01-22 17:19:21.000000000 +0100
@@ -23,7 +23,7 @@
 VOX;RTL World:12187:hC34:S19.2E:27500:167:136=deu:71:0:12060:1:1089:0
 KABEL1;ProSiebenSat.1:12480:vC34:S19.2E:27500:511:512=deu:33:0:899:133:33:0
 DAS VIERTE,D VIERTE;BetaDigital:12460:hC34:S19.2E:27500:2047:2048=deu:36:0:1793:133:5:0
-NEUN LIVE Television,NEUN LIVE;BetaDigital:12480:vC34:S19.2E:27500:767:768=deu:35:0:897:133:33:0
+9Live;BetaDigital:12480:vC34:S19.2E:27500:767:768=deu:35:0:897:133:33:0
 DSF;BetaDigital:12480:vC34:S19.2E:27500:1023:1024=deu:39:0:900:133:33:0
 HSE24,HSE24;BetaDigital:12480:vC34:S19.2E:27500:1279:1280=deu:37:0:40:133:33:0
 Bloomberg TV Germany;Bloomberg:12551:vC56:S19.2E:22000:162:99=deu:0:0:12160:1:1108:0
@@ -46,7 +46,7 @@
 :Premiere World
 PREMIERE START,START;PREMIERE:11797:hC34:S19.2E:27500:255:256=deu:32:1801,1722,1702:8:133:2:0
 PREMIERE 1,PREM 1;PREMIERE:11797:hC34:S19.2E:27500:511:512=deu;515=deu:32:1801,1722,1702:10:133:2:0
-PREMIERE 2,PREM 2;PREMIERE:11797:hC34:S19.2E:27500:1791:1792=deu,1793=deu;1795=deu:32:1801,1722,1702:11:133:2:0
+PREMIERE 2,PREM 2;PREMIERE:11797:hC34:S19.2E:27500:1791:1792=deu;1795=deu:32:1801,1722,1702:11:133:2:0
 PREMIERE 3,PREM 3;PREMIERE:11797:hC34:S19.2E:27500:2303:2304=deu,2305=deu:32:1722,1702,1801:43:133:2:0
 PREMIERE 4,PREM 4;PREMIERE:11797:hC34:S19.2E:27500:767:768=deu,769=deu:32:1801,1722,1702:9:133:2:0
 PREMIERE 5,PREM 5;PREMIERE:11797:hC34:S19.2E:27500:1279:1280=deu:32:1722,1702,1801:29:133:2:0
@@ -65,6 +65,7 @@
 N24;ProSiebenSat.1:12480:vC34:S19.2E:27500:2047:2048=deu:36:0:47:133:33:0
 LibertyTV FR;LibertyTV.com:12610:vC56:S19.2E:22000:941:943=deu:0:0:12199:1:1112:0
 :-
+münchen.TV/RFO,müTV/RFO;BetaDigital:12148:hC34:S19.2E:27500:495:496=deu:0:0:658:133:7:0
 ProSieben Austria;ProSiebenSat.1:12051:vC34:S19.2E:27500:161:84=deu;85=deu:36:0:20002:1:1082:0
 Kabel 1 Schweiz;ProSiebenSat.1:12051:vC34:S19.2E:27500:162:163=deu:165:0:20003:1:1082:0
 Kabel 1 Austria;ProSiebenSat.1:12051:vC34:S19.2E:27500:166:167=deu:169:0:20004:1:1082:0
@@ -83,10 +84,26 @@
 Nick/Talpa;CANALDIGITAAL:12574:hC56:S19.2E:22000:512+8190:84=dut:33:622,100:5010:53:1109:0
 NICK;MTV Networks:12226:hC34:S19.2E:27500:513+8190:661=deu:577:0:28640:1:1091:0
 MTV Central;MTV Networks:11739:vC34:S19.2E:27500:3031:3032:3034:0:28653:1:1066:0
-VIVA;VIVA Fernsehen GmbH & Co. KG:12669:vC56:S19.2E:22000:309:310=deu:311:0:12732:1:1116:0
-VIVA PLUS;VIVA Fernsehen GmbH & Co. KG:12551:vC56:S19.2E:22000:171:172=deu:173:0:12120:1:1108:0
+VIVA;MTV Networks:11973:vC34:S19.2E:27500:4061+8190:4062:4064:0:28676:1:1078:0
+VIVA PLUS;MTV Networks:11973:vC34:S19.2E:27500:4071+8190:4072:4074:0:28677:1:1078:0
 QVC Deutschland;QVC:12551:vC56:S19.2E:22000:165:166:167:0:12100:1:1108:0
 TELE 5;BetaDigital:12480:vC34:S19.2E:27500:1535:1536=deu:38:0:51:133:33:0
+:NTSC
+Venevision;T-Systems/MTI:11200:vC56:S13.0E:27500:922:923=und:0:0:4750:0:13400:0
+EBC.1;T-Systems/MTI:11200:vC56:S13.0E:27500:373:374=eng:0:0:4747:0:13400:0
+:HDTV
+HDFORUM;TF1:11242:vC34:S13.0E:27500:33:36=fra:0:0:13809:100:200:0
+HDFORUM;TF1:11242:vC34:S13.0E:27500:33:36=fra:0:0:13809:318:200:0
+Euro1080 HD-5;Euro1080:10758:vC78:S23.5E:22000:34:160=eng:0:0:1085:9999:3104:0
+Euro1080;EURO1080:12168:vC56:S19.2E:27500:308:256:0:0:21100:1:1088:0
+SMD HD;SES ASTRA:12699:vC56:S19.2E:22000:133+80:234=eng:0:0:29700:0:0:0
+SMD HD:12699:V:S19.2E:22000:133:234=eng:0:0:3231:1:1118:0
+Astra HD:12441:vC34:S19.2E:27500:133+80:134=eng:0:0:29700:0:0:0
+TV HD;CSAT:12581:vC56:S19.2E:22000:165:100=fra;101=fra:0:0:9306:1:1110:0
+C M HD;Telenor:11261:hC78:S1.0W:24500:517:660=eng;661=eng:0:B00:3306:70:33:0
+C MORE HD;Telenor:11389:hC78:S1.0W:24500:512:640;641=eng:0:B00:3306:70:34:0
+HELLAS-HDTV;Scopus Network Technologies:11642:hC34:S13.0E:27500:2201:2211=ell,2212=eng:0:0:2200:318:15700:0
+TPS Star:10757:vC34:S13.0E:27500:420:430=fra,431=eng:440:500,100:1204:176:11200:0
 :@201 Sky
 Sky One;BSkyB:12226:hC23:S28.2E:27500:515+8190:643=eng:579:960,961:4705:2:2027:0
 Sky Two;BSkyB:12226:hC23:S28.2E:27500:514+8190:642=eng,662=NAR:578:960,961:5104:2:2027:0
@@ -115,10 +132,6 @@
 CNN;BSkyB:12051:vC23:S28.2E:27500:2313:2315=eng:2314:0:7140:2:2018:0
 BBC PARL'MNT;BSkyB:10847:vC56:S28.2E:22000:2327:2328=eng:2331:0:6902:2:2050:0
 IGLESIA MME;T-Systems/MTI:11200:vC56:S13.0E:27500:4097:4098:0:0:4733:318:13400:0
-Euro1080 HD-5;Euro1080:10758:vC78:S23.5E:22000:34:160=eng:0:0:1085:9999:3104:0
-Euro1080;EURO1080:12168:vC56:S19.2E:27500:308:256:0:0:21100:1:1088:0
-SMD HD;SES ASTRA:12699:vC56:S19.2E:22000:133+80:234=eng:0:0:29700:0:0:0
-Astra HD:12441:vC34:S19.2E:27500:133+80:134=eng:0:0:29700:0:0:0
 eng-WRN-multi;WRN:12597:vC34:S13.0E:27500:0:2132:0:0:8230:318:9400:0
 Challenger Tv;Telespazio:11304:hC34:S13.0E:27500:490:491:0:0:8409:318:500:0
 TVS Teleport Bonn;DMV:11535:vC34:S1.0W:5632:308+8190:256=eng,257=eng:0:3:1:65535:1:0
diff -ruN vdr-1.3.39/config.h vdr-1.3.40/config.h
--- vdr-1.3.39/config.h	2006-01-13 16:17:19.000000000 +0100
+++ vdr-1.3.40/config.h	2006-01-15 17:01:48.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: config.h 1.240 2006/01/13 15:17:19 kls Exp $
+ * $Id: config.h 1.241 2006/01/15 16:01:48 kls Exp $
  */
 
 #ifndef __CONFIG_H
@@ -19,8 +19,8 @@
 #include "i18n.h"
 #include "tools.h"
 
-#define VDRVERSION  "1.3.39"
-#define VDRVERSNUM   10339  // Version * 10000 + Major * 100 + Minor
+#define VDRVERSION  "1.3.40"
+#define VDRVERSNUM   10340  // Version * 10000 + Major * 100 + Minor
 
 #define MAXPRIORITY 99
 #define MAXLIFETIME 99
diff -ruN vdr-1.3.39/epg.c vdr-1.3.40/epg.c
--- vdr-1.3.39/epg.c	2006-01-15 14:58:30.000000000 +0100
+++ vdr-1.3.40/epg.c	2006-01-20 15:09:48.000000000 +0100
@@ -7,7 +7,7 @@
  * Original version (as used in VDR before 1.3.0) written by
  * Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
  *
- * $Id: epg.c 1.49 2006/01/15 13:58:30 kls Exp $
+ * $Id: epg.c 1.51 2006/01/20 14:09:48 kls Exp $
  */
 
 #include "epg.h"
@@ -422,197 +422,196 @@
   strreplace(description, '\x86', ' ');
   strreplace(description, '\x87', ' ');
 
+  if (!title) {
+     // we don't want any "(null)" titles
+     title = strcpyrealloc(title, tr("No title"));
+     EpgBugFixStat(12, ChannelID());
+     }
+
   if (Setup.EPGBugfixLevel == 0)
      return;
 
   // Some TV stations apparently have their own idea about how to fill in the
   // EPG data. Let's fix their bugs as good as we can:
-  if (title) {
 
-     // Some channels put the ShortText in quotes and use either the ShortText
-     // or the Description field, depending on how long the string is:
-     //
-     // Title
-     // "ShortText". Description
-     //
-     if ((shortText == NULL) != (description == NULL)) {
-        char *p = shortText ? shortText : description;
-        if (*p == '"') {
-           const char *delim = "\".";
-           char *e = strstr(p + 1, delim);
-           if (e) {
-              *e = 0;
-              char *s = strdup(p + 1);
-              char *d = strdup(e + strlen(delim));
-              free(shortText);
-              free(description);
-              shortText = s;
-              description = d;
-              EpgBugFixStat(1, ChannelID());
-              }
-           }
-        }
-
-     // Some channels put the Description into the ShortText (preceded
-     // by a blank) if there is no actual ShortText and the Description
-     // is short enough:
-     //
-     // Title
-     //  Description
-     //
-     if (shortText && !description) {
-        if (*shortText == ' ') {
-           memmove(shortText, shortText + 1, strlen(shortText));
-           description = shortText;
-           shortText = NULL;
-           EpgBugFixStat(2, ChannelID());
+  // Some channels put the ShortText in quotes and use either the ShortText
+  // or the Description field, depending on how long the string is:
+  //
+  // Title
+  // "ShortText". Description
+  //
+  if ((shortText == NULL) != (description == NULL)) {
+     char *p = shortText ? shortText : description;
+     if (*p == '"') {
+        const char *delim = "\".";
+        char *e = strstr(p + 1, delim);
+        if (e) {
+           *e = 0;
+           char *s = strdup(p + 1);
+           char *d = strdup(e + strlen(delim));
+           free(shortText);
+           free(description);
+           shortText = s;
+           description = d;
+           EpgBugFixStat(1, ChannelID());
            }
         }
+     }
 
-     // Sometimes they repeat the Title in the ShortText:
-     //
-     // Title
-     // Title
-     //
-     if (shortText && strcmp(title, shortText) == 0) {
-        free(shortText);
+  // Some channels put the Description into the ShortText (preceded
+  // by a blank) if there is no actual ShortText and the Description
+  // is short enough:
+  //
+  // Title
+  //  Description
+  //
+  if (shortText && !description) {
+     if (*shortText == ' ') {
+        memmove(shortText, shortText + 1, strlen(shortText));
+        description = shortText;
         shortText = NULL;
-        EpgBugFixStat(3, ChannelID());
+        EpgBugFixStat(2, ChannelID());
         }
+     }
 
-     // Some channels put the ShortText between double quotes, which is nothing
-     // but annoying (some even put a '.' after the closing '"'):
-     //
-     // Title
-     // "ShortText"[.]
-     //
-     if (shortText && *shortText == '"') {
-        int l = strlen(shortText);
-        if (l > 2 && (shortText[l - 1] == '"' || (shortText[l - 1] == '.' && shortText[l - 2] == '"'))) {
-           memmove(shortText, shortText + 1, l);
-           char *p = strrchr(shortText, '"');
-           if (p)
-              *p = 0;
-           EpgBugFixStat(4, ChannelID());
-           }
+  // Sometimes they repeat the Title in the ShortText:
+  //
+  // Title
+  // Title
+  //
+  if (shortText && strcmp(title, shortText) == 0) {
+     free(shortText);
+     shortText = NULL;
+     EpgBugFixStat(3, ChannelID());
+     }
+
+  // Some channels put the ShortText between double quotes, which is nothing
+  // but annoying (some even put a '.' after the closing '"'):
+  //
+  // Title
+  // "ShortText"[.]
+  //
+  if (shortText && *shortText == '"') {
+     int l = strlen(shortText);
+     if (l > 2 && (shortText[l - 1] == '"' || (shortText[l - 1] == '.' && shortText[l - 2] == '"'))) {
+        memmove(shortText, shortText + 1, l);
+        char *p = strrchr(shortText, '"');
+        if (p)
+           *p = 0;
+        EpgBugFixStat(4, ChannelID());
         }
+     }
 
-     if (Setup.EPGBugfixLevel <= 1)
-        return;
+  if (Setup.EPGBugfixLevel <= 1)
+     return;
 
-     // Some channels apparently try to do some formatting in the texts,
-     // which is a bad idea because they have no way of knowing the width
-     // of the window that will actually display the text.
-     // Remove excess whitespace:
-     title = compactspace(title);
-     shortText = compactspace(shortText);
-     description = compactspace(description);
+  // Some channels apparently try to do some formatting in the texts,
+  // which is a bad idea because they have no way of knowing the width
+  // of the window that will actually display the text.
+  // Remove excess whitespace:
+  title = compactspace(title);
+  shortText = compactspace(shortText);
+  description = compactspace(description);
 
 #define MAX_USEFUL_EPISODE_LENGTH 40
-     // Some channels put a whole lot of information in the ShortText and leave
-     // the Description totally empty. So if the ShortText length exceeds
-     // MAX_USEFUL_EPISODE_LENGTH, let's put this into the Description
-     // instead:
-     if (!isempty(shortText) && isempty(description)) {
-        if (strlen(shortText) > MAX_USEFUL_EPISODE_LENGTH) {
-           free(description);
-           description = shortText;
-           shortText = NULL;
-           EpgBugFixStat(6, ChannelID());
-           }
+  // Some channels put a whole lot of information in the ShortText and leave
+  // the Description totally empty. So if the ShortText length exceeds
+  // MAX_USEFUL_EPISODE_LENGTH, let's put this into the Description
+  // instead:
+  if (!isempty(shortText) && isempty(description)) {
+     if (strlen(shortText) > MAX_USEFUL_EPISODE_LENGTH) {
+        free(description);
+        description = shortText;
+        shortText = NULL;
+        EpgBugFixStat(6, ChannelID());
         }
+     }
 
-     // Some channels put the same information into ShortText and Description.
-     // In that case we delete one of them:
-     if (shortText && description && strcmp(shortText, description) == 0) {
-        if (strlen(shortText) > MAX_USEFUL_EPISODE_LENGTH) {
-           free(shortText);
-           shortText = NULL;
-           }
-        else {
-           free(description);
-           description = NULL;
-           }
-        EpgBugFixStat(7, ChannelID());
+  // Some channels put the same information into ShortText and Description.
+  // In that case we delete one of them:
+  if (shortText && description && strcmp(shortText, description) == 0) {
+     if (strlen(shortText) > MAX_USEFUL_EPISODE_LENGTH) {
+        free(shortText);
+        shortText = NULL;
+        }
+     else {
+        free(description);
+        description = NULL;
         }
+     EpgBugFixStat(7, ChannelID());
+     }
 
-     // Some channels use the ` ("backtick") character, where a ' (single quote)
-     // would be normally used. Actually, "backticks" in normal text don't make
-     // much sense, so let's replace them:
-     strreplace(title, '`', '\'');
-     strreplace(shortText, '`', '\'');
-     strreplace(description, '`', '\'');
+  // Some channels use the ` ("backtick") character, where a ' (single quote)
+  // would be normally used. Actually, "backticks" in normal text don't make
+  // much sense, so let's replace them:
+  strreplace(title, '`', '\'');
+  strreplace(shortText, '`', '\'');
+  strreplace(description, '`', '\'');
 
-     if (Setup.EPGBugfixLevel <= 2)
-        return;
+  if (Setup.EPGBugfixLevel <= 2)
+     return;
 
-     // The stream components have a "description" field which some channels
-     // apparently have no idea of how to set correctly:
-     if (components) {
-        for (int i = 0; i < components->NumComponents(); i++) {
-            tComponent *p = components->Component(i);
-            switch (p->stream) {
-              case 0x01: { // video
-                   if (p->description) {
-                      if (strcasecmp(p->description, "Video") == 0 ||
-                           strcasecmp(p->description, "Bildformat") == 0) {
-                         // Yes, we know it's video - that's what the 'stream' code
-                         // is for! But _which_ video is it?
-                         free(p->description);
-                         p->description = NULL;
-                         EpgBugFixStat(8, ChannelID());
-                         }
-                      }
-                   if (!p->description) {
-                      switch (p->type) {
-                        case 0x01:
-                        case 0x05: p->description = strdup("4:3"); break;
-                        case 0x02:
-                        case 0x03:
-                        case 0x06:
-                        case 0x07: p->description = strdup("16:9"); break;
-                        case 0x04:
-                        case 0x08: p->description = strdup(">16:9"); break;
-                        case 0x09:
-                        case 0x0D: p->description = strdup("HD 4:3"); break;
-                        case 0x0A:
-                        case 0x0B:
-                        case 0x0E:
-                        case 0x0F: p->description = strdup("HD 16:9"); break;
-                        case 0x0C:
-                        case 0x10: p->description = strdup("HD >16:9"); break;
-                        }
-                      EpgBugFixStat(9, ChannelID());
+  // The stream components have a "description" field which some channels
+  // apparently have no idea of how to set correctly:
+  if (components) {
+     for (int i = 0; i < components->NumComponents(); i++) {
+         tComponent *p = components->Component(i);
+         switch (p->stream) {
+           case 0x01: { // video
+                if (p->description) {
+                   if (strcasecmp(p->description, "Video") == 0 ||
+                        strcasecmp(p->description, "Bildformat") == 0) {
+                      // Yes, we know it's video - that's what the 'stream' code
+                      // is for! But _which_ video is it?
+                      free(p->description);
+                      p->description = NULL;
+                      EpgBugFixStat(8, ChannelID());
                       }
                    }
-                   break;
-              case 0x02: { // audio
-                   if (p->description) {
-                      if (strcasecmp(p->description, "Audio") == 0) {
-                         // Yes, we know it's audio - that's what the 'stream' code
-                         // is for! But _which_ audio is it?
-                         free(p->description);
-                         p->description = NULL;
-                         EpgBugFixStat(10, ChannelID());
-                         }
-                      }
-                   if (!p->description) {
-                      switch (p->type) {
-                        case 0x05: p->description = strdup("Dolby Digital"); break;
-                        // all others will just display the language
-                        }
-                      EpgBugFixStat(11, ChannelID());
+                if (!p->description) {
+                   switch (p->type) {
+                     case 0x01:
+                     case 0x05: p->description = strdup("4:3"); break;
+                     case 0x02:
+                     case 0x03:
+                     case 0x06:
+                     case 0x07: p->description = strdup("16:9"); break;
+                     case 0x04:
+                     case 0x08: p->description = strdup(">16:9"); break;
+                     case 0x09:
+                     case 0x0D: p->description = strdup("HD 4:3"); break;
+                     case 0x0A:
+                     case 0x0B:
+                     case 0x0E:
+                     case 0x0F: p->description = strdup("HD 16:9"); break;
+                     case 0x0C:
+                     case 0x10: p->description = strdup("HD >16:9"); break;
+                     }
+                   EpgBugFixStat(9, ChannelID());
+                   }
+                }
+                break;
+           case 0x02: { // audio
+                if (p->description) {
+                   if (strcasecmp(p->description, "Audio") == 0) {
+                      // Yes, we know it's audio - that's what the 'stream' code
+                      // is for! But _which_ audio is it?
+                      free(p->description);
+                      p->description = NULL;
+                      EpgBugFixStat(10, ChannelID());
                       }
                    }
-                   break;
-              }
-            }
-        }
-     }
-  else {
-     // we don't want any "(null)" titles
-     title = strcpyrealloc(title, tr("No title"));
-     EpgBugFixStat(12, ChannelID());
+                if (!p->description) {
+                   switch (p->type) {
+                     case 0x05: p->description = strdup("Dolby Digital"); break;
+                     // all others will just display the language
+                     }
+                   EpgBugFixStat(11, ChannelID());
+                   }
+                }
+                break;
+           }
+         }
      }
 }
 
@@ -935,7 +934,10 @@
   cSchedulesLock SchedulesLock(true, 1000);
   cSchedules *s = (cSchedules *)Schedules(SchedulesLock);
   if (s) {
-     s->Clear();
+     for (cTimer *Timer = Timers.First(); Timer; Timer = Timers.Next(Timer))
+         Timer->SetEvent(NULL);
+     for (cSchedule *Schedule = s->First(); Schedule; Schedule = s->Next(Schedule))
+         Schedule->Cleanup(INT_MAX);
      return true;
      }
   return false;
diff -ruN vdr-1.3.39/fontosd-iso8859-2.c vdr-1.3.40/fontosd-iso8859-2.c
--- vdr-1.3.39/fontosd-iso8859-2.c	2004-12-18 17:14:50.000000000 +0100
+++ vdr-1.3.40/fontosd-iso8859-2.c	2006-01-21 13:31:29.000000000 +0100
@@ -3948,23 +3948,23 @@
      0x00000000,  // .............
      0x00000000,  // .............
      0x00000000,  // .............
-     0x000001F0,  // ....*****....
-     0x000003F8,  // ...*******...
-     0x0000071C,  // ..***...***..
-     0x00000C0C,  // .**......**..
-     0x00000C06,  // .**.......**.
-     0x00000C06,  // .**.......**.
-     0x00000E00,  // .***.........
-     0x00000700,  // ..***........
+     0x00000600,  // ..**.........
+     0x00000600,  // ..**.........
+     0x00000600,  // ..**.........
+     0x00000600,  // ..**.........
+     0x00000600,  // ..**.........
+     0x00000600,  // ..**.........
+     0x00000600,  // ..**.........
+     0x00000600,  // ..**.........
+     0x00000FE0,  // .*******.....
      0x00000FE0,  // .*******.....
-     0x00000FA0,  // .*****.*.....
-     0x00000380,  // ...***.......
-     0x00000180,  // ....**.......
-     0x00000180,  // ....**.......
-     0x00000300,  // ...**........
      0x00000600,  // ..**.........
-     0x00000FFE,  // .***********.
-     0x00000FFC,  // .**********..
+     0x00000600,  // ..**.........
+     0x00000600,  // ..**.........
+     0x00000600,  // ..**.........
+     0x00000600,  // ..**.........
+     0x000007FE,  // ..**********.
+     0x000007FE,  // ..**********.
      0x00000000,  // .............
      0x00000000,  // .............
      0x00000000,  // .............
@@ -4032,34 +4032,34 @@
      0x00000000,  // .............
   },
   {             // 166
-     6, 27,
-     0x00000000,  // ......
-     0x00000000,  // ......
-     0x00000000,  // ......
-     0x00000000,  // ......
-     0x00000000,  // ......
-     0x0000000C,  // ..**..
-     0x0000000C,  // ..**..
-     0x0000000C,  // ..**..
-     0x0000000C,  // ..**..
-     0x0000000C,  // ..**..
-     0x0000000C,  // ..**..
-     0x0000000C,  // ..**..
-     0x0000000C,  // ..**..
-     0x0000000C,  // ..**..
-     0x00000000,  // ......
-     0x00000000,  // ......
-     0x00000000,  // ......
-     0x00000000,  // ......
-     0x0000000C,  // ..**..
-     0x0000000C,  // ..**..
-     0x0000000C,  // ..**..
-     0x0000000C,  // ..**..
-     0x0000000C,  // ..**..
-     0x0000000C,  // ..**..
-     0x0000000C,  // ..**..
-     0x0000000C,  // ..**..
-     0x0000000C,  // ..**..
+     15, 27,
+     0x00000070,  // ........***....
+     0x000000E0,  // .......***.....
+     0x000001C0,  // ......***......
+     0x00000380,  // .....***.......
+     0x00000000,  // ...............
+     0x000003E0,  // .....*****.....
+     0x00000FF8,  // ...*********...
+     0x00000C1C,  // ...**.....***..
+     0x0000180C,  // ..**.......**..
+     0x00001804,  // ..**........*..
+     0x00001800,  // ..**...........
+     0x00001C00,  // ..***..........
+     0x00000F80,  // ...*****.......
+     0x000007F8,  // ....********...
+     0x0000007C,  // ........*****..
+     0x0000000E,  // ...........***.
+     0x00000006,  // ............**.
+     0x00003006,  // .**.........**.
+     0x00001806,  // ..**........**.
+     0x0000180C,  // ..**.......**..
+     0x00000FF8,  // ...*********...
+     0x000007F0,  // ....*******....
+     0x00000000,  // ...............
+     0x00000000,  // ...............
+     0x00000000,  // ...............
+     0x00000000,  // ...............
+     0x00000000,  // ...............
   },
   {             // 167
      13, 27,
@@ -4212,34 +4212,34 @@
      0x00000000,  // ..............
   },
   {             // 172
-     13, 27,
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000FFF,  // .************
-     0x00000FFF,  // .************
-     0x00000003,  // ...........**
-     0x00000003,  // ...........**
-     0x00000003,  // ...........**
-     0x00000003,  // ...........**
-     0x00000003,  // ...........**
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
+     14, 27,
+     0x00000000,  // ..............
+     0x00000030,  // ........**....
+     0x00000060,  // .......**.....
+     0x000000C0,  // ......**......
+     0x00000000,  // ..............
+     0x00001FFE,  // .************.
+     0x00001FFE,  // .************.
+     0x0000000E,  // ..........***.
+     0x0000000C,  // ..........**..
+     0x0000001C,  // .........***..
+     0x00000038,  // ........***...
+     0x00000070,  // .......***....
+     0x000000E0,  // ......***.....
+     0x000000C0,  // ......**......
+     0x000001C0,  // .....***......
+     0x00000380,  // ....***.......
+     0x00000700,  // ...***........
+     0x00000600,  // ...**.........
+     0x00000E00,  // ..***.........
+     0x00001C00,  // .***..........
+     0x00001FFE,  // .************.
+     0x00001FFE,  // .************.
+     0x00000000,  // ..............
+     0x00000000,  // ..............
+     0x00000000,  // ..............
+     0x00000000,  // ..............
+     0x00000000,  // ..............
   },
   {             // 173
      8, 27,
@@ -4302,34 +4302,34 @@
      0x00000000,  // ..............
   },
   {             // 175
-     8, 27,
-     0x00000000,  // ........
-     0x00000000,  // ........
-     0x00000000,  // ........
-     0x00000000,  // ........
-     0x00000000,  // ........
-     0x00000000,  // ........
-     0x0000007E,  // .******.
-     0x0000007E,  // .******.
-     0x00000000,  // ........
-     0x00000000,  // ........
-     0x00000000,  // ........
-     0x00000000,  // ........
-     0x00000000,  // ........
-     0x00000000,  // ........
-     0x00000000,  // ........
-     0x00000000,  // ........
-     0x00000000,  // ........
-     0x00000000,  // ........
-     0x00000000,  // ........
-     0x00000000,  // ........
-     0x00000000,  // ........
-     0x00000000,  // ........
-     0x00000000,  // ........
-     0x00000000,  // ........
-     0x00000000,  // ........
-     0x00000000,  // ........
-     0x00000000,  // ........
+     14, 27,
+     0x00000000,  // ..............
+     0x00000000,  // ..............
+     0x000000C0,  // ......**......
+     0x000000C0,  // ......**......
+     0x00000000,  // ..............
+     0x00001FFE,  // .************.
+     0x00001FFE,  // .************.
+     0x0000000E,  // ..........***.
+     0x0000000C,  // ..........**..
+     0x0000001C,  // .........***..
+     0x00000038,  // ........***...
+     0x00000070,  // .......***....
+     0x000000E0,  // ......***.....
+     0x000000C0,  // ......**......
+     0x000001C0,  // .....***......
+     0x00000380,  // ....***.......
+     0x00000700,  // ...***........
+     0x00000600,  // ...**.........
+     0x00000E00,  // ..***.........
+     0x00001C00,  // .***..........
+     0x00001FFE,  // .************.
+     0x00001FFE,  // .************.
+     0x00000000,  // ..............
+     0x00000000,  // ..............
+     0x00000000,  // ..............
+     0x00000000,  // ..............
+     0x00000000,  // ..............
   },
   {             // 176
      14, 27,
@@ -4371,23 +4371,23 @@
      0x00000000,  // .............
      0x00000000,  // .............
      0x00000000,  // .............
-     0x00000060,  // ......**.....
-     0x00000060,  // ......**.....
-     0x00000060,  // ......**.....
-     0x00000060,  // ......**.....
-     0x00000FFE,  // .***********.
-     0x00000FFE,  // .***********.
-     0x00000060,  // ......**.....
-     0x00000060,  // ......**.....
-     0x00000060,  // ......**.....
-     0x00000060,  // ......**.....
-     0x00000060,  // ......**.....
-     0x00000000,  // .............
-     0x00000FFE,  // .***********.
-     0x00000FFE,  // .***********.
-     0x00000000,  // .............
      0x00000000,  // .............
      0x00000000,  // .............
+     0x000001F0,  // ....*****....
+     0x000007FC,  // ..*********..
+     0x0000060C,  // ..**.....**..
+     0x0000040C,  // ..*......**..
+     0x0000000C,  // .........**..
+     0x000001FC,  // ....*******..
+     0x000007CC,  // ..*****..**..
+     0x00000E0C,  // .***.....**..
+     0x00000C0C,  // .**......**..
+     0x00000C1C,  // .**.....***..
+     0x00000FFE,  // .***********.
+     0x000003EE,  // ...*****.***.
+     0x0000000E,  // .........***.
+     0x0000000E,  // .........***.
+     0x00000006,  // ..........**.
      0x00000000,  // .............
      0x00000000,  // .............
   },
@@ -4428,23 +4428,23 @@
      0x00000000,  // ........
      0x00000000,  // ........
      0x00000000,  // ........
-     0x00000000,  // ........
-     0x0000003C,  // ..****..
-     0x0000007E,  // .******.
-     0x00000046,  // .*...**.
-     0x00000006,  // .....**.
-     0x0000001C,  // ...***..
-     0x00000006,  // .....**.
-     0x00000003,  // ......**
-     0x000000C3,  // **....**
-     0x0000007E,  // .******.
+     0x00000030,  // ..**....
+     0x00000030,  // ..**....
+     0x00000030,  // ..**....
+     0x00000030,  // ..**....
+     0x00000030,  // ..**....
+     0x00000030,  // ..**....
+     0x0000001E,  // ...****.
      0x0000003C,  // ..****..
-     0x00000000,  // ........
-     0x00000000,  // ........
-     0x00000000,  // ........
-     0x00000000,  // ........
-     0x00000000,  // ........
-     0x00000000,  // ........
+     0x00000070,  // .***....
+     0x00000030,  // ..**....
+     0x00000030,  // ..**....
+     0x00000030,  // ..**....
+     0x00000030,  // ..**....
+     0x00000030,  // ..**....
+     0x00000030,  // ..**....
+     0x00000030,  // ..**....
+     0x00000030,  // ..**....
      0x00000000,  // ........
      0x00000000,  // ........
      0x00000000,  // ........
@@ -4518,27 +4518,27 @@
      0x00000000,  // ............
      0x00000000,  // ............
      0x00000000,  // ............
-     0x000000FF,  // ....********
-     0x000001FF,  // ...*********
-     0x000003F6,  // ..******.**.
-     0x000003F6,  // ..******.**.
-     0x000007F6,  // .*******.**.
-     0x000007F6,  // .*******.**.
-     0x000007F6,  // .*******.**.
-     0x000007F6,  // .*******.**.
-     0x000003F6,  // ..******.**.
-     0x000003F6,  // ..******.**.
-     0x000000F6,  // ....****.**.
-     0x00000036,  // ......**.**.
-     0x00000036,  // ......**.**.
-     0x00000036,  // ......**.**.
-     0x00000036,  // ......**.**.
-     0x00000036,  // ......**.**.
-     0x00000036,  // ......**.**.
-     0x00000036,  // ......**.**.
-     0x00000036,  // ......**.**.
-     0x00000036,  // ......**.**.
-     0x00000036,  // ......**.**.
+     0x00000030,  // ......**....
+     0x00000060,  // .....**.....
+     0x000000C0,  // ....**......
+     0x00000000,  // ............
+     0x00000000,  // ............
+     0x000001F8,  // ...******...
+     0x000003FC,  // ..********..
+     0x0000060C,  // .**.....**..
+     0x00000600,  // .**.........
+     0x00000700,  // .***........
+     0x000003F0,  // ..******....
+     0x000000FC,  // ....******..
+     0x0000000E,  // ........***.
+     0x00000606,  // .**......**.
+     0x00000606,  // .**......**.
+     0x000007FC,  // .*********..
+     0x000001F8,  // ...******...
+     0x00000000,  // ............
+     0x00000000,  // ............
+     0x00000000,  // ............
+     0x00000000,  // ............
      0x00000000,  // ............
   },
   {             // 183
@@ -4692,34 +4692,34 @@
      0x00000000,  // .......
   },
   {             // 188
-     20, 27,
-     0x00000000,  // ....................
-     0x00000000,  // ....................
-     0x00000000,  // ....................
-     0x00000000,  // ....................
-     0x00000000,  // ....................
-     0x00000000,  // ....................
-     0x00018030,  // ...**.........**....
-     0x00038020,  // ..***.........*.....
-     0x00078040,  // .****........*......
-     0x000180C0,  // ...**.......**......
-     0x00018180,  // ...**......**.......
-     0x00018100,  // ...**......*........
-     0x0001830C,  // ...**.....**....**..
-     0x0001860C,  // ...**....**.....**..
-     0x0001861C,  // ...**....**....***..
-     0x00000C3C,  // ........**....****..
-     0x0000186C,  // .......**....**.**..
-     0x0000384C,  // ......***....*..**..
-     0x000030FF,  // ......**....********
-     0x000060FF,  // .....**.....********
-     0x0000E00C,  // ....***.........**..
-     0x0000C004,  // ....**...........*..
-     0x00000000,  // ....................
-     0x00000000,  // ....................
-     0x00000000,  // ....................
-     0x00000000,  // ....................
-     0x00000000,  // ....................
+     12, 27,
+     0x00000000,  // ............
+     0x00000000,  // ............
+     0x00000000,  // ............
+     0x00000000,  // ............
+     0x00000000,  // ............
+     0x00000030,  // ......**....
+     0x00000060,  // .....**.....
+     0x000000C0,  // ....**......
+     0x00000000,  // ............
+     0x00000000,  // ............
+     0x000007FC,  // .*********..
+     0x000007FC,  // .*********..
+     0x00000018,  // .......**...
+     0x00000018,  // .......**...
+     0x00000030,  // ......**....
+     0x00000060,  // .....**.....
+     0x000000C0,  // ....**......
+     0x00000180,  // ...**.......
+     0x00000300,  // ..**........
+     0x00000600,  // .**.........
+     0x000007FE,  // .**********.
+     0x000007FE,  // .**********.
+     0x00000000,  // ............
+     0x00000000,  // ............
+     0x00000000,  // ............
+     0x00000000,  // ............
+     0x00000000,  // ............
   },
   {             // 189
      20, 27,
@@ -4782,34 +4782,34 @@
      0x00000000,  // ............
   },
   {             // 191
-     14, 27,
-     0x00000000,  // ..............
-     0x00000000,  // ..............
-     0x00000000,  // ..............
-     0x00000000,  // ..............
-     0x00000000,  // ..............
-     0x00000000,  // ..............
-     0x00000000,  // ..............
-     0x00000000,  // ..............
-     0x00000000,  // ..............
-     0x00000000,  // ..............
-     0x000000C0,  // ......**......
-     0x000000C0,  // ......**......
-     0x00000000,  // ..............
-     0x00000000,  // ..............
-     0x00000000,  // ..............
-     0x000000C0,  // ......**......
-     0x000000C0,  // ......**......
-     0x000001C0,  // .....***......
-     0x00000380,  // ....***.......
-     0x00000700,  // ...***........
-     0x00000600,  // ...**.........
-     0x00000C00,  // ..**..........
-     0x00000C0C,  // ..**......**..
-     0x00000C0C,  // ..**......**..
-     0x00000E1C,  // ..***....***..
-     0x000007F8,  // ...********...
-     0x000003E0,  // ....*****.....
+     12, 27,
+     0x00000000,  // ............
+     0x00000000,  // ............
+     0x00000000,  // ............
+     0x00000000,  // ............
+     0x00000000,  // ............
+     0x00000000,  // ............
+     0x00000060,  // .....**.....
+     0x00000060,  // .....**.....
+     0x00000000,  // ............
+     0x00000000,  // ............
+     0x000007FC,  // .*********..
+     0x000007FC,  // .*********..
+     0x00000018,  // .......**...
+     0x00000018,  // .......**...
+     0x00000030,  // ......**....
+     0x00000060,  // .....**.....
+     0x000000C0,  // ....**......
+     0x00000180,  // ...**.......
+     0x00000300,  // ..**........
+     0x00000600,  // .**.........
+     0x000007FE,  // .**********.
+     0x000007FE,  // .**********.
+     0x00000000,  // ............
+     0x00000000,  // ............
+     0x00000000,  // ............
+     0x00000000,  // ............
+     0x00000000,  // ............
   },
   {             // 192
      15, 27,
@@ -5113,10 +5113,10 @@
   },
   {             // 202
      15, 27,
-     0x000000C0,  // .......**......
-     0x000001E0,  // ......****.....
-     0x00000320,  // .....**..*.....
-     0x00000230,  // .....*...**....
+     0x00000000,  // ...............
+     0x00000000,  // ...............
+     0x00000000,  // ...............
+     0x00000000,  // ...............
      0x00000000,  // ...............
      0x00001FFE,  // ..************.
      0x00001FFE,  // ..************.
@@ -5135,9 +5135,9 @@
      0x00001800,  // ..**...........
      0x00001FFE,  // ..************.
      0x00001FFE,  // ..************.
-     0x00000000,  // ...............
-     0x00000000,  // ...............
-     0x00000000,  // ...............
+     0x00000006,  // ............**.
+     0x00000006,  // ............**.
+     0x00000006,  // ............**.
      0x00000000,  // ...............
      0x00000000,  // ...............
   },
@@ -5323,10 +5323,10 @@
   },
   {             // 209
      17, 27,
-     0x00000000,  // .................
-     0x00000760,  // ......***.**.....
-     0x00000FE0,  // .....*******.....
+     0x00000070,  // ..........***....
+     0x00000060,  // ..........**.....
      0x000000C0,  // .........**......
+     0x00000180,  // ........**.......
      0x00000000,  // .................
      0x0000600C,  // ..**.........**..
      0x0000700C,  // ..***........**..
@@ -6078,9 +6078,9 @@
      0x00000000,  // .............
      0x00000000,  // .............
      0x00000000,  // .............
-     0x000000E0,  // .....***.....
-     0x000000B0,  // .....*.**....
-     0x00000190,  // ....**..*....
+     0x00000000,  // .............
+     0x00000000,  // .............
+     0x00000000,  // .............
      0x00000000,  // .............
      0x00000000,  // .............
      0x000001F0,  // ....*****....
@@ -6095,9 +6095,9 @@
      0x0000060C,  // ..**.....**..
      0x000007F8,  // ..********...
      0x000001F0,  // ....*****....
-     0x00000000,  // .............
-     0x00000000,  // .............
-     0x00000000,  // .............
+     0x00000038,  // .......***...
+     0x00000070,  // ......***....
+     0x00000038,  // .......***...
      0x00000000,  // .............
      0x00000000,  // .............
   },
@@ -6288,9 +6288,9 @@
      0x00000000,  // .............
      0x00000000,  // .............
      0x00000000,  // .............
-     0x00000180,  // ....**.......
-     0x000003F8,  // ...*******...
-     0x00000270,  // ...*..***....
+     0x0000000C,  // .........**..
+     0x00000018,  // ........**...
+     0x00000030,  // .......**....
      0x00000000,  // .............
      0x00000000,  // .............
      0x000004F8,  // ..*..*****...
diff -ruN vdr-1.3.39/i18n.c vdr-1.3.40/i18n.c
--- vdr-1.3.39/i18n.c	2006-01-15 13:22:15.000000000 +0100
+++ vdr-1.3.40/i18n.c	2006-01-22 16:55:28.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: i18n.c 1.235 2006/01/15 12:22:15 kls Exp $
+ * $Id: i18n.c 1.240 2006/01/22 15:55:28 kls Exp $
  *
  * Translations provided by:
  *
@@ -15,8 +15,8 @@
  * French      Jean-Claude Repetto <jc@repetto.org>, Olivier Jacques <jacquesolivier@hotmail.com>, Gregoire Favre <greg@magma.unil.ch>, Nicolas Huillard <nhuillard@e-dition.fr>
  * Norwegian   Jørgen Tvedt <pjtvedt@online.no>, Truls Slevigen <truls@slevigen.no>
  * Finnish     Hannu Savolainen <hannu@opensound.com>, Jaakko Hyvätti <jaakko@hyvatti.iki.fi>, Niko Tarnanen <niko.tarnanen@hut.fi>, Rolf Ahrenberg <rahrenbe@cc.hut.fi>
- * Polish      Michael Rakowski <mrak@gmx.de>
- * Spanish     Ruben Nunez Francisco <ruben.nunez@tang-it.com>
+ * Polish      Michael Rakowski <mrak@gmx.de>, Jaroslaw Swierczynski <swiergot@gmail.com>
+ * Spanish     Ruben Nunez Francisco <ruben.nunez@tang-it.com>, Jesus Bravo Alvarez <jba@pobox.com>
  * Greek       Dimitrios Dimitrakos <mail@dimitrios.de>
  * Swedish     Tomas Prybil <tomas@prybil.se>, Jan Ekholm <chakie@infa.abo.fi>
  * Romanian    Paul Lacatus <paul@campina.iiruc.ro>, Lucian Muresan <lucianm@users.sourceforge.net>
@@ -112,8 +112,8 @@
     "iso8859-1",
     "iso8859-1",
     "iso8859-15",
-    "iso8859-1",
-    "iso8859-1",
+    "iso8859-2",
+    "iso8859-15",
     "iso8859-7",
     "iso8859-1",
     "iso8859-2",
@@ -198,7 +198,7 @@
     "Chaînes",
     "Kanaler",
     "Kanavat",
-    "Kanaly",
+    "Kana³y",
     "Canales",
     "ÊáíÜëéá",
     "Kanaler",
@@ -220,7 +220,7 @@
     "Timere",
     "Ajastimet",
     "Timery",
-    "Timer",
+    "Programar grabaciones",
     "×ñïíïðñïãñáììáôéóìïß",
     "Timers",
     "Timer-e",
@@ -261,8 +261,8 @@
     "Infos sur l'enregistrement",
     "",// TODO
     "Tallenteen tiedot",
-    "",// TODO
-    "",// TODO
+    "Informacje o nagraniu",
+    "Información de grabación",
     "Ðëçñïöïñßåò EããñáöÞò",
     "Inspelning",
     "Detaliile înregistrãrii",
@@ -282,7 +282,7 @@
     "Configuration",
     "Konfigurasjon",
     "Asetukset",
-    "Nastawy",
+    "Ustawienia",
     "Configuración",
     "Ñõèìéóåéò",
     "Inställningar",
@@ -303,7 +303,7 @@
     "Commandes",
     "Kommandoer",
     "Komennot",
-    "Rozkazy",
+    "Polecenia",
     "Órdenes",
     "ÅíôïëÝò",
     "Kommandon",
@@ -324,7 +324,7 @@
     "Commandes d'enregistrement",
     "",// TODO
     "Tallennekomennot",
-    "Rozkazy Nagran",
+    "Polecenia nagrañ",
     "Órdenes de grabación",
     "ÅíôïëÝò ãéÜ åããñáöÝò",
     "Inspelningskommandon",
@@ -345,7 +345,7 @@
     "Modifier une chaîne",
     "Editer kanal",
     "Muokkaa kanavaa",
-    "Ustawienie kanalu",
+    "Edycja kana³u",
     "Modificar canal",
     "Ôñïðïðïßçóç Êáíáëéïý",
     "Ändra kanal",
@@ -366,8 +366,8 @@
     "Changer la programmation",
     "Editer timer",
     "Muokkaa ajastinta",
-    "Ustawienie timerow",
-    "Modificar timer",
+    "Edycja timera",
+    "Modificar programación",
     "Ôñïðïðïßçóç ÷ñïíïðñïãñáììáôéóìïý",
     "Ändra timer",
     "Modificare timer",
@@ -408,8 +408,8 @@
     "Info",
     "",//TODO
     "Tiedot",
-    "",//TODO
-    "",//TODO
+    "Info",
+    "Info",
     "Ðëçñïöïñßåò",
     "Info",
     "Info",
@@ -430,7 +430,7 @@
     "Program Guide - %s",
     "Ohjelmisto - %s",
     "Program - %s",
-    "Programa - %s",
+    "Guía de programación - %s",
     "Ðñüãñáììá - %s",
     "Program - %s",
     "Programul canalului %s",
@@ -438,7 +438,7 @@
     "Guia de Programació - %s",
     "¿àÞÓàÐÜÜÐ - %s",
     "Raspored - %s",
-    "Programm - %s",
+    "Ajakava - %s",
     "Program - %s",
   },
   { "This event - %s",
@@ -449,17 +449,17 @@
     "",//TODO
     "",//TODO
     "",//TODO
+    "Tämä tapahtuma - %s",
     "",//TODO
+    "Este evento - %s",
     "",//TODO
+    "Ta audycja - %s",
     "",//TODO
     "",//TODO
     "",//TODO
     "",//TODO
     "",//TODO
-    "",//TODO
-    "",//TODO
-    "",//TODO
-    "",//TODO
+    "See sündmus - %s",
     "",//TODO
   },
   { "This event - all channels",
@@ -470,17 +470,17 @@
     "",//TODO
     "",//TODO
     "",//TODO
+    "Tämä tapahtuma - kaikki kanavat",
     "",//TODO
+    "Este evento - todos los canales",
     "",//TODO
+    "Ta audycja - wszystkie kana³y",
     "",//TODO
     "",//TODO
     "",//TODO
     "",//TODO
     "",//TODO
-    "",//TODO
-    "",//TODO
-    "",//TODO
-    "",//TODO
+    "See sündmus - kõik kanalid",
     "",//TODO
   },
   { "All events - all channels",
@@ -491,17 +491,17 @@
     "",//TODO
     "",//TODO
     "",//TODO
+    "Kaikki tapahtumat - kaikki kanavat",
     "",//TODO
+    "Todos los eventos - todos los canales",
     "",//TODO
+    "Wszystkie audycje - wszystkie kana³y",
     "",//TODO
     "",//TODO
     "",//TODO
     "",//TODO
     "",//TODO
-    "",//TODO
-    "",//TODO
-    "",//TODO
-    "",//TODO
+    "Kõik sündmused - kõik kanalid",
     "",//TODO
   },
   { "What's on now?",
@@ -513,7 +513,7 @@
     "Programmes en cours",
     "Hvilket program sendes nå?",
     "Menossa nyt",
-    "Program biezacy",
+    "Program bie¿±cy",
     "¿Qué hay ahora?",
     "ÔñÝ÷ïí ðñüãñáììá",
     "Vad sänds nu?",
@@ -534,8 +534,8 @@
     "Prochains programmes",
     "Hvilket program er neste?",
     "Tulossa seuraavaksi",
-    "Program nastepny",
-    "¿Qué hay proximo?",
+    "Nastêpne audycje",
+    "¿Qué hay después?",
     "Åðüìåíï ðñüãñáììá",
     "Vilket är nästa program?",
     "Ce emisiuni urmeazã?",
@@ -555,7 +555,7 @@
     "Résumé",
     "Sammendrag",
     "Yhteenveto",
-    "Zawartosc",
+    "Podsumowanie",
     "Resumen",
     "Ðåñéå÷üìåíï",
     "Sammanfattning",
@@ -564,7 +564,7 @@
     "Resum",
     "¾ßØáÐÝØÕ",
     "Sadr¾aj",
-    "Kokkuvõte",
+    "Ülevaade",
     "Omtale",
   },
   // Button texts (should not be more than 10 characters!):
@@ -577,7 +577,7 @@
     "Modifier",
     "Editer",
     "Muokkaa",
-    "Edycja",
+    "Edytuj",
     "Modificar",
     "ÐñïóáñìïãÞ",
     "Ändra",
@@ -619,7 +619,7 @@
     "Supprimer",
     "Slett",
     "Poista",
-    "Usunac",
+    "Usuñ",
     "Borrar",
     "ÄéáãñáöÞ",
     "Ta bort",
@@ -640,7 +640,7 @@
     "Marquer",
     "Marker",
     "Siirrä",
-    "Zaznaczyc",
+    "Zaznacz",
     "Marcar",
     "ÅðéëïãÞ",
     "Märk",
@@ -661,7 +661,7 @@
     "Marche/Arr",
     "Av/På",
     "Päällä/Pois",
-    "Zal./ Wyl.",
+    "W³/Wy³",
     "On/Off",
     "Aíïé÷/Këåéóôü",
     "På/Av",
@@ -670,7 +670,7 @@
     "On/Off",
     "²ÚÛ/²ëÚÛ",
     "De-/Aktiviraj",
-    "Sees/Väljas",
+    "On/Off",
     "Til/Fra",
   },
   { "Timer",
@@ -682,6 +682,8 @@
     "",// TODO
     "",// TODO
     "Ajastin",
+    "Timer",// TODO
+    "Programa",
     "",// TODO
     "",// TODO
     "",// TODO
@@ -689,9 +691,7 @@
     "",// TODO
     "",// TODO
     "",// TODO
-    "",// TODO
-    "",// TODO
-    "",// TODO
+    "Taimer",
     "",// TODO
   },
   { "Button$Record",
@@ -703,7 +703,7 @@
     "Enregistre",
     "Ta opp",
     "Tallenna",
-    "Nagrywac",
+    "Nagraj",
     "Grabar",
     "ÅããñáöÞ",
     "Inspelning",
@@ -724,7 +724,7 @@
     "Lire",
     "Spill av",
     "Toista",
-    "Odtwarzac",
+    "Odtwórz",
     "Play",
     "ÁíáðáñáãùãÞ",
     "Spela upp",
@@ -745,7 +745,7 @@
     "Pause",
     "",// TODO
     "Tauko",
-    "Przerwa",
+    "Pauza",
     "Pausa",
     "Ðáýóç",
     "Pausa",
@@ -766,7 +766,7 @@
     "Retour",
     "Spol tilbake",
     "Alkuun",
-    "Poczatek",
+    "Pocz±tek",
     "Rebobinar",
     "ÌåôáöïñÜ óôçí Áñ÷Þ",
     "Återspolning",
@@ -787,7 +787,7 @@
     "Arrêt",
     "Stopp",
     "Lopeta",
-    "Zakonczyc",
+    "Zatrzymaj",
     "Parar",
     "ÔÝñìá",
     "Stopp",
@@ -808,7 +808,7 @@
     "Reprendre",
     "Fortsett",
     "Jatka",
-    "Dalej",
+    "Wznów",
     "Continuar",
     "ÅðáíáöïñÜ",
     "Fortsätt",
@@ -829,7 +829,7 @@
     "Ouvrir",
     "Åpne",
     "Avaa",
-    "Otworzyc",
+    "Otwórz",
     "Abrir",
     "Áíïéãìá",
     "Öppna",
@@ -850,7 +850,7 @@
     "Regarder",
     "Skift til",
     "Valitse",
-    "Przelaczyc",
+    "Prze³±cz",
     "Cambiar",
     "AëëáãÞ",
     "Byt",
@@ -892,8 +892,8 @@
     "Après",
     "Neste",
     "Seuraavaksi",
-    "Nastepny",
-    "Siguiente",
+    "Nastêpnie",
+    "Después",
     "Åðüìåíï",
     "Nästa",
     "Urmãtor",
@@ -901,7 +901,7 @@
     "Següent",
     "´ÐÛÕÕ",
     "Slijedi",
-    "Järgmine",
+    "Tulekul",
     "Næste",
   },
   { "Button$Schedule",
@@ -914,7 +914,7 @@
     "Programmer",
     "Ohjelmisto",
     "Program",
-    "Programa",
+    "Guía",
     "Ðñüãñáììá",
     "Program",
     "Program",
@@ -922,7 +922,7 @@
     "Programar",
     "¿àÞÓàÐÜÜÐ",
     "Raspored",
-    "Kava",
+    "Ajakava",
     "Program",
   },
   { "Button$ABC/abc",
@@ -955,7 +955,7 @@
     "Insérer",
     "",// TODO
     "Lisää",
-    "Wstawiac",
+    "Wstaw",
     "Insertar",
     "ÅéóáãùãÞ",
     "Infoga",
@@ -976,7 +976,7 @@
     "Écraser",
     "",// TODO
     "Korvaa",
-    "Przepisac",
+    "Nadpisz",
     "Sobreescribir",
     "ÁíôéêáôÜóôáóç",
     "Skriv över",
@@ -1039,8 +1039,8 @@
     "Scan",
     "",//TODO
     "Päivitä",
-    "",//TODO
-    "",//TODO
+    "Skanuj",
+    "Escanear",
     "ÓÜñùóç",
     "Skanna",
     "Cãutare canale",
@@ -1060,8 +1060,8 @@
     "Audio",
     "",// TODO
     "Ääni",
-    "",// TODO
-    "",// TODO
+    "D¼wiêk",
+    "Audio",
     "¹÷ïò",
     "Ljud",
     "Sunet",
@@ -1082,7 +1082,7 @@
     "Supprimer la chaîne?",
     "Slette kanal?",
     "Poistetaanko kanava?",
-    "Usunac kanal?",
+    "Usun±æ kana³?",
     "¿Eliminar canal?",
     "ÄéáãñáöÞ êáíáëéïý?",
     "Ta bort kanalen?",
@@ -1103,8 +1103,8 @@
     "Supprimer la programmation?",
     "Slette timer?",
     "Poistetaanko ajastin?",
-    "Usunac timer?",
-    "¿Eliminar timer?",
+    "Usun±æ timer?",
+    "¿Eliminar programación?",
     "ÄéáãñáöÞ ÷ñïíïðñïãñáììáôéóìïý;?",
     "Ta bort timern?",
     "ªterg timer-ul?",
@@ -1124,7 +1124,7 @@
     "Supprimer l'enregistrement?",
     "Slette opptak?",
     "Poistetaanko tallenne?",
-    "Usunac nagranie?",
+    "Usun±æ nagranie?",
     "¿Eliminar grabacion?",
     "ÄéáãñáöÞ åããñáöÞò?",
     "Ta bort inspelningen?",
@@ -1145,8 +1145,8 @@
     "Enregistrement en cours - confirmez la suppression",
     "Timer gjør opptak - vil du slette likevel?",
     "Ajastettu tallennus käynnissä - poistetaanko silti?",
-    "Nagrywanie w trakcie - napewno usunac?",
-    "¿Timer activo - de verdad eliminarlo?",
+    "Trwa nagrywanie - na pewno usun±æ?",
+    "Todavía está grabando - ¿eliminar realmente?",
     "×ñïíïðñïãñáììáôéóìüò óÝ åîÝëéîç - ÄéáãñáöÞ óßãïõñá?",
     "Timerstyrd inspelning pågår - Avbryta ändå?",
     "Timer-ul tocmai înregistreazã - ºterg, totuºi?",
@@ -1166,7 +1166,7 @@
     "Arrêter l'enregistrement?",
     "Stoppe opptak?",
     "Lopetetaanko tallennus?",
-    "Zakonczyc nagranie?",
+    "Zatrzymaæ nagrywanie?",
     "¿Parar grabación?",
     "Áêýñùóç åããñáöÞò?",
     "Stanna inspelning?",
@@ -1187,8 +1187,8 @@
     "Annuler les modifications?",
     "Avbryte redigering?",
     "Perutaanko muokkaus?",
-    "Zakonczyc montaz?",
-    "¿Cancelar modificación?",
+    "Anulowaæ monta¿?",
+    "¿Cancelar edición?",
     "Aêýñùóç åðåîåñãáóßáò?",
     "Avbryta redigeringen?",
     "Opresc montajul înregistrãrii?",
@@ -1208,8 +1208,8 @@
     "Redémarrer?",
     "Vil du virkelig starte på nytt?",
     "Käynnistetäänkö uudelleen?",
-    "Rzeczywiscie nowy start?",
-    "¿De verdad reiniciar?",
+    "Na pewno zrestartowaæ?",
+    "¿Reiniciar realmente?",
     "Ná ãßíåé óßãïõñá åðáíåêêßíçóç?",
     "Vill du verkligen starta om?",
     "Sigur repornesc?",
@@ -1229,8 +1229,8 @@
     "Enregistrement en cours - redémarrer?",
     "Gjør opptak - starte på nytt likevel?",
     "Tallennus kesken - käynnistetäänkö uudelleen?",
-    "Nagrywanie w trakcie - rzeczywiscie nowy start?",
-    "Grabando - ¿reiniciar?",
+    "Trwa nagrywanie - zrestartowaæ mimo to?",
+    "Grabación en curso - ¿reiniciar igualmente?",
     "Ãßíåôáé åããñáöÞ - ÔåëéêÜ íá ãßíåé åðáíåêêßíçóç?",
     "Inspelning pågår, vill du ändå starta om?",
     "Tocmai se înregistreazã - repornesc, totuºi?",
@@ -1250,8 +1250,8 @@
     "Enregistrement en cours - confirmez l'arrêt",
     "Gjør opptak - slå av likevel?",
     "Tallennus kesken - sammutetaanko?",
-    "Nagrywanie w trakcie - mimo to wylaczyc?",
-    "Grabando - ¿apagar?",
+    "Trwa nagrywanie - wy³±czyæ mimo to?",
+    "Grabación en curso - ¿apagar igualmente?",
     "Ãßíåôáé åããñáöÞ - ÔåëéêÜ íá ãßíåé ôåñìáôéóìüò?",
     "Inspelning pågår, vill du ändå avbryta?",
     "Tocmai se înregistreazã - închid, totuºi?",
@@ -1271,8 +1271,8 @@
     "Enregistrement dans %d minutes - confirmez l'arrêt",
     "Skal gjøre opptak om %d minutter - slå av likevel?",
     "Tallennus alkaa %d min kuluttua - sammutetaanko?",
-    "Nagrywanie za %d minut - mimo to wylaczyc?",
-    "Grabando en %d minutos, ¿de verdad apagar?",
+    "Nagrywanie za %d minut - wy³±czyæ mimo to?",
+    "Grabación dentro de %d minutos, ¿apagar realmente?",
     "ÁíáìÝíåôáé åããñáöÞ óÝ %d ëåðôÜ - ÔåëéêÜ íá ôåñìáôéóôåß?",
     "Inspelning startar om %d minuter, vill du avsluta?",
     "Înregistrez peste %d minute - închid, totuºi?",
@@ -1292,7 +1292,7 @@
     "Appuyez sur une touche pour annuler l'arrêt",
     "Trykk en tast for ikke å slå av",
     "Peru sammutus painamalla mitä tahansa näppäintä",
-    "Dowolny przycisk zatrzyma wylaczanie",
+    "Naci¶nij dowolny klawisz aby nie wy³±czaæ",
     "Pulse una tecla para interrumpir apagar",
     "Ðßåóå Ýíá ðëÞêôñï ãéÜ áêýñùäç ôåñìáôéóìïý",
     "Tryck valfri knapp för att återkalla avstängningen",
@@ -1335,7 +1335,7 @@
     "Fréquence",
     "Frekvens",
     "Taajuus",
-    "Czestotliwosc",
+    "Czêstotliwo¶æ",
     "Frecuencia",
     "Óõ÷íüôçôá",
     "Frekvens",
@@ -1377,8 +1377,8 @@
     "Source",
     "",//TODO
     "Lähde",
-    "Zrodlo",
-    "",//TODO
+    "¬ród³o",
+    "Fuente",
     "ÐçãÞ",
     "Källa",
     "Sursã",
@@ -1399,7 +1399,7 @@
     "Srate",
     "Symbolinopeus",
     "Srate",
-    "Srate",
+    "T.símbolos",
     "Srate",
     "Srate",
     "Ratã simboluri",
@@ -1567,7 +1567,7 @@
     "Kortleser",
     "Salaus (CA)",
     "CA",
-    "CA",
+    "Acceso condicional (CA)",
     "CA",
     "Kortläsare",
     "CA (Acces Condiþional)",
@@ -1586,17 +1586,17 @@
     "",//TODO
     "",//TODO
     "",//TODO
+    "vapaa",
     "",//TODO
+    "en abierto",
     "",//TODO
+    "Otwarta transmisja",
     "",//TODO
     "",//TODO
     "",//TODO
     "",//TODO
     "",//TODO
-    "",//TODO
-    "",//TODO
-    "",//TODO
-    "",//TODO
+    "FTA",
     "",//TODO
   },
   { "encrypted",
@@ -1607,17 +1607,17 @@
     "",//TODO
     "",//TODO
     "",//TODO
+    "salattu",
     "",//TODO
+    "cifrado",
     "",//TODO
+    "szyfrowany",
     "",//TODO
     "",//TODO
     "",//TODO
     "",//TODO
     "",//TODO
-    "",//TODO
-    "",//TODO
-    "",//TODO
-    "",//TODO
+    "krüptitud",
     "",//TODO
   },
   { "Sid",
@@ -1650,7 +1650,7 @@
     "Inversion",
     "Inversion",
     "Inversio",
-    "Inversion",
+    "Inwersja",
     "Inversion",
     "ÁíôéóôñïöÞ",
     "Inversion",
@@ -1671,8 +1671,8 @@
     "Bande passante",
     "Bandwidth",
     "Kaistanleveys",
-    "Szerokosc pasma",
-    "Bandwidth",
+    "Pasmo",
+    "Ancho de banda",
     "Åýñïò Óõ÷íïôÞôùí",
     "Bandbredd",
     "Lãrgime de bandã",
@@ -1735,7 +1735,7 @@
     "Modulation",
     "Modulaatio",
     "Modulacja",
-    "Modulation",
+    "Modulación",
     "Äéáìüñöùóç",
     "Modulation",
     "Modulaþie",
@@ -1756,7 +1756,7 @@
     "Transmission",
     "Transmissio",
     "Transmisja",
-    "Transmission",
+    "Transmisión",
     "ÌåôÜäïóç",
     "Transmission",
     "Transmisiune",
@@ -1777,7 +1777,7 @@
     "Guard",
     "Suojaväli",
     "Guard",
-    "Guard",
+    "Int.Guarda",
     "Ðñïóôáóßá",
     "Guard",
     "Guard",
@@ -1797,8 +1797,8 @@
     "Hiérarchie",
     "Hierarchy",
     "Hierarkia",
-    "Hierachia",
-    "Hierarchy",
+    "Hierarchia",
+    "Jerarquía",
     "Éåñáñ÷åßá",
     "Hierarchy",
     "Ierarhie",
@@ -1840,7 +1840,7 @@
     "Chaîne",
     "Kanal",
     "Kanava",
-    "Kanal",
+    "Kana³",
     "Canal",
     "ÊáíÜëé",
     "Kanal",
@@ -1861,7 +1861,7 @@
     "Jour",
     "Dag",
     "Päivä",
-    "Dzien",
+    "Dzieñ",
     "Día",
     "ÇìÝñá",
     "Dag",
@@ -1882,7 +1882,7 @@
     "Début",
     "Start",
     "Aloitus",
-    "Poczatek",
+    "Pocz±tek",
     "Comienzo",
     "Áñ÷Þ",
     "Börjar",
@@ -1924,8 +1924,8 @@
     "VPS",
     "",// TODO
     "VPS",
-    "",// TODO
-    "",// TODO
+    "VPS",
+    "VPS",
     "VPS",
     "VPS",
     "VPS",
@@ -1966,8 +1966,8 @@
     "Durée de vie",
     "Levetid",
     "Elinikä",
-    "Trwalosc dni",
-    "Durabilidad",
+    "Czas ¿ycia",
+    "Duración",
     "ÄéÝñêåéá ÐáñáìïíÞò",
     "Livstid",
     "Timp de pãstrare",
@@ -2008,7 +2008,7 @@
     "Premier jour",
     "Første dag",
     "1. päivä",
-    "Pierwszy dzien",
+    "Pierwszy dzieñ",
     "Primer día",
     "Ðñþôç ìÝñá",
     "Första dag",
@@ -2030,8 +2030,8 @@
     "Cette chaîne est en cours d'utilisation!",
     "Kanalen er i bruk av en timer!",
     "Kanava on ajastimen käytössä!",
-    "Kanal jest zajety przez timer nagran",
-    "¡Canal está ocupado por un timer!",
+    "Kana³ jest u¿ywany przez timer!",
+    "¡Hay una grabación programada para este canal!",
     "Ôï êáíÜëç ÷ñéóéìïðïéåßôáé áðü ÷ñïíïðñïãñáììáôéóìü!",
     "Kanalen används av en timer!",
     "Canalul este utilizat de un timer!",
@@ -2051,8 +2051,8 @@
     "Impossible de changer de chaîne!",
     "Ikke mulig å skifte kanal!",
     "Kanavan vaihtaminen ei mahdollista!",
-    "Kanal nie moze byc teraz przelaczony!",
-    "¡No puedo cambiar canal!",
+    "Nie mo¿na prze³±czyæ kana³u!",
+    "¡No se puede cambiar de canal!",
     "ÁëëáãÞ êáíáëéïý áäýíáôç!",
     "Omöjligt att byta kanal!",
     "Nu pot comuta canalul!",
@@ -2073,7 +2073,7 @@
     "Timer gjør opptak!",
     "Ajastintallennus käynnissä!",
     "Timer nagrywa!",
-    "¡Timer esta grabando!",
+    "¡Grabación en curso!",
     "Ãßíåôáé ðñïãñáìáôéóìÝíç åããñáöÞ!",
     "Timerstyrd inspelning pågår!",
     "Timer-ul tocmai înregistreazã!",
@@ -2081,7 +2081,7 @@
     "El temporitzador està gravant!",
     "¸Ôñâ ×ÐßØáì ßÞ âÐÙÜÕàã!",
     "Snimanje po definiranom terminu!",
-    "Taimeri salvestamine!",
+    "Taimeriga salvestamine aktiivne!",
     "Timer optager nu!",
   },
   { "Error while accessing recording!",
@@ -2093,7 +2093,7 @@
     "Impossible d'accèder à l'enregistrement",
     "Feil under lesing av opptak!",
     "Tallenteen toistaminen epäonnistui!",
-    "Blad - brak dostepu do nagrania!",
+    "Bl±d podczas dostêpu do nagrania!",
     "¡Error al acceder a la grabación!",
     "Ðñüâëçìá óôÞí ðñïóðÝëáóç åããñáöÞò!",
     "Inspelningen går inte att läsa!",
@@ -2114,7 +2114,7 @@
     "Erreur de suppression de l'enregistrement!",
     "Feil under sletting av opptak!",
     "Tallenteen poistaminen epäonnistui!",
-    "Blad przy usuwaniu nagrania!",
+    "Bl±d podczas usuwania nagrania!",
     "¡Error al borrar la grabación!",
     "ËÜèïò êáôÜ ôÞí äéáãñáöÞ ôïõ áñ÷åßïõ!",
     "Inspelningen går inte att ta bort!",
@@ -2135,8 +2135,8 @@
     "*** Chaîne invalide! ***",
     "*** Ugyldig Kanal! ***",
     "*** Virheellinen kanavavalinta! ***",
-    "*** Niewazny kanal ***",
-    "*** Canal inválido ***",
+    "*** Niepoprawny kana³ ***",
+    "*** Canal no válido ***",
     "*** Áêõñï êáíÜëç ***",
     "*** Felaktig kanal ***",
     "*** Canal invalid ***",
@@ -2157,7 +2157,7 @@
     "Ingen ledige DVB enheter for opptak!",
     "Ei vapaata DVB-viritintä tallennukselle!",
     "Brak wolnej karty DVB do nagrywania!",
-    "¡No hay dispositivo DVB disponible para grabar!",
+    "¡Ningún dispositivo DVB disponible para grabar!",
     "ÁíåðÜñêåéá DVB ÊÜñôáò ãéÜ åããñáöÞ!",
     "Det finns ingen ledig DVB enhet för inspelning!",
     "Nu mai sunt dispozitive DVB disponibile pentru înregistrare!",
@@ -2177,7 +2177,7 @@
     "Chaîne non disponible!",
     "",//TODO
     "Kanava ei ole käytettävissä!",
-    "Kanal jest niedostepny!",
+    "Kana³ nie jest dostêpny!",
     "!Canal no disponible!",
     "Ôï êáíÜëç äÝí åßíáé äéáèÝóéìï!",
     "Kanalen är inte tillgänglig!",
@@ -2198,7 +2198,7 @@
     "Caractéristiques des chaînes ne sont pas uniques",
     "",//TODO
     "Kanava-asetukset eivät ole yksilölliset!",
-    "Nastawy kanalu sa niejednoznaczne!",
+    "Ustawienia kana³u nie s± unikalne!",
     "!Propiedades de canal duplicadas!",
     "Ïé ñéèìýóåéò ôïí êáíáëéþí áëëõëïóõìðßðôïõí!",
     "Kanalinställningarna är ej unika!",
@@ -2219,7 +2219,7 @@
     "Chaîne verrouillée (enregistrement en cours)!",
     "Kanalen er låst (opptak)!",
     "Kanava lukittu (tallennus käynnissä)!",
-    "Kanal zablokowany (nagrywanie w toku)!",
+    "Kana³ zablokowany (trwa nagrywanie)!",
     "¡Canal bloqueado (grabando)!",
     "Ôï êáíÜëé åßíáé áðïó÷ïëéìÝíï (Ãßíåôå åããñáöÞ)!",
     "Kanalen är låst (inspelning pågår)!",
@@ -2240,8 +2240,8 @@
     "Impossible d'utiliser le mode transfert!",
     "Kan ikke starte transfer modus!",
     "Siirtotilan aloitus epäonnistui!",
-    "Tryb transferowy jest niemozliwy!",
-    "¡No puedo iniciar modo de transferencia!",
+    "Nie mo¿na uruchomiæ trybu transferu!",
+    "¡No se puede iniciar el modo de transferencia!",
     "Áäõíáìßá åêêßíçóçò êáôÜóôáóçò ìåôáöïñÜò!",
     "Kan inte starta Transfer Mode!",
     "Nu pot porni modul de transfer!",
@@ -2261,8 +2261,8 @@
     "Pas de marques d'édition définies!",
     "",//TODO
     "Muokkausmerkinnät puuttuvat!",
-    "Brak znakow montazowych!",
-    "",//TODO
+    "Nie zdefiniowano znaczników monta¿u!",
+    "¡No se definieron marcas de edición!",
     "ÄÝí Ý÷ïõí ïñéóôåß óçìåßá åðåîåñãáóßáò",
     "Det finns inga redigeringsmärken",//TODO
     "Nu s-au pus marcaje de montaj pentru aceastã înregistrare",
@@ -2282,8 +2282,8 @@
     "Impossible de commencer le montage!",
     "Kan ikke starte redigeringsprosessen!",
     "Muokkauksen aloitus epäonnistui!",
-    "Uruchamianie montazu jest niemozliwe!",
-    "¡No puedo iniciar proceso de modificación!",
+    "Nie mo¿na uruchomiæ procesu edycji!",
+    "¡No se puede iniciar el proceso de edición!",
     "Áäõíáìßá åêêßíçóçò ôçò åðåîåñãáóßáò!",
     "Kan inte starta redigering!",
     "Nu pot porni montajul înregistrãrii!",
@@ -2303,8 +2303,8 @@
     "Montage déjà en cours!",
     "Redigeringsprosessen er allerede aktiv!",
     "Muokkaus on jo käynnissä!",
-    "Montaz w toku!",
-    "¡Proceso de modificación ya fue iniciado!",
+    "Proces edycji jest ju¿ aktywny!",
+    "¡El proceso de edición ya está activo!",
     "Åðåîåñãáóßá âñßóêåôáé óÝ åîÝëéîç!",
     "Redigeringen är redan aktiv!",
     "Montajul înregistrãrii este deja activ!",
@@ -2312,7 +2312,7 @@
     "Procés d'edició iniciat anteriorment!",
     "¿àÞæÕáá ÒØÔÕÞÜÞÝâÐÖÐ ãÖÕ ×ÐßãéÕÝ!",
     "Ureðivanje je veæ aktivirano!",
-    "Redigeerimine on juba aktiivne!",
+    "Redigeerimine juba aktiivne!",
     "Redigeringsproces er allerede aktiv!",
   },
   { "Can't shutdown - option '-s' not given!",
@@ -2324,8 +2324,8 @@
     "Arrêt impossible - option '-s' absente!",
     "Kan ikke slå av - startet uten parameteret '-s'!",
     "Sammutus ei onnistu - '-s' parametri puuttuu!",
-    "Wylaczenie niemozliwe - brak opcji '-s'!",
-    "¡No puedo apagar - opción '-s' ausente!",
+    "Nie mo¿na wy³±czyæ - nie podano opcji '-s'!",
+    "¡No se puede apagar - falta el parámetro '-s'!",
     "Áäýíáôïí íá ãßíåé ôåñìáôéóìüò. Áíýðáñêôç ç ðáñÜìåôñïò '-s'!",
     "Kan inte avsluta, måste använda parameter '-s'",
     "Nu pot închide - vezi opþiunea '-s'",
@@ -2336,6 +2336,27 @@
     "Väljalülitamine ebaõnnestus - '-s' parameeter puudub!",
     "Kan ikke slukke - parameter '-s' ikke angivet!",
   },
+  { "Not enough disk space to start recording!",
+    "Nicht genügend Plattenplatz für Aufnahme!",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+  },
   { "Low disk space!",
     "Platte beinahe voll!",
     "Premalo prostora na disku!",
@@ -2345,8 +2366,8 @@
     "Disque presque plein!",
     "Lite ledig diskplass!",
     "Tallennustila loppumassa!",
-    "Dysk wkrotce pelny!",
-    "¡Disco casi lleno",
+    "Ma³o miejsca na dysku!",
+    "¡Poco espacio en disco!",
     "Ï óêëçñüò êïíôåýåé íÜ ãåìßóåé!",
     "Lågt diskutrymme!",
     "Spaþiul pe disc e foarte scãzut!",
@@ -2354,7 +2375,7 @@
     "Disc gairebé ple!",
     "½ÕÔÞáâÐâÞçÝÞ ÜÕáâÐ ÝÐ ÔØáÚÕ!",
     "Nedovoljno prostora na disku",
-    "Kõvaketas peaaegu täis!",
+    "Kõvaketas täis!",
     "Kun lidt diskplads tilbage!",
   },
   { "Opening CAM menu...",
@@ -2366,8 +2387,8 @@
     "",//TODO
     "",//TODO
     "Avataan CA-moduulin valikkoa...",
-    "",//TODO
-    "",//TODO
+    "Otwieram menu CAM...",
+    "Abriendo el menú CAM...",
     "",//TODO
     "Åßóïäïò CAM Ìåíïý",
     "",//TODO
@@ -2387,8 +2408,8 @@
     "Impossible d'ouvrir le menu CAM!",
     "",//TODO
     "CA-moduulin valikko ei saatavilla",
-    "CAM-Menu niedostepne!",
-    "¡No pudeo acceder al menú de la CAM!",
+    "Nie mo¿na otworzyæ menu CAM!",
+    "¡No se puede abrir el menú CAM!",
     "Áäýíáôç ç ðñüóâáóç óôü CAM ìåíïý!",
     "Det går inte att öppna CAM menyn!",
     "Nu pot deschide meniul CAM",
@@ -2408,8 +2429,8 @@
     "",//TODO
     "",//TODO
     "CA-moduuli palautetaan alkutilaan...",
-    "",//TODO
-    "",//TODO
+    "Resetujê CAM...",
+    "Reiniciando CAM...",
     "",//TODO
     "ÅðáíáöïñÜ CAM",
     "",//TODO
@@ -2429,8 +2450,8 @@
     "Impossible de réinitialiser la CAM!",
     "",//TODO
     "CA-moduulin palautus alkutilaan epäonnistui!",
-    "Nieudany CAM-Reset!",
-    "¡No puedo reiniciar la CAM!",
+    "Nie mo¿na zresetowaæ CAM!",
+    "¡No se puede reiniciar CAM!",
     "Áäýíáôç ç åðáíáöïñÜ óôü CAM",
     "Kan inte återställa CAM!",
     "Nu pot reseta CAM",
@@ -2450,8 +2471,8 @@
     "La CAM a été réinitialisée",
     "",//TODO
     "CA-moduuli palautettu alkutilaan",
-    "CAM-Reset wykonany",
-    "CAM reiniciada",
+    "CAM zosta³ zresetowany",
+    "CAM reiniciado",
     "¸ãéíå åðáíáöïñÜ óôï CAM",
     "CA modulen har återställts",
     "CAM-ul a fost resetat",
@@ -2471,8 +2492,8 @@
     "",//TODO
     "",//TODO
     "Syötä %d numeroa!",
-    "",//TODO
-    "",//TODO
+    "Proszê podaæ %d cyfr!",
+    "¡Escriba %d dígitos!",
     "",//TODO
     "Ðáñáêáëü ðëçêôñïëïãÞóåôå %d íïýìåñá",
     "",//TODO
@@ -2492,8 +2513,8 @@
     "",//TODO
     "Pas d'audio disponible!",
     "Äänen kieli ei ole valittavissa!",
-    "",//TODO
-    "",//TODO
+    "D¼wiêk nie jest dostêpny!",
+    "¡No hay audio disponible!",
     "Ìç äéáèÝóéìïò Þ÷ïò",
     "Ljud saknas!"
     "Lipseºte sunetul!",
@@ -2620,7 +2641,7 @@
     "Opptak",
     "Tallennus",
     "Nagranie",
-    "Opciones de Grabación",
+    "Opciones de grabación",
     "ÅããñáöÞ",
     "Inspelning",
     "Înregistrare",
@@ -2641,7 +2662,7 @@
     "Spill av",
     "Toisto",
     "Odtwarzanie",
-    "Opciones de Reproducción",
+    "Opciones de reproducción",
     "ÁíáðáñáãùãÞ",
     "Uppspelning",
     "Redare",
@@ -2661,7 +2682,7 @@
     "Divers",
     "Forskjellig",
     "Sekalaiset",
-    "Pozostale",
+    "Ró¿ne",
     "Varios",
     "ÄéÜöïñá",
     "Diverse",
@@ -2682,7 +2703,7 @@
     "Plugins",
     "Plugins",
     "Laajennokset",
-    "Plugins",
+    "Wtyczki",
     "Plugins",
     "ÅðåêôÜóåéò",
     "Moduler",
@@ -2703,7 +2724,7 @@
     "Plugin",
     "Plugin",
     "Laajennos",
-    "Plugin",
+    "Wtyczka",
     "Plugin",
     "ÅðÝêôáóç",
     "Modul",
@@ -2724,7 +2745,7 @@
     "Redémarrer",
     "Start på nytt",
     "Käynnistä uudelleen",
-    "Zastartowac",
+    "Restart",
     "Reiniciar",
     "Åðáíåêêßíçóç",
     "Omstart",
@@ -2746,7 +2767,7 @@
     "Langue",
     "Språk",
     "Kieli",
-    "Jezyk",
+    "Jêzyk",
     "Idioma",
     "Ãëþóóá",
     "Språk",
@@ -2767,8 +2788,8 @@
     "Skin",
     "",// TODO
     "Ulkoasu",
-    "",// TODO
-    "",// TODO
+    "Skórka",
+    "Skin",
     "ÅðéöÜíåéá",
     "Skin",
     "Skin",
@@ -2788,8 +2809,8 @@
     "Thème",
     "",// TODO
     "Teema",
-    "",// TODO
-    "",// TODO
+    "Motyw",
+    "Tema",
     "ÈÝìá",
     "Tema",
     "Temã",
@@ -2809,8 +2830,8 @@
     "Gauche",
     "",// TODO
     "Vaakakeskitys",
-    "",// TODO
-    "",// TODO
+    "Od lewej",
+    "Izquierda",
     "ÁñéóôåñÜ",
     "Vänster",
     "Stânga",
@@ -2830,8 +2851,8 @@
     "Haut",
     "",// TODO
     "Pystykeskitys",
-    "",// TODO
-    "",// TODO
+    "Od góry",
+    "Arriba",
     "ÅðÜíù",
     "Övre",
     "Sus",
@@ -2851,7 +2872,7 @@
     "Largeur",
     "Bredde",
     "Leveys",
-    "Szerokosc",
+    "Szeroko¶æ",
     "Anchura",
     "ÌÜêñïò",
     "Bredd",
@@ -2872,7 +2893,7 @@
     "Hauteur",
     "Høyde",
     "Korkeus",
-    "Wysokosc",
+    "Wysoko¶æ",
     "Altura",
     "¾øïò",
     "Höjd",
@@ -2893,8 +2914,8 @@
     "Durée affichage message (s)",
     "Tid meldinger skal vises (s)",
     "Viestien esitysaika (s)",
-    "Czas wyswietlania wiadomosci (s)",
-    "Duración muestra mensajes (s)",
+    "Czas trwania wiadomo¶ci (s)",
+    "Duración de los mensajes (sg)",
     "×ñüíïò Ýíäåéîçò ìõíçìÜôùí (ä)",
     "Tid för meddelanden (sek)",
     "Timp afiºare mesaje (sec)",
@@ -2914,8 +2935,8 @@
     "Utiliser les petits caractères",
     "",// TODO
     "Käytä pieniä kirjasimia",
-    "",// TODO
-    "",// TODO
+    "U¿ywaj ma³ej czcionki",
+    "Usar letra pequeña",
     "×ñéóçìïðïßçóç ìéêñüí ãñáììáôïóåéñþí",
     "Använd liten font",
     "Utilizare fonturi mici",
@@ -2935,8 +2956,8 @@
     "jamais",
     "",// TODO
     "ei koskaan",
-    "",// TODO
-    "",// TODO
+    "nigdy",
+    "nunca",
     "ÐïôÝ"
     "aldrig",
     "niciodatã",
@@ -2956,8 +2977,8 @@
     "dépend du skin",
     "",// TODO
     "ulkoasun mukaan",
-    "",// TODO
-    "",// TODO
+    "zal. od skórki",
+    "según skin",
     "ÅîáñôÜôå áðü ôÞí åðéöÜíåéá",
     "skin beroende",
     "dep. de skin",
@@ -2977,8 +2998,8 @@
     "toujours",
     "",// TODO
     "aina",
-    "",// TODO
-    "",// TODO
+    "zawsze",
+    "siempre",
     "ðÜíôá",
     "alltid",
     "întotdeauna",
@@ -2998,8 +3019,8 @@
     "Position infos chaînes",
     "Posisjon på kanalinformasjon",
     "Kanavatiedon sijainti",
-    "Lokalizacja informacji o kanale",
-    "Posición para información canal",
+    "Pozycja informacji o kanale",
+    "Posición para información de canal",
     "ÈÝóç ðëçñïöïñßáò êáíáëéþí",
     "Placering av kanalinformation",
     "Poziþia informaþiilor despre canal",
@@ -3019,8 +3040,8 @@
     "Durée affichage infos chaînes (s)",
     "",// TODO
     "Kanavatiedon esitysaika (s)",
-    "",// TODO
-    "",// TODO
+    "Czas trwania informacji o kanale (s)",
+    "Tiempo de información de canal (sg)",
     "÷ñüíïò Ýíäåéêóçò ðëçñïöïñßùí êáíáëéïý óå (ä)",
     "Kanal information (s)",
     "Durata afiºãrii info-canal (s)",
@@ -3028,7 +3049,7 @@
     "",// TODO
     "¿ÞÚÐ× ØÝäÞàÜÐæØØ Þ ÚÐÝÐÛÕ (áÕÚ)",
     "Vrijeme prikaza informacije o programu (s)",
-    "Kanaliteate esitusaeg (s)",
+    "Kanaliinfo esitusaeg (s)",
     "Tid kanalinfo skal vises (s)",
   },
   { "Setup.OSD$Info on channel switch",
@@ -3040,8 +3061,8 @@
     "Affichage progr. en cours",
     "Info ved kanalskifte",
     "Näytä kanavatieto vaihdettaessa",
-    "Informacja przy zmianie kanalu",
-    "Información para cambio de canal",
+    "Informacja przy zmianie kana³u",
+    "Mostrar info al cambiar de canal",
     "Ðëçñïöïñßåò óôÞí áëëáãÞ êáíáëéïý",
     "Information vid kanalbyte",
     "Informaþii la comutarea canalului",
@@ -3049,7 +3070,7 @@
     "Informació del canvi de canal",
     "¿ÞÚÐ×ëÒÐâì ØÝäÞàÜÐæØî Þ ÚÐÝÐÛÕ",
     "Informacije kod promjene kanala",
-    "Kanaliteate näitamine",
+    "Kanaliinfo näitamine",
     "Info ved kanalskift",
   },
   { "Setup.OSD$Timeout requested channel info",
@@ -3061,6 +3082,8 @@
     "", // TODO
     "", // TODO
     "Sulje kanavatieto pyydettäessä",
+    "Czas oczekiwania na informacje",
+    "Auto-cerrar al solicitar info de canal",
     "", // TODO
     "", // TODO
     "", // TODO
@@ -3068,9 +3091,7 @@
     "", // TODO
     "", // TODO
     "", // TODO
-    "", // TODO
-    "", // TODO
-    "", // TODO
+    "Kanaliinfo kuvamise ajapiirang",
     "", // TODO
   },
   { "Setup.OSD$Scroll pages",
@@ -3082,8 +3103,8 @@
     "Défilement par pages",
     "Rask rulling i menyer",
     "Valikoiden vieritys sivuttain",
-    "Przesuwac stronami",
-    "Desplazar página entera",
+    "Przesuwaj stronami",
+    "Deslizar páginas enteras",
     "Êýëéóç óåëßäáò",
     "Bläddra sidor",
     "Deruleazã pagini",
@@ -3103,8 +3124,8 @@
     "Défilement rotatif",
     "",// TODO
     "Valikoiden vieritys ympäri",
-    "",// TODO
-    "",// TODO
+    "Skrajne pozycje s±siaduj±",
+    "Rotar arriba/abajo al deslizar",
     "Êýëéóç ãýñù-ãýñù",
     "Rulla texten",
     "Derulare circularã",
@@ -3123,17 +3144,17 @@
     "",// TODO
     "",// TODO
     "",// TODO
+    "Sulje valikkonäppäimellä",
     "",// TODO
+    "Cerrar al pulsar botón de menú",
     "",// TODO
+    "Klawisz Menu zamyka",
     "",// TODO
     "",// TODO
     "",// TODO
     "",// TODO
     "",// TODO
-    "",// TODO
-    "",// TODO
-    "",// TODO
-    "",// TODO
+    "Sulgemine Menüü klahviga",
     "",// TODO
   },
   { "Setup.OSD$Sort timers",
@@ -3145,8 +3166,8 @@
     "Trier les programmations",
     "Sorter timere",
     "Järjestä ajastimet",
-    "Sortowanie timerow",
-    "Ordenar timers",
+    "Sortuj timery",
+    "Ordenar programas de grabación",
     "ÏñãÜíùóç ÷ñïíïðñïãñáììáôéóìþí",
     "Sortera timers",
     "Sortare timer-e",
@@ -3166,8 +3187,8 @@
     "Dossiers d'enregistrements",
     "Kataloger til opptak",
     "Näytä tallennehakemistot",
-    "Wykaz nagran",
-    "Gracaciones en directorios",
+    "Katalogi nagrañ",
+    "Mostrar directorios de grabaciones",
     "ÖÜêåëïé åããñáöþí",
     "Kataloger för inspelningar",
     "Directoare înregistrãri",
@@ -3187,8 +3208,8 @@
     "Inactivité avant rech. EPG (h)",
     "Ledig tid før EPG-søk (h)",
     "Ohjelmaoppaan taustapäivitys (h)",
-    "Czas do skanu EPG (h)",
-    "Tiempo hasta exploración EPG (h)",
+    "Czas skanowania EPG (h)",
+    "Tiempo de exploración de EPG (h)",
     "×ñüíïò äéÜñêåéáò åîÝôáóçò EPG óå þñåò",
     "EPG sökning timeout",
     "Interval achiziþie EPG (h)",
@@ -3208,8 +3229,8 @@
     "Niveau de correction EPG",
     "Nivå for EPG-feilretting",
     "Ohjelmaoppaan korjaustaso",
-    "Poziom bledow EPG",
-    "Nivel para arreglar EPG",
+    "Stopieñ poprawek b³êdów EPG",
+    "Nivel de corrección de EPG",
     "Âáèìüò äéüñèùóçò ïäçãïý EPG",
     "Nivå för EPG bugfix",
     "Nivel corecþie EPG",
@@ -3229,8 +3250,8 @@
     "Montrer l'EPG périmé (min)",
     "",// TODO
     "Vanha tieto näkyy (min)",
-    "",// TODO
-    "",// TODO
+    "Czas przechowywania EPG (min)",
+    "Mostrar datos antiguos de EPG (m)",
     "¸íäåéîç îåðåñáóìÝíùí ðëçñïöïñéþí (ëåðôÜ)",
     "Visa gammal information (min)",
     "Date EPG expirate cel mult (min)",
@@ -3250,7 +3271,7 @@
     "Ajuster l'heure du système",
     "Juster system-klokken",
     "Tahdista kellonaika",
-    "Ustawianie czasu",
+    "Ustawiaj czas systemowy",
     "Ajustar reloj de sistema",
     "Óõíôïíéóìüò þñáò õðïëïãéóôÞ",
     "Ställ in systemtid",
@@ -3271,8 +3292,8 @@
     "Utiliser l'heure de la chaîne",
     "Bruk klokke fra transponder",
     "Vastaanota kellonaika transponderilta",
-    "Transponder do ustawiania czasu",
-    "Transponder para reloj de sistema",
+    "U¿yj czasu z transpondera",
+    "Transponder del que tomar la hora",
     "Áíáìåôáäüôçò óõíôïíéóìïý þñáò",
     "Använd klockan från transponder",
     "Preia ora din transponder",
@@ -3292,8 +3313,8 @@
     "Langues préférées",
     "",// TODO
     "Suosikkikielet",
-    "",// TODO
-    "",// TODO
+    "Preferowanych jêzyków",
+    "Idiomas preferidos",
     "Ðñïôåéíüìåíåò ãëþóóåò",
     "Önskade språk",
     "Limbi preferate",
@@ -3313,8 +3334,8 @@
     "Langue préférée",
     "",// TODO
     "Suosikkikieli",
-    "",// TODO
-    "",// TODO
+    "Preferowany jêzyk",
+    "Idioma preferido",
     "Ðñïôåéíüìåíç ãëþóóá",
     "Önskat språk",
     "Limba preferatã",
@@ -3334,8 +3355,8 @@
     "Carte DVB primaire",
     "Hoved DVB-enhet",
     "Ensisijainen DVB-sovitin",
-    "Pierwotny interfejs DVB",
-    "Primer interface DVB",
+    "Pierwszy interfejs DVB",
+    "Interfaz DVB primario",
     "Êýñéá DVB êÜñôá",
     "Primär DVB enhet",
     "Dispozitiv DVB primar",
@@ -3355,8 +3376,8 @@
     "Format d'affichage",
     "",//TODO
     "Näyttömuoto",
-    "",//TODO
-    "",//TODO
+    "Format wy¶wietlania obrazu",
+    "Formato de visualización",
     "ÌïñöÞ áðåéêüíéóçò Âßíôåï",
     "Format för video display",
     "Formatul redãrii video",
@@ -3439,8 +3460,8 @@
     "Format vidéo",
     "TV-Format",
     "Kuvasuhde",
-    "Format telewizyjny",
-    "Formato Vídeo",
+    "Format obrazu",
+    "Formato de vídeo",
     "ÌïñöÞ ïèüíçò",
     "Video format",
     "Format video",
@@ -3460,8 +3481,8 @@
     "Utiliser le Dolby Digital",
     "",//TODO
     "Käytä Dolby Digital -ääntä",
-    "",//TODO
-    "",//TODO
+    "U¿ywaj Dolby Digital",
+    "Usar Dolby Digital",
     "×ñÞóç Þ÷ïõ Dolby Digital",
     "Använd Dolby Digital",
     "Sunet Dolby Digital",
@@ -3481,8 +3502,8 @@
     "Mettre à jour les chaînes",
     "",// TODO
     "Päivitä kanavat",
-    "",// TODO
-    "",// TODO
+    "Aktualizuj kana³y",
+    "Actualizar canales",
     "ÅíçìÝñùóç êáíáëéþí",
     "Uppdatera kanaler",
     "Actualizare canale",
@@ -3502,8 +3523,8 @@
     "noms uniquement",
     "",// TODO
     "vain nimet",
-    "",// TODO
-    "",// TODO
+    "tylko nazwy",
+    "sólo nombres",
     "ìüíï ïíüìáôá",
     "bara namn",
     "doar numele",
@@ -3523,8 +3544,8 @@
     "noms et PIDs",
     "",// TODO
     "nimet ja PID:it",
-    "",// TODO
-    "",// TODO
+    "nazwy i PID-y",
+    "nombres y PIDs",
     "Ïíüìáôá êáß PIDs",
     "namn och PID",
     "nume si PID-uri",
@@ -3532,7 +3553,7 @@
     "",// TODO
     "ÝÐ×ÒÐÝØï Ø PIDë",
     "imena i identifikatore (PIDs)",
-    "nimed ja PID-id",
+    "nimi ja PID-id",
     "navne og PIDs",
   },
   { "add new channels",
@@ -3544,8 +3565,8 @@
     "ajouter chaînes",
     "",// TODO
     "uudet kanavat",
-    "",// TODO
-    "",// TODO
+    "dodawaj nowe kana³y",
+    "añadir canales",
     "ðñïóèÞêç íÝùí êáíáëéþí",
     "lägg till nya kanaler",
     "adãugare canale noi",
@@ -3565,8 +3586,8 @@
     "ajouter transpondeurs",
     "",// TODO
     "uudet transponderit",
-    "",// TODO
-    "",// TODO
+    "dodawaj nowe transpondery",
+    "añadir transponders",
     "ðñïóèÞêç íÝïõ áíáìåôáäüôç",
     "lägg till nya transponders",
     "adãugare transpondere noi",
@@ -3586,8 +3607,8 @@
     "Langues audio",
     "",//TODO
     "Äänen kielet",
-    "",//TODO
-    "",//TODO
+    "Jêzyków d¼wiêku",
+    "Idiomas de audio",
     "Ãëþóóåò Þ÷ïõ",
     "Antal ljudspråk",
     "Limbi sunet",
@@ -3607,8 +3628,8 @@
     "Langue audio",
     "",//TODO
     "Äänen kieli",
-    "",//TODO
-    "",//TODO
+    "Jêzyk d¼wiêku",
+    "Idioma de audio",
     "Ãëþóóá Þ÷ïõ",
     "Ljudspråk",
     "Limba sunetului",
@@ -3649,8 +3670,8 @@
     "Fréquence basse LNB (MHz)",
     "LO-frekvens i lavbåndet (MHz)",
     "LNB-alataajuus (MHz)",
-    "Dolna czestotliwosc LNB (MHz)",
-    "Frecuencia baja LNB (MHz)",
+    "Dolna czêstotliwo¶æ LNB (MHz)",
+    "Frecuencia inferior del LNB (MHz)",
     "ÊÜôù LNB-Óõ÷íüôçôá (MHz)",
     "Undre LNB frekvens (MHz)",
     "Frecvnþã LNB inferioarã (Mhz)",
@@ -3670,8 +3691,8 @@
     "Fréquence haute LNB (MHz)",
     "LO-frekvens i høybåndet (MHz)",
     "LNB-ylätaajuus (MHz)",
-    "Gorna czestotliwosc LNB (MHz)",
-    "Frecuencia alta LNB (MHz)",
+    "Górna czêstotliwo¶æ LNB (MHz)",
+    "Frecuencia superior del LNB (MHz)",
     "¢íù LNB-Óõ÷íüôçôá (MHz)",
     "Övre LNB frekvens (MHz)",
     "Frecvnþã LNB superioarã (MHz)",
@@ -3691,7 +3712,7 @@
     "Utiliser le DiSEqC",
     "Bruk DiSEqC",
     "Käytä DiSEqC-kytkintä",
-    "Uzywac DiSEqC",
+    "U¿ywaj DiSEqC",
     "Utilizar DiSEqC",
     "Åíåñãïðïßçóç DiSEqC",
     "Använd DiSEqC",
@@ -3733,7 +3754,7 @@
     "Marge antérieure (min)",
     "Opptaksmargin start (min)",
     "Aloitusmarginaali (min)",
-    "Poczatkowy czas buforowy (min)",
+    "Margines na pocz±tku (min)",
     "Comenzar grabación antes (min)",
     "Ðñüóèåôïò ÷ñüíïò óôçí áñ÷Þ (ëåðôÜ)",
     "Marginal för start (min)",
@@ -3754,8 +3775,8 @@
     "Marge postérieure (min)",
     "Opptaksmargin slutt (min)",
     "Lopetusmarginaali (min)",
-    "Koncowy czas buforowy (min)",
-    "Cortar grabación después (min)",
+    "Margines na koñcu (min)",
+    "Acabar grabación después (min)",
     "Ðñüóèåôïò ÷ñüíïò óôü ôÝëïò (ëåðôÜ)",
     "Marginal för stopp (min)",
     "Marjã la oprire (min)",
@@ -3775,7 +3796,7 @@
     "Limite primaire",
     "Prioritetsgrense HovedDVB",
     "Ensisijaisen sovittimen prioriteettiraja",
-    "Pierwotny limit",
+    "Podstawowy limit",
     "Límite primario",
     "Ðñïôåýïí üñéï",
     "Primär gräns",
@@ -3784,7 +3805,7 @@
     "Límit primari",
     "¼ØÝ. ßàØÞàØâÕâ ×ÐåÒÐâÐ ÞáÝ. ãáâàÞÙáâÒÐ",
     "Standardno ogranièenje",
-    "Esmase seadme prioriteet",
+    "Esmane prioriteet",
     "Primær grænse",
   },
   { "Setup.Recording$Default priority",
@@ -3796,8 +3817,8 @@
     "Priorité par défaut",
     "Normal prioritet (Timer)",
     "Tallenteen oletusprioriteetti",
-    "Priorytet pierwotny",
-    "Prioridad predefinida",
+    "Domy¶lny priorytet",
+    "Prioridad por defecto",
     "ÐñïêáèïñéóìÝíç ðñïôåñáéüôçôá",
     "Normal prioritet",
     "Prioritate implicitã",
@@ -3817,8 +3838,8 @@
     "Durée de vie par défaut (j)",
     "Normal levetid timer (d)",
     "Tallenteen oletuselinikä (d)",
-    "Pierwotna trwalosc (d)",
-    "Duración predefinida",
+    "Domy¶lny czas ¿ycia (d)",
+    "Duración por defecto (días)",
     "ÐñïêáèïñéóìÝíç äéÜñêåéá ðáñáìïíÞò (ÇìÝñåò)",
     "Normal livstid (dagar)",
     "Timp de pãstrare predefinit (zile)",
@@ -3838,8 +3859,8 @@
     "Priorité des pauses",
     "",// TODO
     "Taukotallenteen prioriteetti",
-    "Priorytet przerwy",
-    "",// TODO
+    "Priorytet pauzy",
+    "Prioridad en modo pausa",
     "Ðñïôåñáéüôçôá äéáëåßììáôïò",
     "Prioritet för direktinspelning",
     "Prioritate pauzã",
@@ -3859,8 +3880,8 @@
     "Durée de vie des pauses (j)",
     "",// TODO
     "Taukotallenteen elinikä (d)",
-    "Okres trwania przerwy (d)",
-    "",// TODO
+    "Czas ¿ycia pauzy (d)",
+    "Duración en modo pausa (días)",
     "ÄéÜñêåéá äéáëåßìáôïò",
     "Livstid för direktinspelning (dagar)",
     "Pãstrarea emisiunilor 'pauzate' (zile)",
@@ -3880,7 +3901,7 @@
     "Utiliser le nom de l'épisode",
     "Bruk episodenavn",
     "Käytä jakson nimeä",
-    "Czy uzywac nazwe epizodu",
+    "U¿ywaj nazwy epizodu",
     "Utilizar nombre de episodo",
     "×ñÞóç ïíüìáôïò åðåéóïäßïõ",
     "Använd episodnamn",
@@ -3901,8 +3922,8 @@
     "Utiliser le VPS",
     "",// TODO
     "Käytä VPS-toimintoa",
-    "",// TODO
-    "",// TODO
+    "U¿ywaj VPS",
+    "Usar servicio VPS",
     "×ñÞóç VPS",
     "Använd VPS",
     "Utilizeazã VPS",
@@ -3922,8 +3943,8 @@
     "Marge VPS",
     "",// TODO
     "VPS-toiminnon aloitusmarginaali (s)",
-    "",// TODO
-    "",// TODO
+    "Margines VPS (s)",
+    "Margen VPS (sg)",
     "Ðåñéèþñéï VPS (ä)",
     "VPS marginal (s)",
     "Marjã de timp la utilizare VPS (s)",
@@ -3943,8 +3964,8 @@
     "Marquage enregistr. immédiats",
     "Markere direkteopptak",
     "Merkitse pikatallenne",
-    "Zaznaczyc natychm. nagranie",
-    "Marcar grabaciones instantáneas",
+    "Zaznaczaj natychm. nagrywanie",
+    "Marcar grabaciones inmediatas",
     "ÅðéëïãÞ ôñÝ÷ïõóáò åããñáöÞò",
     "Märk direktinspelning",
     "Marcheazã înregistrare imediatã",
@@ -3964,8 +3985,8 @@
     "Noms enregistr. immédiats",
     "Navngi direkteopptak",
     "Nimeä pikatallenne",
-    "Nazwac natychm. nagranie",
-    "Nombrar grabaciones instantáneas",
+    "Nazywaj natychm. nagrywanie",
+    "Nombrar grabaciones inmediatas",
     "Ïíïìáóßá ôñÝ÷ïõóáò åããñáöÞò",
     "Namnge direktinspelning",
     "Nume înregistrare imediatã",
@@ -3985,8 +4006,8 @@
     "Durée enregistr. immédiat (min)",
     "",//TODO
     "Pikatallennuksen kesto (min)",
-    "Dlugosc bezposredniego nagrania (min)",
-    "Tiempo de grabación instantánea (min)",
+    "Czas natychm. nagrywania (min)",
+    "Tiempo de grabación inmediata (min)",
     "ÄéÜñêåéá óôãìéáßáò åããñáöÞò (ëåðôÜ)",
     "Direktinspelning längd (min)",
     "Timpul de înregistare imediatã (min)",
@@ -4006,8 +4027,8 @@
     "Taille maxi des fichiers (MB)",
     "Maksimal størrelse på videofiler (MB)",
     "Suurin tiedostokoko (Mt)",
-    "Maks. wielkosc pliku (MB)",
-    "Tamaño máx. de fichero (MB)",
+    "Maksymalny rozmiar pliku (MB)",
+    "Tamaño máximo de fichero (MB)",
     "ÌÝãéóôï ìÝãåèïò áñ÷åßïõ (MB)",
     "Maximal filstorlek för inspelning (MB)",
     "Dimensiune maximã a fiºierului video (MB)",
@@ -4027,8 +4048,8 @@
     "Séparer les séquences éditées",
     "Splitt redigerte filer",
     "Jaottele muokatut tallenteet",
-    "Dzielic montowane pliki",
-    "Quebrar ficheros",
+    "Dziel edytowane pliki",
+    "Partir ficheros editados",
     "ÄéáìÝëéóìüò åðåîåñãáóìÝíùí áñ÷åßùí",
     "Dela upp redigerade filer",
     "Separare fiºiere montate",
@@ -4048,7 +4069,7 @@
     "Mode multi-vitesses",
     "Multispeed modus",
     "Käytä toiston moninopeustilaa",
-    "Tryb wielopredkosciowy",
+    "Tryb wieloprêdko¶ciowy",
     "Modo multi-velocidad",
     "Ìåèïäïò ðïëëáðëÞò ôá÷ýôçôáò",
     "Multispeed mode",
@@ -4069,8 +4090,8 @@
     "Affichage mode de lecture",
     "Vis avspillingsmodus",
     "Näytä toiston tila",
-    "Wyswietlac status odtwarzania",
-    "Mostrar modo de replay",
+    "Pokazuj tryb odtwarzania",
+    "Mostrar modo de reproducción",
     "¸íäåéîç êáôÜóôáóçò áíáìåôÜäïóçò",
     "Visa uppspelningsläge",
     "Afiºeazã redarea",
@@ -4090,8 +4111,8 @@
     "ID de reprise",
     "Resume ID",// TODO
     "Tallenteen paluutunniste",
-    "ID odtwarzania",
-    "Continuar ID",
+    "ID wznowienia",
+    "ID de continuación",
     "ID áíáìåôÜäïóçò",
     "Återuppta ID",
     "Identificator continuare",
@@ -4111,8 +4132,8 @@
     "MinEventTimeout (min)",
     "Minste hendelsespause (min)",
     "Tapahtuman odotusaika (min)",
-    "Min. czas do nast. akcji (Event) (min)",
-    "Tiempo mínimo pausa (min)",
+    "Minimalny czas audycji (min)",
+    "Tiempo mín. antes de un evento (m)",
     "ÅëÜ÷éóôïò ÷ñÜíïò ðáñåìâïëÞò (ëåðôÜ)",
     "Minsta händelse-pause (min)",
     "Duratã minimã emisiuni (min)",
@@ -4132,8 +4153,8 @@
     "Durée minimale d'inact. (min)",
     "Minimumstid med inaktivitet (min)",
     "Käyttäjätoiminnon odotusaika (min)",
-    "Min. brak aktywnosci uzytkownika (min)",
-    "Tiempo mínimo inactividad (min)",
+    "Minimalny czas nieaktywno¶ci (min)",
+    "Tiempo mín. de inactividad (m)",
     "ÅëÜ÷éóôïò ÷ñüíïò áíáìïíÞò (ëåðôÜ)",
     "Minsta användar-inaktivitet (min)",
     "Durata minimã de inactivitate (min)",
@@ -4153,8 +4174,8 @@
     "Temps maxi SVDRP (s)",
     "Ubrukt SVDRP-levetid (s)",
     "SVDRP-komennon odotusaika (s)",
-    "Min. brak aktywnosci SVDRP (s)",
-    "SVDRP Timeout (s)",
+    "Czas oczekiwania na SVDRP (s)",
+    "Tiempo de espera de SVDRP (sg)",
     "SVDRP äéáêïðÞ (ä)",
     "SVDRP Timeout (s)",
     "Timeout SVDRP (sec)",
@@ -4174,8 +4195,8 @@
     "Prise en compte chaîne (s)",
     "",// TODO
     "Kanavavalinnan odotusaika (s)",
-    "",// TODO
-    "",// TODO
+    "Czas oczekiwania na zap (s)",
+    "Considerar canal como visto (sg)",
     "ÆÜðéíãê äéáêïðÞ (ä)",
     "Zap timeout(s)",
     "Interval zapping (s)",
@@ -4196,8 +4217,8 @@
     "LMMJVSD",
     "MTOTFLS",
     "MTKTPLS",
-    "PWSCPSN",
-    "LMMJVSD",
+    "PW¦CPSN",
+    "LMXJVSD",
     "ÄÔÔÐÐÓÊ",
     "MTOTFLS",
     "LMMJVSD",
@@ -4217,7 +4238,7 @@
     "LunMarMerJeuVenSamDim",
     "ManTirOnsTorFreLørSøn",
     "Ma Ti Ke To Pe La Su ",
-    "PonWtoSroCzwPiaSobNie",
+    "PonWto¦roCzwPi±SobNie",
     "LunMarMieJueVieSabDom",
     "ÄåõÔñßÔåôÐÝìÐáñÓÜâKõñ",
     "MånTisOnsTorFreLörSön",
@@ -4239,8 +4260,8 @@
     " aàbcçdeéèêfghiîjklmnoôpqrstuùûvwxyz0123456789-.#~,/_@",
     "",// TODO
     " abcdefghijklmnopqrstuvwxyzåäö0123456789-.#~,/_@",
-    " abcdefghijklmnopqrstuvwxyz0123456789-.#~,/_@",
-    " aábcdeéfghiíjklmnñoópqrstuúvwxyz0123456789-.#~,/_@",
+    " a±bcædeêfghijkl³mnñoópqrs¶tuvwxyz¼¿0123456789-.#~,/_@",
+    " aábcçdeéfghiíjklmnñoópqrstuúvwxyz0123456789-.#~,/_@",
     " áÜâãäåÝæçÞèéßêëìíîïüðñóòôõýö÷øùþ0123456789-.#~,/_@abcdefghijklmnopqrstuvwxyz",
     " abcdefghijklmnopqrstuvwxyzåäö0123456789-.#~,/_@",
     " aãâbcdefghiîjklmnopqrsºtþuvwxyz0123456789-.#~,/_@",
@@ -4261,6 +4282,8 @@
     "",//TODO
     "",//TODO
     " 0\t-.#~,/_@1\tabcäå2\tdef3\tghi4\tjkl5\tmnoö6\tpqrs7\ttuv8\twxyz9",
+    " 0\t-.#~,/_@1\tabc2±æ\tdef3ê\tghi4\tjkl5³\tmno6ñó\tpqrs7¶\ttuv8\twxyz9¼¿",
+    " 0\t-.#~,/_@1\tabcáç2\tdefé3\tghií4\tjkl5\tmnoñó6\tpqrs7\ttuvú8\twxyz9",
     "",//TODO
     "",//TODO
     "",//TODO
@@ -4268,9 +4291,7 @@
     "",//TODO
     "",//TODO
     "",//TODO
-    "",//TODO
-    "",//TODO
-    "",//TODO
+    " 0\t-.#~,/_@1\tabcäå2\tdef3\tghi4\tjkl5\tmnoõö6\tpqrsð7\ttuvü8\twxyzþ9",
     "",//TODO
   },
   // Learning keys:
@@ -4283,8 +4304,8 @@
     "Apprentissage des codes de télécommande",
     "Lære fjernkontrolltaster",
     "Kaukosäätimen opettaminen",
-    "Nauka kodu pilota",
-    "Aprendiendo teclas del telemando",
+    "Nauka klawiszy pilota",
+    "Aprendiendo teclas del mando",
     "ÅêìÜèçóç ðëÞêôñùí ôçëå÷åéñéóìïý",
     "Inlärning av fjärrkontrollsknappar",
     "Învãþare taste telecomandã",
@@ -4304,8 +4325,8 @@
     "Phase 1: Détection du type de code",
     "Fase 1: Finne fjernkontroll-kodetype",
     "Vaihe 1: Koodauksen tunnistaminen",
-    "Faza 1: Detekcja typu kodu",
-    "Fase 1: Detectando tipo de receptor",
+    "Etap 1: Wykrywanie rodzaju kodu pilota",
+    "Fase 1: Detectando tipo de mando",
     "ÖÜóç 1: Áíß÷íåõóç êþäéêá RC",
     "Steg1: identifiering av kod",
     "Faza 1: Detecþia tipului telecomenzii",
@@ -4325,8 +4346,8 @@
     "Appuyer sur une touche de la télécommande",
     "Trykk en av tastene på fjernkontrollen",
     "Paina mitä tahansa kaukosäätimen näppäintä",
-    "Nacisnac klawisz pilota",
-    "Pulse una tecla en el telemando",
+    "Naci¶nij dowolny klawisz na pilocie",
+    "Pulse cualquier tecla en el mando",
     "Ðßåóå Ýíá ðëÞêôñï óôï ôçëå÷åéñéóôÞñéï",
     "Tryck valfri tangent på fjärrkontrollen",
     "Apãsaþi o tastã pe telecomandã",
@@ -4346,8 +4367,8 @@
     "Code de la télécommande détecté!",
     "Fjernkontroll-kodetype funnet!",
     "Näppäinpainallus vastaanotettu!",
-    "Kod pilota zostal poznany!",
-    "¡Código detectado!",
+    "Wykryto kod pilota!",
+    "¡Código RC detectado!",
     "ÂñÝèçêå êþäéêáò RC!",
     "Koden detekterad!",
     "S-a detectat tipul telecomenzii!",
@@ -4367,7 +4388,7 @@
     "N'appuyer sur aucune touche ...",
     "Ikke trykk på noen av tastene...",
     "Älä paina kaukosäätimen näppäimiä...",
-    "Nie naciskac klawiszy...",
+    "Nie naciskaj teraz ¿adnego klawisza...",
     "No pulse ninguna tecla...",
     "ÌÞí ðáôÜò ðëÞêôñá...",
     "Tryck inte på någon knapp...",
@@ -4388,7 +4409,7 @@
     "Phase 2: Apprentissage des codes des touches",
     "Fase 2: Lære spesifikke tastekoder",
     "Vaihe 2: Näppäinkoodien opettelu",
-    "Faza 2: Nauka pojedynczych klawiszy",
+    "Etap 2: Nauka konkretnych kodów klawiszy",
     "Fase 2: Aprendiendo códigos específicos",
     "Öáóç 2: ÅêìÜèçóç ìåìïíïìÝíùí ðëÞêôñùí",
     "Fas 2: Inlärning av specifika knapp-koder",
@@ -4409,8 +4430,8 @@
     "Appuyer sur la touche '%s'",
     "Trykk tasten for '%s'",
     "Paina näppäintä toiminnolle '%s'",
-    "Nacisnac klawisz dla '%s'",
-    "Pulsar tecla para '%s'",
+    "Naci¶nij klawisz dla '%s'",
+    "Pulse la tecla para '%s'",
     "Ðßåóå ôï ðëÞêôñï ãéÜ '%s'",
     "Tryck på knappen för '%s'",
     "Apãsaþi tasta pentru '%s'",
@@ -4430,7 +4451,7 @@
     "Appuyer sur 'Haut' pour confirmer",
     "Trykk 'Opp' for å bekrefte",
     "Hyväksy painamalla 'Ylös'",
-    "Nacisnac 'Gora' do potwierdzenia",
+    "Naci¶nij 'Do góry' aby potwierdziæ",
     "Pulse 'Arriba' para confirmar",
     "Ðßåóå 'ðÜíù' ãéÜ áðïäï÷Þ",
     "Tryck 'Upp' för att bekräfta",
@@ -4451,8 +4472,8 @@
     "Appuyer sur 'Bas' pour continuer",
     "Trykk Ned' for å fortsette",
     "Jatka painamalla 'Alas'",
-    "Nacisnac 'Dol' zeby kontynuowac",
-    "Pulse 'Abajo' para confirmar",
+    "Naci¶nij 'Na dó³' aby kontynuowaæ",
+    "Pulse 'Abajo' para continuar",
     "Ðßåóå 'êÜôù' ãéÜ óõíÝ÷åéá",
     "Tryck 'Ner' för att bekräfta",
     "Apãsaþi 'Jos' pentru continuare",
@@ -4472,7 +4493,7 @@
     "(Appuyer sur 'Haut' pour revenir en arrière)",
     "(trykk 'Opp' for å gå tilbake)",
     "(palaa takaisin painamalla 'Ylös')",
-    "(Nacisnac 'Gora' cofa)",
+    "(naci¶nij 'Do góry' aby siê cofn±æ)",
     "(Pulse 'Arriba' para retornar)",
     "(Ðßåóå 'ðÜíù' ãéÜ åðéóôñïöÞ",
     "(Tryck 'Upp' för att backa)",
@@ -4493,8 +4514,8 @@
     "(Appuyer sur 'Bas' pour terminer)",
     "(trykk 'Ned' for å avslutte innlæring)",
     "(lopeta opettaminen painamalla 'Alas')",
-    "(Nacisnac 'Dol' by zakonczyc)",
-    "(Pulse 'Abajo' para terminar programación teclas)",
+    "(naci¶nij 'Na dó³' aby zakoñczyæ definiowanie)",
+    "(Pulse 'Abajo' para terminar el aprendizaje)",
     "(Ðßåóå 'êÜôù' ãéÜ ôåñìáôéóìü äçëþóåùí ðëÞêôñùí)",
     "(Tryck 'Ner' för att avsluta inlärningen)",
     "(Apãsaþi 'Jos' pentru terminare)",
@@ -4514,8 +4535,8 @@
     "('Menu' pour passer cette touche)",
     "",// TODO
     "näppäimen puuttuessa paina 'Valikko'",
-    "(Nacisnac 'Menu' by ominac klawisz)",
-    "Pulse 'Menu' para saltarse esta tecla",
+    "(naci¶nij 'Menu' aby pomin±æ ten klawisz)",
+    "Pulse 'Menú' para omitir esta tecla",
     "Ðßåóå 'ìåíïý' ãéá ðñïóðÝñáóç áõôïý ôïý ðëÞêôñïõ",
     "(Tryck 'Meny' för att hoppa över knappen.)",
     "Apãsaþi 'Meniu' pentru a sãri peste aceastã tastã",
@@ -4535,8 +4556,8 @@
     "Phase 3: Sauvegarde des codes des touches",
     "Fase 3: Lagre tastekoder",
     "Vaihe 3: Näppäinkoodien tallentaminen",
-    "Faza 3: Zapamietac Kod",
-    "Fase 3: Guardar códigos de teclas",
+    "Etap 3: Zapisywanie kodów klawiszy",
+    "Fase 3: Guardando los códigos de teclas",
     "Öáóç 3: ÁðïèÞêåõóç êùäéêþí",
     "Fas 3: Spara knappkoder",
     "Faza 3: Salvarea codurilor de taste",
@@ -4556,7 +4577,7 @@
     "Appuyer sur 'Haut' pour sauvegarder, 'Bas' pour annuler",
     "Trykk 'Opp' for å lagre, 'Ned' for å avbryte",
     "Paina 'Ylös' tallentaaksesi ja 'Alas' peruuttaaksesi",
-    "'Gora' zapamietuje, 'Dol' przerywa",
+    "Naci¶nij 'Do góry' aby zapisaæ, 'Na dó³' - aby anulowaæ",
     "Pulse 'Arriba' para guardar, 'Abajo' para anular",
     "Ðßåóå 'ÐÜíù' ãéá áðïèÞêåõóç, 'ÊÜôù' ãéá áêýñùóç",
     "Tryck 'Upp' för att spara eller 'Ner' för att avsluta.",
@@ -4578,7 +4599,7 @@
     "Haut",
     "Opp",
     "Ylös",
-    "Gora",
+    "Do góry",
     "Arriba",
     "ÐÜíù",
     "Upp",
@@ -4599,7 +4620,7 @@
     "Bas",
     "Ned",
     "Alas",
-    "Dol",
+    "Na dó³",
     "Abajo",
     "ÊÜôù",
     "Ner",
@@ -4621,7 +4642,7 @@
     "Meny",
     "Valikko",
     "Menu",
-    "Menu",
+    "Menú",
     "Ìåíïý",
     "Meny",
     "Meniu",
@@ -4683,7 +4704,7 @@
     "Gauche",
     "Venstre",
     "Vasemmalle",
-    "Lewo",
+    "W lewo",
     "Izquierda",
     "ÁñéóôåñÜ",
     "Vänster",
@@ -4704,7 +4725,7 @@
     "Droite",
     "Høyre",
     "Oikealle",
-    "Prawo",
+    "W prawo",
     "Derecha",
     "ÄåîéÜ",
     "Höger",
@@ -4767,7 +4788,7 @@
     "Jaune",
     "Gul",
     "Keltainen",
-    "Zolty",
+    "¯ó³ty",
     "Amarillo",
     "Êßôñéíï",
     "Gul",
@@ -4809,8 +4830,8 @@
     "Info",
     "",//TODO
     "Tiedot",
-    "",//TODO
-    "",//TODO
+    "Info",
+    "Info",
     "Ðëçñïöïñßåò",
     "Info",
     "Info",
@@ -4830,7 +4851,7 @@
     "Lecture",
     "",// TODO
     "Toista",
-    "Odtworzenie",
+    "Odtwórz",
     "Reproducir",
     "ÁíáðáñáãùãÞ",
     "Spela upp",
@@ -4851,7 +4872,7 @@
     "Pause",
     "",// TODO
     "Tauko",
-    "Przerwa",
+    "Pauza",
     "Pausa",
     "Ðáýóç",
     "Pausa",
@@ -4893,7 +4914,7 @@
     "Enregistrement",
     "",// TODO
     "Tallenna",
-    "Nagrywac",
+    "Nagrywaj",
     "Grabar",
     "EããñáöÞ",
     "Spela in",
@@ -4914,8 +4935,8 @@
     "Avance rapide",
     "",// TODO
     "Pikakelaus >>",
-    "Naprzod",
-    "Adelante rápido",
+    "Do przodu",
+    "Avance rápido",
     "Ðñïþèçóç åìðñüò",
     "Snabbspolning framåt",
     "Derulare înainte",
@@ -4935,8 +4956,8 @@
     "Retour rapide",
     "",// TODO
     "Pikakelaus <<",
-    "Wstecz",
-    "Atrás rápido",
+    "Do ty³u",
+    "Retroceso rápido",
     "Ðñïþèçóç ðßóù",
     "Snabbspolning bakåt",
     "Derulare înapoi",
@@ -4956,8 +4977,8 @@
     "Veille", // This one caused some bug reports ;)
     "Power",
     "Virtakytkin",
-    "Wylaczyc",
-    "Corriente",
+    "Wy³±cz",
+    "Apagar",
     "Këåßóéìï",
     "På/Av",
     "Închidere",
@@ -4977,8 +4998,8 @@
     "Chaîne+",
     "",// TODO
     "Kanava +",
-    "Kanal+",
-    "Canal +",
+    "Kana³+",
+    "Canal+",
     "ÊáíÜëé+",
     "Kanal+",
     "Canal+",
@@ -4998,8 +5019,8 @@
     "Chaîne-",
     "",// TODO
     "Kanava -",
-    "Kanal-",
-    "Canal -",
+    "Kana³-",
+    "Canal-",
     "ÊáíÜëé-",
     "Kanal-",
     "Canal-",
@@ -5019,7 +5040,7 @@
     "Volume+",
     "Volum+",
     "Äänenvoimakkuus +",
-    "Glosnej",
+    "G³o¶niej",
     "Volumen+",
     "¸íôáóç+",
     "Volym+",
@@ -5061,7 +5082,7 @@
     "Coupure du son",
     "Lyd av",
     "Äänetön",
-    "Cisza",
+    "Wycisz",
     "Mudo",
     "Óéùðçëü",
     "Ljud Av",
@@ -5082,8 +5103,8 @@
     "Audio",
     "",// TODO
     "Ääni",
-    "",// TODO
-    "",// TODO
+    "D¼wiêk",
+    "Audio",
     "¹÷ïò",
     "Ljud",
     "Sunet",
@@ -5146,7 +5167,7 @@
     "off",
     "",// TODO
     "pois",
-    "wyl.",
+    "wy³±cz",
     "off",
     "êëåéóôü",
     "av",
@@ -5167,7 +5188,7 @@
     "aucun",
     "",// TODO
     "tyhjä",
-    "zaden",
+    "brak",
     "ninguno",
     "êáíÝíá",
     "ingen",
@@ -5209,8 +5230,8 @@
     "haut",
     "øvre",
     "yläreuna",
-    "gora",
-    "parte superior",
+    "góra",
+    "arriba",
     "ðÜíù",
     "övre",
     "sus",
@@ -5230,8 +5251,8 @@
     "bas",
     "nedre",
     "alareuna",
-    "dol",
-    "parte inferior",
+    "dó³",
+    "abajo",
     "êÜôù",
     "undre",
     "jos",
@@ -5251,7 +5272,7 @@
     "Disque",
     "Disk",
     "Levy",
-    "Disk",
+    "Dysk",
     "Disco",
     "Äßóêïò",
     "Disk",
@@ -5272,7 +5293,7 @@
     "restant",
     "ledig",
     "vapaana",
-    "pozostalo",
+    "wolnego",
     "libre",
     "Åëåýèåñïò",
     "ledigt",
@@ -5294,7 +5315,7 @@
     "Hopp: ",
     "Siirry: ",
     "Skok: ",
-    "Salta a: ",
+    "Saltar: ",
     "ÔïðïèÝôçóç: ",
     "Hopp: ",
     "Salt la: ",
@@ -5314,7 +5335,7 @@
     "Volume ",
     "Volum ",
     "Äänenvoimakkuus ",
-    "Glosnosc ",
+    "G³o¶no¶æ ",
     "Volumen ",
     "¸íôáóç ",
     "Volym ",
@@ -5335,7 +5356,7 @@
     " Arrêter la lecture",
     " Stopp avspilling",
     " Lopeta toisto",
-    " Zatrzymac odtwarzanie",
+    " Zatrzymaj odtwarzanie",
     " Parar reprodución",
     " ÔÝëïò áíáðáñáãùãÞò",
     " Avsluta uppspelning",
@@ -5356,7 +5377,7 @@
     " Arrêter l'enregistrement ",
     " Stopp opptak fra ",
     " Lopeta tallennus ",
-    " Zatrzymac nagrywanie ",
+    " Zatrzymaj nagrywanie ",
     " Parar grabación ",
     " ÔÝëïò åããáöÞò ",
     " Avsluta inspelning ",
@@ -5377,8 +5398,8 @@
     " Annuler le montage",
     " Avbryt redigering",
     " Peru muokkaus",
-    " Przerwac montaz",
-    " Anular modificación ",
+    " Anuluj edycjê",
+    " Anular edición",
     " Áêýñùóç åðåîåñãáóßáò",
     " Avbryt redigering",
     " Opreºte montajul înregistrãrii",
@@ -5398,8 +5419,8 @@
     "Changement de carte DVB primaire...",
     "Bytter første DVB-enhet...",
     "Vaihdetaan ensisijaista DVB-sovitinta...",
-    "Pierwszy interfejs DVB przelacza...",
-    "Cambio al interface DVB primario...",
+    "Przê³±czam na pierwszy interfejs DVB...",
+    "Cambiando el interfaz DVB primario...",
     "Ç êýñéá DVB êÜñôá áëëÜæåé...",
     "Byter primär DVB enhet...",
     "Comut dispozitiv DVB primar...",
@@ -5419,8 +5440,8 @@
     "Haut/Bas -> nouvelle place - OK -> déplacer",
     "Opp/Ned for ny plass - OK for å flytte",
     "'Ylös/Alas' uusi paikka - 'OK' hyväksy",
-    "Gora/Dol na nowa pozycje - Ok zmienia",
-    "Arriba/Abajo para el nuevo lugar - OK para mover",
+    "Do góry/Na dó³ na now± pozycjê - Ok zatwierdza",
+    "Arriba/Abajo para mover - OK para confirmar",
     "ÐÜíù/ÊÜôù ãéÜ íÝá èÝóç. ÌåôÜ ÏÊ",
     "Upp/Ner för nya platsen - därefter OK för att flytta",
     "Sus/Jos pentru noua locaþie - OK pentru a muta",
@@ -5440,8 +5461,8 @@
     "Opération de montage lancée",
     "Redigeringsprosess startet",
     "Muokkaus aloitettu",
-    "Uruchomiony proces montazu",
-    "Proceso modificación iniciado",
+    "Proces edycji rozpoczêty",
+    "Proceso de edición iniciado",
     "Áñ÷éóå ç åðåîåñãáóßá",
     "Redigeringen startar",
     "Montajul înregistrãrii a început",
@@ -5461,8 +5482,8 @@
     "Montage terminé",
     "Redigeringsprosess avsluttet",
     "Muokkaus valmis",
-    "Proces montazu zakonczony",
-    "Proceso de modificación terminado",
+    "Proces edycji zakoñczony",
+    "Proceso de edición terminado",
     "Ç åðåîåñãáóßá ôåëåßùóå",
     "Redigering avslutad",
     "Montajul înregistrãrii s-a terminat",
@@ -5470,7 +5491,7 @@
     "Procés d'edició finalitzat",
     "¼ÞÝâÐÖ ÞÚÞÝçÕÝ",
     "Rezanje zavr¹eno",
-    "Redigeerimine on lõpetatud",
+    "Redigeerimine lõpetatud",
     "Redigeringsproces afsluttet",
   },
   { "Editing process failed!",
@@ -5482,8 +5503,8 @@
     "Echec du montage!",
     "Feil under redigering!",
     "Muokkaus epäonnistui!",
-    "Bledny proces montazu!",
-    "Modificación ha fallado!",
+    "Proces edycji nie powiód³ siê!",
+    "¡Proceso de edición fallido!",
     "Ç åðåîåñãáóßá áðÝôõ÷å!",
     "Redigeringsprocessen misslyckades",
     "Montajul înregistrãrii a eºuat",
@@ -5503,6 +5524,8 @@
     "",//TODO
     "",//TODO
     "Tallennus aloitettu",
+    "Rozpoczêto nagrywanie",
+    "Iniciando grabación",
     "",//TODO
     "",//TODO
     "",//TODO
@@ -5510,9 +5533,7 @@
     "",//TODO
     "",//TODO
     "",//TODO
-    "",//TODO
-    "",//TODO
-    "",//TODO
+    "Salvestamine algas",
     "",//TODO
   },
   { "Pausing live video...",
@@ -5524,8 +5545,8 @@
     "Pause de l'émission en direct...",
     "",// TODO
     "Pysäytetään lähetys...",
-    "Zatrzymany program biezacy...",
-    "Emisión en directo parada...",
+    "Pauzujê program na ¿ywo...",
+    "Pausa de la emisión en directo...",
     "ÐÜãùìá æùíôáíïý óÞìáôïò",
     "Pausar direktinspelningen",
     "Trec în pauzã emisiunea transmisã...",
@@ -5545,8 +5566,8 @@
     "Mise à jour du guide des programmes",
     "",// TODO
     "Ohjelmaoppaan päivitys aloitettu",
-    "",// TODO
-    "",// TODO
+    "Rozpoczynam skanowanie EPG",
+    "Iniciando la exploración de EPG",
     "Áñ÷Þ óÜñùóç EPG",
     "Påbörjar EPG skanning",
     "Pornesc achiziþia EPG",
@@ -5566,7 +5587,7 @@
     "Ce plugin n'a pas de paramètres!",
     "",// TODO
     "Tällä laajennoksella ei ole asetuksia!",
-    "Ten plugin niema parametrow!",
+    "Ta wtyczka nie ma ¿adnych ustawieñ!",
     "Este plugin no admite configuración",
     "ÁõôÞ ç åðÝêôáóç äåí Ý÷åé ðáñÜìåôñïõò!",
     "Den här modulen har inga parametrar",
@@ -5587,8 +5608,8 @@
     "VDR Classique",// TODO
     "",// TODO
     "Klassinen VDR",
-    "",// TODO
-    "",// TODO
+    "Klasyczny VDR",
+    "VDR clásico",
     "Êëáóéêü VDR",
     "Klassisk VDR",
     "VDR clasic",
@@ -5608,8 +5629,8 @@
     "Consoles ST:TNG",
     "",// TODO
     "ST:TNG konsoli",
-    "",// TODO
-    "",// TODO
+    "Panel ST:TNG",
+    "Paneles ST:TNG",
     "ÌïñöÝò ST:TNG",
     "ST:TNG konsoll",
     "Cons. ST:TNG",
@@ -5629,8 +5650,8 @@
     "Sans titre",
     "",// TODO
     "Ei esitystä",
-    "",// TODO
-    "",// TODO
+    "Bez tytu³u",
+    "Sin título",
     "×ùñßò Ôßôëï",
     "ingen titel",
     "Fãrã titlu",
diff -ruN vdr-1.3.39/keys.c vdr-1.3.40/keys.c
--- vdr-1.3.39/keys.c	2006-01-05 16:39:26.000000000 +0100
+++ vdr-1.3.40/keys.c	2006-01-16 18:01:25.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: keys.c 1.10 2006/01/05 15:39:26 kls Exp $
+ * $Id: keys.c 1.11 2006/01/16 17:01:25 kls Exp $
  */
 
 #include "keys.h"
@@ -250,9 +250,11 @@
 
 const cKeyMacro *cKeyMacros::Get(eKeys Key)
 {
-  for (cKeyMacro *k = First(); k; k = Next(k)) {
-      if (*k->Macro() == Key)
-         return k;
-      }
+  if (Key != kNone) {
+     for (cKeyMacro *k = First(); k; k = Next(k)) {
+         if (*k->Macro() == Key)
+            return k;
+         }
+     }
   return NULL;
 }
diff -ruN vdr-1.3.39/menu.c vdr-1.3.40/menu.c
--- vdr-1.3.39/menu.c	2006-01-15 16:02:36.000000000 +0100
+++ vdr-1.3.40/menu.c	2006-01-22 17:06:39.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: menu.c 1.396 2006/01/15 15:02:36 kls Exp $
+ * $Id: menu.c 1.403 2006/01/22 16:06:39 kls Exp $
  */
 
 #include "menu.h"
@@ -36,6 +36,8 @@
 #define MAXRECORDCONTROLS (MAXDEVICES * MAXRECEIVERS)
 #define MAXINSTANTRECTIME (24 * 60 - 1) // 23:59 hours
 #define MAXWAITFORCAMMENU 4 // seconds to wait for the CAM menu to open
+#define MINFREEDISK       300 // minimum free disk space required to start recording
+#define NODISKSPACEDELTA  300 // seconds between "Not enough disk space to start recording!" messages
 
 #define CHNUMWIDTH  (numdigits(Channels.MaxNumber()) + 1)
 
@@ -2996,9 +2998,12 @@
 
 #define DIRECTCHANNELTIMEOUT 1000 //ms
 
+cDisplayChannel *cDisplayChannel::currentDisplayChannel = NULL;
+
 cDisplayChannel::cDisplayChannel(int Number, bool Switched)
 :cOsdObject(true)
 {
+  currentDisplayChannel = this;
   group = -1;
   withInfo = !Switched || Setup.ShowInfoOnChSwitch;
   displayChannel = Skins.Current()->DisplayChannel(withInfo);
@@ -3017,12 +3022,15 @@
 cDisplayChannel::cDisplayChannel(eKeys FirstKey)
 :cOsdObject(true)
 {
+  currentDisplayChannel = this;
   group = -1;
   number = 0;
+  timeout = true;
   lastPresent = lastFollowing = NULL;
   lastTime.Set();
   withInfo = Setup.ShowInfoOnChSwitch;
   displayChannel = Skins.Current()->DisplayChannel(withInfo);
+  channel = Channels.GetByNumber(cDevice::CurrentChannel());
   ProcessKey(FirstKey);
 }
 
@@ -3030,6 +3038,7 @@
 {
   delete displayChannel;
   cStatus::MsgOsdClear();
+  currentDisplayChannel = NULL;
 }
 
 void cDisplayChannel::DisplayChannel(void)
@@ -3063,14 +3072,27 @@
 
 void cDisplayChannel::Refresh(void)
 {
-  channel = Channels.GetByNumber(cDevice::CurrentChannel());
   DisplayChannel();
   displayChannel->SetEvents(NULL, NULL);
-  lastTime.Set();
+}
+
+cChannel *cDisplayChannel::NextAvailableChannel(cChannel *Channel, int Direction)
+{
+  if (Direction) {
+     while (Channel) {
+           Channel = Direction > 0 ? Channels.Next(Channel) : Channels.Prev(Channel);
+           if (Channel && !Channel->GroupSep() && cDevice::GetDevice(Channel, 0))
+              return Channel;
+           }
+     }
+  return NULL;
 }
 
 eOSState cDisplayChannel::ProcessKey(eKeys Key)
 {
+  cChannel *NewChannel = NULL;
+  if (Key != kNone)
+     lastTime.Set();
   switch (Key) {
     case k0:
          if (number == 0) {
@@ -3081,31 +3103,32 @@
     case k1 ... k9:
          if (number >= 0) {
             number = number * 10 + Key - k0;
-            if (number > 0) {
-               channel = Channels.GetByNumber(number);
-               displayChannel->SetEvents(NULL, NULL);
-               withInfo = false;
-               DisplayChannel();
-               lastTime.Set();
-               // Lets see if there can be any useful further input:
-               int n = channel ? number * 10 : 0;
-               cChannel *ch = channel;
-               while (ch && (ch = Channels.Next(ch)) != NULL) {
-                     if (!ch->GroupSep()) {
-                        if (n <= ch->Number() && ch->Number() <= n + 9) {
-                           n = 0;
-                           break;
-                           }
-                        if (ch->Number() > n)
-                           n *= 10;
+            channel = Channels.GetByNumber(number);
+            displayChannel->SetEvents(NULL, NULL);
+            withInfo = false;
+            DisplayChannel();
+            // Lets see if there can be any useful further input:
+            int n = channel ? number * 10 : 0;
+            int m = 10;
+            cChannel *ch = channel;
+            while (ch && (ch = Channels.Next(ch)) != NULL) {
+                  if (!ch->GroupSep()) {
+                     if (n <= ch->Number() && ch->Number() < n + m) {
+                        n = 0;
+                        break;
+                        }
+                     if (ch->Number() > n) {
+                        n *= 10;
+                        m *= 10;
                         }
                      }
-               if (n > 0) {
-                  // This channel is the only one that fits the input, so let's take it right away:
-                  displayChannel->Flush(); // makes sure the user sees his last input
-                  Channels.SwitchTo(number);
-                  return osEnd;
                   }
+            if (n > 0) {
+               // This channel is the only one that fits the input, so let's take it right away:
+               displayChannel->Flush(); // makes sure the user sees his last input
+               NewChannel = channel;
+               withInfo = true;
+               number = 0;
                }
             }
          break;
@@ -3136,18 +3159,27 @@
                   group = -1;
                }
             }
-         lastTime.Set();
          break;
     case kUp|k_Repeat:
     case kUp:
     case kDown|k_Repeat:
     case kDown:
-         cDevice::SwitchChannel(NORMALKEY(Key) == kUp ? 1 : -1);
-         // no break here
     case kChanUp|k_Repeat:
     case kChanUp:
     case kChanDn|k_Repeat:
-    case kChanDn:
+    case kChanDn: {
+         eKeys k = NORMALKEY(Key);
+         cChannel *ch = NextAvailableChannel(channel, (k == kUp || k == kChanUp) ? 1 : -1);
+         if (ch)
+            channel = ch;
+         }
+         // no break here
+    case kUp|k_Release:
+    case kDown|k_Release:
+    case kChanUp|k_Release:
+    case kChanDn|k_Release:
+         if (!(Key & k_Repeat) && channel)
+            NewChannel = channel;
          withInfo = true;
          group = -1;
          number = 0;
@@ -3155,43 +3187,57 @@
          break;
     case kNone:
          if (number && lastTime.Elapsed() > DIRECTCHANNELTIMEOUT) {
-            if (Channels.GetByNumber(number))
-               Channels.SwitchTo(number);
-            else {
-               number = 0;
-               channel = NULL;
-               DisplayChannel();
-               lastTime.Set();
-               return osContinue;
-               }
-            return osEnd;
+            channel = Channels.GetByNumber(number);
+            if (channel)
+               NewChannel = channel;
+            withInfo = true;
+            number = 0;
+            Refresh();
+            lastTime.Set();
             }
          break;
     //TODO
     //XXX case kGreen:  return osEventNow;
     //XXX case kYellow: return osEventNext;
-    case kOk:     if (group >= 0) {
-                     channel = Channels.Get(Channels.GetNextNormal(group));
-                     if (channel)
-                        Channels.SwitchTo(channel->Number());
-                     withInfo = true;
-                     group = -1;
-                     Refresh();
-                     break;
-                     }
-                  else if (number > 0 && channel)
-                     Channels.SwitchTo(number);
-                  return osEnd;
-    default:      if ((Key & (k_Repeat | k_Release)) == 0) {
-                     cRemote::Put(Key);
-                     return osEnd;
-                     }
+    case kOk:
+         if (group >= 0) {
+            channel = Channels.Get(Channels.GetNextNormal(group));
+            if (channel)
+               NewChannel = channel;
+            withInfo = true;
+            group = -1;
+            Refresh();
+            }
+         else if (number > 0) {
+            channel = Channels.GetByNumber(number);
+            if (channel)
+               NewChannel = channel;
+            withInfo = true;
+            number = 0;
+            Refresh();
+            }
+         else
+            return osEnd;
+         break;
+    default:
+         if ((Key & (k_Repeat | k_Release)) == 0) {
+            cRemote::Put(Key);
+            return osEnd;
+            }
     };
   if (!timeout || lastTime.Elapsed() < (uint64)(Setup.ChannelInfoTime * 1000)) {
-     if (!number && group < 0 && channel && channel->Number() != cDevice::CurrentChannel())
-        Refresh(); // makes sure a channel switch through the SVDRP CHAN command is displayed
+     if (Key == kNone && !number && group < 0 && !NewChannel && channel && channel->Number() != cDevice::CurrentChannel()) {
+        // makes sure a channel switch through the SVDRP CHAN command is displayed
+        channel = Channels.GetByNumber(cDevice::CurrentChannel());
+        Refresh();
+        lastTime.Set();
+        }
      DisplayInfo();
      displayChannel->Flush();
+     if (NewChannel) {
+        Channels.SwitchTo(NewChannel->Number());
+        channel = NewChannel;
+        }
      return osContinue;
      }
   return osEnd;
@@ -3520,6 +3566,23 @@
 
 bool cRecordControls::Start(cTimer *Timer, bool Pause)
 {
+  static time_t LastNoDiskSpaceMessage = 0;
+  int FreeMB = 0;
+  if (Timer) {
+     AssertFreeDiskSpace(Timer->Priority(), !Timer->Pending());
+     Timer->SetPending(true);
+     }
+  VideoDiskSpace(&FreeMB);
+  if (FreeMB < MINFREEDISK) {
+     if (!Timer || time(NULL) - LastNoDiskSpaceMessage > NODISKSPACEDELTA) {
+        isyslog("not enough disk space to start recording%s%s", Timer ? " timer " : "", Timer ? *Timer->ToDescr() : "");
+        Skins.Message(mtWarning, tr("Not enough disk space to start recording!"));
+        LastNoDiskSpaceMessage = time(NULL);
+        }
+     return false;
+     }
+  LastNoDiskSpaceMessage = 0;
+
   ChangeState();
   int ch = Timer ? Timer->Channel()->Number() : cDevice::CurrentChannel();
   cChannel *channel = Channels.GetByNumber(ch);
@@ -3548,8 +3611,10 @@
                }
            }
         }
-     else if (!Timer || (Timer->Priority() >= Setup.PrimaryLimit && !Timer->Pending()))
+     else if (!Timer || (Timer->Priority() >= Setup.PrimaryLimit && !Timer->Pending())) {
         isyslog("no free DVB device to record channel %d!", ch);
+        Skins.Message(mtError, tr("No free DVB device to record!"));
+        }
      }
   else
      esyslog("ERROR: channel %d not defined!", ch);
diff -ruN vdr-1.3.39/menu.h vdr-1.3.40/menu.h
--- vdr-1.3.39/menu.h	2006-01-06 12:30:38.000000000 +0100
+++ vdr-1.3.40/menu.h	2006-01-22 15:24:31.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: menu.h 1.81 2006/01/06 11:30:38 kls Exp $
+ * $Id: menu.h 1.82 2006/01/22 14:24:31 kls Exp $
  */
 
 #ifndef __MENU_H
@@ -82,14 +82,17 @@
   cChannel *channel;
   const cEvent *lastPresent;
   const cEvent *lastFollowing;
+  static cDisplayChannel *currentDisplayChannel;
   void DisplayChannel(void);
   void DisplayInfo(void);
   void Refresh(void);
+  cChannel *NextAvailableChannel(cChannel *Channel, int Direction);
 public:
   cDisplayChannel(int Number, bool Switched);
   cDisplayChannel(eKeys FirstKey);
   virtual ~cDisplayChannel();
   virtual eOSState ProcessKey(eKeys Key);
+  static bool IsOpen(void) { return currentDisplayChannel != NULL; }
   };
 
 class cDisplayVolume : public cOsdObject {
diff -ruN vdr-1.3.39/menuitems.c vdr-1.3.40/menuitems.c
--- vdr-1.3.39/menuitems.c	2006-01-07 16:37:03.000000000 +0100
+++ vdr-1.3.40/menuitems.c	2006-01-21 13:27:14.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: menuitems.c 1.29 2006/01/07 15:37:03 kls Exp $
+ * $Id: menuitems.c 1.30 2006/01/21 12:27:14 kls Exp $
  */
 
 #include "menuitems.h"
@@ -15,6 +15,8 @@
 #include "skins.h"
 #include "status.h"
 
+#define AUTO_ADVANCE_TIMEOUT  1500 // ms before auto advance when entering characters via numeric keys
+
 const char *FileNameChars = " abcdefghijklmnopqrstuvwxyz0123456789-.#~,/_@";
 
 // --- cMenuEditItem ---------------------------------------------------------
@@ -262,6 +264,23 @@
      cSkinDisplay::Current()->SetButtons(NULL);
 }
 
+void cMenuEditStrItem::AdvancePos(void)
+{
+  if (pos < length - 2 && pos < int(strlen(value)) ) {
+     if (++pos >= int(strlen(value))) {
+        if (pos >= 2 && value[pos - 1] == ' ' && value[pos - 2] == ' ')
+           pos--; // allow only two blanks at the end
+        else {
+           value[pos] = ' ';
+           value[pos + 1] = 0;
+           }
+        }
+     }
+  newchar = true;
+  if (!insert && isalpha(value[pos]))
+     uppercase = isupper(value[pos]);
+}
+
 void cMenuEditStrItem::Set(void)
 {
   char buf[1000];
@@ -326,6 +345,13 @@
   bool SameKey = Key == lastKey;
   if (Key != kNone)
      lastKey = Key;
+  else if (!newchar && autoAdvanceTimeout.TimedOut()) {
+     AdvancePos();
+     newchar = true;
+     currentChar = NULL;
+     Set();
+     return osContinue;
+     }
   switch (Key) {
     case kRed:   // Switch between upper- and lowercase characters
                  if (InEditMode()) {
@@ -382,19 +408,7 @@
                     uppercase = isupper(value[pos]);
                  break;
     case kRight|k_Repeat:
-    case kRight: if (pos < length - 2 && pos < int(strlen(value)) ) {
-                    if (++pos >= int(strlen(value))) {
-                       if (pos >= 2 && value[pos - 1] == ' ' && value[pos - 2] == ' ')
-                          pos--; // allow only two blanks at the end
-                       else {
-                          value[pos] = ' ';
-                          value[pos + 1] = 0;
-                          }
-                       }
-                    }
-                 newchar = true;
-                 if (!insert && isalpha(value[pos]))
-                    uppercase = isupper(value[pos]);
+    case kRight: AdvancePos();
                  if (pos == 0)
                     SetHelpKeys();
                  break;
@@ -413,15 +427,19 @@
                        value[pos] = toupper(Inc(tolower(value[pos]), NORMALKEY(Key) == kUp));
                     else
                        value[pos] =         Inc(        value[pos],  NORMALKEY(Key) == kUp);
-                    newchar = false;
+                    newchar = true;
                     }
                  else
                     return cMenuEditItem::ProcessKey(Key);
                  break;
+    case k0|k_Repeat ... k9|k_Repeat:
     case k0 ... k9: {
-                 if (!SameKey)
-                    currentChar = NULL;
                  if (InEditMode()) {
+                    if (!SameKey) {
+                       if (!newchar)
+                          AdvancePos();
+                       currentChar = NULL;
+                       }
                     if (insert && newchar) {
                        // create a new character in insert mode
                        if (int(strlen(value)) < length - 1) {
@@ -445,6 +463,7 @@
                        currentChar++;
                        }
                     newchar = false;
+                    autoAdvanceTimeout.Set(AUTO_ADVANCE_TIMEOUT);
                     }
                  else
                     return cMenuEditItem::ProcessKey(Key);
diff -ruN vdr-1.3.39/menuitems.h vdr-1.3.40/menuitems.h
--- vdr-1.3.39/menuitems.h	2006-01-06 16:16:25.000000000 +0100
+++ vdr-1.3.40/menuitems.h	2006-01-21 11:45:55.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: menuitems.h 1.15 2006/01/06 15:16:25 kls Exp $
+ * $Id: menuitems.h 1.16 2006/01/21 10:45:55 kls Exp $
  */
 
 #ifndef __MENUITEMS_H
@@ -85,7 +85,9 @@
   const char *charMap;
   const char *currentChar;
   eKeys lastKey;
+  cTimeMs autoAdvanceTimeout;
   void SetHelpKeys(void);
+  void AdvancePos(void);
   virtual void Set(void);
   char Inc(char c, bool Up);
 protected:
diff -ruN vdr-1.3.39/recording.c vdr-1.3.40/recording.c
--- vdr-1.3.39/recording.c	2006-01-08 12:40:13.000000000 +0100
+++ vdr-1.3.40/recording.c	2006-01-20 18:18:59.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: recording.c 1.132 2006/01/08 11:40:13 kls Exp $
+ * $Id: recording.c 1.133 2006/01/20 17:18:59 kls Exp $
  */
 
 #include "recording.h"
@@ -117,7 +117,7 @@
      }
 }
 
-void AssertFreeDiskSpace(int Priority)
+void AssertFreeDiskSpace(int Priority, bool Force)
 {
   static cMutex Mutex;
   cMutexLock MutexLock(&Mutex);
@@ -126,7 +126,7 @@
   // it will get removed during the next call.
   static time_t LastFreeDiskCheck = 0;
   int Factor = (Priority == -1) ? 10 : 1;
-  if (time(NULL) - LastFreeDiskCheck > DISKCHECKDELTA / Factor) {
+  if (Force || time(NULL) - LastFreeDiskCheck > DISKCHECKDELTA / Factor) {
      if (!VideoFileSpaceAvailable(MINDISKSPACE)) {
         // Make sure only one instance of VDR does this:
         cLockFile LockFile(VideoDirectory);
diff -ruN vdr-1.3.39/recording.h vdr-1.3.40/recording.h
--- vdr-1.3.39/recording.h	2005-12-18 12:26:51.000000000 +0100
+++ vdr-1.3.40/recording.h	2006-01-20 18:18:28.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: recording.h 1.48 2005/12/18 11:26:51 kls Exp $
+ * $Id: recording.h 1.49 2006/01/20 17:18:28 kls Exp $
  */
 
 #ifndef __RECORDING_H
@@ -21,9 +21,11 @@
 extern bool VfatFileSystem;
 
 void RemoveDeletedRecordings(void);
-void AssertFreeDiskSpace(int Priority = 0);
+void AssertFreeDiskSpace(int Priority = 0, bool Force = false);
      ///< The special Priority value -1 means that we shall get rid of any
      ///< deleted recordings faster than normal (because we're cutting).
+     ///< If Force is true, the check will be done even if the timeout
+     ///< hasn't expired yet.
 
 class cResumeFile {
 private:
diff -ruN vdr-1.3.39/tools.c vdr-1.3.40/tools.c
--- vdr-1.3.39/tools.c	2006-01-15 15:31:45.000000000 +0100
+++ vdr-1.3.40/tools.c	2006-01-20 15:01:28.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: tools.c 1.110 2006/01/15 14:31:45 kls Exp $
+ * $Id: tools.c 1.112 2006/01/20 14:01:28 kls Exp $
  */
 
 #include "tools.h"
@@ -26,9 +26,22 @@
 #include <unistd.h>
 #include <utime.h>
 #include "i18n.h"
+#include "thread.h"
 
 int SysLogLevel = 3;
 
+#define MAXSYSLOGBUF 256
+
+void syslog_with_tid(int priority, const char *format, ...)
+{
+  va_list ap;
+  char fmt[MAXSYSLOGBUF];
+  snprintf(fmt, sizeof(fmt), "[%d] %s", cThread::ThreadId(), format);
+  va_start(ap, format);
+  vsyslog(priority, fmt, ap);
+  va_end(ap); 
+}
+
 int BCD2INT(int x)
 {
   return ((1000000 * BCDCHARTOINT((x >> 24) & 0xFF)) +
@@ -125,13 +138,14 @@
 
 char *strreplace(char *s, char c1, char c2)
 {
-  char *p = s;
-
-  while (p && *p) {
-        if (*p == c1)
-           *p = c2;
-        p++;
-        }
+  if (s) {
+     char *p = s;
+     while (*p) {
+           if (*p == c1)
+              *p = c2;
+           p++;
+           }
+     }
   return s;
 }
 
diff -ruN vdr-1.3.39/tools.h vdr-1.3.40/tools.h
--- vdr-1.3.39/tools.h	2006-01-08 12:40:37.000000000 +0100
+++ vdr-1.3.40/tools.h	2006-01-15 17:19:56.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: tools.h 1.89 2006/01/08 11:40:37 kls Exp $
+ * $Id: tools.h 1.90 2006/01/15 16:19:56 kls Exp $
  */
 
 #ifndef __TOOLS_H
@@ -26,9 +26,9 @@
 
 extern int SysLogLevel;
 
-#define esyslog(a...) void( (SysLogLevel > 0) ? syslog(LOG_ERR,   a) : void() )
-#define isyslog(a...) void( (SysLogLevel > 1) ? syslog(LOG_INFO,  a) : void() )
-#define dsyslog(a...) void( (SysLogLevel > 2) ? syslog(LOG_DEBUG, a) : void() )
+#define esyslog(a...) void( (SysLogLevel > 0) ? syslog_with_tid(LOG_ERR,   a) : void() )
+#define isyslog(a...) void( (SysLogLevel > 1) ? syslog_with_tid(LOG_INFO,  a) : void() )
+#define dsyslog(a...) void( (SysLogLevel > 2) ? syslog_with_tid(LOG_DEBUG, a) : void() )
 
 #define LOG_ERROR         esyslog("ERROR (%s,%d): %m", __FILE__, __LINE__)
 #define LOG_ERROR_STR(s)  esyslog("ERROR: %s: %m", s)
@@ -52,6 +52,8 @@
 template<class T> inline void swap(T &a, T &b) { T t = a; a = b; b = t; }
 #endif
 
+void syslog_with_tid(int priority, const char *format, ...);
+
 #define BCDCHARTOINT(x) (10 * ((x & 0xF0) >> 4) + (x & 0xF))
 int BCD2INT(int x);
 
diff -ruN vdr-1.3.39/transfer.c vdr-1.3.40/transfer.c
--- vdr-1.3.39/transfer.c	2005-08-14 12:55:03.000000000 +0200
+++ vdr-1.3.40/transfer.c	2006-01-21 15:13:16.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: transfer.c 1.30 2005/08/14 10:55:03 kls Exp $
+ * $Id: transfer.c 1.31 2006/01/21 14:13:16 kls Exp $
  */
 
 #include "transfer.h"
@@ -63,6 +63,7 @@
   int Result = 0;
 #ifdef FW_NEEDS_BUFFER_RESERVE_FOR_AC3
   bool GotBufferReserve = false;
+  GotBufferReserve = true; //XXX remove this line if you absolutely need the buffer reserve
   int RequiredBufferReserve = KILOBYTE(DvbCardWith4MBofSDRAM ? 288 : 576);
 #endif
   while (Running()) {
diff -ruN vdr-1.3.39/vdr.c vdr-1.3.40/vdr.c
--- vdr-1.3.39/vdr.c	2006-01-15 14:31:57.000000000 +0100
+++ vdr-1.3.40/vdr.c	2006-01-22 16:59:13.000000000 +0100
@@ -22,7 +22,7 @@
  *
  * The project's page is at http://www.cadsoft.de/vdr
  *
- * $Id: vdr.c 1.238 2006/01/15 13:31:57 kls Exp $
+ * $Id: vdr.c 1.244 2006/01/22 15:59:13 kls Exp $
  */
 
 #include <getopt.h>
@@ -447,7 +447,7 @@
   // Log file:
 
   if (SysLogLevel > 0)
-     openlog("vdr", LOG_PID | LOG_CONS, SysLogTarget);
+     openlog("vdr", LOG_CONS, SysLogTarget); // LOG_PID doesn't work as expected under NPTL
 
   // Check the video directory:
 
@@ -727,7 +727,7 @@
            LastChannel = cDevice::CurrentChannel();
            LastChannelChanged = time(NULL);
            }
-        if (time(NULL) - LastChannelChanged >= Setup.ZapTimeout && LastChannel != PreviousChannel[0] && LastChannel != PreviousChannel[1])
+        if (time(NULL) - LastChannelChanged >= Setup.ZapTimeout && LastChannel != PreviousChannel[PreviousChannelIndex])
            PreviousChannel[PreviousChannelIndex ^= 1] = LastChannel;
         // Timers and Recordings:
         if (!Timers.BeingEdited()) {
@@ -822,6 +822,7 @@
                   }
                }
                break;
+          // Direct main menu functions:
           #define DirectMainFunction(function)\
             DELETE_MENU;\
             if (cControl::Control())\
@@ -855,7 +856,15 @@
           case kChanUp:
           case kChanDn|k_Repeat:
           case kChanDn:
-               cDevice::SwitchChannel(NORMALKEY(key) == kChanUp ? 1 : -1);
+               if (!Interact)
+                  Menu = new cDisplayChannel(NORMALKEY(key));
+               else if (cDisplayChannel::IsOpen()) {
+                  Interact->ProcessKey(key);
+                  continue;
+                  }
+               else
+                  cDevice::SwitchChannel(NORMALKEY(key) == kChanUp ? 1 : -1);
+               key = kNone; // nobody else needs to see these keys
                break;
           // Volume control:
           case kVolUp|k_Repeat:
@@ -901,9 +910,7 @@
           case kRecord:
                if (!cControl::Control()) {
                   if (cRecordControls::Start())
-                     ;//XXX Skins.Message(mtInfo, tr("Recording"));
-                  else
-                     Skins.Message(mtError, tr("No free DVB device to record!"));
+                     Skins.Message(mtInfo, tr("Recording started"));
                   key = kNone; // nobody else needs to see this key
                   }
                break;
@@ -947,8 +954,6 @@
              case osRecord: DELETE_MENU;
                             if (cRecordControls::Start())
                                Skins.Message(mtInfo, tr("Recording started"));
-                            else
-                               Skins.Message(mtError, tr("No free DVB device to record!"));
                             break;
              case osRecordings:
                             DELETE_MENU;
@@ -985,7 +990,7 @@
            }
         else {
            // Key functions in "normal" viewing mode:
-           if (KeyMacros.Get(key)) {
+           if (key != kNone && KeyMacros.Get(key)) {
               cRemote::PutMacro(key);
               key = kNone;
               }
@@ -999,21 +1004,17 @@
                   }
              // Direct Channel Select:
              case k1 ... k9:
-                  Menu = new cDisplayChannel(key);
-                  break;
              // Left/Right rotates trough channel groups:
              case kLeft|k_Repeat:
              case kLeft:
              case kRight|k_Repeat:
              case kRight:
-                  Menu = new cDisplayChannel(NORMALKEY(key));
-                  break;
              // Up/Down Channel Select:
              case kUp|k_Repeat:
              case kUp:
              case kDown|k_Repeat:
              case kDown:
-                  cDevice::SwitchChannel(NORMALKEY(key) == kUp ? 1 : -1);
+                  Menu = new cDisplayChannel(NORMALKEY(key));
                   break;
              // Viewing Control:
              case kOk:   LastChannel = -1; break; // forces channel display
