diff -ruN vdr-1.7.12/CONTRIBUTORS vdr-1.7.13/CONTRIBUTORS
--- vdr-1.7.12/CONTRIBUTORS	2010-01-17 16:18:28.000000000 +0100
+++ vdr-1.7.13/CONTRIBUTORS	2010-02-28 14:36:26.000000000 +0100
@@ -1091,6 +1091,7 @@
  for a patch that was used to implement handling the "component descriptor" ("genre")
  for a patch that was used to implement handling the "parental rating descriptor"
  suggesting to add plain text error messages to log entries from cOsd::SetAreas()
+ for keeping subtitles visible when pausing replay
 
 Ralf Klueber <ralf.klueber@vodafone.com>
  for reporting a bug in cutting a recording if there is only a single editing mark
@@ -1244,6 +1245,10 @@
  for reporting a bug in storing the current OSD size in case the
  device has changed it in its setup menu
  for increasing the value of MAXFRAMESIZE to better suit HD recordings
+ for improving handling frames at the beginning and end of a recording in cDvbPlayer
+ for devices with large buffers
+ for implementing cDeviceHook
+ for implementing cDevice::GetCurrentlyTunedTransponder()
 
 Richard Robson <richard_robson@beeb.net>
  for reporting freezing replay if a timer starts while in Transfer Mode from the
@@ -1678,6 +1683,7 @@
  for suggesting to make the function ExchangeChars()
  for reporting duplicate texts in i18n.c
  for suggesting to use 'gettext' for internationalization
+ for exporting some libsi functions
 
 Mattias Grönlund <Mattias@Gronlund.net>
  for pointing out a missing cleanup at program exit in case there is a problem
@@ -2292,6 +2298,7 @@
  for suggesting to use an "instance id" instead of the "resume id" to distinguish
  recordings of the same broadcast made by different instances of VDR
  for fixing EntriesOnSameFileSystem() to avoid using f_fsid, which may be 0
+ for fixing the German translation of "Folder name must not contain '%c'!"
 
 Jörn Reder <joern@zyn.de>
  for reporting that a recording may unnecessarily block a device with a CAM, while
@@ -2377,6 +2384,10 @@
 Halim Sahin <halim.sahin@t-online.de>
  for reporting that the channels.conf file was not written when stopping VDR after
  deleting or moving a channel in the Channels menu
+ for suggesting to add a note to the MANUAL, saying that adding new transponders only
+ works if the "EPG scan" is active
+ for reporting a problem with adding new transponders in case there is only a single
+ channel in the channel list
 
 Denis Knauf <denis.knauf@gmail.com>
  for reporting a missing '-' at the next to last line of SVDRP help texts
@@ -2459,6 +2470,7 @@
 
 Alexander Gross <Bikalexander@gmail.com>
  for adding Russian translations to the 'skincurses' and 'pictures' plugins
+ for changing the position of Sirius 4 to S4.8E in sources.conf
 
 Adrian Caval <anrxc@sysphere.org>
  for translating OSD texts to the Croatian language
@@ -2553,3 +2565,6 @@
 
 Matti Lehtimäki <matti.lehtimaki@gmail.com>
  for implementing the setup option "Miscellaneous/Channels wrap"
+
+Stephan Austermühle <au@hcsd.de>
+ for suggesting to flush the file in cSafeFile::Close()
diff -ruN vdr-1.7.12/HISTORY vdr-1.7.13/HISTORY
--- vdr-1.7.12/HISTORY	2010-01-31 13:47:02.000000000 +0100
+++ vdr-1.7.13/HISTORY	2010-02-28 15:27:43.000000000 +0100
@@ -6308,3 +6308,78 @@
   When replaying such a recording, the PCR packets are sent to PlayTsVideo()
 - The files "commands.conf" and "reccmd.conf" can now contain nested lists of
   commands. See vdr.5 for information about the new file format.
+  This obsoletes the CMDSUBMENU patch.
+
+2010-02-28: Version 1.7.13
+
+- Updated the Italian OSD texts (thanks to Diego Pierotto).
+- Changed the position of Sirius 4 to S4.8E in sources.conf (thanks to Alexander Gross).
+- Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
+- Moved the declaration of cMenuCommands to menu.h, so that plugins can use it.
+- Added a note to the MANUAL, saying that adding new transponders only works if the
+  "EPG scan" is active (suggested by Halim Sahim).
+- Improved handling frames at the beginning and end of a recording in cDvbPlayer for
+  devices with large buffers (thanks to Reinhard Nissl).
+- Implemented cDeviceHook to allow plugins more control over which device can
+  provide which transponder (thanks to Reinhard Nissl).
+- Implemented cDevice::GetCurrentlyTunedTransponder() (thanks to Reinhard Nissl).
+- Moved strictly necessary Makefile options into Make.global, which is included
+  by all plugins (thanks to Paul Menzel). The Makefiles of existing plugins should be
+  modified like this:
+
+  ------------------------------------------------------------
+  --- PLUGINS/src/hello/Makefile  2009/10/18 14:00:07      2.1
+  +++ PLUGINS/src/hello/Makefile  2010/02/06 14:50:03      2.2
+  @@ -18,7 +18,7 @@
+   ### The C++ compiler and options:
+
+   CXX      ?= g++
+  -CXXFLAGS ?= -fPIC -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
+  +CXXFLAGS ?= -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
+
+   ### The directory environment:
+
+  @@ -26,6 +26,10 @@
+   LIBDIR = ../../lib
+   TMPDIR = /tmp
+
+  +### Make sure that necessary options are included:
+  +
+  +include $(VDRDIR)/Make.global
+  +
+   ### Allow user defined options to overwrite defaults:
+
+   -include $(VDRDIR)/Make.config
+  ------------------------------------------------------------
+- Added device definitions to the diseqc.conf file format, so that certain satellite
+  positions can be limited to a given list of devices.
+  This obsoletes the SOURCECAPS patch.
+- Keeping subtitles visible when pausing replay (thanks to Rolf Ahrenberg).
+- Fixed adding new transponders in case there is only a single channel in the
+  channel list (reported by Halim Sahin).
+- The file name in the "Timers" menu now shows only the base name of the recording
+  without the folder path (if any). Otherwise with long folder paths the actual
+  recording name was not visible at all.
+- Updated the Romanian OSD texts (thanks to Lucian Muresan).
+- Exported some libsi functions (thanks to Lucian Muresan).
+- Improved scalability of the default skins.
+- Fixed the German translation of "Folder name must not contain '%c'!" (thanks to
+  Frank Schmirler).
+- Updated the Estonian OSD texts (thanks to Arthur Konovalov).
+- Plugins can now define new sources. In order to implement this, the following
+  changes were made:
+  + The transponder parameter string is no longer interpreted by cChannel, but rather
+    stored as is and used only by the respective device. That way plugins can use a
+    channel's parameter string to store arbitrary data (see vdr.5).
+  + The new class cSourceParam can be used by plugins to define new sources, and to
+    implement OSD items that will be used in the channel editor for editing the source
+    specific parameters of a channel (see dvbdevice.c for an example of how this is
+    done for the default DVB devices).
+  + Purely numerical values are no longer accepted in the 'source' parameter of a
+    channel.
+  This obsoletes the PLUGINPARAM patch.
+- Updated the Lithuanian OSD texts (thanks to Valdemaras Pipiras).
+- cSafeFile::Close() now flushes the file (suggested by Stephan Austermühle).
+- The option "Setup/DVB/Use Dolby Digital" now only controls whether Dolby Digital
+  tracks appear in the "Audio" menu. Dolby Digital is always recorded.
+  This obsoletes the DOLBYINREC patch.
diff -ruN vdr-1.7.12/MANUAL vdr-1.7.13/MANUAL
--- vdr-1.7.12/MANUAL	2010-01-17 16:13:40.000000000 +0100
+++ vdr-1.7.13/MANUAL	2010-02-28 15:23:46.000000000 +0100
@@ -675,17 +675,17 @@
                          4:3.
 
   Use Dolby Digital = yes
-                         Turns recording of the Dolby Digital audio channels on
-                         or off. This may be useful if you don't have the equipment
-                         to replay Dolby Digital audio and want to save disk space.
-                         If turned off, Dolby Digital tracks also don't appear in the
-                         "Audio" menu.
+                         Controls whether Dolby Digital tracks appear in the "Audio"
+                         menu. This is useful if you don't have the equipment to
+                         replay Dolby Digital audio.
 
   Update channels = 5    Controls the automatic channel update function. '0' means
                          no update, '1' will only update channel names, '2' will
                          only update PIDs, '3' will update channel names and PIDs,
                          '4' will perform all updates and also add newly found channels,
                          and '5' will also add newly found transponders.
+                         Note that adding new transponders only works if the "EPG scan"
+                         is active.
 
   Audio languages = 0    Some tv stations broadcast various audio tracks in different
                          languages. This option allows you to define which language(s)
diff -ruN vdr-1.7.12/Make.config.template vdr-1.7.13/Make.config.template
--- vdr-1.7.12/Make.config.template	2009-01-18 11:46:13.000000000 +0100
+++ vdr-1.7.13/Make.config.template	2010-02-06 15:50:03.000000000 +0100
@@ -6,7 +6,7 @@
 # See the main source file 'vdr.c' for copyright information and
 # how to reach the author.
 #
-# $Id: Make.config.template 2.1 2009/01/18 10:46:13 kls Exp $
+# $Id: Make.config.template 2.2 2010/02/06 14:50:03 kls Exp $
 
 ### The C compiler and options:
 
@@ -19,7 +19,6 @@
 ifdef PLUGIN
 CFLAGS   += -fPIC
 CXXFLAGS += -fPIC
-DEFINES += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
 endif
 
 ### The directory environment:
diff -ruN vdr-1.7.12/Make.global vdr-1.7.13/Make.global
--- vdr-1.7.12/Make.global	1970-01-01 01:00:00.000000000 +0100
+++ vdr-1.7.13/Make.global	2010-02-06 15:54:12.000000000 +0100
@@ -0,0 +1,17 @@
+#
+# Strictly necessary Makefile options for the Video Disk Recorder
+#
+# See the main source file 'vdr.c' for copyright information and
+# how to reach the author.
+#
+# $Id: Make.global 1.1 2010/02/06 14:54:12 kls Exp $
+
+# Plugins need to be compiled with position independent code, otherwise linking
+# VDR against it will fail.
+
+ifdef PLUGIN
+CFLAGS   += -fPIC
+CXXFLAGS += -fPIC
+endif
+
+DEFINES += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
diff -ruN vdr-1.7.12/Makefile vdr-1.7.13/Makefile
--- vdr-1.7.12/Makefile	2010-01-17 13:32:18.000000000 +0100
+++ vdr-1.7.13/Makefile	2010-02-21 12:44:38.000000000 +0100
@@ -4,7 +4,7 @@
 # See the main source file 'vdr.c' for copyright information and
 # how to reach the author.
 #
-# $Id: Makefile 2.6 2010/01/17 12:32:18 kls Exp $
+# $Id: Makefile 2.8 2010/02/21 11:44:38 kls Exp $
 
 .DELETE_ON_ERROR:
 
@@ -32,6 +32,7 @@
 DOXYGEN  = /usr/bin/doxygen
 DOXYFILE = Doxyfile
 
+include Make.global
 -include Make.config
 
 SILIB    = $(LSIDIR)/libsi.a
@@ -40,7 +41,7 @@
        dvbplayer.o dvbspu.o dvbsubtitle.o eit.o eitscan.o epg.o filter.o font.o i18n.o interface.o keys.o\
        lirc.o menu.o menuitems.o nit.o osdbase.o osd.o pat.o player.o plugin.o rcu.o\
        receiver.o recorder.o recording.o remote.o remux.o ringbuffer.o sdt.o sections.o shutdown.o\
-       skinclassic.o skins.o skinsttng.o sources.o spu.o status.o svdrp.o themes.o thread.o\
+       skinclassic.o skins.o skinsttng.o sourceparams.o sources.o spu.o status.o svdrp.o themes.o thread.o\
        timers.o tools.o transfer.o vdr.o videodir.o
 
 ifndef NO_KBD
@@ -60,8 +61,6 @@
 
 DEFINES += -D_GNU_SOURCE
 
-DEFINES += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
-
 DEFINES += -DVIDEODIR=\"$(VIDEODIR)\"
 DEFINES += -DCONFDIR=\"$(CONFDIR)\"
 DEFINES += -DPLUGINDIR=\"$(PLUGINLIBDIR)\"
diff -ruN vdr-1.7.12/PLUGINS/src/dvbsddevice/Makefile vdr-1.7.13/PLUGINS/src/dvbsddevice/Makefile
--- vdr-1.7.12/PLUGINS/src/dvbsddevice/Makefile	2009-12-29 12:53:18.000000000 +0100
+++ vdr-1.7.13/PLUGINS/src/dvbsddevice/Makefile	2010-02-06 15:50:03.000000000 +0100
@@ -1,7 +1,7 @@
 #
 # Makefile for a Video Disk Recorder plugin
 #
-# $Id: Makefile 1.1 2009/12/29 11:53:18 kls Exp $
+# $Id: Makefile 1.2 2010/02/06 14:50:03 kls Exp $
 
 # The official name of this plugin.
 # This name will be used in the '-P...' option of VDR to load the plugin.
@@ -18,7 +18,7 @@
 ### The C++ compiler and options:
 
 CXX      ?= g++
-CXXFLAGS ?= -fPIC -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
+CXXFLAGS ?= -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
 
 ### The directory environment:
 
@@ -26,6 +26,10 @@
 LIBDIR = ../../lib
 TMPDIR = /tmp
 
+### Make sure that necessary options are included:
+
+include $(VDRDIR)/Make.global
+
 ### Allow user defined options to overwrite defaults:
 
 -include $(VDRDIR)/Make.config
@@ -45,8 +49,6 @@
 
 DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
 
-DEFINES += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
-
 ### The object files (add further files here):
 
 OBJS = $(PLUGIN).o dvbsdffdevice.o dvbsdffosd.o
diff -ruN vdr-1.7.12/PLUGINS/src/hello/HISTORY vdr-1.7.13/PLUGINS/src/hello/HISTORY
--- vdr-1.7.12/PLUGINS/src/hello/HISTORY	2009-12-06 13:29:11.000000000 +0100
+++ vdr-1.7.13/PLUGINS/src/hello/HISTORY	2010-02-28 13:49:18.000000000 +0100
@@ -70,3 +70,7 @@
 2009-12-06: Version 0.2.4
 
 - Several code modifications to avoid compiler warnings (thanks to Winfried Köhler).
+
+2010-02-28: Version 0.2.5
+
+- Added Lithuanian language translations (thanks to Valdemaras Pipiras).
diff -ruN vdr-1.7.12/PLUGINS/src/hello/Makefile vdr-1.7.13/PLUGINS/src/hello/Makefile
--- vdr-1.7.12/PLUGINS/src/hello/Makefile	2009-10-18 16:00:07.000000000 +0200
+++ vdr-1.7.13/PLUGINS/src/hello/Makefile	2010-02-06 15:50:03.000000000 +0100
@@ -1,7 +1,7 @@
 #
 # Makefile for a Video Disk Recorder plugin
 #
-# $Id: Makefile 2.1 2009/10/18 14:00:07 kls Exp $
+# $Id: Makefile 2.2 2010/02/06 14:50:03 kls Exp $
 
 # The official name of this plugin.
 # This name will be used in the '-P...' option of VDR to load the plugin.
@@ -18,7 +18,7 @@
 ### The C++ compiler and options:
 
 CXX      ?= g++
-CXXFLAGS ?= -fPIC -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
+CXXFLAGS ?= -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
 
 ### The directory environment:
 
@@ -26,6 +26,10 @@
 LIBDIR = ../../lib
 TMPDIR = /tmp
 
+### Make sure that necessary options are included:
+
+include $(VDRDIR)/Make.global
+
 ### Allow user defined options to overwrite defaults:
 
 -include $(VDRDIR)/Make.config
diff -ruN vdr-1.7.12/PLUGINS/src/hello/hello.c vdr-1.7.13/PLUGINS/src/hello/hello.c
--- vdr-1.7.12/PLUGINS/src/hello/hello.c	2009-12-06 13:30:15.000000000 +0100
+++ vdr-1.7.13/PLUGINS/src/hello/hello.c	2010-02-28 13:49:28.000000000 +0100
@@ -3,7 +3,7 @@
  *
  * See the README file for copyright information and how to reach the author.
  *
- * $Id: hello.c 2.2 2009/12/06 12:30:15 kls Exp $
+ * $Id: hello.c 2.3 2010/02/28 12:49:28 kls Exp $
  */
 
 #include <getopt.h>
@@ -12,7 +12,7 @@
 #include <vdr/interface.h>
 #include <vdr/plugin.h>
 
-static const char *VERSION        = "0.2.4";
+static const char *VERSION        = "0.2.5";
 static const char *DESCRIPTION    = trNOOP("A friendly greeting");
 static const char *MAINMENUENTRY  = trNOOP("Hello");
 
diff -ruN vdr-1.7.12/PLUGINS/src/hello/po/lt_LT.po vdr-1.7.13/PLUGINS/src/hello/po/lt_LT.po
--- vdr-1.7.12/PLUGINS/src/hello/po/lt_LT.po	1970-01-01 01:00:00.000000000 +0100
+++ vdr-1.7.13/PLUGINS/src/hello/po/lt_LT.po	2010-02-28 13:50:39.000000000 +0100
@@ -0,0 +1,34 @@
+# VDR plugin language source file.
+# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
+# This file is distributed under the same license as the VDR package.
+# Valdemaras Pipiras <varas@ambernet.lt>, 2009
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: VDR 1.7.10\n"
+"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
+"POT-Creation-Date: 2007-10-13 11:52+0200\n"
+"PO-Revision-Date: 2009-12-08 12:18+0200\n"
+"Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>\n"
+"Language-Team: Lietuviai\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "A friendly greeting"
+msgstr "DraugiÅ¡kas labas"
+
+msgid "Hello"
+msgstr "Labas!"
+
+msgid "Greeting time (s)"
+msgstr "Pasveikinomo laikas (s)"
+
+msgid "Use alternate greeting"
+msgstr "Naudoti alternatyvÅ³ pasveikinimÄ…"
+
+msgid "Howdy folks!"
+msgstr "Kaip yr chebryte?"
+
+msgid "Hello world!"
+msgstr "Labas pasauli!"
diff -ruN vdr-1.7.12/PLUGINS/src/osddemo/Makefile vdr-1.7.13/PLUGINS/src/osddemo/Makefile
--- vdr-1.7.12/PLUGINS/src/osddemo/Makefile	2008-01-13 14:00:01.000000000 +0100
+++ vdr-1.7.13/PLUGINS/src/osddemo/Makefile	2010-02-06 15:50:03.000000000 +0100
@@ -1,7 +1,7 @@
 #
 # Makefile for a Video Disk Recorder plugin
 #
-# $Id: Makefile 2.0 2008/01/13 13:00:01 kls Exp $
+# $Id: Makefile 2.1 2010/02/06 14:50:03 kls Exp $
 
 # The official name of this plugin.
 # This name will be used in the '-P...' option of VDR to load the plugin.
@@ -16,7 +16,7 @@
 ### The C++ compiler and options:
 
 CXX      ?= g++
-CXXFLAGS ?= -fPIC -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
+CXXFLAGS ?= -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
 
 ### The directory environment:
 
@@ -24,6 +24,10 @@
 LIBDIR = ../../lib
 TMPDIR = /tmp
 
+### Make sure that necessary options are included:
+
+include $(VDRDIR)/Make.global
+
 ### Allow user defined options to overwrite defaults:
 
 -include $(VDRDIR)/Make.config
diff -ruN vdr-1.7.12/PLUGINS/src/pictures/HISTORY vdr-1.7.13/PLUGINS/src/pictures/HISTORY
--- vdr-1.7.12/PLUGINS/src/pictures/HISTORY	2009-12-06 13:29:15.000000000 +0100
+++ vdr-1.7.13/PLUGINS/src/pictures/HISTORY	2010-02-28 13:49:50.000000000 +0100
@@ -37,3 +37,7 @@
 2009-12-06: Version 0.0.8
 
 - Several code modifications to avoid compiler warnings (thanks to Winfried Köhler).
+
+2010-02-28: Version 0.0.9
+
+- Added Lithuanian language translations (thanks to Valdemaras Pipiras).
diff -ruN vdr-1.7.12/PLUGINS/src/pictures/Makefile vdr-1.7.13/PLUGINS/src/pictures/Makefile
--- vdr-1.7.12/PLUGINS/src/pictures/Makefile	2009-10-18 16:02:41.000000000 +0200
+++ vdr-1.7.13/PLUGINS/src/pictures/Makefile	2010-02-06 15:50:03.000000000 +0100
@@ -1,7 +1,7 @@
 #
 # Makefile for a Video Disk Recorder plugin
 #
-# $Id: Makefile 2.1 2009/10/18 14:02:41 kls Exp $
+# $Id: Makefile 2.2 2010/02/06 14:50:03 kls Exp $
 
 # The official name of this plugin.
 # This name will be used in the '-P...' option of VDR to load the plugin.
@@ -18,7 +18,7 @@
 ### The C++ compiler and options:
 
 CXX      ?= g++
-CXXFLAGS ?= -fPIC -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
+CXXFLAGS ?= -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
 
 ### The directory environment:
 
@@ -26,6 +26,10 @@
 LIBDIR = ../../lib
 TMPDIR = /tmp
 
+### Make sure that necessary options are included:
+
+include $(VDRDIR)/Make.global
+
 ### Allow user defined options to overwrite defaults:
 
 -include $(VDRDIR)/Make.config
diff -ruN vdr-1.7.12/PLUGINS/src/pictures/pictures.c vdr-1.7.13/PLUGINS/src/pictures/pictures.c
--- vdr-1.7.12/PLUGINS/src/pictures/pictures.c	2009-12-06 13:30:21.000000000 +0100
+++ vdr-1.7.13/PLUGINS/src/pictures/pictures.c	2010-02-28 13:49:55.000000000 +0100
@@ -3,7 +3,7 @@
  *
  * See the README file for copyright information and how to reach the author.
  *
- * $Id: pictures.c 2.1 2009/12/06 12:30:21 kls Exp $
+ * $Id: pictures.c 2.2 2010/02/28 12:49:55 kls Exp $
  */
 
 #include <getopt.h>
@@ -11,7 +11,7 @@
 #include "menu.h"
 #include "player.h"
 
-static const char *VERSION       = "0.0.8";
+static const char *VERSION       = "0.0.9";
 static const char *DESCRIPTION   = trNOOP("A simple picture viewer");
 static const char *MAINMENUENTRY = trNOOP("Pictures");
 
diff -ruN vdr-1.7.12/PLUGINS/src/pictures/po/lt_LT.po vdr-1.7.13/PLUGINS/src/pictures/po/lt_LT.po
--- vdr-1.7.12/PLUGINS/src/pictures/po/lt_LT.po	1970-01-01 01:00:00.000000000 +0100
+++ vdr-1.7.13/PLUGINS/src/pictures/po/lt_LT.po	2010-02-28 13:50:39.000000000 +0100
@@ -0,0 +1,32 @@
+# VDR plugin language source file.
+# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
+# This file is distributed under the same license as the VDR package.
+# Valdemaras Pipiras <varas@ambernet.lt>, 2009
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: VDR 1.7.10\n"
+"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
+"POT-Creation-Date: 2008-01-12 17:38+0100\n"
+"PO-Revision-Date: 2009-12-08 12:41+0100\n"
+"Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>, 2009\n"
+"Language-Team: Lietuviai\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "Pictures"
+msgstr "Nuotraukos"
+
+msgid "A simple picture viewer"
+msgstr "Paprasta nuotraukÅ³ narÅ¡yklÄ—"
+
+msgid "Picture directory"
+msgstr "NuotraukÅ³ katalogas"
+
+msgid "Slide show delay (s)"
+msgstr "SkaidriÅ³ perÅ¾iÅ«ros uÅ¾laikymas (s)"
+
+msgid "No picture directory has been defined!"
+msgstr "Nenustatytas nuotraukÅ³ katalogas!"
diff -ruN vdr-1.7.12/PLUGINS/src/servicedemo/Makefile vdr-1.7.13/PLUGINS/src/servicedemo/Makefile
--- vdr-1.7.12/PLUGINS/src/servicedemo/Makefile	2008-01-13 14:00:07.000000000 +0100
+++ vdr-1.7.13/PLUGINS/src/servicedemo/Makefile	2010-02-06 15:50:03.000000000 +0100
@@ -1,7 +1,7 @@
 #
 # Makefile for a Video Disk Recorder plugin
 #
-# $Id: Makefile 2.0 2008/01/13 13:00:07 kls Exp $
+# $Id: Makefile 2.1 2010/02/06 14:50:03 kls Exp $
 
 # The official name of this plugin.
 # This name will be used in the '-P...' option of VDR to load the plugin.
@@ -18,7 +18,7 @@
 ### The C++ compiler and options:
 
 CXX      ?= g++
-CXXFLAGS ?= -fPIC -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
+CXXFLAGS ?= -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
 
 ### The directory environment:
 
@@ -26,6 +26,10 @@
 LIBDIR = ../../lib
 TMPDIR = /tmp
 
+### Make sure that necessary options are included:
+
+include $(VDRDIR)/Make.global
+
 ### Allow user defined options to overwrite defaults:
 
 -include $(VDRDIR)/Make.config
diff -ruN vdr-1.7.12/PLUGINS/src/skincurses/HISTORY vdr-1.7.13/PLUGINS/src/skincurses/HISTORY
--- vdr-1.7.12/PLUGINS/src/skincurses/HISTORY	2010-01-03 15:24:50.000000000 +0100
+++ vdr-1.7.13/PLUGINS/src/skincurses/HISTORY	2010-02-28 13:50:08.000000000 +0100
@@ -84,3 +84,7 @@
 
 - Displaying "genre" in event descriptions.
 - Displaying "parental rating" in event descriptions.
+
+2010-02-28: Version 0.1.9
+
+- Added Lithuanian language translations (thanks to Valdemaras Pipiras).
diff -ruN vdr-1.7.12/PLUGINS/src/skincurses/Makefile vdr-1.7.13/PLUGINS/src/skincurses/Makefile
--- vdr-1.7.12/PLUGINS/src/skincurses/Makefile	2009-10-18 16:03:30.000000000 +0200
+++ vdr-1.7.13/PLUGINS/src/skincurses/Makefile	2010-02-06 15:50:03.000000000 +0100
@@ -1,7 +1,7 @@
 #
 # Makefile for a Video Disk Recorder plugin
 #
-# $Id: Makefile 2.1 2009/10/18 14:03:30 kls Exp $
+# $Id: Makefile 2.2 2010/02/06 14:50:03 kls Exp $
 
 # The official name of this plugin.
 # This name will be used in the '-P...' option of VDR to load the plugin.
@@ -18,7 +18,7 @@
 ### The C++ compiler and options:
 
 CXX      ?= g++
-CXXFLAGS ?= -fPIC -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
+CXXFLAGS ?= -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
 
 ### The directory environment:
 
@@ -26,6 +26,10 @@
 LIBDIR = ../../lib
 TMPDIR = /tmp
 
+### Make sure that necessary options are included:
+
+include $(VDRDIR)/Make.global
+
 ### Allow user defined options to overwrite defaults:
 
 -include $(VDRDIR)/Make.config
diff -ruN vdr-1.7.12/PLUGINS/src/skincurses/po/lt_LT.po vdr-1.7.13/PLUGINS/src/skincurses/po/lt_LT.po
--- vdr-1.7.12/PLUGINS/src/skincurses/po/lt_LT.po	1970-01-01 01:00:00.000000000 +0100
+++ vdr-1.7.13/PLUGINS/src/skincurses/po/lt_LT.po	2010-02-28 13:50:41.000000000 +0100
@@ -0,0 +1,28 @@
+# VDR plugin language source file.
+# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
+# This file is distributed under the same license as the VDR package.
+# Valdemaras Pipiras <varas@ambernet.lt>, 2010
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: VDR 1.7.12\n"
+"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
+"POT-Creation-Date: 2009-10-13 11:52+0200\n"
+"PO-Revision-Date: 2010-02-22 18:18+0200\n"
+"Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>\n"
+"Language-Team: Lietuviai\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "A text only skin"
+msgstr "Tekstinis apvalkalas"
+
+msgid "Key$Mute"
+msgstr "IÅ¡jungti garsÄ…"
+
+msgid "Volume "
+msgstr "Garsas "
+
+msgid "Text mode"
+msgstr "Tekstinis rÄ™Å¾imas"
diff -ruN vdr-1.7.12/PLUGINS/src/skincurses/skincurses.c vdr-1.7.13/PLUGINS/src/skincurses/skincurses.c
--- vdr-1.7.12/PLUGINS/src/skincurses/skincurses.c	2010-01-03 15:59:16.000000000 +0100
+++ vdr-1.7.13/PLUGINS/src/skincurses/skincurses.c	2010-02-28 13:50:13.000000000 +0100
@@ -3,7 +3,7 @@
  *
  * See the README file for copyright information and how to reach the author.
  *
- * $Id: skincurses.c 2.3 2010/01/03 14:59:16 kls Exp $
+ * $Id: skincurses.c 2.4 2010/02/28 12:50:13 kls Exp $
  */
 
 #include <ncurses.h>
@@ -11,7 +11,7 @@
 #include <vdr/plugin.h>
 #include <vdr/skins.h>
 
-static const char *VERSION        = "0.1.8";
+static const char *VERSION        = "0.1.9";
 static const char *DESCRIPTION    = trNOOP("A text only skin");
 static const char *MAINMENUENTRY  = NULL;
 
diff -ruN vdr-1.7.12/PLUGINS/src/status/Makefile vdr-1.7.13/PLUGINS/src/status/Makefile
--- vdr-1.7.12/PLUGINS/src/status/Makefile	2008-01-13 14:00:18.000000000 +0100
+++ vdr-1.7.13/PLUGINS/src/status/Makefile	2010-02-06 15:50:03.000000000 +0100
@@ -1,7 +1,7 @@
 #
 # Makefile for a Video Disk Recorder plugin
 #
-# $Id: Makefile 2.0 2008/01/13 13:00:18 kls Exp $
+# $Id: Makefile 2.1 2010/02/06 14:50:03 kls Exp $
 
 # The official name of this plugin.
 # This name will be used in the '-P...' option of VDR to load the plugin.
@@ -16,7 +16,7 @@
 ### The C++ compiler and options:
 
 CXX      ?= g++
-CXXFLAGS ?= -fPIC -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
+CXXFLAGS ?= -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
 
 ### The directory environment:
 
@@ -24,6 +24,10 @@
 LIBDIR = ../../lib
 TMPDIR = /tmp
 
+### Make sure that necessary options are included:
+
+include $(VDRDIR)/Make.global
+
 ### Allow user defined options to overwrite defaults:
 
 -include $(VDRDIR)/Make.config
diff -ruN vdr-1.7.12/PLUGINS/src/svdrpdemo/Makefile vdr-1.7.13/PLUGINS/src/svdrpdemo/Makefile
--- vdr-1.7.12/PLUGINS/src/svdrpdemo/Makefile	2008-01-13 14:00:20.000000000 +0100
+++ vdr-1.7.13/PLUGINS/src/svdrpdemo/Makefile	2010-02-06 15:50:03.000000000 +0100
@@ -1,7 +1,7 @@
 #
 # Makefile for a Video Disk Recorder plugin
 #
-# $Id: Makefile 2.0 2008/01/13 13:00:20 kls Exp $
+# $Id: Makefile 2.1 2010/02/06 14:50:03 kls Exp $
 
 # The official name of this plugin.
 # This name will be used in the '-P...' option of VDR to load the plugin.
@@ -16,7 +16,7 @@
 ### The C++ compiler and options:
 
 CXX      ?= g++
-CXXFLAGS ?= -fPIC -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
+CXXFLAGS ?= -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
 
 ### The directory environment:
 
@@ -24,6 +24,10 @@
 LIBDIR = ../../lib
 TMPDIR = /tmp
 
+### Make sure that necessary options are included:
+
+include $(VDRDIR)/Make.global
+
 ### Allow user defined options to overwrite defaults:
 
 -include $(VDRDIR)/Make.config
diff -ruN vdr-1.7.12/PLUGINS.html vdr-1.7.13/PLUGINS.html
--- vdr-1.7.12/PLUGINS.html	2009-10-18 15:59:41.000000000 +0200
+++ vdr-1.7.13/PLUGINS.html	2010-02-06 15:20:36.000000000 +0100
@@ -1970,6 +1970,46 @@
 important that the devices are created on the heap, using the <tt>new</tt>
 operator!
 
+<div class="modified">
+<p>
+<b>Device hooks</b>
+<p>
+VDR has builtin facilities that select which device is able to provide a given
+transponder. However, there may be situations where the setup is so special
+that it requires considerations that exceed the scope of the core VDR code.
+This is where <i>device hooks</i> can be used. 
+
+<p><table><tr><td class="code"><pre>
+class cMyDeviceHook : public cDeviceHook {
+public:
+  cMyDeviceHook(void);
+  virtual bool DeviceProvidesTransponder(const cDevice *Device, const cChannel *Channel) const;
+  };
+</pre></td></tr></table><p>
+
+In its <tt>DeviceProvidesTransponder()</tt> function the device hook can take
+whatever actions are necessary to determine whether the given Device can
+provide the given Channel's transponder, as in
+
+<p><table><tr><td class="code"><pre>
+void cMyDeviceHook::DeviceProvidesTransponder(const cDevice *Device, const cChannel *Channel) const
+{
+  if (<i>condition where Device can't provide Channel</i>)
+     return false;
+  return true;
+}
+</pre></td></tr></table><p>
+
+A plugin that creates a derived cDeviceHook shall do so in its <tt>Initialize()</tt>
+function, as in
+
+<p><table><tr><td class="code"><pre>
+new cMyDeviceHook;
+</pre></td></tr></table><p>
+
+and shall not delete this object. It will be automatically deleted when the program ends.
+</div modified>
+
 <hr><h2><a name="Audio">Audio</a></h2>
 
 <div class="blurb">"The stereo effect may only be experienced if stereo equipment is used!"</div><p>
diff -ruN vdr-1.7.12/channels.c vdr-1.7.13/channels.c
--- vdr-1.7.12/channels.c	2010-01-02 18:38:40.000000000 +0100
+++ vdr-1.7.13/channels.c	2010-02-21 14:36:04.000000000 +0100
@@ -4,11 +4,10 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: channels.c 2.12 2010/01/02 17:38:40 kls Exp $
+ * $Id: channels.c 2.13 2010/02/21 13:36:04 kls Exp $
  */
 
 #include "channels.h"
-#include <linux/dvb/frontend.h>
 #include <ctype.h>
 #include "device.h"
 #include "epg.h"
@@ -18,133 +17,6 @@
 // format characters in order to allow any number of blanks after a numeric
 // value!
 
-// --- Channel Parameter Maps ------------------------------------------------
-
-const tChannelParameterMap InversionValues[] = {
-  {   0, INVERSION_OFF,  trNOOP("off") },
-  {   1, INVERSION_ON,   trNOOP("on") },
-  { 999, INVERSION_AUTO, trNOOP("auto") },
-  {  -1, 0, NULL }
-  };
-
-const tChannelParameterMap BandwidthValues[] = {
-  {   6, 6000000, "6 MHz" },
-  {   7, 7000000, "7 MHz" },
-  {   8, 8000000, "8 MHz" },
-  {  -1, 0, NULL }
-  };
-
-const tChannelParameterMap CoderateValues[] = {
-  {   0, FEC_NONE, trNOOP("none") },
-  {  12, FEC_1_2,  "1/2" },
-  {  23, FEC_2_3,  "2/3" },
-  {  34, FEC_3_4,  "3/4" },
-  {  35, FEC_3_5,  "3/5" },
-  {  45, FEC_4_5,  "4/5" },
-  {  56, FEC_5_6,  "5/6" },
-  {  67, FEC_6_7,  "6/7" },
-  {  78, FEC_7_8,  "7/8" },
-  {  89, FEC_8_9,  "8/9" },
-  { 910, FEC_9_10, "9/10" },
-  { 999, FEC_AUTO, trNOOP("auto") },
-  {  -1, 0, NULL }
-  };
-
-const tChannelParameterMap ModulationValues[] = {
-  {  16, QAM_16,   "QAM16" },
-  {  32, QAM_32,   "QAM32" },
-  {  64, QAM_64,   "QAM64" },
-  { 128, QAM_128,  "QAM128" },
-  { 256, QAM_256,  "QAM256" },
-  {   2, QPSK,     "QPSK" },
-  {   5, PSK_8,    "8PSK" },
-  {   6, APSK_16,  "16APSK" },
-  {  10, VSB_8,    "VSB8" },
-  {  11, VSB_16,   "VSB16" },
-  { 998, QAM_AUTO, "QAMAUTO" },
-  {  -1, 0, NULL }
-  };
-
-const tChannelParameterMap SystemValues[] = {
-  {   0, SYS_DVBS,  "DVB-S" },
-  {   1, SYS_DVBS2, "DVB-S2" },
-  {  -1, 0, NULL }
-  };
-
-const tChannelParameterMap TransmissionValues[] = {
-  {   2, TRANSMISSION_MODE_2K,   "2K" },
-  {   8, TRANSMISSION_MODE_8K,   "8K" },
-  { 999, TRANSMISSION_MODE_AUTO, trNOOP("auto") },
-  {  -1, 0, NULL }
-  };
-
-const tChannelParameterMap GuardValues[] = {
-  {   4, GUARD_INTERVAL_1_4,  "1/4" },
-  {   8, GUARD_INTERVAL_1_8,  "1/8" },
-  {  16, GUARD_INTERVAL_1_16, "1/16" },
-  {  32, GUARD_INTERVAL_1_32, "1/32" },
-  { 999, GUARD_INTERVAL_AUTO, trNOOP("auto") },
-  {  -1, 0, NULL }
-  };
-
-const tChannelParameterMap HierarchyValues[] = {
-  {   0, HIERARCHY_NONE, trNOOP("none") },
-  {   1, HIERARCHY_1,    "1" },
-  {   2, HIERARCHY_2,    "2" },
-  {   4, HIERARCHY_4,    "4" },
-  { 999, HIERARCHY_AUTO, trNOOP("auto") },
-  {  -1, 0, NULL }
-  };
-
-const tChannelParameterMap RollOffValues[] = {
-  {   0, ROLLOFF_AUTO, trNOOP("auto") },
-  {  20, ROLLOFF_20, "0.20" },
-  {  25, ROLLOFF_25, "0.25" },
-  {  35, ROLLOFF_35, "0.35" },
-  {  -1, 0, NULL }
-  };
-
-int UserIndex(int Value, const tChannelParameterMap *Map)
-{
-  const tChannelParameterMap *map = Map;
-  while (map && map->userValue != -1) {
-        if (map->userValue == Value)
-           return map - Map;
-        map++;
-        }
-  return -1;
-}
-
-int DriverIndex(int Value, const tChannelParameterMap *Map)
-{
-  const tChannelParameterMap *map = Map;
-  while (map && map->userValue != -1) {
-        if (map->driverValue == Value)
-           return map - Map;
-        map++;
-        }
-  return -1;
-}
-
-int MapToUser(int Value, const tChannelParameterMap *Map, const char **String)
-{
-  int n = DriverIndex(Value, Map);
-  if (n >= 0) {
-     if (String)
-        *String = tr(Map[n].userString);
-     return Map[n].userValue;
-     }
-  return -1;
-}
-
-int MapToDriver(int Value, const tChannelParameterMap *Map)
-{
-  int n = UserIndex(Value, Map);
-  if (n >= 0)
-     return Map[n].driverValue;
-  return -1;
-}
-
 // --- tChannelID ------------------------------------------------------------
 
 const tChannelID tChannelID::InvalidID;
@@ -189,16 +61,6 @@
   provider = strdup("");
   portalName = strdup("");
   memset(&__BeginData__, 0, (char *)&__EndData__ - (char *)&__BeginData__);
-  inversion    = INVERSION_AUTO;
-  bandwidth    = 8000000;
-  coderateH    = FEC_AUTO;
-  coderateL    = FEC_AUTO;
-  modulation   = QPSK;
-  system       = SYS_DVBS;
-  transmission = TRANSMISSION_MODE_AUTO;
-  guard        = GUARD_INTERVAL_AUTO;
-  hierarchy    = HIERARCHY_AUTO;
-  rollOff      = ROLLOFF_AUTO;
   modification = CHANNELMOD_NONE;
   schedule     = NULL;
   linkChannels = NULL;
@@ -248,17 +110,18 @@
   provider = strcpyrealloc(provider, Channel.provider);
   portalName = strcpyrealloc(portalName, Channel.portalName);
   memcpy(&__BeginData__, &Channel.__BeginData__, (char *)&Channel.__EndData__ - (char *)&Channel.__BeginData__);
+  parameters = Channel.parameters;
   return *this;
 }
 
 int cChannel::Transponder(int Frequency, char Polarization)
 {
   // some satellites have transponders at the same frequency, just with different polarization:
-  switch (tolower(Polarization)) {
-    case 'h': Frequency += 100000; break;
-    case 'v': Frequency += 200000; break;
-    case 'l': Frequency += 300000; break;
-    case 'r': Frequency += 400000; break;
+  switch (toupper(Polarization)) {
+    case 'H': Frequency += 100000; break;
+    case 'V': Frequency += 200000; break;
+    case 'L': Frequency += 300000; break;
+    case 'R': Frequency += 400000; break;
     default: esyslog("ERROR: invalid value for Polarization '%c'", Polarization);
     }
   return Frequency;
@@ -269,8 +132,11 @@
   int tf = frequency;
   while (tf > 20000)
         tf /= 1000;
-  if (IsSat())
-     tf = Transponder(tf, polarization);
+  if (IsSat()) {
+     const char *p = strpbrk(parameters, "HVLRhvlr"); // lowercase for backwards compatibility
+     if (p)
+        tf = Transponder(tf, *p);
+     }
   return tf;
 }
 
@@ -296,22 +162,16 @@
      frequency    = Channel->frequency;
      source       = Channel->source;
      srate        = Channel->srate;
-     polarization = Channel->polarization;
-     inversion    = Channel->inversion;
-     bandwidth    = Channel->bandwidth;
-     coderateH    = Channel->coderateH;
-     coderateL    = Channel->coderateL;
-     modulation   = Channel->modulation;
-     system       = Channel->system;
-     transmission = Channel->transmission;
-     guard        = Channel->guard;
-     hierarchy    = Channel->hierarchy;
-     rollOff      = Channel->rollOff;
+     parameters   = Channel->parameters;
      }
 }
 
-bool cChannel::SetSatTransponderData(int Source, int Frequency, char Polarization, int Srate, int CoderateH, int Modulation, int System, int RollOff)
+bool cChannel::SetTransponderData(int Source, int Frequency, int Srate, const char *Parameters, bool Quiet)
 {
+  if (strchr(Parameters, ':')) {
+     esyslog("ERROR: parameter string '%s' contains ':'", Parameters);
+     return false;
+     }
   // Workarounds for broadcaster stupidity:
   // Some providers broadcast the transponder frequency of their channels with two different
   // values (like 12551 and 12552), so we need to allow for a little tolerance here
@@ -324,60 +184,14 @@
   if (abs(srate - Srate) <= 1)
      Srate = srate;
 
-  if (source != Source || frequency != Frequency || polarization != Polarization || srate != Srate || coderateH != CoderateH || modulation != Modulation || system != System || rollOff != RollOff) {
+  if (source != Source || frequency != Frequency || srate != Srate || strcmp(parameters, Parameters)) {
      cString OldTransponderData = TransponderDataToString();
      source = Source;
      frequency = Frequency;
-     polarization = Polarization;
      srate = Srate;
-     coderateH = CoderateH;
-     modulation = Modulation;
-     system = System;
-     rollOff = RollOff;
+     parameters = Parameters;
      schedule = NULL;
-     if (Number()) {
-        dsyslog("changing transponder data of channel %d from %s to %s", Number(), *OldTransponderData, *TransponderDataToString());
-        modification |= CHANNELMOD_TRANSP;
-        Channels.SetModified();
-        }
-     }
-  return true;
-}
-
-bool cChannel::SetCableTransponderData(int Source, int Frequency, int Modulation, int Srate, int CoderateH)
-{
-  if (source != Source || frequency != Frequency || modulation != Modulation || srate != Srate || coderateH != CoderateH) {
-     cString OldTransponderData = TransponderDataToString();
-     source = Source;
-     frequency = Frequency;
-     modulation = Modulation;
-     srate = Srate;
-     coderateH = CoderateH;
-     schedule = NULL;
-     if (Number()) {
-        dsyslog("changing transponder data of channel %d from %s to %s", Number(), *OldTransponderData, *TransponderDataToString());
-        modification |= CHANNELMOD_TRANSP;
-        Channels.SetModified();
-        }
-     }
-  return true;
-}
-
-bool cChannel::SetTerrTransponderData(int Source, int Frequency, int Bandwidth, int Modulation, int Hierarchy, int CoderateH, int CoderateL, int Guard, int Transmission)
-{
-  if (source != Source || frequency != Frequency || bandwidth != Bandwidth || modulation != Modulation || hierarchy != Hierarchy || coderateH != CoderateH || coderateL != CoderateL || guard != Guard || transmission != Transmission) {
-     cString OldTransponderData = TransponderDataToString();
-     source = Source;
-     frequency = Frequency;
-     bandwidth = Bandwidth;
-     modulation = Modulation;
-     hierarchy = Hierarchy;
-     coderateH = CoderateH;
-     coderateL = CoderateL;
-     guard = Guard;
-     transmission = Transmission;
-     schedule = NULL;
-     if (Number()) {
+     if (Number() && !Quiet) {
         dsyslog("changing transponder data of channel %d from %s to %s", Number(), *OldTransponderData, *TransponderDataToString());
         modification |= CHANNELMOD_TRANSP;
         Channels.SetModified();
@@ -634,90 +448,11 @@
   refChannel = RefChannel;
 }
 
-static int PrintParameter(char *p, char Name, int Value)
-{
-  return Value >= 0 && Value != 999 ? sprintf(p, "%c%d", Name, Value) : 0;
-}
-
 cString cChannel::TransponderDataToString(void) const
 {
   if (cSource::IsTerr(source))
-     return cString::sprintf("%d:%s:%s", frequency, *ParametersToString(), *cSource::ToString(source));
-  return cString::sprintf("%d:%s:%s:%d", frequency, *ParametersToString(), *cSource::ToString(source), srate);
-}
-
-cString cChannel::ParametersToString(void) const
-{
-  char type = **cSource::ToString(source);
-  if (isdigit(type))
-     type = 'S';
-#define ST(s) if (strchr(s, type))
-  char buffer[64];
-  char *q = buffer;
-  *q = 0;
-  ST(" S ")  q += sprintf(q, "%c", polarization);
-  ST("  T")  q += PrintParameter(q, 'B', MapToUser(bandwidth, BandwidthValues));
-  ST("CST")  q += PrintParameter(q, 'C', MapToUser(coderateH, CoderateValues));
-  ST("  T")  q += PrintParameter(q, 'D', MapToUser(coderateL, CoderateValues));
-  ST("  T")  q += PrintParameter(q, 'G', MapToUser(guard, GuardValues));
-  ST("CST")  q += PrintParameter(q, 'I', MapToUser(inversion, InversionValues));
-  ST("CST")  q += PrintParameter(q, 'M', MapToUser(modulation, ModulationValues));
-  ST(" S ")  q += PrintParameter(q, 'O', MapToUser(rollOff, RollOffValues));
-  ST(" S ")  q += PrintParameter(q, 'S', MapToUser(system, SystemValues));
-  ST("  T")  q += PrintParameter(q, 'T', MapToUser(transmission, TransmissionValues));
-  ST("  T")  q += PrintParameter(q, 'Y', MapToUser(hierarchy, HierarchyValues));
-  return buffer;
-}
-
-static const char *ParseParameter(const char *s, int &Value, const tChannelParameterMap *Map)
-{
-  if (*++s) {
-     char *p = NULL;
-     errno = 0;
-     int n = strtol(s, &p, 10);
-     if (!errno && p != s) {
-        Value = MapToDriver(n, Map);
-        if (Value >= 0)
-           return p;
-        }
-     }
-  esyslog("ERROR: invalid value for parameter '%c'", *(s - 1));
-  return NULL;
-}
-
-static const char *SkipDigits(const char *s)
-{
-  while (*++s && isdigit(*s))
-        ;
-  return s;
-}
-
-bool cChannel::StringToParameters(const char *s)
-{
-  while (s && *s) {
-        switch (toupper(*s)) {
-          case 'A': s = SkipDigits(s); break; // for compatibility with the "multiproto" approach - may be removed in future versions
-          case 'B': s = ParseParameter(s, bandwidth, BandwidthValues); break;
-          case 'C': s = ParseParameter(s, coderateH, CoderateValues); break;
-          case 'D': s = ParseParameter(s, coderateL, CoderateValues); break;
-          case 'G': s = ParseParameter(s, guard, GuardValues); break;
-          case 'H': polarization = *s++; break;
-          case 'I': s = ParseParameter(s, inversion, InversionValues); break;
-          case 'L': polarization = *s++; break;
-          case 'M': s = ParseParameter(s, modulation, ModulationValues); break;
-          case 'O': s = ParseParameter(s, rollOff, RollOffValues); break;
-          case 'P': s = SkipDigits(s); break; // for compatibility with the "multiproto" approach - may be removed in future versions
-          case 'R': polarization = *s++; break;
-          case 'S': s = ParseParameter(s, system, SystemValues); break;
-          case 'T': s = ParseParameter(s, transmission, TransmissionValues); break;
-          case 'V': polarization = *s++; break;
-          case 'Y': s = ParseParameter(s, hierarchy, HierarchyValues); break;
-          case 'Z': s = SkipDigits(s); break; // for compatibility with the original DVB-S2 patch - may be removed in future versions
-          default: esyslog("ERROR: unknown parameter key '%c'", *s);
-                   return false;
-          }
-        }
-  return true;
+     return cString::sprintf("%d:%s:%s", frequency, *parameters, *cSource::ToString(source));
+  return cString::sprintf("%d:%s:%s:%d", frequency, *parameters, *cSource::ToString(source), srate);
 }
 
 cString cChannel::ToText(const cChannel *Channel)
@@ -762,7 +497,7 @@
      q = caidbuf;
      q += IntArrayToString(q, Channel->caids, 16);
      *q = 0;
-     buffer = cString::sprintf("%s:%d:%s:%s:%d:%s:%s:%d:%s:%d:%d:%d:%d\n", FullName, Channel->frequency, *Channel->ParametersToString(), *cSource::ToString(Channel->source), Channel->srate, vpidbuf, apidbuf, Channel->tpid, caidbuf, Channel->sid, Channel->nid, Channel->tid, Channel->rid);
+     buffer = cString::sprintf("%s:%d:%s:%s:%d:%s:%s:%d:%s:%d:%d:%d:%d\n", FullName, Channel->frequency, *Channel->parameters, *cSource::ToString(Channel->source), Channel->srate, vpidbuf, apidbuf, Channel->tpid, caidbuf, Channel->sid, Channel->nid, Channel->tid, Channel->rid);
      }
   return buffer;
 }
@@ -814,7 +549,8 @@
         dpids[0] = 0;
         ok = false;
         if (parambuf && sourcebuf && vpidbuf && apidbuf) {
-           ok = StringToParameters(parambuf) && (source = cSource::FromString(sourcebuf)) >= 0;
+           parameters = parambuf;
+           ok = (source = cSource::FromString(sourcebuf)) >= 0;
 
            char *p;
            if ((p = strchr(vpidbuf, '=')) != NULL) {
diff -ruN vdr-1.7.12/channels.h vdr-1.7.13/channels.h
--- vdr-1.7.12/channels.h	2009-12-06 13:57:45.000000000 +0100
+++ vdr-1.7.13/channels.h	2010-02-21 15:05:49.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: channels.h 2.7 2009/12/06 12:57:45 kls Exp $
+ * $Id: channels.h 2.8 2010/02/21 14:05:49 kls Exp $
  */
 
 #ifndef __CHANNELS_H
@@ -47,27 +47,6 @@
 #define CA_ENCRYPTED_MIN 0x0100
 #define CA_ENCRYPTED_MAX 0xFFFF
 
-struct tChannelParameterMap {
-  int userValue;
-  int driverValue;
-  const char *userString;
-  };
-
-int MapToUser(int Value, const tChannelParameterMap *Map, const char **String = NULL);
-int MapToDriver(int Value, const tChannelParameterMap *Map);
-int UserIndex(int Value, const tChannelParameterMap *Map);
-int DriverIndex(int Value, const tChannelParameterMap *Map);
-
-extern const tChannelParameterMap InversionValues[];
-extern const tChannelParameterMap BandwidthValues[];
-extern const tChannelParameterMap CoderateValues[];
-extern const tChannelParameterMap ModulationValues[];
-extern const tChannelParameterMap SystemValues[];
-extern const tChannelParameterMap TransmissionValues[];
-extern const tChannelParameterMap GuardValues[];
-extern const tChannelParameterMap HierarchyValues[];
-extern const tChannelParameterMap RollOffValues[];
-
 struct tChannelID {
 private:
   int source;
@@ -110,6 +89,7 @@
 class cChannel : public cListObject {
   friend class cSchedules;
   friend class cMenuEditChannel;
+  friend class cDvbSourceParam;
 private:
   static cString ToText(const cChannel *Channel);
   char *name;
@@ -140,25 +120,13 @@
   int rid;
   int number;    // Sequence number assigned on load
   bool groupSep;
-  char polarization;
-  int inversion;
-  int bandwidth;
-  int coderateH;
-  int coderateL;
-  int modulation;
-  int system;
-  int transmission;
-  int guard;
-  int hierarchy;
-  int rollOff;
   int __EndData__;
+  cString parameters;
   int modification;
   mutable const cSchedule *schedule;
   cLinkChannels *linkChannels;
   cChannel *refChannel;
   cString TransponderDataToString(void) const;
-  cString ParametersToString(void) const;
-  bool StringToParameters(const char *s);
 public:
   cChannel(void);
   cChannel(const cChannel &Channel);
@@ -201,17 +169,7 @@
   int Number(void) const { return number; }
   void SetNumber(int Number) { number = Number; }
   bool GroupSep(void) const { return groupSep; }
-  char Polarization(void) const { return polarization; }
-  int Inversion(void) const { return inversion; }
-  int Bandwidth(void) const { return bandwidth; }
-  int CoderateH(void) const { return coderateH; }
-  int CoderateL(void) const { return coderateL; }
-  int Modulation(void) const { return modulation; }
-  int System(void) const { return system; }
-  int Transmission(void) const { return transmission; }
-  int Guard(void) const { return guard; }
-  int Hierarchy(void) const { return hierarchy; }
-  int RollOff(void) const { return rollOff; }
+  const char *Parameters(void) const { return parameters; }
   const cLinkChannels* LinkChannels(void) const { return linkChannels; }
   const cChannel *RefChannel(void) const { return refChannel; }
   bool IsCable(void) const { return cSource::IsCable(source); }
@@ -221,9 +179,7 @@
   bool HasTimer(void) const;
   int Modification(int Mask = CHANNELMOD_ALL);
   void CopyTransponderData(const cChannel *Channel);
-  bool SetSatTransponderData(int Source, int Frequency, char Polarization, int Srate, int CoderateH, int Modulation, int System, int RollOff);
-  bool SetCableTransponderData(int Source, int Frequency, int Modulation, int Srate, int CoderateH);
-  bool SetTerrTransponderData(int Source, int Frequency, int Bandwidth, int Modulation, int Hierarchy, int CodeRateH, int CodeRateL, int Guard, int Transmission);
+  bool SetTransponderData(int Source, int Frequency, int Srate, const char *Parameters, bool Quiet = false);
   void SetId(int Nid, int Tid, int Sid, int Rid = 0);
   void SetName(const char *Name, const char *ShortName, const char *Provider);
   void SetPortalName(const char *PortalName);
diff -ruN vdr-1.7.12/config.h vdr-1.7.13/config.h
--- vdr-1.7.12/config.h	2010-01-31 12:14:02.000000000 +0100
+++ vdr-1.7.13/config.h	2010-02-05 16:38:32.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 2.21 2010/01/31 11:14:02 kls Exp $
+ * $Id: config.h 2.22 2010/02/05 15:38:32 kls Exp $
  */
 
 #ifndef __CONFIG_H
@@ -22,13 +22,13 @@
 
 // VDR's own version number:
 
-#define VDRVERSION  "1.7.12"
-#define VDRVERSNUM   10712  // Version * 10000 + Major * 100 + Minor
+#define VDRVERSION  "1.7.13"
+#define VDRVERSNUM   10713  // Version * 10000 + Major * 100 + Minor
 
 // The plugin API's version number:
 
-#define APIVERSION  "1.7.12"
-#define APIVERSNUM   10712  // Version * 10000 + Major * 100 + Minor
+#define APIVERSION  "1.7.13"
+#define APIVERSNUM   10713  // Version * 10000 + Major * 100 + Minor
 
 // When loading plugins, VDR searches them by their APIVERSION, which
 // may be smaller than VDRVERSION in case there have been no changes to
diff -ruN vdr-1.7.12/device.c vdr-1.7.13/device.c
--- vdr-1.7.12/device.c	2010-01-30 12:06:51.000000000 +0100
+++ vdr-1.7.13/device.c	2010-02-07 12:54:42.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: device.c 2.32 2010/01/30 11:06:51 kls Exp $
+ * $Id: device.c 2.35 2010/02/07 11:54:42 kls Exp $
  */
 
 #include "device.h"
@@ -44,6 +44,18 @@
   cDevice::PrimaryDevice()->PlayTs(Data, Length);
 }
 
+// --- cDeviceHook -----------------------------------------------------------
+
+cDeviceHook::cDeviceHook(void)
+{
+  cDevice::deviceHooks.Add(this);
+}
+
+bool cDeviceHook::DeviceProvidesTransponder(const cDevice *Device, const cChannel *Channel) const
+{
+  return true;
+}
+
 // --- cDevice ---------------------------------------------------------------
 
 // The default priority for non-primary devices:
@@ -59,6 +71,7 @@
 cDevice *cDevice::device[MAXDEVICES] = { NULL };
 cDevice *cDevice::primaryDevice = NULL;
 cDevice *cDevice::avoidDevice = NULL;
+cList<cDeviceHook> cDevice::deviceHooks;
 
 cDevice::cDevice(void)
 :patPmtParser(true)
@@ -570,6 +583,17 @@
   return false;
 }
 
+bool cDevice::DeviceHooksProvidesTransponder(const cChannel *Channel) const
+{
+  cDeviceHook *Hook = deviceHooks.First();
+  while (Hook) {
+        if (!Hook->DeviceProvidesTransponder(this, Channel))
+           return false;
+        Hook = deviceHooks.Next(Hook);
+        }
+  return true;
+}
+
 bool cDevice::ProvidesTransponder(const cChannel *Channel) const
 {
   return false;
@@ -594,6 +618,11 @@
   return 0;
 }
 
+const cChannel *cDevice::GetCurrentlyTunedTransponder(void) const
+{
+  return NULL;
+}
+
 bool cDevice::IsTunedToTransponder(const cChannel *Channel)
 {
   return false;
@@ -1024,11 +1053,15 @@
 void cDevice::Play(void)
 {
   Audios.MuteAudio(mute);
+  if (dvbSubtitleConverter)
+     dvbSubtitleConverter->Freeze(false);
 }
 
 void cDevice::Freeze(void)
 {
   Audios.MuteAudio(true);
+  if (dvbSubtitleConverter)
+     dvbSubtitleConverter->Freeze(true);
 }
 
 void cDevice::Mute(void)
diff -ruN vdr-1.7.12/device.h vdr-1.7.13/device.h
--- vdr-1.7.12/device.h	2010-01-01 16:04:27.000000000 +0100
+++ vdr-1.7.13/device.h	2010-02-06 15:34:41.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: device.h 2.19 2010/01/01 15:04:27 kls Exp $
+ * $Id: device.h 2.21 2010/02/06 14:34:41 kls Exp $
  */
 
 #ifndef __DEVICE_H
@@ -88,10 +88,18 @@
 class cReceiver;
 class cLiveSubtitle;
 
+class cDeviceHook : public cListObject {
+public:
+  cDeviceHook(void);
+  virtual bool DeviceProvidesTransponder(const cDevice *Device, const cChannel *Channel) const;
+          ///< Returns true if the given Device can provide the given Channel's transponder.
+  };
+
 /// The cDevice class is the base from which actual devices can be derived.
 
 class cDevice : public cThread {
   friend class cLiveSubtitle;
+  friend class cDeviceHook;
 private:
   static int numDevices;
   static int useDevice;
@@ -187,6 +195,13 @@
   virtual bool HasDecoder(void) const;
          ///< Tells whether this device has an MPEG decoder.
 
+// Device hooks
+
+private:
+  static cList<cDeviceHook> deviceHooks;
+protected:
+  bool DeviceHooksProvidesTransponder(const cChannel *Channel) const;
+
 // SPU facilities
 
 private:
@@ -232,6 +247,11 @@
          ///< actually provide channels must implement this function.
          ///< The result of this function is used when selecting a device, in order
          ///< to avoid devices that provide more than one system.
+  virtual const cChannel *GetCurrentlyTunedTransponder(void) const;
+         ///< Returns a pointer to the currently tuned transponder.
+         ///< This is not one of the channels in the global cChannels list, but rather
+         ///< a local copy. The result may be NULL if the device is not tuned to any
+         ///< transponder.
   virtual bool IsTunedToTransponder(const cChannel *Channel);
          ///< Returns true if this device is currently tuned to the given Channel's
          ///< transponder.
diff -ruN vdr-1.7.12/diseqc.c vdr-1.7.13/diseqc.c
--- vdr-1.7.12/diseqc.c	2009-12-05 16:57:02.000000000 +0100
+++ vdr-1.7.13/diseqc.c	2010-02-06 16:43:31.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: diseqc.c 2.1 2009/12/05 15:57:02 kls Exp $
+ * $Id: diseqc.c 2.2 2010/02/06 15:43:31 kls Exp $
  */
 
 #include "diseqc.h"
@@ -16,6 +16,11 @@
 
 cDiseqc::cDiseqc(void)
 {
+  devices = 0;
+  source = 0;
+  slof = 0;
+  polarization = 0;
+  lof = 0;
   commands = NULL;
   parsing = false;
   numCodes = 0;
@@ -30,6 +35,21 @@
 {
   bool result = false;
   char *sourcebuf = NULL;
+  if (*s && s[strlen(s) - 1] == ':') {
+     const char *p = s;
+     while (*p && *p != ':') {
+           char *t = NULL;
+           int d = strtol(p, &t, 10);
+           p = t;
+           if (0 < d && d < 32)
+              devices |= (1 << d - 1);
+           else {
+              esyslog("ERROR: invalid device number %d in '%s'", d, s);
+              return false;
+              }
+           }
+     return true;
+     }
   int fields = sscanf(s, "%a[^ ] %d %c %d %a[^\n]", &sourcebuf, &slof, &polarization, &lof, &commands);
   if (fields == 4)
      commands = NULL; //XXX Apparently sscanf() doesn't work correctly if the last %a argument results in an empty string
@@ -126,9 +146,16 @@
 
 cDiseqcs Diseqcs;
 
-cDiseqc *cDiseqcs::Get(int Source, int Frequency, char Polarization)
+cDiseqc *cDiseqcs::Get(int Device, int Source, int Frequency, char Polarization)
 {
+  int Devices = 0;
   for (cDiseqc *p = First(); p; p = Next(p)) {
+      if (p->Devices()) {
+         Devices = p->Devices();
+         continue;
+         }
+      if (Devices && !(Devices & (1 << Device - 1)))
+         continue;
       if (p->Source() == Source && p->Slof() > Frequency && p->Polarization() == toupper(Polarization))
         return p;
       }
diff -ruN vdr-1.7.12/diseqc.conf vdr-1.7.13/diseqc.conf
--- vdr-1.7.12/diseqc.conf	2006-03-31 16:05:52.000000000 +0200
+++ vdr-1.7.13/diseqc.conf	2010-02-06 16:54:04.000000000 +0100
@@ -23,6 +23,10 @@
 #
 # The 'command...' part is optional.
 #
+# A line containing space separated integer numbers, terminated with a ':',
+# defines that any following DiSEqC sequences apply only to the given list
+# of device numbers.
+#
 # Examples:
 
 # Full DiSEqC sequence:
diff -ruN vdr-1.7.12/diseqc.h vdr-1.7.13/diseqc.h
--- vdr-1.7.12/diseqc.h	2002-12-07 14:54:02.000000000 +0100
+++ vdr-1.7.13/diseqc.h	2010-02-06 16:14:42.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: diseqc.h 2.0 2002/12/07 13:54:02 kls Exp $
+ * $Id: diseqc.h 2.1 2010/02/06 15:14:42 kls Exp $
  */
 
 #ifndef __DISEQC_H
@@ -26,6 +26,7 @@
     };
   enum { MaxDiseqcCodes = 6 };
 private:
+  int devices;
   int source;
   int slof;
   char polarization;
@@ -48,6 +49,7 @@
       // it. Call Execute() repeatedly (always providing the same CurrentAction pointer)
       // until it returns daNone. After a successful execution of all commands
       // *CurrentAction points to the value 0x00.
+  int Devices(void) const { return devices; }
   int Source(void) const { return source; }
   int Slof(void) const { return slof; }
   char Polarization(void) const { return polarization; }
@@ -58,7 +60,7 @@
 
 class cDiseqcs : public cConfig<cDiseqc> {
 public:
-  cDiseqc *Get(int Source, int Frequency, char Polarization);
+  cDiseqc *Get(int Device, int Source, int Frequency, char Polarization);
   };
 
 extern cDiseqcs Diseqcs;
diff -ruN vdr-1.7.12/dvbdevice.c vdr-1.7.13/dvbdevice.c
--- vdr-1.7.12/dvbdevice.c	2010-01-04 15:06:24.000000000 +0100
+++ vdr-1.7.13/dvbdevice.c	2010-02-21 18:10:35.000000000 +0100
@@ -4,10 +4,11 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: dvbdevice.c 2.24 2010/01/04 14:06:24 kls Exp $
+ * $Id: dvbdevice.c 2.29 2010/02/21 17:10:35 kls Exp $
  */
 
 #include "dvbdevice.h"
+#include <ctype.h>
 #include <errno.h>
 #include <limits.h>
 #include <linux/dvb/dmx.h>
@@ -17,6 +18,8 @@
 #include "channels.h"
 #include "diseqc.h"
 #include "dvbci.h"
+#include "menuitems.h"
+#include "sourceparams.h"
 
 #define DVBS_TUNE_TIMEOUT  9000 //ms
 #define DVBS_LOCK_TIMEOUT  2000 //ms
@@ -25,11 +28,223 @@
 #define DVBT_TUNE_TIMEOUT  9000 //ms
 #define DVBT_LOCK_TIMEOUT  2000 //ms
 
+// --- DVB Parameter Maps ----------------------------------------------------
+
+const tDvbParameterMap InversionValues[] = {
+  {   0, INVERSION_OFF,  trNOOP("off") },
+  {   1, INVERSION_ON,   trNOOP("on") },
+  { 999, INVERSION_AUTO, trNOOP("auto") },
+  {  -1, 0, NULL }
+  };
+
+const tDvbParameterMap BandwidthValues[] = {
+  {   6, 6000000, "6 MHz" },
+  {   7, 7000000, "7 MHz" },
+  {   8, 8000000, "8 MHz" },
+  {  -1, 0, NULL }
+  };
+
+const tDvbParameterMap CoderateValues[] = {
+  {   0, FEC_NONE, trNOOP("none") },
+  {  12, FEC_1_2,  "1/2" },
+  {  23, FEC_2_3,  "2/3" },
+  {  34, FEC_3_4,  "3/4" },
+  {  35, FEC_3_5,  "3/5" },
+  {  45, FEC_4_5,  "4/5" },
+  {  56, FEC_5_6,  "5/6" },
+  {  67, FEC_6_7,  "6/7" },
+  {  78, FEC_7_8,  "7/8" },
+  {  89, FEC_8_9,  "8/9" },
+  { 910, FEC_9_10, "9/10" },
+  { 999, FEC_AUTO, trNOOP("auto") },
+  {  -1, 0, NULL }
+  };
+
+const tDvbParameterMap ModulationValues[] = {
+  {  16, QAM_16,   "QAM16" },
+  {  32, QAM_32,   "QAM32" },
+  {  64, QAM_64,   "QAM64" },
+  { 128, QAM_128,  "QAM128" },
+  { 256, QAM_256,  "QAM256" },
+  {   2, QPSK,     "QPSK" },
+  {   5, PSK_8,    "8PSK" },
+  {   6, APSK_16,  "16APSK" },
+  {  10, VSB_8,    "VSB8" },
+  {  11, VSB_16,   "VSB16" },
+  { 998, QAM_AUTO, "QAMAUTO" },
+  {  -1, 0, NULL }
+  };
+
+const tDvbParameterMap SystemValues[] = {
+  {   0, SYS_DVBS,  "DVB-S" },
+  {   1, SYS_DVBS2, "DVB-S2" },
+  {  -1, 0, NULL }
+  };
+
+const tDvbParameterMap TransmissionValues[] = {
+  {   2, TRANSMISSION_MODE_2K,   "2K" },
+  {   8, TRANSMISSION_MODE_8K,   "8K" },
+  { 999, TRANSMISSION_MODE_AUTO, trNOOP("auto") },
+  {  -1, 0, NULL }
+  };
+
+const tDvbParameterMap GuardValues[] = {
+  {   4, GUARD_INTERVAL_1_4,  "1/4" },
+  {   8, GUARD_INTERVAL_1_8,  "1/8" },
+  {  16, GUARD_INTERVAL_1_16, "1/16" },
+  {  32, GUARD_INTERVAL_1_32, "1/32" },
+  { 999, GUARD_INTERVAL_AUTO, trNOOP("auto") },
+  {  -1, 0, NULL }
+  };
+
+const tDvbParameterMap HierarchyValues[] = {
+  {   0, HIERARCHY_NONE, trNOOP("none") },
+  {   1, HIERARCHY_1,    "1" },
+  {   2, HIERARCHY_2,    "2" },
+  {   4, HIERARCHY_4,    "4" },
+  { 999, HIERARCHY_AUTO, trNOOP("auto") },
+  {  -1, 0, NULL }
+  };
+
+const tDvbParameterMap RollOffValues[] = {
+  {   0, ROLLOFF_AUTO, trNOOP("auto") },
+  {  20, ROLLOFF_20, "0.20" },
+  {  25, ROLLOFF_25, "0.25" },
+  {  35, ROLLOFF_35, "0.35" },
+  {  -1, 0, NULL }
+  };
+
+int UserIndex(int Value, const tDvbParameterMap *Map)
+{
+  const tDvbParameterMap *map = Map;
+  while (map && map->userValue != -1) {
+        if (map->userValue == Value)
+           return map - Map;
+        map++;
+        }
+  return -1;
+}
+
+int DriverIndex(int Value, const tDvbParameterMap *Map)
+{
+  const tDvbParameterMap *map = Map;
+  while (map && map->userValue != -1) {
+        if (map->driverValue == Value)
+           return map - Map;
+        map++;
+        }
+  return -1;
+}
+
+int MapToUser(int Value, const tDvbParameterMap *Map, const char **String)
+{
+  int n = DriverIndex(Value, Map);
+  if (n >= 0) {
+     if (String)
+        *String = tr(Map[n].userString);
+     return Map[n].userValue;
+     }
+  return -1;
+}
+
+int MapToDriver(int Value, const tDvbParameterMap *Map)
+{
+  int n = UserIndex(Value, Map);
+  if (n >= 0)
+     return Map[n].driverValue;
+  return -1;
+}
+
+// --- cDvbTransponderParameters ---------------------------------------------
+
+cDvbTransponderParameters::cDvbTransponderParameters(const char *Parameters)
+{
+  polarization = 0;
+  inversion    = INVERSION_AUTO;
+  bandwidth    = 8000000;
+  coderateH    = FEC_AUTO;
+  coderateL    = FEC_AUTO;
+  modulation   = QPSK;
+  system       = SYS_DVBS;
+  transmission = TRANSMISSION_MODE_AUTO;
+  guard        = GUARD_INTERVAL_AUTO;
+  hierarchy    = HIERARCHY_AUTO;
+  rollOff      = ROLLOFF_AUTO;
+  Parse(Parameters);
+}
+
+int cDvbTransponderParameters::PrintParameter(char *p, char Name, int Value) const
+{
+  return Value >= 0 && Value != 999 ? sprintf(p, "%c%d", Name, Value) : 0;
+}
+
+cString cDvbTransponderParameters::ToString(char Type) const
+{
+#define ST(s) if (strchr(s, Type))
+  char buffer[64];
+  char *q = buffer;
+  *q = 0;
+  ST(" S ")  q += sprintf(q, "%c", polarization);
+  ST("  T")  q += PrintParameter(q, 'B', MapToUser(bandwidth, BandwidthValues));
+  ST("CST")  q += PrintParameter(q, 'C', MapToUser(coderateH, CoderateValues));
+  ST("  T")  q += PrintParameter(q, 'D', MapToUser(coderateL, CoderateValues));
+  ST("  T")  q += PrintParameter(q, 'G', MapToUser(guard, GuardValues));
+  ST("CST")  q += PrintParameter(q, 'I', MapToUser(inversion, InversionValues));
+  ST("CST")  q += PrintParameter(q, 'M', MapToUser(modulation, ModulationValues));
+  ST(" S ")  q += PrintParameter(q, 'O', MapToUser(rollOff, RollOffValues));
+  ST(" S ")  q += PrintParameter(q, 'S', MapToUser(system, SystemValues));
+  ST("  T")  q += PrintParameter(q, 'T', MapToUser(transmission, TransmissionValues));
+  ST("  T")  q += PrintParameter(q, 'Y', MapToUser(hierarchy, HierarchyValues));
+  return buffer;
+}
+
+const char *cDvbTransponderParameters::ParseParameter(const char *s, int &Value, const tDvbParameterMap *Map)
+{
+  if (*++s) {
+     char *p = NULL;
+     errno = 0;
+     int n = strtol(s, &p, 10);
+     if (!errno && p != s) {
+        Value = MapToDriver(n, Map);
+        if (Value >= 0)
+           return p;
+        }
+     }
+  esyslog("ERROR: invalid value for parameter '%c'", *(s - 1));
+  return NULL;
+}
+
+bool cDvbTransponderParameters::Parse(const char *s)
+{
+  while (s && *s) {
+        switch (toupper(*s)) {
+          case 'B': s = ParseParameter(s, bandwidth, BandwidthValues); break;
+          case 'C': s = ParseParameter(s, coderateH, CoderateValues); break;
+          case 'D': s = ParseParameter(s, coderateL, CoderateValues); break;
+          case 'G': s = ParseParameter(s, guard, GuardValues); break;
+          case 'H': polarization = *s++; break;
+          case 'I': s = ParseParameter(s, inversion, InversionValues); break;
+          case 'L': polarization = *s++; break;
+          case 'M': s = ParseParameter(s, modulation, ModulationValues); break;
+          case 'O': s = ParseParameter(s, rollOff, RollOffValues); break;
+          case 'R': polarization = *s++; break;
+          case 'S': s = ParseParameter(s, system, SystemValues); break;
+          case 'T': s = ParseParameter(s, transmission, TransmissionValues); break;
+          case 'V': polarization = *s++; break;
+          case 'Y': s = ParseParameter(s, hierarchy, HierarchyValues); break;
+          default: esyslog("ERROR: unknown parameter key '%c'", *s);
+                   return false;
+          }
+        }
+  return true;
+}
+
 // --- cDvbTuner -------------------------------------------------------------
 
 class cDvbTuner : public cThread {
 private:
   enum eTunerStatus { tsIdle, tsSet, tsTuned, tsLocked };
+  int device;
   int fd_frontend;
   int adapter, frontend;
   int tuneTimeout;
@@ -46,15 +261,17 @@
   bool SetFrontend(void);
   virtual void Action(void);
 public:
-  cDvbTuner(int Fd_Frontend, int Adapter, int Frontend, fe_delivery_system FrontendType);
+  cDvbTuner(int Device, int Fd_Frontend, int Adapter, int Frontend, fe_delivery_system FrontendType);
   virtual ~cDvbTuner();
+  const cChannel *GetTransponder(void) const { return &channel; }
   bool IsTunedTo(const cChannel *Channel) const;
   void Set(const cChannel *Channel);
   bool Locked(int TimeoutMs = 0);
   };
 
-cDvbTuner::cDvbTuner(int Fd_Frontend, int Adapter, int Frontend, fe_delivery_system FrontendType)
+cDvbTuner::cDvbTuner(int Device, int Fd_Frontend, int Adapter, int Frontend, fe_delivery_system FrontendType)
 {
+  device = Device;
   fd_frontend = Fd_Frontend;
   adapter = Adapter;
   frontend = Frontend;
@@ -84,21 +301,8 @@
      return false; // not tuned to
   if (channel.Source() != Channel->Source() || channel.Transponder() != Channel->Transponder())
      return false; // sufficient mismatch
-  char Type = **cSource::ToString(Channel->Source());
-#define ST(s, p) if (strchr(s, Type)) if (channel.p() != Channel->p()) return false;
   // Polarization is already checked as part of the Transponder.
-  ST("  T", Bandwidth);
-  ST("CST", CoderateH);
-  ST("  T", CoderateL);
-  ST("  T", Guard);
-  ST("CST", Inversion);
-  ST("CST", Modulation);
-  ST(" S ", RollOff);
-  ST(" S ", System);
-  ST("CS ", Srate);
-  ST("  T", Transmission);
-  ST("  T", Hierarchy);
-  return true;
+  return strcmp(channel.Parameters(), Channel->Parameters()) == 0;
 }
 
 void cDvbTuner::Set(const cChannel *Channel)
@@ -171,10 +375,12 @@
      }
   CmdSeq.num = 0;
 
+  cDvbTransponderParameters dtp(channel.Parameters());
+
   if (frontendType == SYS_DVBS || frontendType == SYS_DVBS2) {
      unsigned int frequency = channel.Frequency();
      if (Setup.DiSEqC) {
-        cDiseqc *diseqc = Diseqcs.Get(channel.Source(), channel.Frequency(), channel.Polarization());
+        cDiseqc *diseqc = Diseqcs.Get(device, channel.Source(), channel.Frequency(), dtp.Polarization());
         if (diseqc) {
            if (diseqc->Commands() && (!diseqcCommands || strcmp(diseqcCommands, diseqc->Commands()) != 0)) {
               cDiseqc::eDiseqcActions da;
@@ -220,24 +426,24 @@
            frequency -= Setup.LnbFrequHi;
            tone = SEC_TONE_ON;
            }
-        int volt = (channel.Polarization() == 'v' || channel.Polarization() == 'V' || channel.Polarization() == 'r' || channel.Polarization() == 'R') ? SEC_VOLTAGE_13 : SEC_VOLTAGE_18;
+        int volt = (dtp.Polarization() == 'v' || dtp.Polarization() == 'V' || dtp.Polarization() == 'r' || dtp.Polarization() == 'R') ? SEC_VOLTAGE_13 : SEC_VOLTAGE_18;
         CHECK(ioctl(fd_frontend, FE_SET_VOLTAGE, volt));
         CHECK(ioctl(fd_frontend, FE_SET_TONE, tone));
         }
      frequency = abs(frequency); // Allow for C-band, where the frequency is less than the LOF
 
      // DVB-S/DVB-S2 (common parts)
-     SETCMD(DTV_DELIVERY_SYSTEM, channel.System());
+     SETCMD(DTV_DELIVERY_SYSTEM, dtp.System());
      SETCMD(DTV_FREQUENCY, frequency * 1000UL);
-     SETCMD(DTV_MODULATION, channel.Modulation());
+     SETCMD(DTV_MODULATION, dtp.Modulation());
      SETCMD(DTV_SYMBOL_RATE, channel.Srate() * 1000UL);
-     SETCMD(DTV_INNER_FEC, channel.CoderateH());
-     SETCMD(DTV_INVERSION, channel.Inversion());
-     if (channel.System() == SYS_DVBS2) {
+     SETCMD(DTV_INNER_FEC, dtp.CoderateH());
+     SETCMD(DTV_INVERSION, dtp.Inversion());
+     if (dtp.System() == SYS_DVBS2) {
         if (frontendType == SYS_DVBS2) {
            // DVB-S2
            SETCMD(DTV_PILOT, PILOT_AUTO);
-           SETCMD(DTV_ROLLOFF, channel.RollOff());
+           SETCMD(DTV_ROLLOFF, dtp.RollOff());
            }
         else {
            esyslog("ERROR: frontend %d/%d doesn't provide DVB-S2", adapter, frontend);
@@ -256,10 +462,10 @@
      // DVB-C
      SETCMD(DTV_DELIVERY_SYSTEM, frontendType);
      SETCMD(DTV_FREQUENCY, FrequencyToHz(channel.Frequency()));
-     SETCMD(DTV_INVERSION, channel.Inversion());
+     SETCMD(DTV_INVERSION, dtp.Inversion());
      SETCMD(DTV_SYMBOL_RATE, channel.Srate() * 1000UL);
-     SETCMD(DTV_INNER_FEC, channel.CoderateH());
-     SETCMD(DTV_MODULATION, channel.Modulation());
+     SETCMD(DTV_INNER_FEC, dtp.CoderateH());
+     SETCMD(DTV_MODULATION, dtp.Modulation());
 
      tuneTimeout = DVBC_TUNE_TIMEOUT;
      lockTimeout = DVBC_LOCK_TIMEOUT;
@@ -268,14 +474,14 @@
      // DVB-T
      SETCMD(DTV_DELIVERY_SYSTEM, frontendType);
      SETCMD(DTV_FREQUENCY, FrequencyToHz(channel.Frequency()));
-     SETCMD(DTV_INVERSION, channel.Inversion());
-     SETCMD(DTV_BANDWIDTH_HZ, channel.Bandwidth());
-     SETCMD(DTV_CODE_RATE_HP, channel.CoderateH());
-     SETCMD(DTV_CODE_RATE_LP, channel.CoderateL());
-     SETCMD(DTV_MODULATION, channel.Modulation());
-     SETCMD(DTV_TRANSMISSION_MODE, channel.Transmission());
-     SETCMD(DTV_GUARD_INTERVAL, channel.Guard());
-     SETCMD(DTV_HIERARCHY, channel.Hierarchy());
+     SETCMD(DTV_INVERSION, dtp.Inversion());
+     SETCMD(DTV_BANDWIDTH_HZ, dtp.Bandwidth());
+     SETCMD(DTV_CODE_RATE_HP, dtp.CoderateH());
+     SETCMD(DTV_CODE_RATE_LP, dtp.CoderateL());
+     SETCMD(DTV_MODULATION, dtp.Modulation());
+     SETCMD(DTV_TRANSMISSION_MODE, dtp.Transmission());
+     SETCMD(DTV_GUARD_INTERVAL, dtp.Guard());
+     SETCMD(DTV_HIERARCHY, dtp.Hierarchy());
 
      tuneTimeout = DVBT_TUNE_TIMEOUT;
      lockTimeout = DVBT_LOCK_TIMEOUT;
@@ -353,6 +559,62 @@
         }
 }
 
+// --- cDvbSourceParam -------------------------------------------------------
+
+class cDvbSourceParam : public cSourceParam {
+private:
+  int param;
+  cChannel data;
+  cDvbTransponderParameters dtp;
+public:
+  cDvbSourceParam(char Source, const char *Description);
+  virtual void SetData(cChannel *Channel);
+  virtual void GetData(cChannel *Channel);
+  virtual cOsdItem *GetOsdItem(void);
+  };
+
+cDvbSourceParam::cDvbSourceParam(char Source, const char *Description)
+:cSourceParam(Source, Description)
+{
+  param = 0;
+}
+
+void cDvbSourceParam::SetData(cChannel *Channel)
+{
+  data = *Channel;
+  dtp.Parse(data.Parameters());
+  param = 0;
+}
+
+void cDvbSourceParam::GetData(cChannel *Channel)
+{
+  data.SetTransponderData(Channel->Source(), Channel->Frequency(), data.Srate(), dtp.ToString(Source()), true);
+  *Channel = data;
+}
+
+cOsdItem *cDvbSourceParam::GetOsdItem(void)
+{
+  char type = Source();
+#undef ST
+#define ST(s) if (strchr(s, type))
+  switch (param++) {
+    case  0: ST(" S ")  return new cMenuEditChrItem( tr("Polarization"), &dtp.polarization, "hvlr");             else return GetOsdItem();
+    case  1: ST(" S ")  return new cMenuEditMapItem( tr("System"),       &dtp.system,       SystemValues);       else return GetOsdItem();
+    case  2: ST("CS ")  return new cMenuEditIntItem( tr("Srate"),        &data.srate);                           else return GetOsdItem();
+    case  3: ST("CST")  return new cMenuEditMapItem( tr("Inversion"),    &dtp.inversion,    InversionValues);    else return GetOsdItem();
+    case  4: ST("CST")  return new cMenuEditMapItem( tr("CoderateH"),    &dtp.coderateH,    CoderateValues);     else return GetOsdItem();
+    case  5: ST("  T")  return new cMenuEditMapItem( tr("CoderateL"),    &dtp.coderateL,    CoderateValues);     else return GetOsdItem();
+    case  6: ST("CST")  return new cMenuEditMapItem( tr("Modulation"),   &dtp.modulation,   ModulationValues);   else return GetOsdItem();
+    case  7: ST("  T")  return new cMenuEditMapItem( tr("Bandwidth"),    &dtp.bandwidth,    BandwidthValues);    else return GetOsdItem();
+    case  8: ST("  T")  return new cMenuEditMapItem( tr("Transmission"), &dtp.transmission, TransmissionValues); else return GetOsdItem();
+    case  9: ST("  T")  return new cMenuEditMapItem( tr("Guard"),        &dtp.guard,        GuardValues);        else return GetOsdItem();
+    case 10: ST("  T")  return new cMenuEditMapItem( tr("Hierarchy"),    &dtp.hierarchy,    HierarchyValues);    else return GetOsdItem();
+    case 11: ST(" S ")  return new cMenuEditMapItem( tr("Rolloff"),      &dtp.rollOff,      RollOffValues);      else return GetOsdItem();
+    default: return NULL;
+    }
+  return NULL;
+}
+
 // --- cDvbDevice ------------------------------------------------------------
 
 int cDvbDevice::setTransferModeForDolbyDigital = 1;
@@ -419,7 +681,7 @@
         if (frontendType == SYS_DVBS2)
            numProvidedSystems++;
         isyslog("frontend %d/%d provides %s (\"%s\")", adapter, frontend, DeliverySystems[frontendType], frontendInfo.name);
-        dvbTuner = new cDvbTuner(fd_frontend, adapter, frontend, frontendType);
+        dvbTuner = new cDvbTuner(CardIndex() + 1, fd_frontend, adapter, frontend, frontendType);
         }
      }
   else
@@ -483,6 +745,9 @@
 
 bool cDvbDevice::Initialize(void)
 {
+  new cDvbSourceParam('C', "DVB-C");
+  new cDvbSourceParam('S', "DVB-S");
+  new cDvbSourceParam('T', "DVB-T");
   int Checked = 0;
   int Found = 0;
   for (int Adapter = 0; ; Adapter++) {
@@ -608,10 +873,13 @@
   if (!ProvidesSource(Channel->Source()))
      return false; // doesn't provide source
   if (!cSource::IsSat(Channel->Source()))
-     return true; // source is sufficient for non sat
-  if (frontendType == SYS_DVBS && Channel->System() == SYS_DVBS2)
+     return DeviceHooksProvidesTransponder(Channel); // source is sufficient for non sat
+  cDvbTransponderParameters dtp(Channel->Parameters());
+  if (frontendType == SYS_DVBS && dtp.System() == SYS_DVBS2)
      return false; // requires modulation system which frontend doesn't provide
-  return !Setup.DiSEqC || Diseqcs.Get(Channel->Source(), Channel->Frequency(), Channel->Polarization());
+  if (!Setup.DiSEqC || Diseqcs.Get(CardIndex() + 1, Channel->Source(), Channel->Frequency(), dtp.Polarization()))
+     return DeviceHooksProvidesTransponder(Channel);
+  return false;
 }
 
 bool cDvbDevice::ProvidesChannel(const cChannel *Channel, int Priority, bool *NeedsDetachReceivers) const
@@ -653,6 +921,11 @@
   return numProvidedSystems;
 }
 
+const cChannel *cDvbDevice::GetCurrentlyTunedTransponder(void) const
+{
+  return dvbTuner->GetTransponder(); 
+}
+
 bool cDvbDevice::IsTunedToTransponder(const cChannel *Channel)
 {
   return dvbTuner->IsTunedTo(Channel);
diff -ruN vdr-1.7.12/dvbdevice.h vdr-1.7.13/dvbdevice.h
--- vdr-1.7.12/dvbdevice.h	2010-01-04 15:07:12.000000000 +0100
+++ vdr-1.7.13/dvbdevice.h	2010-02-21 15:06:08.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: dvbdevice.h 2.11 2010/01/04 14:07:12 kls Exp $
+ * $Id: dvbdevice.h 2.13 2010/02/21 14:06:08 kls Exp $
  */
 
 #ifndef __DVBDEVICE_H
@@ -31,6 +31,71 @@
 #define DEV_DVB_AUDIO     "audio"
 #define DEV_DVB_CA        "ca"
 
+struct tDvbParameterMap {
+  int userValue;
+  int driverValue;
+  const char *userString;
+  };
+
+int MapToUser(int Value, const tDvbParameterMap *Map, const char **String = NULL);
+int MapToDriver(int Value, const tDvbParameterMap *Map);
+int UserIndex(int Value, const tDvbParameterMap *Map);
+int DriverIndex(int Value, const tDvbParameterMap *Map);
+
+extern const tDvbParameterMap InversionValues[];
+extern const tDvbParameterMap BandwidthValues[];
+extern const tDvbParameterMap CoderateValues[];
+extern const tDvbParameterMap ModulationValues[];
+extern const tDvbParameterMap SystemValues[];
+extern const tDvbParameterMap TransmissionValues[];
+extern const tDvbParameterMap GuardValues[];
+extern const tDvbParameterMap HierarchyValues[];
+extern const tDvbParameterMap RollOffValues[];
+
+class cDvbTransponderParameters {
+friend class cDvbSourceParam;
+private:
+  char polarization;
+  int inversion;
+  int bandwidth;
+  int coderateH;
+  int coderateL;
+  int modulation;
+  int system;
+  int transmission;
+  int guard;
+  int hierarchy;
+  int rollOff;
+  int PrintParameter(char *p, char Name, int Value) const;
+  const char *ParseParameter(const char *s, int &Value, const tDvbParameterMap *Map);
+public:
+  cDvbTransponderParameters(const char *Parameters = NULL);
+  char Polarization(void) const { return polarization; }
+  int Inversion(void) const { return inversion; }
+  int Bandwidth(void) const { return bandwidth; }
+  int CoderateH(void) const { return coderateH; }
+  int CoderateL(void) const { return coderateL; }
+  int Modulation(void) const { return modulation; }
+  int System(void) const { return system; }
+  int Transmission(void) const { return transmission; }
+  int Guard(void) const { return guard; }
+  int Hierarchy(void) const { return hierarchy; }
+  int RollOff(void) const { return rollOff; }
+  void SetPolarization(char Polarization) { polarization = Polarization; }
+  void SetInversion(int Inversion) { inversion = Inversion; }
+  void SetBandwidth(int Bandwidth) { bandwidth = Bandwidth; }
+  void SetCoderateH(int CoderateH) { coderateH = CoderateH; }
+  void SetCoderateL(int CoderateL) { coderateL = CoderateL; }
+  void SetModulation(int Modulation) { modulation = Modulation; }
+  void SetSystem(int System) { system = System; }
+  void SetTransmission(int Transmission) { transmission = Transmission; }
+  void SetGuard(int Guard) { guard = Guard; }
+  void SetHierarchy(int Hierarchy) { hierarchy = Hierarchy; }
+  void SetRollOff(int RollOff) { rollOff = RollOff; }
+  cString ToString(char Type) const;
+  bool Parse(const char *s);
+  };
+
 class cDvbTuner;
 
 /// The cDvbDevice implements a DVB device which can be accessed through the Linux DVB driver API.
@@ -75,6 +140,7 @@
   virtual bool ProvidesTransponder(const cChannel *Channel) const;
   virtual bool ProvidesChannel(const cChannel *Channel, int Priority = -1, bool *NeedsDetachReceivers = NULL) const;
   virtual int NumProvidedSystems(void) const;
+  virtual const cChannel *GetCurrentlyTunedTransponder(void) const;
   virtual bool IsTunedToTransponder(const cChannel *Channel);
 protected:
   virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView);
diff -ruN vdr-1.7.12/dvbplayer.c vdr-1.7.13/dvbplayer.c
--- vdr-1.7.12/dvbplayer.c	2009-12-13 14:49:56.000000000 +0100
+++ vdr-1.7.13/dvbplayer.c	2010-02-06 13:34:28.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: dvbplayer.c 2.19 2009/12/13 13:49:56 kls Exp $
+ * $Id: dvbplayer.c 2.20 2010/02/06 12:34:28 kls Exp $
  */
 
 #include "dvbplayer.h"
@@ -396,6 +396,7 @@
   uint32_t LastStc = 0;
   int LastReadIFrame = -1;
   int SwitchToPlayFrame = 0;
+  cFrame *DropFrame = NULL;
 
   while (Running()) {
         if (WaitingForData)
@@ -502,6 +503,13 @@
           else
              Sleep = true;
 
+          if (DropFrame) {
+             if (!eof || (playDir != pdForward && DropFrame->Index() > 0) || (playDir == pdForward && DropFrame->Index() < readIndex)) {
+                ringBuffer->Drop(DropFrame); // the very first and last frame are continously repeated to flush data through the device
+                DropFrame = NULL;
+                }
+             }
+
           // Get the next frame from the buffer:
 
           if (!playFrame) {
@@ -546,8 +554,7 @@
                    Sleep = true;
                 }
              if (pc <= 0) {
-                if (!eof || (playDir != pdForward && playFrame->Index() > 0) || (playDir == pdForward && playFrame->Index() < readIndex))
-                   ringBuffer->Drop(playFrame); // the very first and last frame are continously repeated to flush data through the device
+                DropFrame = playFrame;
                 playFrame = NULL;
                 p = NULL;
                 }
diff -ruN vdr-1.7.12/dvbsubtitle.c vdr-1.7.13/dvbsubtitle.c
--- vdr-1.7.12/dvbsubtitle.c	2009-12-05 17:11:54.000000000 +0100
+++ vdr-1.7.13/dvbsubtitle.c	2010-02-07 13:08:13.000000000 +0100
@@ -7,7 +7,7 @@
  * Original author: Marco Schlüßler <marco@lordzodiac.de>
  * With some input from the "subtitle plugin" by Pekka Virtanen <pekka.virtanen@sci.fi>
  *
- * $Id: dvbsubtitle.c 2.3 2009/12/05 16:11:54 kls Exp $
+ * $Id: dvbsubtitle.c 2.4 2010/02/07 12:08:13 kls Exp $
  */
 
 #include "dvbsubtitle.h"
@@ -658,6 +658,7 @@
 {
   dvbSubtitleAssembler = new cDvbSubtitleAssembler;
   osd = NULL;
+  frozen = false;
   pages = new cList<cDvbSubtitlePage>;
   bitmaps = new cList<cDvbSubtitleBitmaps>;
   Start();
@@ -685,6 +686,7 @@
   pages->Clear();
   bitmaps->Clear();
   DELETENULL(osd);
+  frozen = false;
   Unlock();
 }
 
@@ -776,46 +778,48 @@
   int LastSetupLevel = setupLevel;
   cTimeMs Timeout;
   while (Running()) {
-        if (osd) {
-           int NewSetupLevel = setupLevel;
-           if (Timeout.TimedOut() || LastSetupLevel != NewSetupLevel) {
-              DELETENULL(osd);
-              }
-           LastSetupLevel = NewSetupLevel;
-           }
         int WaitMs = 100;
-        Lock();
-        if (cDvbSubtitleBitmaps *sb = bitmaps->First()) {
-           int64_t STC = cDevice::PrimaryDevice()->GetSTC();
-           int64_t Delta = 0;
-           if (STC >= 0) {
-              Delta = LimitTo32Bit(sb->Pts()) - LimitTo32Bit(STC); // some devices only deliver 32 bits
-              if (Delta > (int64_t(1) << 31))
-                 Delta -= (int64_t(1) << 32);
-              else if (Delta < -((int64_t(1) << 31) - 1))
-                 Delta += (int64_t(1) << 32);
-              }
-           else {
-              //TODO sync on PTS? are there actually devices that don't deliver an STC?
+        if (!frozen) {
+           if (osd) {
+              int NewSetupLevel = setupLevel;
+              if (Timeout.TimedOut() || LastSetupLevel != NewSetupLevel) {
+                 DELETENULL(osd);
+                 }
+              LastSetupLevel = NewSetupLevel;
               }
-           Delta /= 90; // STC and PTS are in 1/90000s
-           if (Delta <= MAXDELTA) {
-              if (Delta <= 0) {
-                 dbgconverter("Got %d bitmaps, showing #%d\n", bitmaps->Count(), sb->Index() + 1);
-                 if (AssertOsd()) {
-                    sb->Draw(osd);
-                    Timeout.Set(sb->Timeout() * 1000);
-                    dbgconverter("PTS: %lld  STC: %lld (%lld) timeout: %d\n", sb->Pts(), cDevice::PrimaryDevice()->GetSTC(), Delta, sb->Timeout());
+           Lock();
+           if (cDvbSubtitleBitmaps *sb = bitmaps->First()) {
+              int64_t STC = cDevice::PrimaryDevice()->GetSTC();
+              int64_t Delta = 0;
+              if (STC >= 0) {
+                 Delta = LimitTo32Bit(sb->Pts()) - LimitTo32Bit(STC); // some devices only deliver 32 bits
+                 if (Delta > (int64_t(1) << 31))
+                    Delta -= (int64_t(1) << 32);
+                 else if (Delta < -((int64_t(1) << 31) - 1))
+                    Delta += (int64_t(1) << 32);
+                 }
+              else {
+                 //TODO sync on PTS? are there actually devices that don't deliver an STC?
+                 }
+              Delta /= 90; // STC and PTS are in 1/90000s
+              if (Delta <= MAXDELTA) {
+                 if (Delta <= 0) {
+                    dbgconverter("Got %d bitmaps, showing #%d\n", bitmaps->Count(), sb->Index() + 1);
+                    if (AssertOsd()) {
+                       sb->Draw(osd);
+                       Timeout.Set(sb->Timeout() * 1000);
+                       dbgconverter("PTS: %lld  STC: %lld (%lld) timeout: %d\n", sb->Pts(), cDevice::PrimaryDevice()->GetSTC(), Delta, sb->Timeout());
+                       }
+                    bitmaps->Del(sb);
                     }
-                 bitmaps->Del(sb);
+                 else if (Delta < WaitMs)
+                    WaitMs = Delta;
                  }
-              else if (Delta < WaitMs)
-                 WaitMs = Delta;
+              else
+                 bitmaps->Del(sb);
               }
-           else
-              bitmaps->Del(sb);
+           Unlock();
            }
-        Unlock();
         cCondWait::SleepMs(WaitMs);
         }
 }
diff -ruN vdr-1.7.12/dvbsubtitle.h vdr-1.7.13/dvbsubtitle.h
--- vdr-1.7.12/dvbsubtitle.h	2008-05-25 16:36:52.000000000 +0200
+++ vdr-1.7.13/dvbsubtitle.h	2010-02-07 12:55:14.000000000 +0100
@@ -6,7 +6,7 @@
  *
  * Original author: Marco Schlüßler <marco@lordzodiac.de>
  *
- * $Id: dvbsubtitle.h 2.1 2008/05/25 14:36:52 kls Exp $
+ * $Id: dvbsubtitle.h 2.2 2010/02/07 11:55:14 kls Exp $
  */
 
 #ifndef __DVBSUBTITLE_H
@@ -25,6 +25,7 @@
   static int setupLevel;
   cDvbSubtitleAssembler *dvbSubtitleAssembler;
   cOsd *osd;
+  bool frozen;
   cList<cDvbSubtitlePage> *pages;
   cList<cDvbSubtitleBitmaps> *bitmaps;
   tColor yuv2rgb(int Y, int Cb, int Cr);
@@ -36,6 +37,7 @@
   virtual ~cDvbSubtitleConverter();
   void Action(void);
   void Reset(void);
+  void Freeze(bool Status) { frozen = Status; }
   int ConvertFragments(const uchar *Data, int Length); // for legacy PES recordings
   int Convert(const uchar *Data, int Length);
   static void SetupChanged(void);
diff -ruN vdr-1.7.12/eitscan.c vdr-1.7.13/eitscan.c
--- vdr-1.7.12/eitscan.c	2006-01-07 15:10:17.000000000 +0100
+++ vdr-1.7.13/eitscan.c	2010-02-07 13:12:05.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: eitscan.c 2.0 2006/01/07 14:10:17 kls Exp $
+ * $Id: eitscan.c 2.1 2010/02/07 12:12:05 kls Exp $
  */
 
 #include "eitscan.h"
@@ -127,7 +127,7 @@
 
 void cEITScanner::Process(void)
 {
-  if ((Setup.EPGScanTimeout || !lastActivity) && Channels.MaxNumber() > 1) { // !lastActivity means a scan was forced
+  if (Setup.EPGScanTimeout || !lastActivity) { // !lastActivity means a scan was forced
      time_t now = time(NULL);
      if (now - lastScan > ScanTimeout && now - lastActivity > ActivityTimeout) {
         if (Channels.Lock(false, 10)) {
diff -ruN vdr-1.7.12/epg.c vdr-1.7.13/epg.c
--- vdr-1.7.12/epg.c	2010-01-08 16:20:28.000000000 +0100
+++ vdr-1.7.13/epg.c	2010-02-28 15:24:55.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 2.5 2010/01/08 15:20:28 kls Exp $
+ * $Id: epg.c 2.6 2010/02/28 14:24:55 kls Exp $
  */
 
 #include "epg.h"
@@ -443,8 +443,6 @@
      if (components) {
         for (int i = 0; i < components->NumComponents(); i++) {
             tComponent *p = components->Component(i);
-            if (!Setup.UseDolbyDigital && p->stream == 0x02 && p->type == 0x05)
-               continue;
             fprintf(f, "%sX %s\n", Prefix, *p->ToString());
             }
         }
diff -ruN vdr-1.7.12/libsi/si.c vdr-1.7.13/libsi/si.c
--- vdr-1.7.12/libsi/si.c	2009-12-05 17:20:12.000000000 +0100
+++ vdr-1.7.13/libsi/si.c	2010-02-13 11:31:52.000000000 +0100
@@ -6,7 +6,7 @@
  *   the Free Software Foundation; either version 2 of the License, or     *
  *   (at your option) any later version.                                   *
  *                                                                         *
- *   $Id: si.c 2.1 2009/12/05 16:20:12 kls Exp $
+ *   $Id: si.c 2.2 2010/02/13 10:31:52 kls Exp $
  *                                                                         *
  ***************************************************************************/
 
@@ -311,6 +311,11 @@
 static const char *SystemCharacterTable = NULL;
 bool SystemCharacterTableIsSingleByte = true;
 
+bool systemCharacterTableIsSingleByte(void)
+{
+  return SystemCharacterTableIsSingleByte;
+}
+
 bool SetSystemCharacterTable(const char *CharacterTable) {
    if (CharacterTable) {
       for (unsigned int i = 0; i < NumEntries(CharacterTables1); i++) {
@@ -335,11 +340,7 @@
    return false;
 }
 
-// Determines the character table used in the given buffer and returns
-// a string indicating that table. If no table can be determined, the
-// default ISO6937 is returned. If a table can be determined, the buffer
-// and length are adjusted accordingly.
-static const char *getCharacterTable(const unsigned char *&buffer, int &length, bool *isSingleByte = NULL) {
+const char *getCharacterTable(const unsigned char *&buffer, int &length, bool *isSingleByte) {
    const char *cs = "ISO6937";
    // Workaround for broadcaster stupidity: according to
    // "ETSI EN 300 468" the default character set is ISO6937. But unfortunately some
@@ -375,7 +376,7 @@
    return cs;
 }
 
-static bool convertCharacterTable(const char *from, size_t fromLength, char *to, size_t toLength, const char *fromCode)
+bool convertCharacterTable(const char *from, size_t fromLength, char *to, size_t toLength, const char *fromCode)
 {
   if (SystemCharacterTable) {
      iconv_t cd = iconv_open(SystemCharacterTable, fromCode);
diff -ruN vdr-1.7.12/libsi/si.h vdr-1.7.13/libsi/si.h
--- vdr-1.7.12/libsi/si.h	2009-12-06 12:37:35.000000000 +0100
+++ vdr-1.7.13/libsi/si.h	2010-02-13 11:31:34.000000000 +0100
@@ -6,7 +6,7 @@
  *   the Free Software Foundation; either version 2 of the License, or     *
  *   (at your option) any later version.                                   *
  *                                                                         *
- *   $Id: si.h 2.2 2009/12/06 11:37:35 kls Exp $
+ *   $Id: si.h 2.3 2010/02/13 10:31:34 kls Exp $
  *                                                                         *
  ***************************************************************************/
 
@@ -492,6 +492,13 @@
 // like "iso8859-15" or "utf-8" (case insensitive).
 // Returns true if the character table was recognized.
 bool SetSystemCharacterTable(const char *CharacterTable);
+// Determines the character table used in the given buffer and returns
+// a string indicating that table. If no table can be determined, the
+// default ISO6937 is returned. If a table can be determined, the buffer
+// and length are adjusted accordingly.
+const char *getCharacterTable(const unsigned char *&buffer, int &length, bool *isSingleByte = NULL);
+bool convertCharacterTable(const char *from, size_t fromLength, char *to, size_t toLength, const char *fromCode);
+bool systemCharacterTableIsSingleByte(void);
 
 } //end of namespace
 
diff -ruN vdr-1.7.12/menu.c vdr-1.7.13/menu.c
--- vdr-1.7.12/menu.c	2010-01-31 13:43:24.000000000 +0100
+++ vdr-1.7.13/menu.c	2010-02-21 15:09:19.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 2.14 2010/01/31 12:43:24 kls Exp $
+ * $Id: menu.c 2.17 2010/02/21 14:09:19 kls Exp $
  */
 
 #include "menu.h"
@@ -24,6 +24,7 @@
 #include "recording.h"
 #include "remote.h"
 #include "shutdown.h"
+#include "sourceparams.h"
 #include "sources.h"
 #include "status.h"
 #include "themes.h"
@@ -189,6 +190,7 @@
 private:
   cChannel *channel;
   cChannel data;
+  cSourceParam *sourceParam;
   char name[256];
   void Setup(void);
 public:
@@ -200,6 +202,7 @@
 :cOsdMenu(tr("Edit channel"), 16)
 {
   channel = Channel;
+  sourceParam = NULL;
   if (channel) {
      data = *channel;
      if (New) {
@@ -215,8 +218,6 @@
 void cMenuEditChannel::Setup(void)
 {
   int current = Current();
-  char type = **cSource::ToString(data.source);
-#define ST(s) if (strchr(s, type))
 
   Clear();
 
@@ -242,18 +243,13 @@
   Add(new cMenuEditIntItem( tr("Rid"),          &data.rid, 0));
   XXX*/
   // Parameters for specific types of sources:
-  ST(" S ")  Add(new cMenuEditChrItem( tr("Polarization"), &data.polarization, "hvlr"));
-  ST(" S ")  Add(new cMenuEditMapItem( tr("System"),       &data.system,       SystemValues));
-  ST("CS ")  Add(new cMenuEditIntItem( tr("Srate"),        &data.srate));
-  ST("CST")  Add(new cMenuEditMapItem( tr("Inversion"),    &data.inversion,    InversionValues));
-  ST("CST")  Add(new cMenuEditMapItem( tr("CoderateH"),    &data.coderateH,    CoderateValues));
-  ST("  T")  Add(new cMenuEditMapItem( tr("CoderateL"),    &data.coderateL,    CoderateValues));
-  ST("CST")  Add(new cMenuEditMapItem( tr("Modulation"),   &data.modulation,   ModulationValues));
-  ST("  T")  Add(new cMenuEditMapItem( tr("Bandwidth"),    &data.bandwidth,    BandwidthValues));
-  ST("  T")  Add(new cMenuEditMapItem( tr("Transmission"), &data.transmission, TransmissionValues));
-  ST("  T")  Add(new cMenuEditMapItem( tr("Guard"),        &data.guard,        GuardValues));
-  ST("  T")  Add(new cMenuEditMapItem( tr("Hierarchy"),    &data.hierarchy,    HierarchyValues));
-  ST(" S ")  Add(new cMenuEditMapItem( tr("Rolloff"),      &data.rollOff,      RollOffValues));
+  sourceParam = SourceParams.Get(**cSource::ToString(data.source));
+  if (sourceParam) {
+     sourceParam->SetData(&data);
+     cOsdItem *Item;
+     while ((Item = sourceParam->GetOsdItem()) != NULL)
+           Add(Item);
+     }
 
   SetCurrent(Get(current));
   Display();
@@ -266,6 +262,8 @@
 
   if (state == osUnknown) {
      if (Key == kOk) {
+        if (sourceParam)
+           sourceParam->GetData(&data);
         if (Channels.HasUniqueChannelID(&data, channel)) {
            data.name = strcpyrealloc(data.name, name);
            if (channel) {
@@ -289,8 +287,11 @@
            }
         }
      }
-  if (Key != kNone && (data.source & cSource::st_Mask) != (oldSource & cSource::st_Mask))
+  if (Key != kNone && (data.source & cSource::st_Mask) != (oldSource & cSource::st_Mask)) {
+     if (sourceParam)
+        sourceParam->GetData(&data);
      Setup();
+     }
   return state;
 }
 
@@ -1044,6 +1045,11 @@
      strftime(buffer, sizeof(buffer), "%Y%m%d", &tm_r);
      day = buffer;
      }
+  const char *File = strrchr(timer->File(), FOLDERDELIMCHAR);
+  if (File)
+     File++;
+  else
+     File = timer->File();
   SetText(cString::sprintf("%c\t%d\t%s%s%s\t%02d:%02d\t%02d:%02d\t%s",
                     !(timer->HasFlags(tfActive)) ? ' ' : timer->FirstDay() ? '!' : timer->Recording() ? '#' : '>',
                     timer->Channel()->Number(),
@@ -1054,7 +1060,7 @@
                     timer->Start() % 100,
                     timer->Stop() / 100,
                     timer->Stop() % 100,
-                    timer->File()));
+                    File));
 }
 
 // --- cMenuTimers -----------------------------------------------------------
@@ -1781,22 +1787,6 @@
 
 // --- cMenuCommands ---------------------------------------------------------
 
-class cMenuCommands : public cOsdMenu {
-private:
-  cList<cNestedItem> *commands;
-  cString parameters;
-  cString title;
-  cString command;
-  bool confirm;
-  char *result;
-  bool Parse(const char *s);
-  eOSState Execute(void);
-public:
-  cMenuCommands(const char *Title, cList<cNestedItem> *Commands, const char *Parameters = NULL);
-  virtual ~cMenuCommands();
-  virtual eOSState ProcessKey(eKeys Key);
-  };
-
 cMenuCommands::cMenuCommands(const char *Title, cList<cNestedItem> *Commands, const char *Parameters)
 :cOsdMenu(Title)
 {
diff -ruN vdr-1.7.12/menu.h vdr-1.7.13/menu.h
--- vdr-1.7.12/menu.h	2010-01-17 12:21:42.000000000 +0100
+++ vdr-1.7.13/menu.h	2010-02-06 11:17:24.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 2.1 2010/01/17 11:21:42 kls Exp $
+ * $Id: menu.h 2.2 2010/02/06 10:17:24 kls Exp $
  */
 
 #ifndef __MENU_H
@@ -53,6 +53,22 @@
   virtual eOSState ProcessKey(eKeys Key);
   };
 
+class cMenuCommands : public cOsdMenu {
+private:
+  cList<cNestedItem> *commands;
+  cString parameters;
+  cString title;
+  cString command;
+  bool confirm;
+  char *result;
+  bool Parse(const char *s);
+  eOSState Execute(void);
+public:
+  cMenuCommands(const char *Title, cList<cNestedItem> *Commands, const char *Parameters = NULL);
+  virtual ~cMenuCommands();
+  virtual eOSState ProcessKey(eKeys Key);
+  };
+
 class cMenuEditTimer : public cOsdMenu {
 private:
   cTimer *timer;
diff -ruN vdr-1.7.12/menuitems.c vdr-1.7.13/menuitems.c
--- vdr-1.7.12/menuitems.c	2009-12-06 12:31:20.000000000 +0100
+++ vdr-1.7.13/menuitems.c	2010-02-16 15:44:35.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 2.5 2009/12/06 11:31:20 kls Exp $
+ * $Id: menuitems.c 2.6 2010/02/16 14:44:35 kls Exp $
  */
 
 #include "menuitems.h"
@@ -1007,7 +1007,7 @@
 
 // --- cMenuEditMapItem ------------------------------------------------------
 
-cMenuEditMapItem::cMenuEditMapItem(const char *Name, int *Value, const tChannelParameterMap *Map, const char *ZeroString)
+cMenuEditMapItem::cMenuEditMapItem(const char *Name, int *Value, const tDvbParameterMap *Map, const char *ZeroString)
 :cMenuEditItem(Name)
 {
   value = Value;
diff -ruN vdr-1.7.12/menuitems.h vdr-1.7.13/menuitems.h
--- vdr-1.7.12/menuitems.h	2009-05-03 14:50:34.000000000 +0200
+++ vdr-1.7.13/menuitems.h	2010-02-21 14:58:21.000000000 +0100
@@ -4,13 +4,14 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: menuitems.h 2.2 2009/05/03 12:50:34 kls Exp $
+ * $Id: menuitems.h 2.3 2010/02/21 13:58:21 kls Exp $
  */
 
 #ifndef __MENUITEMS_H
 #define __MENUITEMS_H
 
 #include <limits.h>
+#include "dvbdevice.h"
 #include "osdbase.h"
 
 extern const char *FileNameChars;
@@ -175,11 +176,11 @@
 class cMenuEditMapItem : public cMenuEditItem {
 protected:
   int *value;
-  const tChannelParameterMap *map;
+  const tDvbParameterMap *map;
   const char *zeroString;
   virtual void Set(void);
 public:
-  cMenuEditMapItem(const char *Name, int *Value, const tChannelParameterMap *Map, const char *ZeroString = NULL);
+  cMenuEditMapItem(const char *Name, int *Value, const tDvbParameterMap *Map, const char *ZeroString = NULL);
   virtual eOSState ProcessKey(eKeys Key);
   };
 
diff -ruN vdr-1.7.12/newplugin vdr-1.7.13/newplugin
--- vdr-1.7.12/newplugin	2009-12-06 16:31:58.000000000 +0100
+++ vdr-1.7.13/newplugin	2010-02-06 15:50:03.000000000 +0100
@@ -12,7 +12,7 @@
 # See the main source file 'vdr.c' for copyright information and
 # how to reach the author.
 #
-# $Id: newplugin 2.1 2009/12/06 15:31:58 kls Exp $
+# $Id: newplugin 2.2 2010/02/06 14:50:03 kls Exp $
 
 $PLUGIN_NAME = $ARGV[0] || die "Usage: newplugin <name>\n";
 
@@ -77,7 +77,7 @@
 ### The C++ compiler and options:
 
 CXX      ?= g++
-CXXFLAGS ?= -fPIC -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
+CXXFLAGS ?= -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
 
 ### The directory environment:
 
@@ -85,6 +85,10 @@
 LIBDIR = ../../lib
 TMPDIR = /tmp
 
+### Make sure that necessary options are included:
+
+include \$(VDRDIR)/Make.global
+
 ### Allow user defined options to overwrite defaults:
 
 -include \$(VDRDIR)/Make.config
@@ -104,8 +108,6 @@
 
 DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"\$(PLUGIN)"'
 
-DEFINES += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
-
 ### The object files (add further files here):
 
 OBJS = \$(PLUGIN).o
diff -ruN vdr-1.7.12/nit.c vdr-1.7.13/nit.c
--- vdr-1.7.12/nit.c	2009-12-06 12:36:16.000000000 +0100
+++ vdr-1.7.13/nit.c	2010-02-16 16:37:05.000000000 +0100
@@ -4,12 +4,13 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: nit.c 2.4 2009/12/06 11:36:16 kls Exp $
+ * $Id: nit.c 2.5 2010/02/16 15:37:05 kls Exp $
  */
 
 #include "nit.h"
 #include <linux/dvb/frontend.h>
 #include "channels.h"
+#include "dvbdevice.h"
 #include "eitscan.h"
 #include "libsi/section.h"
 #include "libsi/descriptor.h"
@@ -124,21 +125,22 @@
           switch (d->getDescriptorTag()) {
             case SI::SatelliteDeliverySystemDescriptorTag: {
                  SI::SatelliteDeliverySystemDescriptor *sd = (SI::SatelliteDeliverySystemDescriptor *)d;
+                 cDvbTransponderParameters dtp;
                  int Source = cSource::FromData(cSource::stSat, BCD2INT(sd->getOrbitalPosition()), sd->getWestEastFlag());
                  int Frequency = Frequencies[0] = BCD2INT(sd->getFrequency()) / 100;
-                 static char Polarizations[] = { 'h', 'v', 'l', 'r' };
-                 char Polarization = Polarizations[sd->getPolarization()];
+                 static char Polarizations[] = { 'H', 'V', 'L', 'R' };
+                 dtp.SetPolarization(Polarizations[sd->getPolarization()]);
                  static int CodeRates[] = { FEC_NONE, FEC_1_2, FEC_2_3, FEC_3_4, FEC_5_6, FEC_7_8, FEC_8_9, FEC_3_5, FEC_4_5, FEC_9_10, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_NONE };
-                 int CodeRate = CodeRates[sd->getFecInner()];
+                 dtp.SetCoderateH(CodeRates[sd->getFecInner()]);
                  static int Modulations[] = { QAM_AUTO, QPSK, PSK_8, QAM_16 };
-                 int Modulation = Modulations[sd->getModulationType()];
-                 int System = sd->getModulationSystem() ? SYS_DVBS2 : SYS_DVBS;
+                 dtp.SetModulation(Modulations[sd->getModulationType()]);
+                 dtp.SetSystem(sd->getModulationSystem() ? SYS_DVBS2 : SYS_DVBS);
                  static int RollOffs[] = { ROLLOFF_35, ROLLOFF_25, ROLLOFF_20, ROLLOFF_AUTO };
-                 int RollOff = sd->getModulationSystem() ? RollOffs[sd->getRollOff()] : ROLLOFF_AUTO;
+                 dtp.SetRollOff(sd->getModulationSystem() ? RollOffs[sd->getRollOff()] : ROLLOFF_AUTO);
                  int SymbolRate = BCD2INT(sd->getSymbolRate()) / 10;
                  if (ThisNIT >= 0) {
                     for (int n = 0; n < NumFrequencies; n++) {
-                        if (ISTRANSPONDER(cChannel::Transponder(Frequencies[n], Polarization), Transponder())) {
+                        if (ISTRANSPONDER(cChannel::Transponder(Frequencies[n], dtp.Polarization()), Transponder())) {
                            nits[ThisNIT].hasTransponder = true;
                            //printf("has transponder %d\n", Transponder());
                            break;
@@ -152,23 +154,23 @@
                         if (!Channel->GroupSep() && Channel->Source() == Source && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == ts.getTransportStreamId()) {
                            int transponder = Channel->Transponder();
                            found = true;
-                           if (!ISTRANSPONDER(cChannel::Transponder(Frequency, Polarization), transponder)) {
+                           if (!ISTRANSPONDER(cChannel::Transponder(Frequency, dtp.Polarization()), transponder)) {
                               for (int n = 0; n < NumFrequencies; n++) {
-                                  if (ISTRANSPONDER(cChannel::Transponder(Frequencies[n], Polarization), transponder)) {
+                                  if (ISTRANSPONDER(cChannel::Transponder(Frequencies[n], dtp.Polarization()), transponder)) {
                                      Frequency = Frequencies[n];
                                      break;
                                      }
                                   }
                               }
-                           if (ISTRANSPONDER(cChannel::Transponder(Frequency, Polarization), Transponder())) // only modify channels if we're actually receiving this transponder
-                              Channel->SetSatTransponderData(Source, Frequency, Polarization, SymbolRate, CodeRate, Modulation, System, RollOff);
+                           if (ISTRANSPONDER(cChannel::Transponder(Frequency, dtp.Polarization()), Transponder())) // only modify channels if we're actually receiving this transponder
+                              Channel->SetTransponderData(Source, Frequency, SymbolRate, dtp.ToString('S'));
                            }
                         }
                     if (!found) {
                        for (int n = 0; n < NumFrequencies; n++) {
                            cChannel *Channel = new cChannel;
                            Channel->SetId(ts.getOriginalNetworkId(), ts.getTransportStreamId(), 0, 0);
-                           if (Channel->SetSatTransponderData(Source, Frequencies[n], Polarization, SymbolRate, CodeRate, Modulation, System, RollOff))
+                           if (Channel->SetTransponderData(Source, Frequencies[n], SymbolRate, dtp.ToString('S')))
                               EITScanner.AddTransponder(Channel);
                            else
                               delete Channel;
@@ -179,13 +181,14 @@
                  break;
             case SI::CableDeliverySystemDescriptorTag: {
                  SI::CableDeliverySystemDescriptor *sd = (SI::CableDeliverySystemDescriptor *)d;
+                 cDvbTransponderParameters dtp;
                  int Source = cSource::FromData(cSource::stCable);
                  int Frequency = Frequencies[0] = BCD2INT(sd->getFrequency()) / 10;
                  //XXX FEC_outer???
                  static int CodeRates[] = { FEC_NONE, FEC_1_2, FEC_2_3, FEC_3_4, FEC_5_6, FEC_7_8, FEC_8_9, FEC_3_5, FEC_4_5, FEC_9_10, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_NONE };
-                 int CodeRate = CodeRates[sd->getFecInner()];
+                 dtp.SetCoderateH(CodeRates[sd->getFecInner()]);
                  static int Modulations[] = { QPSK, QAM_16, QAM_32, QAM_64, QAM_128, QAM_256, QAM_AUTO };
-                 int Modulation = Modulations[min(sd->getModulation(), 6)];
+                 dtp.SetModulation(Modulations[min(sd->getModulation(), 6)]);
                  int SymbolRate = BCD2INT(sd->getSymbolRate()) / 10;
                  if (ThisNIT >= 0) {
                     for (int n = 0; n < NumFrequencies; n++) {
@@ -212,14 +215,14 @@
                                   }
                               }
                            if (ISTRANSPONDER(Frequency / 1000, Transponder())) // only modify channels if we're actually receiving this transponder
-                              Channel->SetCableTransponderData(Source, Frequency, Modulation, SymbolRate, CodeRate);
+                              Channel->SetTransponderData(Source, Frequency, SymbolRate, dtp.ToString('C'));
                            }
                         }
                     if (!found) {
                         for (int n = 0; n < NumFrequencies; n++) {
                            cChannel *Channel = new cChannel;
                            Channel->SetId(ts.getOriginalNetworkId(), ts.getTransportStreamId(), 0, 0);
-                           if (Channel->SetCableTransponderData(Source, Frequencies[n], Modulation, SymbolRate, CodeRate))
+                           if (Channel->SetTransponderData(Source, Frequencies[n], SymbolRate, dtp.ToString('C')))
                               EITScanner.AddTransponder(Channel);
                            else
                               delete Channel;
@@ -230,21 +233,22 @@
                  break;
             case SI::TerrestrialDeliverySystemDescriptorTag: {
                  SI::TerrestrialDeliverySystemDescriptor *sd = (SI::TerrestrialDeliverySystemDescriptor *)d;
+                 cDvbTransponderParameters dtp;
                  int Source = cSource::FromData(cSource::stTerr);
                  int Frequency = Frequencies[0] = sd->getFrequency() * 10;
                  static int Bandwidths[] = { 8000000, 7000000, 6000000, 0, 0, 0, 0, 0 };
-                 int Bandwidth = Bandwidths[sd->getBandwidth()];
+                 dtp.SetBandwidth(Bandwidths[sd->getBandwidth()]);
                  static int Constellations[] = { QPSK, QAM_16, QAM_64, QAM_AUTO };
-                 int Constellation = Constellations[sd->getConstellation()];
+                 dtp.SetModulation(Constellations[sd->getConstellation()]);
                  static int Hierarchies[] = { HIERARCHY_NONE, HIERARCHY_1, HIERARCHY_2, HIERARCHY_4, HIERARCHY_AUTO, HIERARCHY_AUTO, HIERARCHY_AUTO, HIERARCHY_AUTO };
-                 int Hierarchy = Hierarchies[sd->getHierarchy()];
+                 dtp.SetHierarchy(Hierarchies[sd->getHierarchy()]);
                  static int CodeRates[] = { FEC_1_2, FEC_2_3, FEC_3_4, FEC_5_6, FEC_7_8, FEC_AUTO, FEC_AUTO, FEC_AUTO };
-                 int CodeRateHP = CodeRates[sd->getCodeRateHP()];
-                 int CodeRateLP = CodeRates[sd->getCodeRateLP()];
+                 dtp.SetCoderateH(CodeRates[sd->getCodeRateHP()]);
+                 dtp.SetCoderateL(CodeRates[sd->getCodeRateLP()]);
                  static int GuardIntervals[] = { GUARD_INTERVAL_1_32, GUARD_INTERVAL_1_16, GUARD_INTERVAL_1_8, GUARD_INTERVAL_1_4 };
-                 int GuardInterval = GuardIntervals[sd->getGuardInterval()];
+                 dtp.SetGuard(GuardIntervals[sd->getGuardInterval()]);
                  static int TransmissionModes[] = { TRANSMISSION_MODE_2K, TRANSMISSION_MODE_8K, TRANSMISSION_MODE_AUTO, TRANSMISSION_MODE_AUTO };
-                 int TransmissionMode = TransmissionModes[sd->getTransmissionMode()];
+                 dtp.SetTransmission(TransmissionModes[sd->getTransmissionMode()]);
                  if (ThisNIT >= 0) {
                     for (int n = 0; n < NumFrequencies; n++) {
                         if (ISTRANSPONDER(Frequencies[n] / 1000000, Transponder())) {
@@ -270,14 +274,14 @@
                                   }
                               }
                            if (ISTRANSPONDER(Frequency / 1000000, Transponder())) // only modify channels if we're actually receiving this transponder
-                              Channel->SetTerrTransponderData(Source, Frequency, Bandwidth, Constellation, Hierarchy, CodeRateHP, CodeRateLP, GuardInterval, TransmissionMode);
+                              Channel->SetTransponderData(Source, Frequency, 0, dtp.ToString('T'));
                            }
                         }
                     if (!found) {
                        for (int n = 0; n < NumFrequencies; n++) {
                            cChannel *Channel = new cChannel;
                            Channel->SetId(ts.getOriginalNetworkId(), ts.getTransportStreamId(), 0, 0);
-                           if (Channel->SetTerrTransponderData(Source, Frequencies[n], Bandwidth, Constellation, Hierarchy, CodeRateHP, CodeRateLP, GuardInterval, TransmissionMode))
+                           if (Channel->SetTransponderData(Source, Frequencies[n], 0, dtp.ToString('T')))
                               EITScanner.AddTransponder(Channel);
                            else
                               delete Channel;
diff -ruN vdr-1.7.12/po/ca_ES.po vdr-1.7.13/po/ca_ES.po
--- vdr-1.7.12/po/ca_ES.po	2010-01-23 16:15:30.000000000 +0100
+++ vdr-1.7.13/po/ca_ES.po	2010-02-28 13:19:49.000000000 +0100
@@ -10,7 +10,7 @@
 msgstr ""
 "Project-Id-Version: VDR 1.6.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-01-17 16:18+0100\n"
+"POT-Creation-Date: 2010-02-28 13:19+0100\n"
 "PO-Revision-Date: 2008-03-02 19:02+0100\n"
 "Last-Translator: Luca Olivetti <luca@ventoso.org>\n"
 "Language-Team: Catalanian\n"
@@ -18,6 +18,15 @@
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "*** Invalid Channel ***"
+msgstr "*** Canal incorrecte ***"
+
+msgid "Channel not available!"
+msgstr "Canal no disponible!"
+
+msgid "Can't start Transfer Mode!"
+msgstr "No puc iniciar el mode de transferència!"
+
 msgid "off"
 msgstr "off"
 
@@ -30,14 +39,41 @@
 msgid "none"
 msgstr "cap"
 
-msgid "*** Invalid Channel ***"
-msgstr "*** Canal incorrecte ***"
+msgid "Polarization"
+msgstr "Polarització"
 
-msgid "Channel not available!"
-msgstr "Canal no disponible!"
+msgid "System"
+msgstr ""
 
-msgid "Can't start Transfer Mode!"
-msgstr "No puc iniciar el mode de transferència!"
+msgid "Srate"
+msgstr "Srate"
+
+msgid "Inversion"
+msgstr "Inversió"
+
+msgid "CoderateH"
+msgstr "CoderateH"
+
+msgid "CoderateL"
+msgstr "CoderateL"
+
+msgid "Modulation"
+msgstr "Modulació"
+
+msgid "Bandwidth"
+msgstr "Amplada de banda"
+
+msgid "Transmission"
+msgstr "Transmissió"
+
+msgid "Guard"
+msgstr "Protegir"
+
+msgid "Hierarchy"
+msgstr "Jerarquia"
+
+msgid "Rolloff"
+msgstr ""
 
 msgid "Starting EPG scan"
 msgstr "Iniciant exploració EPG"
@@ -526,42 +562,6 @@
 msgid "Sid"
 msgstr "Sid"
 
-msgid "Polarization"
-msgstr "Polarització"
-
-msgid "System"
-msgstr ""
-
-msgid "Srate"
-msgstr "Srate"
-
-msgid "Inversion"
-msgstr "Inversió"
-
-msgid "CoderateH"
-msgstr "CoderateH"
-
-msgid "CoderateL"
-msgstr "CoderateL"
-
-msgid "Modulation"
-msgstr "Modulació"
-
-msgid "Bandwidth"
-msgstr "Amplada de banda"
-
-msgid "Transmission"
-msgstr "Transmissió"
-
-msgid "Guard"
-msgstr "Protegir"
-
-msgid "Hierarchy"
-msgstr "Jerarquia"
-
-msgid "Rolloff"
-msgstr ""
-
 msgid "Channel settings are not unique!"
 msgstr "Propietats del canal duplicades!"
 
diff -ruN vdr-1.7.12/po/cs_CZ.po vdr-1.7.13/po/cs_CZ.po
--- vdr-1.7.12/po/cs_CZ.po	2010-01-23 16:15:30.000000000 +0100
+++ vdr-1.7.13/po/cs_CZ.po	2010-02-28 13:19:49.000000000 +0100
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: VDR 1.6.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-01-17 16:18+0100\n"
+"POT-Creation-Date: 2010-02-28 13:19+0100\n"
 "PO-Revision-Date: 2008-02-28 15:00+0200\n"
 "Last-Translator: Vladimír Bárta <vladimir.barta@k2atmitec.cz>, Jiøí Dobrý <jdobry@centrum.cz>\n"
 "Language-Team: Czech\n"
@@ -16,6 +16,15 @@
 "Content-Type: text/plain; charset=ISO-8859-2\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "*** Invalid Channel ***"
+msgstr "*** Neplatný kanál ***"
+
+msgid "Channel not available!"
+msgstr "Kanál není dostupný!"
+
+msgid "Can't start Transfer Mode!"
+msgstr "Nelze zaèít s pøenosem"
+
 msgid "off"
 msgstr "vyp."
 
@@ -28,14 +37,41 @@
 msgid "none"
 msgstr "¾ádný"
 
-msgid "*** Invalid Channel ***"
-msgstr "*** Neplatný kanál ***"
+msgid "Polarization"
+msgstr "Polarizace"
 
-msgid "Channel not available!"
-msgstr "Kanál není dostupný!"
+msgid "System"
+msgstr ""
 
-msgid "Can't start Transfer Mode!"
-msgstr "Nelze zaèít s pøenosem"
+msgid "Srate"
+msgstr "Srate"
+
+msgid "Inversion"
+msgstr "Inversion"
+
+msgid "CoderateH"
+msgstr "CoderateH"
+
+msgid "CoderateL"
+msgstr "CoderateL"
+
+msgid "Modulation"
+msgstr "Modulace"
+
+msgid "Bandwidth"
+msgstr "©íøka pásma"
+
+msgid "Transmission"
+msgstr "Pøenos"
+
+msgid "Guard"
+msgstr "Guard"
+
+msgid "Hierarchy"
+msgstr "Hierarchy"
+
+msgid "Rolloff"
+msgstr ""
 
 msgid "Starting EPG scan"
 msgstr "Zaèíná prohledávání EPG"
@@ -524,42 +560,6 @@
 msgid "Sid"
 msgstr "Sid"
 
-msgid "Polarization"
-msgstr "Polarizace"
-
-msgid "System"
-msgstr ""
-
-msgid "Srate"
-msgstr "Srate"
-
-msgid "Inversion"
-msgstr "Inversion"
-
-msgid "CoderateH"
-msgstr "CoderateH"
-
-msgid "CoderateL"
-msgstr "CoderateL"
-
-msgid "Modulation"
-msgstr "Modulace"
-
-msgid "Bandwidth"
-msgstr "©íøka pásma"
-
-msgid "Transmission"
-msgstr "Pøenos"
-
-msgid "Guard"
-msgstr "Guard"
-
-msgid "Hierarchy"
-msgstr "Hierarchy"
-
-msgid "Rolloff"
-msgstr ""
-
 msgid "Channel settings are not unique!"
 msgstr "Nastavení kanálù nejsou unikátní!"
 
diff -ruN vdr-1.7.12/po/da_DK.po vdr-1.7.13/po/da_DK.po
--- vdr-1.7.12/po/da_DK.po	2010-01-23 16:15:30.000000000 +0100
+++ vdr-1.7.13/po/da_DK.po	2010-02-28 13:19:49.000000000 +0100
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: VDR 1.6.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-01-17 16:18+0100\n"
+"POT-Creation-Date: 2010-02-28 13:19+0100\n"
 "PO-Revision-Date: 2007-08-12 14:17+0200\n"
 "Last-Translator: Mogens Elneff <mogens@elneff.dk>\n"
 "Language-Team: Danish\n"
@@ -15,6 +15,15 @@
 "Content-Type: text/plain; charset=ISO-8859-15\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "*** Invalid Channel ***"
+msgstr "*** Ugyldig kanal! ***"
+
+msgid "Channel not available!"
+msgstr "Kanal er ikke tilgængelig!"
+
+msgid "Can't start Transfer Mode!"
+msgstr "Kan ikke starte Transfer Mode!"
+
 msgid "off"
 msgstr "fra"
 
@@ -27,14 +36,41 @@
 msgid "none"
 msgstr "ingen"
 
-msgid "*** Invalid Channel ***"
-msgstr "*** Ugyldig kanal! ***"
+msgid "Polarization"
+msgstr "Polarisation"
 
-msgid "Channel not available!"
-msgstr "Kanal er ikke tilgængelig!"
+msgid "System"
+msgstr ""
 
-msgid "Can't start Transfer Mode!"
-msgstr "Kan ikke starte Transfer Mode!"
+msgid "Srate"
+msgstr "Srate"
+
+msgid "Inversion"
+msgstr "Inversion"
+
+msgid "CoderateH"
+msgstr "CoderateH"
+
+msgid "CoderateL"
+msgstr "CoderateL"
+
+msgid "Modulation"
+msgstr "Modulation"
+
+msgid "Bandwidth"
+msgstr "Båndbredde"
+
+msgid "Transmission"
+msgstr "Transmission"
+
+msgid "Guard"
+msgstr "Guard"
+
+msgid "Hierarchy"
+msgstr "Hierarki"
+
+msgid "Rolloff"
+msgstr ""
 
 msgid "Starting EPG scan"
 msgstr "Starter EPG skanning"
@@ -523,42 +559,6 @@
 msgid "Sid"
 msgstr "Sid"
 
-msgid "Polarization"
-msgstr "Polarisation"
-
-msgid "System"
-msgstr ""
-
-msgid "Srate"
-msgstr "Srate"
-
-msgid "Inversion"
-msgstr "Inversion"
-
-msgid "CoderateH"
-msgstr "CoderateH"
-
-msgid "CoderateL"
-msgstr "CoderateL"
-
-msgid "Modulation"
-msgstr "Modulation"
-
-msgid "Bandwidth"
-msgstr "Båndbredde"
-
-msgid "Transmission"
-msgstr "Transmission"
-
-msgid "Guard"
-msgstr "Guard"
-
-msgid "Hierarchy"
-msgstr "Hierarki"
-
-msgid "Rolloff"
-msgstr ""
-
 msgid "Channel settings are not unique!"
 msgstr "Kanalindstillinger er ikke entydige!"
 
diff -ruN vdr-1.7.12/po/de_DE.po vdr-1.7.13/po/de_DE.po
--- vdr-1.7.12/po/de_DE.po	2010-01-23 16:15:30.000000000 +0100
+++ vdr-1.7.13/po/de_DE.po	2010-02-28 13:19:49.000000000 +0100
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: VDR 1.6.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-01-17 16:18+0100\n"
+"POT-Creation-Date: 2010-02-28 13:19+0100\n"
 "PO-Revision-Date: 2010-01-16 16:46+0100\n"
 "Last-Translator: Klaus Schmidinger <kls@tvdr.de>\n"
 "Language-Team: German\n"
@@ -15,6 +15,15 @@
 "Content-Type: text/plain; charset=ISO-8859-15\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "*** Invalid Channel ***"
+msgstr "*** Ungültiger Kanal ***"
+
+msgid "Channel not available!"
+msgstr "Kanal nicht verfügbar!"
+
+msgid "Can't start Transfer Mode!"
+msgstr "Transfer-Mode kann nicht gestartet werden!"
+
 msgid "off"
 msgstr "aus"
 
@@ -27,14 +36,41 @@
 msgid "none"
 msgstr "keine"
 
-msgid "*** Invalid Channel ***"
-msgstr "*** Ungültiger Kanal ***"
+msgid "Polarization"
+msgstr "Polarisation"
 
-msgid "Channel not available!"
-msgstr "Kanal nicht verfügbar!"
+msgid "System"
+msgstr "System"
 
-msgid "Can't start Transfer Mode!"
-msgstr "Transfer-Mode kann nicht gestartet werden!"
+msgid "Srate"
+msgstr "Srate"
+
+msgid "Inversion"
+msgstr "Inversion"
+
+msgid "CoderateH"
+msgstr "CoderateH"
+
+msgid "CoderateL"
+msgstr "CoderateL"
+
+msgid "Modulation"
+msgstr "Modulation"
+
+msgid "Bandwidth"
+msgstr "Bandbreite"
+
+msgid "Transmission"
+msgstr "Transmission"
+
+msgid "Guard"
+msgstr "Guard"
+
+msgid "Hierarchy"
+msgstr "Hierarchie"
+
+msgid "Rolloff"
+msgstr "Rolloff"
 
 msgid "Starting EPG scan"
 msgstr "Aktualisiere EPG-Daten"
@@ -523,42 +559,6 @@
 msgid "Sid"
 msgstr "Sid"
 
-msgid "Polarization"
-msgstr "Polarisation"
-
-msgid "System"
-msgstr "System"
-
-msgid "Srate"
-msgstr "Srate"
-
-msgid "Inversion"
-msgstr "Inversion"
-
-msgid "CoderateH"
-msgstr "CoderateH"
-
-msgid "CoderateL"
-msgstr "CoderateL"
-
-msgid "Modulation"
-msgstr "Modulation"
-
-msgid "Bandwidth"
-msgstr "Bandbreite"
-
-msgid "Transmission"
-msgstr "Transmission"
-
-msgid "Guard"
-msgstr "Guard"
-
-msgid "Hierarchy"
-msgstr "Hierarchie"
-
-msgid "Rolloff"
-msgstr "Rolloff"
-
 msgid "Channel settings are not unique!"
 msgstr "Kanaleinstellungen sind nicht eindeutig!"
 
@@ -597,7 +597,7 @@
 
 #, fuzzy, c-format
 msgid "Folder name must not contain '%c'!"
-msgstr "Verzeichnisname darf kein '{', '}' oder '#' enthalten!"
+msgstr "Verzeichnisname darf kein '%c' enthalten!"
 
 msgid "Button$Select"
 msgstr "Auswählen"
diff -ruN vdr-1.7.12/po/el_GR.po vdr-1.7.13/po/el_GR.po
--- vdr-1.7.12/po/el_GR.po	2010-01-23 16:15:30.000000000 +0100
+++ vdr-1.7.13/po/el_GR.po	2010-02-28 13:19:49.000000000 +0100
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: VDR 1.6.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-01-17 16:18+0100\n"
+"POT-Creation-Date: 2010-02-28 13:19+0100\n"
 "PO-Revision-Date: 2007-08-12 14:17+0200\n"
 "Last-Translator: Dimitrios Dimitrakos <mail@dimitrios.de>\n"
 "Language-Team: Greek\n"
@@ -15,6 +15,15 @@
 "Content-Type: text/plain; charset=ISO-8859-7\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "*** Invalid Channel ***"
+msgstr "*** Áêõñï êáíÜëç ***"
+
+msgid "Channel not available!"
+msgstr "Ôï êáíÜëç äÝí åßíáé äéáèÝóéìï!"
+
+msgid "Can't start Transfer Mode!"
+msgstr "Áäõíáìßá åêêßíçóçò êáôÜóôáóçò ìåôáöïñÜò!"
+
 msgid "off"
 msgstr "êëåéóôü"
 
@@ -27,14 +36,41 @@
 msgid "none"
 msgstr "êáíÝíá"
 
-msgid "*** Invalid Channel ***"
-msgstr "*** Áêõñï êáíÜëç ***"
+msgid "Polarization"
+msgstr "Ðüëùóç"
 
-msgid "Channel not available!"
-msgstr "Ôï êáíÜëç äÝí åßíáé äéáèÝóéìï!"
+msgid "System"
+msgstr ""
 
-msgid "Can't start Transfer Mode!"
-msgstr "Áäõíáìßá åêêßíçóçò êáôÜóôáóçò ìåôáöïñÜò!"
+msgid "Srate"
+msgstr "Srate"
+
+msgid "Inversion"
+msgstr "ÁíôéóôñïöÞ"
+
+msgid "CoderateH"
+msgstr "Ñõèìüò Êþäéêá H"
+
+msgid "CoderateL"
+msgstr "Ñõèìüò Êþäéêá L"
+
+msgid "Modulation"
+msgstr "Äéáìüñöùóç"
+
+msgid "Bandwidth"
+msgstr "Åýñïò Óõ÷íïôÞôùí"
+
+msgid "Transmission"
+msgstr "ÌåôÜäïóç"
+
+msgid "Guard"
+msgstr "Ðñïóôáóßá"
+
+msgid "Hierarchy"
+msgstr "Éåñáñ÷åßá"
+
+msgid "Rolloff"
+msgstr ""
 
 msgid "Starting EPG scan"
 msgstr "Áñ÷Þ óÜñùóç EPG"
@@ -523,42 +559,6 @@
 msgid "Sid"
 msgstr "Sid"
 
-msgid "Polarization"
-msgstr "Ðüëùóç"
-
-msgid "System"
-msgstr ""
-
-msgid "Srate"
-msgstr "Srate"
-
-msgid "Inversion"
-msgstr "ÁíôéóôñïöÞ"
-
-msgid "CoderateH"
-msgstr "Ñõèìüò Êþäéêá H"
-
-msgid "CoderateL"
-msgstr "Ñõèìüò Êþäéêá L"
-
-msgid "Modulation"
-msgstr "Äéáìüñöùóç"
-
-msgid "Bandwidth"
-msgstr "Åýñïò Óõ÷íïôÞôùí"
-
-msgid "Transmission"
-msgstr "ÌåôÜäïóç"
-
-msgid "Guard"
-msgstr "Ðñïóôáóßá"
-
-msgid "Hierarchy"
-msgstr "Éåñáñ÷åßá"
-
-msgid "Rolloff"
-msgstr ""
-
 msgid "Channel settings are not unique!"
 msgstr "Ïé ñéèìýóåéò ôïí êáíáëéþí áëëõëïóõìðßðôïõí!"
 
diff -ruN vdr-1.7.12/po/es_ES.po vdr-1.7.13/po/es_ES.po
--- vdr-1.7.12/po/es_ES.po	2010-01-23 16:15:30.000000000 +0100
+++ vdr-1.7.13/po/es_ES.po	2010-02-28 13:19:49.000000000 +0100
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: VDR 1.6.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-01-17 16:18+0100\n"
+"POT-Creation-Date: 2010-02-28 13:19+0100\n"
 "PO-Revision-Date: 2008-03-02 19:02+0100\n"
 "Last-Translator: Luca Olivetti <luca@ventoso.org>\n"
 "Language-Team: Spanish\n"
@@ -16,6 +16,15 @@
 "Content-Type: text/plain; charset=ISO-8859-15\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "*** Invalid Channel ***"
+msgstr "*** Canal no válido ***"
+
+msgid "Channel not available!"
+msgstr "!Canal no disponible!"
+
+msgid "Can't start Transfer Mode!"
+msgstr "¡No se puede iniciar el modo de transferencia!"
+
 msgid "off"
 msgstr "off"
 
@@ -28,14 +37,41 @@
 msgid "none"
 msgstr "ninguno"
 
-msgid "*** Invalid Channel ***"
-msgstr "*** Canal no válido ***"
+msgid "Polarization"
+msgstr "Polarización"
 
-msgid "Channel not available!"
-msgstr "!Canal no disponible!"
+msgid "System"
+msgstr ""
 
-msgid "Can't start Transfer Mode!"
-msgstr "¡No se puede iniciar el modo de transferencia!"
+msgid "Srate"
+msgstr "T.símbolos"
+
+msgid "Inversion"
+msgstr "Inversion"
+
+msgid "CoderateH"
+msgstr "CoderateH"
+
+msgid "CoderateL"
+msgstr "CoderateL"
+
+msgid "Modulation"
+msgstr "Modulación"
+
+msgid "Bandwidth"
+msgstr "Ancho de banda"
+
+msgid "Transmission"
+msgstr "Transmisión"
+
+msgid "Guard"
+msgstr "Int.Guarda"
+
+msgid "Hierarchy"
+msgstr "Jerarquía"
+
+msgid "Rolloff"
+msgstr ""
 
 msgid "Starting EPG scan"
 msgstr "Iniciando la exploración de EPG"
@@ -524,42 +560,6 @@
 msgid "Sid"
 msgstr "Sid"
 
-msgid "Polarization"
-msgstr "Polarización"
-
-msgid "System"
-msgstr ""
-
-msgid "Srate"
-msgstr "T.símbolos"
-
-msgid "Inversion"
-msgstr "Inversion"
-
-msgid "CoderateH"
-msgstr "CoderateH"
-
-msgid "CoderateL"
-msgstr "CoderateL"
-
-msgid "Modulation"
-msgstr "Modulación"
-
-msgid "Bandwidth"
-msgstr "Ancho de banda"
-
-msgid "Transmission"
-msgstr "Transmisión"
-
-msgid "Guard"
-msgstr "Int.Guarda"
-
-msgid "Hierarchy"
-msgstr "Jerarquía"
-
-msgid "Rolloff"
-msgstr ""
-
 msgid "Channel settings are not unique!"
 msgstr "!Propiedades de canal duplicadas!"
 
diff -ruN vdr-1.7.12/po/et_EE.po vdr-1.7.13/po/et_EE.po
--- vdr-1.7.12/po/et_EE.po	2010-01-23 16:15:30.000000000 +0100
+++ vdr-1.7.13/po/et_EE.po	2010-02-28 13:19:49.000000000 +0100
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: VDR 1.6.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-01-17 16:18+0100\n"
+"POT-Creation-Date: 2010-02-28 13:19+0100\n"
 "PO-Revision-Date: 2007-08-12 14:17+0200\n"
 "Last-Translator: Arthur Konovalov <artlov@gmail.com>\n"
 "Language-Team: Estonian\n"
@@ -15,6 +15,15 @@
 "Content-Type: text/plain; charset=ISO-8859-13\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "*** Invalid Channel ***"
+msgstr "*** Vigane kanal ***"
+
+msgid "Channel not available!"
+msgstr "Kanal ei ole kättesaadav!"
+
+msgid "Can't start Transfer Mode!"
+msgstr "Ülekandemooduse start nurjus!"
+
 msgid "off"
 msgstr "väljas"
 
@@ -27,14 +36,41 @@
 msgid "none"
 msgstr "puudu"
 
-msgid "*** Invalid Channel ***"
-msgstr "*** Vigane kanal ***"
+msgid "Polarization"
+msgstr "Polarisatsioon"
 
-msgid "Channel not available!"
-msgstr "Kanal ei ole kättesaadav!"
+msgid "System"
+msgstr "Süsteem"
 
-msgid "Can't start Transfer Mode!"
-msgstr "Ülekandemooduse start nurjus!"
+msgid "Srate"
+msgstr "Sümbolikiirus"
+
+msgid "Inversion"
+msgstr "Inversioon"
+
+msgid "CoderateH"
+msgstr "VeaparandusH"
+
+msgid "CoderateL"
+msgstr "VeaparandusL"
+
+msgid "Modulation"
+msgstr "Modulatsioon"
+
+msgid "Bandwidth"
+msgstr "Ribalaius"
+
+msgid "Transmission"
+msgstr "Transmissioon"
+
+msgid "Guard"
+msgstr "Kaitseintervall"
+
+msgid "Hierarchy"
+msgstr "Hierarhia"
+
+msgid "Rolloff"
+msgstr "Rolloff"
 
 msgid "Starting EPG scan"
 msgstr "EPG skaneerimine käivitatud"
@@ -523,42 +559,6 @@
 msgid "Sid"
 msgstr "Sid"
 
-msgid "Polarization"
-msgstr "Polarisatsioon"
-
-msgid "System"
-msgstr "Süsteem"
-
-msgid "Srate"
-msgstr "Srate"
-
-msgid "Inversion"
-msgstr "Inversioon"
-
-msgid "CoderateH"
-msgstr "CoderateH"
-
-msgid "CoderateL"
-msgstr "CoderateL"
-
-msgid "Modulation"
-msgstr "Modulatsioon"
-
-msgid "Bandwidth"
-msgstr "Ribalaius"
-
-msgid "Transmission"
-msgstr "Transmissioon"
-
-msgid "Guard"
-msgstr "Guard"
-
-msgid "Hierarchy"
-msgstr "Hierarhia"
-
-msgid "Rolloff"
-msgstr "Rolloff"
-
 msgid "Channel settings are not unique!"
 msgstr "Kanaliseaded ei ole unikaalsed!"
 
@@ -584,29 +584,29 @@
 msgstr "Kustutada kanal?"
 
 msgid "Edit folder"
-msgstr ""
+msgstr "Kausta muutmine"
 
 msgid "New folder"
-msgstr ""
+msgstr "Uus kaust"
 
 msgid "Sub folder"
-msgstr ""
+msgstr "Uus alamkaust"
 
 msgid "Folder name already exists!"
-msgstr ""
+msgstr "Sellenimeline kaust juba olemas!"
 
 #, c-format
 msgid "Folder name must not contain '%c'!"
-msgstr ""
+msgstr "Kausta nimi ei saa sisaldada '%c' sümbolit!"
 
 msgid "Button$Select"
-msgstr ""
+msgstr "Vali"
 
 msgid "Delete folder and all sub folders?"
-msgstr ""
+msgstr "Kustutada kaust ja kõik alamkaustad?"
 
 msgid "Delete folder?"
-msgstr ""
+msgstr "Kustutada kaust?"
 
 msgid "Edit timer"
 msgstr "Taimeri redigeerimine"
@@ -639,13 +639,13 @@
 msgstr "Fail"
 
 msgid "Button$Folder"
-msgstr ""
+msgstr "Kaust"
 
 msgid "First day"
 msgstr "Esimene päev"
 
 msgid "Select folder"
-msgstr ""
+msgstr "Kausta valik"
 
 msgid "Timers"
 msgstr "Taimer"
@@ -765,10 +765,10 @@
 msgstr "Teema"
 
 msgid "Setup.OSD$Left (%)"
-msgstr "Vasakule (%)"
+msgstr "Nihe paremale (%)"
 
 msgid "Setup.OSD$Top (%)"
-msgstr "Ülesse (%)"
+msgstr "Nihe alla (%)"
 
 msgid "Setup.OSD$Width (%)"
 msgstr "Laius (%)"
@@ -825,7 +825,7 @@
 msgstr "Lehekülje kerimine"
 
 msgid "Setup.OSD$Scroll wraps"
-msgstr "Ridade kerimine"
+msgstr "Ridade ringkerimine"
 
 msgid "Setup.OSD$Menu key closes"
 msgstr "Sulgemine Menüü klahviga"
@@ -1076,7 +1076,7 @@
 msgstr "Helitugevus käivitamisel"
 
 msgid "Setup.Miscellaneous$Channels wrap"
-msgstr ""
+msgstr "Kanalite ringkerimine"
 
 msgid "Setup.Miscellaneous$Emergency exit"
 msgstr "Hädaväljumine"
diff -ruN vdr-1.7.12/po/fi_FI.po vdr-1.7.13/po/fi_FI.po
--- vdr-1.7.12/po/fi_FI.po	2010-01-23 16:15:30.000000000 +0100
+++ vdr-1.7.13/po/fi_FI.po	2010-02-28 13:19:49.000000000 +0100
@@ -10,7 +10,7 @@
 msgstr ""
 "Project-Id-Version: VDR 1.6.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-01-17 16:18+0100\n"
+"POT-Creation-Date: 2010-02-28 13:19+0100\n"
 "PO-Revision-Date: 2007-08-15 15:52+0200\n"
 "Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n"
 "Language-Team: Finnish\n"
@@ -18,6 +18,15 @@
 "Content-Type: text/plain; charset=ISO-8859-15\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "*** Invalid Channel ***"
+msgstr "*** Virheellinen kanavavalinta ***"
+
+msgid "Channel not available!"
+msgstr "Kanava ei ole käytettävissä!"
+
+msgid "Can't start Transfer Mode!"
+msgstr "Siirtotilan aloitus epäonnistui!"
+
 msgid "off"
 msgstr "poissa"
 
@@ -30,14 +39,41 @@
 msgid "none"
 msgstr "tyhjä"
 
-msgid "*** Invalid Channel ***"
-msgstr "*** Virheellinen kanavavalinta ***"
+msgid "Polarization"
+msgstr "Polarisaatio"
 
-msgid "Channel not available!"
-msgstr "Kanava ei ole käytettävissä!"
+msgid "System"
+msgstr "Systeemi"
 
-msgid "Can't start Transfer Mode!"
-msgstr "Siirtotilan aloitus epäonnistui!"
+msgid "Srate"
+msgstr "Symbolinopeus"
+
+msgid "Inversion"
+msgstr "Inversio"
+
+msgid "CoderateH"
+msgstr "Suojaustaso (HP)"
+
+msgid "CoderateL"
+msgstr "Suojaustaso (LP)"
+
+msgid "Modulation"
+msgstr "Modulaatio"
+
+msgid "Bandwidth"
+msgstr "Kaistanleveys"
+
+msgid "Transmission"
+msgstr "Transmissio"
+
+msgid "Guard"
+msgstr "Suojaväli"
+
+msgid "Hierarchy"
+msgstr "Hierarkia"
+
+msgid "Rolloff"
+msgstr "Rolloff"
 
 msgid "Starting EPG scan"
 msgstr "Ohjelmaoppaan päivitys aloitettu"
@@ -281,7 +317,7 @@
 
 #, c-format
 msgid "ParentalRating$from %d"
-msgstr ""
+msgstr "K-%d"
 
 msgid "No title"
 msgstr "Ei esitystä"
@@ -526,42 +562,6 @@
 msgid "Sid"
 msgstr "Palvelu-ID"
 
-msgid "Polarization"
-msgstr "Polarisaatio"
-
-msgid "System"
-msgstr "Systeemi"
-
-msgid "Srate"
-msgstr "Symbolinopeus"
-
-msgid "Inversion"
-msgstr "Inversio"
-
-msgid "CoderateH"
-msgstr "Suojaustaso (HP)"
-
-msgid "CoderateL"
-msgstr "Suojaustaso (LP)"
-
-msgid "Modulation"
-msgstr "Modulaatio"
-
-msgid "Bandwidth"
-msgstr "Kaistanleveys"
-
-msgid "Transmission"
-msgstr "Transmissio"
-
-msgid "Guard"
-msgstr "Suojaväli"
-
-msgid "Hierarchy"
-msgstr "Hierarkia"
-
-msgid "Rolloff"
-msgstr "Rolloff"
-
 msgid "Channel settings are not unique!"
 msgstr "Kanava-asetukset eivät ole yksilölliset!"
 
@@ -587,29 +587,29 @@
 msgstr "Poistetaanko kanava?"
 
 msgid "Edit folder"
-msgstr ""
+msgstr "Muokkaa kansiota"
 
 msgid "New folder"
-msgstr ""
+msgstr "Uusi kansio"
 
 msgid "Sub folder"
-msgstr ""
+msgstr "Alikansio"
 
 msgid "Folder name already exists!"
-msgstr ""
+msgstr "Kansio on jo olemassa!"
 
 #, c-format
 msgid "Folder name must not contain '%c'!"
-msgstr ""
+msgstr "Kansion nimessä ei saa olla '%c'-merkkiä!"
 
 msgid "Button$Select"
-msgstr ""
+msgstr "Valitse"
 
 msgid "Delete folder and all sub folders?"
-msgstr ""
+msgstr "Poistetaanko kansio alikansioineen?"
 
 msgid "Delete folder?"
-msgstr ""
+msgstr "Poistetaanko kansio?"
 
 msgid "Edit timer"
 msgstr "Muokkaa ajastinta"
@@ -642,13 +642,13 @@
 msgstr "Tiedosto"
 
 msgid "Button$Folder"
-msgstr ""
+msgstr "Kansio"
 
 msgid "First day"
 msgstr "1. päivä"
 
 msgid "Select folder"
-msgstr ""
+msgstr "Valitse kansio"
 
 msgid "Timers"
 msgstr "Ajastimet"
@@ -1079,7 +1079,7 @@
 msgstr "Äänenvoimakkuus käynnistettäessä"
 
 msgid "Setup.Miscellaneous$Channels wrap"
-msgstr ""
+msgstr "Kanavien rullaus"
 
 msgid "Setup.Miscellaneous$Emergency exit"
 msgstr "Käytä hätäsammutusta"
@@ -1203,10 +1203,10 @@
 msgstr "Tallennustila loppumassa!"
 
 msgid "Regenerating index file"
-msgstr ""
+msgstr "Luodaan indeksitiedosto uudelleen"
 
 msgid "Index file regeneration complete"
-msgstr ""
+msgstr "Indeksitiedosto valmistui"
 
 msgid "Can't shutdown - option '-s' not given!"
 msgstr "Sammutus ei onnistu - '-s' parametri puuttuu!"
diff -ruN vdr-1.7.12/po/fr_FR.po vdr-1.7.13/po/fr_FR.po
--- vdr-1.7.12/po/fr_FR.po	2010-01-23 16:15:30.000000000 +0100
+++ vdr-1.7.13/po/fr_FR.po	2010-02-28 13:19:49.000000000 +0100
@@ -13,7 +13,7 @@
 msgstr ""
 "Project-Id-Version: VDR 1.6.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-01-17 16:18+0100\n"
+"POT-Creation-Date: 2010-02-28 13:19+0100\n"
 "PO-Revision-Date: 2008-02-27 18:14+0100\n"
 "Last-Translator: Jean-Claude Repetto <jc@repetto.org>\n"
 "Language-Team: French\n"
@@ -21,6 +21,15 @@
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "*** Invalid Channel ***"
+msgstr "*** Chaîne invalide ! ***"
+
+msgid "Channel not available!"
+msgstr "Chaîne non disponible !"
+
+msgid "Can't start Transfer Mode!"
+msgstr "Impossible d'utiliser le mode transfert !"
+
 msgid "off"
 msgstr "off"
 
@@ -33,14 +42,41 @@
 msgid "none"
 msgstr "aucun"
 
-msgid "*** Invalid Channel ***"
-msgstr "*** Chaîne invalide ! ***"
+msgid "Polarization"
+msgstr "Polarisation"
 
-msgid "Channel not available!"
-msgstr "Chaîne non disponible !"
+msgid "System"
+msgstr ""
 
-msgid "Can't start Transfer Mode!"
-msgstr "Impossible d'utiliser le mode transfert !"
+msgid "Srate"
+msgstr "Fréq. symbole"
+
+msgid "Inversion"
+msgstr "Inversion"
+
+msgid "CoderateH"
+msgstr "CoderateH"
+
+msgid "CoderateL"
+msgstr "CoderateL"
+
+msgid "Modulation"
+msgstr "Modulation"
+
+msgid "Bandwidth"
+msgstr "Bande passante"
+
+msgid "Transmission"
+msgstr "Transmission"
+
+msgid "Guard"
+msgstr "Intervalle de garde"
+
+msgid "Hierarchy"
+msgstr "Hiérarchie"
+
+msgid "Rolloff"
+msgstr ""
 
 msgid "Starting EPG scan"
 msgstr "Mise à jour du guide des programmes"
@@ -529,42 +565,6 @@
 msgid "Sid"
 msgstr "Sid"
 
-msgid "Polarization"
-msgstr "Polarisation"
-
-msgid "System"
-msgstr ""
-
-msgid "Srate"
-msgstr "Fréq. symbole"
-
-msgid "Inversion"
-msgstr "Inversion"
-
-msgid "CoderateH"
-msgstr "CoderateH"
-
-msgid "CoderateL"
-msgstr "CoderateL"
-
-msgid "Modulation"
-msgstr "Modulation"
-
-msgid "Bandwidth"
-msgstr "Bande passante"
-
-msgid "Transmission"
-msgstr "Transmission"
-
-msgid "Guard"
-msgstr "Intervalle de garde"
-
-msgid "Hierarchy"
-msgstr "Hiérarchie"
-
-msgid "Rolloff"
-msgstr ""
-
 msgid "Channel settings are not unique!"
 msgstr "Caractéristiques des chaînes non uniques"
 
diff -ruN vdr-1.7.12/po/hr_HR.po vdr-1.7.13/po/hr_HR.po
--- vdr-1.7.12/po/hr_HR.po	2010-01-23 16:15:30.000000000 +0100
+++ vdr-1.7.13/po/hr_HR.po	2010-02-28 13:19:49.000000000 +0100
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: VDR 1.6.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-01-17 16:18+0100\n"
+"POT-Creation-Date: 2010-02-28 13:19+0100\n"
 "PO-Revision-Date: 2008-03-17 19:00+0100\n"
 "Last-Translator: Adrian Caval <anrxc@sysphere.org>\n"
 "Language-Team: Croatian\n"
@@ -17,6 +17,15 @@
 "Content-Type: text/plain; charset=ISO-8859-2\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "*** Invalid Channel ***"
+msgstr "*** Neispravan Program ***"
+
+msgid "Channel not available!"
+msgstr "Program nije dostupan!"
+
+msgid "Can't start Transfer Mode!"
+msgstr "Nemoguæe zapoèeti Prijenos!!"
+
 msgid "off"
 msgstr "iskljuèi"
 
@@ -29,14 +38,41 @@
 msgid "none"
 msgstr "ni¹ta"
 
-msgid "*** Invalid Channel ***"
-msgstr "*** Neispravan Program ***"
+msgid "Polarization"
+msgstr "Polarizacija"
 
-msgid "Channel not available!"
-msgstr "Program nije dostupan!"
+msgid "System"
+msgstr ""
 
-msgid "Can't start Transfer Mode!"
-msgstr "Nemoguæe zapoèeti Prijenos!!"
+msgid "Srate"
+msgstr "Srate"
+
+msgid "Inversion"
+msgstr "Inverzija"
+
+msgid "CoderateH"
+msgstr "CoderateH"
+
+msgid "CoderateL"
+msgstr "CoderateL"
+
+msgid "Modulation"
+msgstr "Modulacija"
+
+msgid "Bandwidth"
+msgstr "Propusnost"
+
+msgid "Transmission"
+msgstr "Prijenos"
+
+msgid "Guard"
+msgstr "Za¹tita"
+
+msgid "Hierarchy"
+msgstr "Hijerarhija"
+
+msgid "Rolloff"
+msgstr ""
 
 msgid "Starting EPG scan"
 msgstr "Poèinjem EPG pretragu"
@@ -525,42 +561,6 @@
 msgid "Sid"
 msgstr "Sid"
 
-msgid "Polarization"
-msgstr "Polarizacija"
-
-msgid "System"
-msgstr ""
-
-msgid "Srate"
-msgstr "Srate"
-
-msgid "Inversion"
-msgstr "Inverzija"
-
-msgid "CoderateH"
-msgstr "CoderateH"
-
-msgid "CoderateL"
-msgstr "CoderateL"
-
-msgid "Modulation"
-msgstr "Modulacija"
-
-msgid "Bandwidth"
-msgstr "Propusnost"
-
-msgid "Transmission"
-msgstr "Prijenos"
-
-msgid "Guard"
-msgstr "Za¹tita"
-
-msgid "Hierarchy"
-msgstr "Hijerarhija"
-
-msgid "Rolloff"
-msgstr ""
-
 msgid "Channel settings are not unique!"
 msgstr "Postavke programa nisu jedinstvene!"
 
diff -ruN vdr-1.7.12/po/hu_HU.po vdr-1.7.13/po/hu_HU.po
--- vdr-1.7.12/po/hu_HU.po	2010-01-23 16:15:31.000000000 +0100
+++ vdr-1.7.13/po/hu_HU.po	2010-02-28 13:19:49.000000000 +0100
@@ -10,7 +10,7 @@
 msgstr ""
 "Project-Id-Version: VDR 1.6.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-01-17 16:18+0100\n"
+"POT-Creation-Date: 2010-02-28 13:19+0100\n"
 "PO-Revision-Date: 2007-12-01 21:42+0200\n"
 "Last-Translator: István Füley <ifuley@tigercomp.ro>\n"
 "Language-Team: Hungarian\n"
@@ -18,6 +18,15 @@
 "Content-Type: text/plain; charset=ISO-8859-2\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "*** Invalid Channel ***"
+msgstr "*** Érvénytelen csatorna ***"
+
+msgid "Channel not available!"
+msgstr "Az adó nem elérhetõ"
+
+msgid "Can't start Transfer Mode!"
+msgstr "Transfer-Mode nem indítható!"
+
 msgid "off"
 msgstr "ki"
 
@@ -30,14 +39,41 @@
 msgid "none"
 msgstr "semmi"
 
-msgid "*** Invalid Channel ***"
-msgstr "*** Érvénytelen csatorna ***"
+msgid "Polarization"
+msgstr "Polarizáció"
 
-msgid "Channel not available!"
-msgstr "Az adó nem elérhetõ"
+msgid "System"
+msgstr ""
 
-msgid "Can't start Transfer Mode!"
-msgstr "Transfer-Mode nem indítható!"
+msgid "Srate"
+msgstr "Srate"
+
+msgid "Inversion"
+msgstr "Inversion"
+
+msgid "CoderateH"
+msgstr "CoderateH"
+
+msgid "CoderateL"
+msgstr "CoderateL"
+
+msgid "Modulation"
+msgstr "Moduláció"
+
+msgid "Bandwidth"
+msgstr "Sávszélesség"
+
+msgid "Transmission"
+msgstr "Átvitel"
+
+msgid "Guard"
+msgstr "Guard"
+
+msgid "Hierarchy"
+msgstr "Hierarhia"
+
+msgid "Rolloff"
+msgstr ""
 
 msgid "Starting EPG scan"
 msgstr "EPG adatok aktualizálása"
@@ -526,42 +562,6 @@
 msgid "Sid"
 msgstr "Sid"
 
-msgid "Polarization"
-msgstr "Polarizáció"
-
-msgid "System"
-msgstr ""
-
-msgid "Srate"
-msgstr "Srate"
-
-msgid "Inversion"
-msgstr "Inversion"
-
-msgid "CoderateH"
-msgstr "CoderateH"
-
-msgid "CoderateL"
-msgstr "CoderateL"
-
-msgid "Modulation"
-msgstr "Moduláció"
-
-msgid "Bandwidth"
-msgstr "Sávszélesség"
-
-msgid "Transmission"
-msgstr "Átvitel"
-
-msgid "Guard"
-msgstr "Guard"
-
-msgid "Hierarchy"
-msgstr "Hierarhia"
-
-msgid "Rolloff"
-msgstr ""
-
 msgid "Channel settings are not unique!"
 msgstr "Az adóbeállítások nem egyértelmûek"
 
diff -ruN vdr-1.7.12/po/it_IT.po vdr-1.7.13/po/it_IT.po
--- vdr-1.7.12/po/it_IT.po	2010-01-23 16:15:31.000000000 +0100
+++ vdr-1.7.13/po/it_IT.po	2010-02-28 13:19:49.000000000 +0100
@@ -11,8 +11,8 @@
 msgstr ""
 "Project-Id-Version: VDR 1.6.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-01-17 16:18+0100\n"
-"PO-Revision-Date: 2010-01-12 23:53+0100\n"
+"POT-Creation-Date: 2010-02-28 13:19+0100\n"
+"PO-Revision-Date: 2010-01-31 23:06+0100\n"
 "Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
 "Language-Team: Italian\n"
 "MIME-Version: 1.0\n"
@@ -22,6 +22,15 @@
 "X-Poedit-Country: ITALY\n"
 "X-Poedit-SourceCharset: utf-8\n"
 
+msgid "*** Invalid Channel ***"
+msgstr "*** Canale NON valido ***"
+
+msgid "Channel not available!"
+msgstr "Canale non disponibile!"
+
+msgid "Can't start Transfer Mode!"
+msgstr "Impossibile avviare mod. trasferimento!"
+
 msgid "off"
 msgstr "off"
 
@@ -34,14 +43,41 @@
 msgid "none"
 msgstr "nessuno"
 
-msgid "*** Invalid Channel ***"
-msgstr "*** Canale NON valido ***"
+msgid "Polarization"
+msgstr "Polarizzazione"
 
-msgid "Channel not available!"
-msgstr "Canale non disponibile!"
+msgid "System"
+msgstr "Sistema"
 
-msgid "Can't start Transfer Mode!"
-msgstr "Impossibile avviare mod. trasferimento!"
+msgid "Srate"
+msgstr "SymbolRate"
+
+msgid "Inversion"
+msgstr "Inversione"
+
+msgid "CoderateH"
+msgstr "CoderateH"
+
+msgid "CoderateL"
+msgstr "CoderateL"
+
+msgid "Modulation"
+msgstr "Modulazione"
+
+msgid "Bandwidth"
+msgstr "Banda passante"
+
+msgid "Transmission"
+msgstr "Trasmissione"
+
+msgid "Guard"
+msgstr "Guard"
+
+msgid "Hierarchy"
+msgstr "Gerarchia"
+
+msgid "Rolloff"
+msgstr "Rolloff"
 
 msgid "Starting EPG scan"
 msgstr "Inizio scansione EPG"
@@ -530,42 +566,6 @@
 msgid "Sid"
 msgstr "Sid"
 
-msgid "Polarization"
-msgstr "Polarizzazione"
-
-msgid "System"
-msgstr "Sistema"
-
-msgid "Srate"
-msgstr "SymbolRate"
-
-msgid "Inversion"
-msgstr "Inversione"
-
-msgid "CoderateH"
-msgstr "CoderateH"
-
-msgid "CoderateL"
-msgstr "CoderateL"
-
-msgid "Modulation"
-msgstr "Modulazione"
-
-msgid "Bandwidth"
-msgstr "Banda passante"
-
-msgid "Transmission"
-msgstr "Trasmissione"
-
-msgid "Guard"
-msgstr "Guard"
-
-msgid "Hierarchy"
-msgstr "Gerarchia"
-
-msgid "Rolloff"
-msgstr "Rolloff"
-
 msgid "Channel settings are not unique!"
 msgstr "Parametri canale non univoci!"
 
@@ -591,29 +591,29 @@
 msgstr "Eliminare il canale?"
 
 msgid "Edit folder"
-msgstr ""
+msgstr "Modifica cartella"
 
 msgid "New folder"
-msgstr ""
+msgstr "Nuova cartella"
 
 msgid "Sub folder"
-msgstr ""
+msgstr "Sotto cartella"
 
 msgid "Folder name already exists!"
-msgstr ""
+msgstr "Nome cartella giÃ  esistente!"
 
 #, c-format
 msgid "Folder name must not contain '%c'!"
-msgstr ""
+msgstr "Il nome cartella non deve contenere '%c'!"
 
 msgid "Button$Select"
-msgstr ""
+msgstr "Seleziona"
 
 msgid "Delete folder and all sub folders?"
-msgstr ""
+msgstr "Eliminare la cartella e sue sottocartelle?"
 
 msgid "Delete folder?"
-msgstr ""
+msgstr "Eliminare la cartella?"
 
 msgid "Edit timer"
 msgstr "Modifica timer"
@@ -646,13 +646,13 @@
 msgstr "Nome"
 
 msgid "Button$Folder"
-msgstr ""
+msgstr "Cartella"
 
 msgid "First day"
 msgstr "1Â° giorno"
 
 msgid "Select folder"
-msgstr ""
+msgstr "Seleziona cartella"
 
 msgid "Timers"
 msgstr "Timer"
@@ -1083,7 +1083,7 @@
 msgstr "Volume iniziale"
 
 msgid "Setup.Miscellaneous$Channels wrap"
-msgstr ""
+msgstr "Riavvolgimento canali"
 
 msgid "Setup.Miscellaneous$Emergency exit"
 msgstr "Uscita di emergenza"
diff -ruN vdr-1.7.12/po/lt_LT.po vdr-1.7.13/po/lt_LT.po
--- vdr-1.7.12/po/lt_LT.po	2010-01-23 16:15:31.000000000 +0100
+++ vdr-1.7.13/po/lt_LT.po	2010-02-28 13:45:43.000000000 +0100
@@ -1,25 +1,34 @@
 # VDR language source file.
 # Copyright (C) 2009 Klaus Schmidinger <kls@tvdr.de>
 # This file is distributed under the same license as the VDR package.
-# Valdemaras Pipiras <varas@ambernet.lt>, 2009.
+# Valdemaras Pipiras <varas@ambernet.lt>, 2009, 2010.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: VDR 1.7.9\n"
+"Project-Id-Version: VDR 1.7.12\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
 "POT-Creation-Date: 2010-01-17 16:18+0100\n"
-"PO-Revision-Date: 2009-10-17 14:19+0200\n"
+"PO-Revision-Date: 2010-02-22 18:05+0200\n"
 "Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>\n"
 "Language-Team: Lithuanian\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "*** Invalid Channel ***"
+msgstr "*** Klaidingas kanalas ***"
+
+msgid "Channel not available!"
+msgstr "Kanalas neegzistuoja!"
+
+msgid "Can't start Transfer Mode!"
+msgstr "Negali pradÄ—ti perdavimo"
+
 msgid "off"
-msgstr "Ä¯jungt"
+msgstr "Ä¯jungti"
 
 msgid "on"
-msgstr "iÅ¡jungt"
+msgstr "iÅ¡jungti"
 
 msgid "auto"
 msgstr "auto"
@@ -27,258 +36,285 @@
 msgid "none"
 msgstr "nÄ—ra"
 
-msgid "*** Invalid Channel ***"
-msgstr "*** Klaidingas kanalas ***"
+msgid "Polarization"
+msgstr "Poliarizacija"
 
-msgid "Channel not available!"
-msgstr "Kanalas neegzistuoja!"
+msgid "System"
+msgstr "Sistema"
 
-msgid "Can't start Transfer Mode!"
-msgstr "Negali pradÄ—ti perdavimo"
+msgid "Srate"
+msgstr "Perdavimo greitis (Symbol rate)"
+
+msgid "Inversion"
+msgstr "Inversija"
+
+msgid "CoderateH"
+msgstr "CoderateH"
+
+msgid "CoderateL"
+msgstr "CoderateL"
+
+msgid "Modulation"
+msgstr "Moduliacija"
+
+msgid "Bandwidth"
+msgstr "Pralaidumas"
+
+msgid "Transmission"
+msgstr "Perdavimas"
+
+msgid "Guard"
+msgstr "Apsauga"
+
+msgid "Hierarchy"
+msgstr "Hierarchija"
+
+msgid "Rolloff"
+msgstr "Rolloff"
 
 msgid "Starting EPG scan"
 msgstr "Pradedamas EPG skanavimas"
 
 msgid "Content$Movie/Drama"
-msgstr ""
+msgstr "Drama"
 
 msgid "Content$Detective/Thriller"
-msgstr ""
+msgstr "Detektyvas/Trileris"
 
 msgid "Content$Adventure/Western/War"
-msgstr ""
+msgstr "Nuotykinis/Vesternas"
 
 msgid "Content$Science Fiction/Fantasy/Horror"
-msgstr ""
+msgstr "MokslinÄ— fantastika/Fentezi/Siaubo"
 
 msgid "Content$Comedy"
-msgstr ""
+msgstr "Komedija"
 
 msgid "Content$Soap/Melodrama/Folkloric"
-msgstr ""
+msgstr "Muilo opera/Melodrama/Tautinio pobÅ«dÅ¾io"
 
 msgid "Content$Romance"
-msgstr ""
+msgstr "Romantika"
 
 msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
-msgstr ""
+msgstr "Rimta/Klasika/Religija/Istorinis/Drama"
 
 msgid "Content$Adult Movie/Drama"
-msgstr ""
+msgstr "Filas suaugusiems"
 
 msgid "Content$News/Current Affairs"
-msgstr ""
+msgstr "Naujienos"
 
 msgid "Content$News/Weather Report"
-msgstr ""
+msgstr "Naujenos/OrÅ³ prognozÄ—"
 
 msgid "Content$News Magazine"
-msgstr ""
+msgstr "NaujienÅ³ Å¾urnalas"
 
 msgid "Content$Documentary"
-msgstr ""
+msgstr "Dokumentika"
 
 msgid "Content$Discussion/Inverview/Debate"
-msgstr ""
+msgstr "Diskusijos/Interviu"
 
 msgid "Content$Show/Game Show"
-msgstr ""
+msgstr "Laidos/Å½aidimai"
 
 msgid "Content$Game Show/Quiz/Contest"
-msgstr ""
+msgstr "Å½aidimÅ³ laidos/Konkursas"
 
 msgid "Content$Variety Show"
-msgstr ""
+msgstr "Ä®v. laida"
 
 msgid "Content$Talk Show"
-msgstr ""
+msgstr "PokalbiÅ³ laida"
 
 msgid "Content$Sports"
-msgstr ""
+msgstr "Sportas"
 
 msgid "Content$Special Event"
-msgstr ""
+msgstr "Specialus Ä¯vykis"
 
 msgid "Content$Sport Magazine"
-msgstr ""
+msgstr "Sporto Å¾urnalas"
 
 msgid "Content$Football/Soccer"
-msgstr ""
+msgstr "Futbolas"
 
 msgid "Content$Tennis/Squash"
-msgstr ""
+msgstr "Tenisas/SkvoÅ¡as"
 
 msgid "Content$Team Sports"
-msgstr ""
+msgstr "Komandinis sportas"
 
 msgid "Content$Athletics"
-msgstr ""
+msgstr "Lengvoji atletika"
 
 msgid "Content$Motor Sport"
-msgstr ""
+msgstr "Auto sportas"
 
 msgid "Content$Water Sport"
-msgstr ""
+msgstr "Vandens sportas"
 
 msgid "Content$Winter Sports"
-msgstr ""
+msgstr "Å½iemos sportas"
 
 msgid "Content$Equestrian"
-msgstr ""
+msgstr "Jojimas"
 
 msgid "Content$Martial Sports"
-msgstr ""
+msgstr "Karo Å¾aidimai"
 
 msgid "Content$Children's/Youth Programme"
-msgstr ""
+msgstr "Vaikams/paaugliams skirta programa"
 
 msgid "Content$Pre-school Children's Programme"
-msgstr ""
+msgstr "Ikimokyklininkams skirta programa"
 
 msgid "Content$Entertainment Programme for 6 to 14"
-msgstr ""
+msgstr "Pramogos vaikams nuo 6 iki 14"
 
 msgid "Content$Entertainment Programme for 10 to 16"
-msgstr ""
+msgstr "Pramogos vaikams nuo 10 iki 16"
 
 msgid "Content$Informational/Educational/School Programme"
-msgstr ""
+msgstr "InformacinÄ—/Mokomoji programa"
 
 msgid "Content$Cartoons/Puppets"
-msgstr ""
+msgstr "Animacija"
 
 msgid "Content$Music/Ballet/Dance"
-msgstr ""
+msgstr "Muzika/Baletas/Å okis"
 
 msgid "Content$Rock/Pop"
-msgstr ""
+msgstr "Rock/Pop"
 
 msgid "Content$Serious/Classical Music"
-msgstr ""
+msgstr "KlasikinÄ— muzika"
 
 msgid "Content$Folk/Tradional Music"
-msgstr ""
+msgstr "Folk/TradizinÄ— muzika"
 
 msgid "Content$Jazz"
-msgstr ""
+msgstr "DÅ¾azas"
 
 msgid "Content$Musical/Opera"
-msgstr ""
+msgstr "Muziklas/Opera"
 
 msgid "Content$Ballet"
-msgstr ""
+msgstr "Baletas"
 
 msgid "Content$Arts/Culture"
-msgstr ""
+msgstr "Menas/KultÅ«ra"
 
 msgid "Content$Performing Arts"
-msgstr ""
+msgstr "Vaizduojamasis menas"
 
 msgid "Content$Fine Arts"
-msgstr ""
+msgstr "DailÄ—"
 
 msgid "Content$Religion"
-msgstr ""
+msgstr "Religija"
 
 msgid "Content$Popular Culture/Traditional Arts"
-msgstr ""
+msgstr "Populiarioji kultÅ«ra/Tradiciniai menai"
 
 msgid "Content$Literature"
-msgstr ""
+msgstr "LiteratÅ«ra"
 
 msgid "Content$Film/Cinema"
-msgstr ""
+msgstr "Filmas/Kinas"
 
 msgid "Content$Experimental Film/Video"
-msgstr ""
+msgstr "Ekspermentinis filmas"
 
 msgid "Content$Broadcasting/Press"
-msgstr ""
+msgstr "Transliavimas"
 
 msgid "Content$New Media"
-msgstr ""
+msgstr "Naujoji media"
 
 msgid "Content$Arts/Culture Magazine"
-msgstr ""
+msgstr "Menai/KultÅ«ros Å¾urnalas"
 
 msgid "Content$Fashion"
-msgstr ""
+msgstr "Mada"
 
 msgid "Content$Social/Political/Economics"
-msgstr ""
+msgstr "Socialinis/Politinis/Ekonominis"
 
 msgid "Content$Magazine/Report/Documentary"
-msgstr ""
+msgstr "Å½urnalas/ReportaÅ¾as/Dokumentika"
 
 msgid "Content$Economics/Social Advisory"
-msgstr ""
+msgstr "Ekonomika/SocialinÄ— patariamoji programa"
 
 msgid "Content$Remarkable People"
-msgstr ""
+msgstr "PuikÅ«s Å¾monÄ—s"
 
 msgid "Content$Education/Science/Factual"
-msgstr ""
+msgstr "IÅ¡silavinimas/Mokslas"
 
 msgid "Content$Nature/Animals/Environment"
-msgstr ""
+msgstr "Gamta/GyvÅ«vai/Aplinka"
 
 msgid "Content$Technology/Natural Sciences"
-msgstr ""
+msgstr "Technologijos/Gamtos mokslai"
 
 msgid "Content$Medicine/Physiology/Psychology"
-msgstr ""
+msgstr "Medicina/Psichologija/Filosofija"
 
 msgid "Content$Foreign Countries/Expeditions"
-msgstr ""
+msgstr "UÅ¾sienio Å¡alys/Ekspedicijos"
 
 msgid "Content$Social/Spiritual Sciences"
-msgstr ""
+msgstr "Socialiniai/Dvasiniai mokslai"
 
 msgid "Content$Further Education"
-msgstr ""
+msgstr "Platesnis iÅ¡silavinimas"
 
 msgid "Content$Languages"
-msgstr ""
+msgstr "Kalbos"
 
 msgid "Content$Leisure/Hobbies"
-msgstr ""
+msgstr "Poilsis/Hobis"
 
 msgid "Content$Tourism/Travel"
-msgstr ""
+msgstr "Turizmas/KelionÄ—s"
 
 msgid "Content$Handicraft"
-msgstr ""
+msgstr "Amatai"
 
 msgid "Content$Motoring"
-msgstr ""
+msgstr "Autosportas"
 
 msgid "Content$Fitness & Health"
-msgstr ""
+msgstr "Fitnesas ir sveikata"
 
 msgid "Content$Cooking"
-msgstr ""
+msgstr "Maiso ruoÅ¡imas"
 
 msgid "Content$Advertisement/Shopping"
-msgstr ""
+msgstr "Reklama/Prekyba"
 
 msgid "Content$Gardening"
-msgstr ""
+msgstr "SodininkystÄ—"
 
 msgid "Content$Original Language"
-msgstr ""
+msgstr "Orginali kalba"
 
 msgid "Content$Black & White"
-msgstr ""
+msgstr "Juoda ir balta"
 
 msgid "Content$Unpublished"
-msgstr ""
+msgstr "Nepublikuota"
 
 msgid "Content$Live Broadcast"
-msgstr ""
+msgstr "TiesioginÄ— transliacija"
 
 #, c-format
 msgid "ParentalRating$from %d"
-msgstr ""
+msgstr "nuo %d"
 
 msgid "No title"
 msgstr "Be pavadinimo"
@@ -523,42 +559,6 @@
 msgid "Sid"
 msgstr "Serviso id"
 
-msgid "Polarization"
-msgstr "Poliarizacija"
-
-msgid "System"
-msgstr "Sistema"
-
-msgid "Srate"
-msgstr "Perdavimo greitis (Symbol rate)"
-
-msgid "Inversion"
-msgstr "Inversija"
-
-msgid "CoderateH"
-msgstr "CoderateH"
-
-msgid "CoderateL"
-msgstr "CoderateL"
-
-msgid "Modulation"
-msgstr "Moduliacija"
-
-msgid "Bandwidth"
-msgstr "Pralaidumas"
-
-msgid "Transmission"
-msgstr "Perdavimas"
-
-msgid "Guard"
-msgstr "Apsauga"
-
-msgid "Hierarchy"
-msgstr "Hierarchija"
-
-msgid "Rolloff"
-msgstr "Rolloff"
-
 msgid "Channel settings are not unique!"
 msgstr "KanalÅ³ nustatymai neunikalÅ«s!"
 
@@ -584,29 +584,29 @@
 msgstr "IÅ¡trinti kanalÄ…?"
 
 msgid "Edit folder"
-msgstr ""
+msgstr "Koreguoti katalogÄ…"
 
 msgid "New folder"
-msgstr ""
+msgstr "Naujas katalogas"
 
 msgid "Sub folder"
-msgstr ""
+msgstr "Pakatalogis"
 
 msgid "Folder name already exists!"
-msgstr ""
+msgstr "Toks katalogo vardas jau egzistuoja!"
 
 #, c-format
 msgid "Folder name must not contain '%c'!"
-msgstr ""
+msgstr "Katalogo pavadinimas turi bÅ«ti sudarytas iÅ¡ '%c'!"
 
 msgid "Button$Select"
-msgstr ""
+msgstr "Pasirinkti"
 
 msgid "Delete folder and all sub folders?"
-msgstr ""
+msgstr "IÅ¡trinti katalogÄ… ir jo visus pakatalogius?"
 
 msgid "Delete folder?"
-msgstr ""
+msgstr "IÅ¡trinti katalogÄ…?"
 
 msgid "Edit timer"
 msgstr "Koreguoti laikmatÄ¯"
@@ -639,13 +639,13 @@
 msgstr "Failas"
 
 msgid "Button$Folder"
-msgstr ""
+msgstr "Katalogas"
 
 msgid "First day"
 msgstr "Pirma diena"
 
 msgid "Select folder"
-msgstr ""
+msgstr "Pasirinkite katalogÄ…"
 
 msgid "Timers"
 msgstr "LaikmaÄ�iai"
@@ -1076,7 +1076,7 @@
 msgstr "Garsas Ä¯jungimo metu"
 
 msgid "Setup.Miscellaneous$Channels wrap"
-msgstr ""
+msgstr "KanalÅ³ pridengimas"
 
 msgid "Setup.Miscellaneous$Emergency exit"
 msgstr "Avarinis iÅ¡Ä—jimas"
@@ -1200,10 +1200,10 @@
 msgstr "MaÅ¾ai vietos diske!"
 
 msgid "Regenerating index file"
-msgstr ""
+msgstr "Pergeneruojamas index failas"
 
 msgid "Index file regeneration complete"
-msgstr ""
+msgstr "Index failo pergeneravimas baigtas"
 
 msgid "Can't shutdown - option '-s' not given!"
 msgstr "Sistemos negalima iÅ¡jungti, nes starto metu nebuvo komandinÄ—j eilutÄ—j paduota savybÄ— '-s'!"
diff -ruN vdr-1.7.12/po/nl_NL.po vdr-1.7.13/po/nl_NL.po
--- vdr-1.7.12/po/nl_NL.po	2010-01-23 16:15:31.000000000 +0100
+++ vdr-1.7.13/po/nl_NL.po	2010-02-28 13:19:49.000000000 +0100
@@ -11,7 +11,7 @@
 msgstr ""
 "Project-Id-Version: VDR 1.6.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-01-17 16:18+0100\n"
+"POT-Creation-Date: 2010-02-28 13:19+0100\n"
 "PO-Revision-Date: 2008-02-26 17:20+0100\n"
 "Last-Translator: Johan Schuring <johan.schuring@vetteblei.nl>\n"
 "Language-Team: Dutch\n"
@@ -19,6 +19,15 @@
 "Content-Type: text/plain; charset=ISO-8859-15\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "*** Invalid Channel ***"
+msgstr "*** Ongeldig kanaal ***"
+
+msgid "Channel not available!"
+msgstr "Kanaal niet beschikbaar"
+
+msgid "Can't start Transfer Mode!"
+msgstr "Kan Transfer-Mode niet starten"
+
 msgid "off"
 msgstr "uit"
 
@@ -31,14 +40,41 @@
 msgid "none"
 msgstr "geen"
 
-msgid "*** Invalid Channel ***"
-msgstr "*** Ongeldig kanaal ***"
+msgid "Polarization"
+msgstr "Polarisatie"
 
-msgid "Channel not available!"
-msgstr "Kanaal niet beschikbaar"
+msgid "System"
+msgstr ""
 
-msgid "Can't start Transfer Mode!"
-msgstr "Kan Transfer-Mode niet starten"
+msgid "Srate"
+msgstr "Srate"
+
+msgid "Inversion"
+msgstr "Inversion"
+
+msgid "CoderateH"
+msgstr "CoderateH"
+
+msgid "CoderateL"
+msgstr "CoderateL"
+
+msgid "Modulation"
+msgstr "Modulatie"
+
+msgid "Bandwidth"
+msgstr "Bandbreedte"
+
+msgid "Transmission"
+msgstr "Transmissie"
+
+msgid "Guard"
+msgstr "Guard"
+
+msgid "Hierarchy"
+msgstr "Hierarchie"
+
+msgid "Rolloff"
+msgstr ""
 
 msgid "Starting EPG scan"
 msgstr "Bezig met starten EPG scan"
@@ -527,42 +563,6 @@
 msgid "Sid"
 msgstr "Sid"
 
-msgid "Polarization"
-msgstr "Polarisatie"
-
-msgid "System"
-msgstr ""
-
-msgid "Srate"
-msgstr "Srate"
-
-msgid "Inversion"
-msgstr "Inversion"
-
-msgid "CoderateH"
-msgstr "CoderateH"
-
-msgid "CoderateL"
-msgstr "CoderateL"
-
-msgid "Modulation"
-msgstr "Modulatie"
-
-msgid "Bandwidth"
-msgstr "Bandbreedte"
-
-msgid "Transmission"
-msgstr "Transmissie"
-
-msgid "Guard"
-msgstr "Guard"
-
-msgid "Hierarchy"
-msgstr "Hierarchie"
-
-msgid "Rolloff"
-msgstr ""
-
 msgid "Channel settings are not unique!"
 msgstr "Kanaalinstellingen zijn niet uniek!"
 
diff -ruN vdr-1.7.12/po/nn_NO.po vdr-1.7.13/po/nn_NO.po
--- vdr-1.7.12/po/nn_NO.po	2010-01-23 16:15:31.000000000 +0100
+++ vdr-1.7.13/po/nn_NO.po	2010-02-28 13:19:49.000000000 +0100
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: VDR 1.6.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-01-17 16:18+0100\n"
+"POT-Creation-Date: 2010-02-28 13:19+0100\n"
 "PO-Revision-Date: 2007-08-12 14:17+0200\n"
 "Last-Translator: Truls Slevigen <truls@slevigen.no>\n"
 "Language-Team: Norwegian\n"
@@ -16,6 +16,15 @@
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "*** Invalid Channel ***"
+msgstr "*** Ugyldig Kanal! ***"
+
+msgid "Channel not available!"
+msgstr ""
+
+msgid "Can't start Transfer Mode!"
+msgstr "Kan ikke starte transfer modus!"
+
 msgid "off"
 msgstr ""
 
@@ -28,14 +37,41 @@
 msgid "none"
 msgstr ""
 
-msgid "*** Invalid Channel ***"
-msgstr "*** Ugyldig Kanal! ***"
+msgid "Polarization"
+msgstr "Polarisasjon"
 
-msgid "Channel not available!"
+msgid "System"
 msgstr ""
 
-msgid "Can't start Transfer Mode!"
-msgstr "Kan ikke starte transfer modus!"
+msgid "Srate"
+msgstr "Srate"
+
+msgid "Inversion"
+msgstr "Inversion"
+
+msgid "CoderateH"
+msgstr "CoderateH"
+
+msgid "CoderateL"
+msgstr "CoderateL"
+
+msgid "Modulation"
+msgstr "Modulation"
+
+msgid "Bandwidth"
+msgstr "Bandwidth"
+
+msgid "Transmission"
+msgstr "Transmission"
+
+msgid "Guard"
+msgstr "Guard"
+
+msgid "Hierarchy"
+msgstr "Hierarchy"
+
+msgid "Rolloff"
+msgstr ""
 
 msgid "Starting EPG scan"
 msgstr ""
@@ -524,42 +560,6 @@
 msgid "Sid"
 msgstr "Sid"
 
-msgid "Polarization"
-msgstr "Polarisasjon"
-
-msgid "System"
-msgstr ""
-
-msgid "Srate"
-msgstr "Srate"
-
-msgid "Inversion"
-msgstr "Inversion"
-
-msgid "CoderateH"
-msgstr "CoderateH"
-
-msgid "CoderateL"
-msgstr "CoderateL"
-
-msgid "Modulation"
-msgstr "Modulation"
-
-msgid "Bandwidth"
-msgstr "Bandwidth"
-
-msgid "Transmission"
-msgstr "Transmission"
-
-msgid "Guard"
-msgstr "Guard"
-
-msgid "Hierarchy"
-msgstr "Hierarchy"
-
-msgid "Rolloff"
-msgstr ""
-
 msgid "Channel settings are not unique!"
 msgstr ""
 
diff -ruN vdr-1.7.12/po/pl_PL.po vdr-1.7.13/po/pl_PL.po
--- vdr-1.7.12/po/pl_PL.po	2010-01-23 16:15:31.000000000 +0100
+++ vdr-1.7.13/po/pl_PL.po	2010-02-28 13:19:49.000000000 +0100
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: VDR 1.6.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-01-17 16:18+0100\n"
+"POT-Creation-Date: 2010-02-28 13:19+0100\n"
 "PO-Revision-Date: 2008-03-09 12:59+0100\n"
 "Last-Translator: Michael Rakowski <mrak@gmx.de>\n"
 "Language-Team:  Polish\n"
@@ -16,6 +16,15 @@
 "Content-Type: text/plain; charset=ISO-8859-2\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "*** Invalid Channel ***"
+msgstr "*** Niepoprawny kana³ ***"
+
+msgid "Channel not available!"
+msgstr "Kana³ nie jest dostêpny!"
+
+msgid "Can't start Transfer Mode!"
+msgstr "Nie mo¿na uruchomiæ trybu transferu!"
+
 msgid "off"
 msgstr "wy³±cz"
 
@@ -28,14 +37,41 @@
 msgid "none"
 msgstr "brak"
 
-msgid "*** Invalid Channel ***"
-msgstr "*** Niepoprawny kana³ ***"
+msgid "Polarization"
+msgstr "Polaryzacja"
 
-msgid "Channel not available!"
-msgstr "Kana³ nie jest dostêpny!"
+msgid "System"
+msgstr ""
 
-msgid "Can't start Transfer Mode!"
-msgstr "Nie mo¿na uruchomiæ trybu transferu!"
+msgid "Srate"
+msgstr "Srate"
+
+msgid "Inversion"
+msgstr "Inwersja"
+
+msgid "CoderateH"
+msgstr "CoderateH"
+
+msgid "CoderateL"
+msgstr "CoderateL"
+
+msgid "Modulation"
+msgstr "Modulacja"
+
+msgid "Bandwidth"
+msgstr "Pasmo"
+
+msgid "Transmission"
+msgstr "Transmisja"
+
+msgid "Guard"
+msgstr "Guard"
+
+msgid "Hierarchy"
+msgstr "Hierarchia"
+
+msgid "Rolloff"
+msgstr ""
 
 msgid "Starting EPG scan"
 msgstr "Rozpoczynam skanowanie EPG"
@@ -524,42 +560,6 @@
 msgid "Sid"
 msgstr "Sid"
 
-msgid "Polarization"
-msgstr "Polaryzacja"
-
-msgid "System"
-msgstr ""
-
-msgid "Srate"
-msgstr "Srate"
-
-msgid "Inversion"
-msgstr "Inwersja"
-
-msgid "CoderateH"
-msgstr "CoderateH"
-
-msgid "CoderateL"
-msgstr "CoderateL"
-
-msgid "Modulation"
-msgstr "Modulacja"
-
-msgid "Bandwidth"
-msgstr "Pasmo"
-
-msgid "Transmission"
-msgstr "Transmisja"
-
-msgid "Guard"
-msgstr "Guard"
-
-msgid "Hierarchy"
-msgstr "Hierarchia"
-
-msgid "Rolloff"
-msgstr ""
-
 msgid "Channel settings are not unique!"
 msgstr "Ustawienia kana³u nie s± unikalne!"
 
diff -ruN vdr-1.7.12/po/pt_PT.po vdr-1.7.13/po/pt_PT.po
--- vdr-1.7.12/po/pt_PT.po	2010-01-23 16:15:31.000000000 +0100
+++ vdr-1.7.13/po/pt_PT.po	2010-02-28 13:19:49.000000000 +0100
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: VDR 1.6.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-01-17 16:18+0100\n"
+"POT-Creation-Date: 2010-02-28 13:19+0100\n"
 "PO-Revision-Date: 2008-03-18 17:04+0100\n"
 "Last-Translator: anonymous\n"
 "Language-Team: Portuguese\n"
@@ -15,6 +15,15 @@
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "*** Invalid Channel ***"
+msgstr "*** Canal inválido ***"
+
+msgid "Channel not available!"
+msgstr "Canal indisponivel!"
+
+msgid "Can't start Transfer Mode!"
+msgstr "Impossível iniciar modo de transferência!"
+
 msgid "off"
 msgstr "off"
 
@@ -27,14 +36,41 @@
 msgid "none"
 msgstr "nenhum"
 
-msgid "*** Invalid Channel ***"
-msgstr "*** Canal inválido ***"
+msgid "Polarization"
+msgstr "Polarização"
 
-msgid "Channel not available!"
-msgstr "Canal indisponivel!"
+msgid "System"
+msgstr ""
 
-msgid "Can't start Transfer Mode!"
-msgstr "Impossível iniciar modo de transferência!"
+msgid "Srate"
+msgstr "Srate"
+
+msgid "Inversion"
+msgstr "Inversão"
+
+msgid "CoderateH"
+msgstr "CoderateH"
+
+msgid "CoderateL"
+msgstr "CoderateL"
+
+msgid "Modulation"
+msgstr "Modulação"
+
+msgid "Bandwidth"
+msgstr "Bandwidth"
+
+msgid "Transmission"
+msgstr "Transmissão"
+
+msgid "Guard"
+msgstr "Guard"
+
+msgid "Hierarchy"
+msgstr "Hierarquia"
+
+msgid "Rolloff"
+msgstr ""
 
 msgid "Starting EPG scan"
 msgstr "Iniciar a procura de EPG"
@@ -523,42 +559,6 @@
 msgid "Sid"
 msgstr "Sid"
 
-msgid "Polarization"
-msgstr "Polarização"
-
-msgid "System"
-msgstr ""
-
-msgid "Srate"
-msgstr "Srate"
-
-msgid "Inversion"
-msgstr "Inversão"
-
-msgid "CoderateH"
-msgstr "CoderateH"
-
-msgid "CoderateL"
-msgstr "CoderateL"
-
-msgid "Modulation"
-msgstr "Modulação"
-
-msgid "Bandwidth"
-msgstr "Bandwidth"
-
-msgid "Transmission"
-msgstr "Transmissão"
-
-msgid "Guard"
-msgstr "Guard"
-
-msgid "Hierarchy"
-msgstr "Hierarquia"
-
-msgid "Rolloff"
-msgstr ""
-
 msgid "Channel settings are not unique!"
 msgstr "Propriedades do canal não são únicas!"
 
diff -ruN vdr-1.7.12/po/ro_RO.po vdr-1.7.13/po/ro_RO.po
--- vdr-1.7.12/po/ro_RO.po	2010-01-23 16:15:31.000000000 +0100
+++ vdr-1.7.13/po/ro_RO.po	2010-02-28 13:19:49.000000000 +0100
@@ -2,14 +2,14 @@
 # Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
 # This file is distributed under the same license as the VDR package.
 # Paul Lacatus <paul@campina.iiruc.ro>, 2002
-# Lucian Muresan <lucianm@users.sourceforge.net>, 2004, 2005, 2006, 2008
+# Lucian Muresan <lucianm@users.sourceforge.net>, 2004, 2005, 2006, 2008, 2010
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: VDR 1.6.0\n"
+"Project-Id-Version: VDR 1.7.12\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-01-17 16:18+0100\n"
-"PO-Revision-Date: 2008-02-25 00:39+0100\n"
+"POT-Creation-Date: 2010-02-28 13:19+0100\n"
+"PO-Revision-Date: 2010-02-11 13:38+0100\n"
 "Last-Translator: Lucian Muresan <lucianm@users.sourceforge.net>\n"
 "Language-Team: Romanian\n"
 "MIME-Version: 1.0\n"
@@ -18,11 +18,20 @@
 "X-Poedit-Language: Romanian\n"
 "X-Poedit-Country: ROMANIA\n"
 
+msgid "*** Invalid Channel ***"
+msgstr "*** Canal invalid ***"
+
+msgid "Channel not available!"
+msgstr "Canal indisponibil"
+
+msgid "Can't start Transfer Mode!"
+msgstr "Nu pot porni modul de transfer!"
+
 msgid "off"
-msgstr "inactiv"
+msgstr "oprit"
 
 msgid "on"
-msgstr ""
+msgstr "pornit"
 
 msgid "auto"
 msgstr "automat"
@@ -30,258 +39,285 @@
 msgid "none"
 msgstr "niciuna(ul)"
 
-msgid "*** Invalid Channel ***"
-msgstr "*** Canal invalid ***"
+msgid "Polarization"
+msgstr "Polarizare"
 
-msgid "Channel not available!"
-msgstr "Canal indisponibil"
+msgid "System"
+msgstr "Sistem"
 
-msgid "Can't start Transfer Mode!"
-msgstr "Nu pot porni modul de transfer!"
+msgid "Srate"
+msgstr "Ratã simboluri"
+
+msgid "Inversion"
+msgstr "Inversiune"
+
+msgid "CoderateH"
+msgstr "CoderateH"
+
+msgid "CoderateL"
+msgstr "CoderateL"
+
+msgid "Modulation"
+msgstr "Modulaþie"
+
+msgid "Bandwidth"
+msgstr "Lãrgime de bandã"
+
+msgid "Transmission"
+msgstr "Transmisie"
+
+msgid "Guard"
+msgstr "Guard"
+
+msgid "Hierarchy"
+msgstr "Ierarhie"
+
+msgid "Rolloff"
+msgstr "Rolloff"
 
 msgid "Starting EPG scan"
 msgstr "Pornesc achiziþia EPG"
 
 msgid "Content$Movie/Drama"
-msgstr ""
+msgstr "Film/Dramã"
 
 msgid "Content$Detective/Thriller"
-msgstr ""
+msgstr "Poliþist/Suspense"
 
 msgid "Content$Adventure/Western/War"
-msgstr ""
+msgstr "Aventuri/Western/Rãzboi"
 
 msgid "Content$Science Fiction/Fantasy/Horror"
-msgstr ""
+msgstr "Science-Fiction/Fantastic/Groazã"
 
 msgid "Content$Comedy"
-msgstr ""
+msgstr "Comedie"
 
 msgid "Content$Soap/Melodrama/Folkloric"
-msgstr ""
+msgstr "Telenovelã/Melodramã/Folclor"
 
 msgid "Content$Romance"
-msgstr ""
+msgstr "Film romantic"
 
 msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
-msgstr ""
+msgstr "Film serios/clasic/religios/istoric/Dramã"
 
 msgid "Content$Adult Movie/Drama"
-msgstr ""
+msgstr "Film pentru adulþi/Dramã"
 
 msgid "Content$News/Current Affairs"
-msgstr ""
+msgstr "ªtiri/Actualitãþi"
 
 msgid "Content$News/Weather Report"
-msgstr ""
+msgstr "ªtiri/Buletin meteorologic"
 
 msgid "Content$News Magazine"
-msgstr ""
+msgstr "Magazin de ºtiri"
 
 msgid "Content$Documentary"
-msgstr ""
+msgstr "Documentar"
 
 msgid "Content$Discussion/Inverview/Debate"
-msgstr ""
+msgstr "Discuþie/Interviu/Dezbatere"
 
 msgid "Content$Show/Game Show"
-msgstr ""
+msgstr "Show/Jocuri"
 
 msgid "Content$Game Show/Quiz/Contest"
-msgstr ""
+msgstr "Emisiune jocuri/quiz/concurs"
 
 msgid "Content$Variety Show"
-msgstr ""
+msgstr "Varietãþi"
 
 msgid "Content$Talk Show"
-msgstr ""
+msgstr "Talk Show"
 
 msgid "Content$Sports"
-msgstr ""
+msgstr "Sport"
 
 msgid "Content$Special Event"
-msgstr ""
+msgstr "Eveniment special"
 
 msgid "Content$Sport Magazine"
-msgstr ""
+msgstr "Magazin sportiv"
 
 msgid "Content$Football/Soccer"
-msgstr ""
+msgstr "Football/fotbal"
 
 msgid "Content$Tennis/Squash"
-msgstr ""
+msgstr "Tenis/Squash"
 
 msgid "Content$Team Sports"
-msgstr ""
+msgstr "Sporturi de echipã"
 
 msgid "Content$Athletics"
-msgstr ""
+msgstr "Atletism"
 
 msgid "Content$Motor Sport"
-msgstr ""
+msgstr "Sport cu motor"
 
 msgid "Content$Water Sport"
-msgstr ""
+msgstr "Sporturi acvatice"
 
 msgid "Content$Winter Sports"
-msgstr ""
+msgstr "Sporturi de iarnã"
 
 msgid "Content$Equestrian"
-msgstr ""
+msgstr "Echitaþie"
 
 msgid "Content$Martial Sports"
-msgstr ""
+msgstr "Arte marþiale"
 
 msgid "Content$Children's/Youth Programme"
-msgstr ""
+msgstr "Emisiune pentru copii/tineret"
 
 msgid "Content$Pre-school Children's Programme"
-msgstr ""
+msgstr "Emisiune pentru copii preºcolari"
 
 msgid "Content$Entertainment Programme for 6 to 14"
-msgstr ""
+msgstr "Divertisment pentru copii intre 6 - 16 ani"
 
 msgid "Content$Entertainment Programme for 10 to 16"
-msgstr ""
+msgstr "Divertisment pentru copii intre 10 - 16 ani"
 
 msgid "Content$Informational/Educational/School Programme"
-msgstr ""
+msgstr "Informaþional/Educaþional/Emisiune ºcoalã"
 
 msgid "Content$Cartoons/Puppets"
-msgstr ""
+msgstr "Desene animate/Teatru de pãpuºi"
 
 msgid "Content$Music/Ballet/Dance"
-msgstr ""
+msgstr "Muzicã/Balet/Dans"
 
 msgid "Content$Rock/Pop"
-msgstr ""
+msgstr "Rock/Pop"
 
 msgid "Content$Serious/Classical Music"
-msgstr ""
+msgstr "Muzicã clasicã/serioasã"
 
 msgid "Content$Folk/Tradional Music"
-msgstr ""
+msgstr "Muzicã folk/tradiþionalã"
 
 msgid "Content$Jazz"
-msgstr ""
+msgstr "Jazz"
 
 msgid "Content$Musical/Opera"
-msgstr ""
+msgstr "Teatru muzical/Operã/Operetã"
 
 msgid "Content$Ballet"
-msgstr ""
+msgstr "Balet"
 
 msgid "Content$Arts/Culture"
-msgstr ""
+msgstr "Artã/Culturã"
 
 msgid "Content$Performing Arts"
-msgstr ""
+msgstr "Spectacole"
 
 msgid "Content$Fine Arts"
-msgstr ""
+msgstr "Belle arte"
 
 msgid "Content$Religion"
-msgstr ""
+msgstr "Religie"
 
 msgid "Content$Popular Culture/Traditional Arts"
-msgstr ""
+msgstr "Culturã Pop/Arte tradiþionale"
 
 msgid "Content$Literature"
-msgstr ""
+msgstr "Literaturã"
 
 msgid "Content$Film/Cinema"
-msgstr ""
+msgstr "Film/Cinema"
 
 msgid "Content$Experimental Film/Video"
-msgstr ""
+msgstr "Film experimental/Video"
 
 msgid "Content$Broadcasting/Press"
-msgstr ""
+msgstr "Radiodifuziune/Presã"
 
 msgid "Content$New Media"
-msgstr ""
+msgstr "Medii noi"
 
 msgid "Content$Arts/Culture Magazine"
-msgstr ""
+msgstr "Artã/Magazin cultural"
 
 msgid "Content$Fashion"
-msgstr ""
+msgstr "Modã"
 
 msgid "Content$Social/Political/Economics"
-msgstr ""
+msgstr "Social/Politic/Economie"
 
 msgid "Content$Magazine/Report/Documentary"
-msgstr ""
+msgstr "Magazin/Reportaj/Documentar"
 
 msgid "Content$Economics/Social Advisory"
-msgstr ""
+msgstr "Economie/Consiliere socialã"
 
 msgid "Content$Remarkable People"
-msgstr ""
+msgstr "Oameni remarcabili"
 
 msgid "Content$Education/Science/Factual"
-msgstr ""
+msgstr "Educaþie/ªtiinþã/Practic"
 
 msgid "Content$Nature/Animals/Environment"
-msgstr ""
+msgstr "Naturã/Animale/Mediu"
 
 msgid "Content$Technology/Natural Sciences"
-msgstr ""
+msgstr "Tehnologie/ªtiinþe naturale"
 
 msgid "Content$Medicine/Physiology/Psychology"
-msgstr ""
+msgstr "Medicinã/Fiziologie/Psihologie"
 
 msgid "Content$Foreign Countries/Expeditions"
-msgstr ""
+msgstr "Þãri strãine/Expediþii"
 
 msgid "Content$Social/Spiritual Sciences"
-msgstr ""
+msgstr "Social/ªtiinþe spirituale"
 
 msgid "Content$Further Education"
-msgstr ""
+msgstr "Cursuri de aprofundare"
 
 msgid "Content$Languages"
-msgstr ""
+msgstr "Limbi"
 
 msgid "Content$Leisure/Hobbies"
-msgstr ""
+msgstr "Timp liber/Hobby"
 
 msgid "Content$Tourism/Travel"
-msgstr ""
+msgstr "Turism/Cãlãtorie"
 
 msgid "Content$Handicraft"
-msgstr ""
+msgstr "Meºteºug"
 
 msgid "Content$Motoring"
-msgstr ""
+msgstr "Motoare"
 
 msgid "Content$Fitness & Health"
-msgstr ""
+msgstr "Miºcare & Sãnãtate"
 
 msgid "Content$Cooking"
-msgstr ""
+msgstr "Gãtit"
 
 msgid "Content$Advertisement/Shopping"
-msgstr ""
+msgstr "Publicitate/Cumpãrãturi"
 
 msgid "Content$Gardening"
-msgstr ""
+msgstr "Grãdinãrit"
 
 msgid "Content$Original Language"
-msgstr ""
+msgstr "Limba originalã"
 
 msgid "Content$Black & White"
-msgstr ""
+msgstr "Alb-Negru"
 
 msgid "Content$Unpublished"
-msgstr ""
+msgstr "Nepublicat"
 
 msgid "Content$Live Broadcast"
-msgstr ""
+msgstr "Transmisie în direct"
 
 #, c-format
 msgid "ParentalRating$from %d"
-msgstr ""
+msgstr "de la %d ani"
 
 msgid "No title"
 msgstr "Fãrã titlu"
@@ -526,42 +562,6 @@
 msgid "Sid"
 msgstr "Sid"
 
-msgid "Polarization"
-msgstr "Polarizare"
-
-msgid "System"
-msgstr ""
-
-msgid "Srate"
-msgstr "Ratã simboluri"
-
-msgid "Inversion"
-msgstr "Inversiune"
-
-msgid "CoderateH"
-msgstr "CoderateH"
-
-msgid "CoderateL"
-msgstr "CoderateL"
-
-msgid "Modulation"
-msgstr "Modulaþie"
-
-msgid "Bandwidth"
-msgstr "Lãrgime de bandã"
-
-msgid "Transmission"
-msgstr "Transmisie"
-
-msgid "Guard"
-msgstr "Guard"
-
-msgid "Hierarchy"
-msgstr "Ierarhie"
-
-msgid "Rolloff"
-msgstr ""
-
 msgid "Channel settings are not unique!"
 msgstr "Parametrii canalului nu sunt univoci!"
 
@@ -587,29 +587,29 @@
 msgstr "ªterg canalul?"
 
 msgid "Edit folder"
-msgstr ""
+msgstr "Editeazã directorul"
 
 msgid "New folder"
-msgstr ""
+msgstr "Director nou"
 
 msgid "Sub folder"
-msgstr ""
+msgstr "Sub-director"
 
 msgid "Folder name already exists!"
-msgstr ""
+msgstr "Un director cu acelaºi nume existã!"
 
 #, c-format
 msgid "Folder name must not contain '%c'!"
-msgstr ""
+msgstr "Numele directorului nu poate sã conþinã '%c'!"
 
 msgid "Button$Select"
-msgstr ""
+msgstr "Selecteazã"
 
 msgid "Delete folder and all sub folders?"
-msgstr ""
+msgstr "ªterg directorul ºi toate sub-directoarele?"
 
 msgid "Delete folder?"
-msgstr ""
+msgstr "ªterg directorul?"
 
 msgid "Edit timer"
 msgstr "Modificare timer"
@@ -642,13 +642,13 @@
 msgstr "Fiºier"
 
 msgid "Button$Folder"
-msgstr ""
+msgstr "Director"
 
 msgid "First day"
 msgstr "Prima zi"
 
 msgid "Select folder"
-msgstr ""
+msgstr "Selecteazã directorul"
 
 msgid "Timers"
 msgstr "Timer-e"
@@ -953,7 +953,7 @@
 msgstr "Resetare CAM"
 
 msgid "CAM present"
-msgstr "CAM preyent"
+msgstr "CAM prezent"
 
 msgid "CAM ready"
 msgstr "CAM pregãtit"
@@ -980,13 +980,13 @@
 msgstr "Nu pot reseta CAM"
 
 msgid "do not pause live video"
-msgstr ""
+msgstr "nu înregistra emisiunea"
 
 msgid "confirm pause live video"
-msgstr ""
+msgstr "confirmã înregistrarea emisiunii"
 
 msgid "pause live video"
-msgstr ""
+msgstr "înregistreazã emisiunea"
 
 msgid "Recording"
 msgstr "Înregistrare"
@@ -1007,7 +1007,7 @@
 msgstr "Timp de pãstrare predefinit (zile)"
 
 msgid "Setup.Recording$Pause key handling"
-msgstr ""
+msgstr "Funcþia tastei 'pauzã'"
 
 msgid "Setup.Recording$Pause priority"
 msgstr "Prioritate pauzã"
@@ -1079,7 +1079,7 @@
 msgstr "Volumul la pornire"
 
 msgid "Setup.Miscellaneous$Channels wrap"
-msgstr ""
+msgstr "Lista de canale în buclã"
 
 msgid "Setup.Miscellaneous$Emergency exit"
 msgstr "Oprire de urgenþã"
@@ -1203,10 +1203,10 @@
 msgstr "Spaþiul pe disc e foarte scãzut!"
 
 msgid "Regenerating index file"
-msgstr ""
+msgstr "Generez index"
 
 msgid "Index file regeneration complete"
-msgstr ""
+msgstr "Generarea indexului s-a incheiat"
 
 msgid "Can't shutdown - option '-s' not given!"
 msgstr "Nu pot închide - vezi opþiunea '-s'"
@@ -1280,7 +1280,7 @@
 msgstr "Urmeazã o înregistrare!"
 
 msgid "Pause live video?"
-msgstr ""
+msgstr "Înregistrez emisiunea?"
 
 msgid "Recording started"
 msgstr "A început înregistrarea"
diff -ruN vdr-1.7.12/po/ru_RU.po vdr-1.7.13/po/ru_RU.po
--- vdr-1.7.12/po/ru_RU.po	2010-01-23 16:15:31.000000000 +0100
+++ vdr-1.7.13/po/ru_RU.po	2010-02-28 13:19:50.000000000 +0100
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: VDR 1.6.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-01-17 16:18+0100\n"
+"POT-Creation-Date: 2010-02-28 13:19+0100\n"
 "PO-Revision-Date: 2008-12-15 14:37+0100\n"
 "Last-Translator: Oleg Roitburd <oleg@roitburd.de>\n"
 "Language-Team: Russian\n"
@@ -16,6 +16,15 @@
 "Content-Type: text/plain; charset=ISO-8859-5\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "*** Invalid Channel ***"
+msgstr "*** ½ÕßàÐÒØÛìÝëÙ ÚÐÝÐÛ ***"
+
+msgid "Channel not available!"
+msgstr "ºÐÝÐÛ ÝÕÔÞáâãßÕÝ!"
+
+msgid "Can't start Transfer Mode!"
+msgstr "½ÕÒÞ×ÜÞÖÝÞ ÒÚÛîçØâì àÕÖØÜ ßàÞßãáÚÐ!"
+
 msgid "off"
 msgstr "ÒëÚÛ"
 
@@ -28,14 +37,41 @@
 msgid "none"
 msgstr "ÝØçÕÓÞ"
 
-msgid "*** Invalid Channel ***"
-msgstr "*** ½ÕßàÐÒØÛìÝëÙ ÚÐÝÐÛ ***"
+msgid "Polarization"
+msgstr "¿ÞÛïàØ×ÐæØï"
 
-msgid "Channel not available!"
-msgstr "ºÐÝÐÛ ÝÕÔÞáâãßÕÝ!"
+msgid "System"
+msgstr "ÁØáâÕÜÐ"
 
-msgid "Can't start Transfer Mode!"
-msgstr "½ÕÒÞ×ÜÞÖÝÞ ÒÚÛîçØâì àÕÖØÜ ßàÞßãáÚÐ!"
+msgid "Srate"
+msgstr "ÁØÜÒ. áÚÞàÞáâì"
+
+msgid "Inversion"
+msgstr "¸ÝÒÕàáØï"
+
+msgid "CoderateH"
+msgstr "CoderateH"
+
+msgid "CoderateL"
+msgstr "CoderateL"
+
+msgid "Modulation"
+msgstr "¼ÞÔãÛïæØï"
+
+msgid "Bandwidth"
+msgstr "´ØÐßÐ×ÞÝ"
+
+msgid "Transmission"
+msgstr "¿ÕàÕÔÐçÐ"
+
+msgid "Guard"
+msgstr "·ÐéØâÐ"
+
+msgid "Hierarchy"
+msgstr "¸ÕàÐàåØï"
+
+msgid "Rolloff"
+msgstr "Rolloff"
 
 msgid "Starting EPG scan"
 msgstr "½ÐçØÝÐî EPG-áÚÐÝØàÞÒÐÝØÕ"
@@ -524,42 +560,6 @@
 msgid "Sid"
 msgstr "Sid"
 
-msgid "Polarization"
-msgstr "¿ÞÛïàØ×ÐæØï"
-
-msgid "System"
-msgstr "ÁØáâÕÜÐ"
-
-msgid "Srate"
-msgstr "ÁØÜÒ. áÚÞàÞáâì"
-
-msgid "Inversion"
-msgstr "¸ÝÒÕàáØï"
-
-msgid "CoderateH"
-msgstr "CoderateH"
-
-msgid "CoderateL"
-msgstr "CoderateL"
-
-msgid "Modulation"
-msgstr "¼ÞÔãÛïæØï"
-
-msgid "Bandwidth"
-msgstr "´ØÐßÐ×ÞÝ"
-
-msgid "Transmission"
-msgstr "¿ÕàÕÔÐçÐ"
-
-msgid "Guard"
-msgstr "·ÐéØâÐ"
-
-msgid "Hierarchy"
-msgstr "¸ÕàÐàåØï"
-
-msgid "Rolloff"
-msgstr "Rolloff"
-
 msgid "Channel settings are not unique!"
 msgstr "½ÐáâàÞÙÚØ ÚÐÝÐÛÐ ÝÕ ãÝØÚÐÛìÝë!"
 
diff -ruN vdr-1.7.12/po/sk_SK.po vdr-1.7.13/po/sk_SK.po
--- vdr-1.7.12/po/sk_SK.po	2010-01-23 16:15:31.000000000 +0100
+++ vdr-1.7.13/po/sk_SK.po	2010-02-28 13:19:50.000000000 +0100
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: VDR 1.6.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-01-17 16:18+0100\n"
+"POT-Creation-Date: 2010-02-28 13:19+0100\n"
 "PO-Revision-Date: 2009-09-30 12:50+0100\n"
 "Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n"
 "Language-Team: Slovak\n"
@@ -16,6 +16,15 @@
 "Content-Type: text/plain; charset=ISO-8859-2\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "*** Invalid Channel ***"
+msgstr "*** Neplatný kanál ***"
+
+msgid "Channel not available!"
+msgstr "Kanál nie je dostupný!"
+
+msgid "Can't start Transfer Mode!"
+msgstr "Nemô¾e spusti» prenos!"
+
 msgid "off"
 msgstr "vypnuté"
 
@@ -28,14 +37,41 @@
 msgid "none"
 msgstr "¾iadny"
 
-msgid "*** Invalid Channel ***"
-msgstr "*** Neplatný kanál ***"
+msgid "Polarization"
+msgstr "Polarizácia"
 
-msgid "Channel not available!"
-msgstr "Kanál nie je dostupný!"
+msgid "System"
+msgstr "systém"
 
-msgid "Can't start Transfer Mode!"
-msgstr "Nemô¾e spusti» prenos!"
+msgid "Srate"
+msgstr "Srate"
+
+msgid "Inversion"
+msgstr "Inversion"
+
+msgid "CoderateH"
+msgstr "CoderateH"
+
+msgid "CoderateL"
+msgstr "CoderateL"
+
+msgid "Modulation"
+msgstr "Modulácia"
+
+msgid "Bandwidth"
+msgstr "©írka pásma"
+
+msgid "Transmission"
+msgstr "Prenos"
+
+msgid "Guard"
+msgstr "Ochrana"
+
+msgid "Hierarchy"
+msgstr "Hierarchia"
+
+msgid "Rolloff"
+msgstr ""
 
 msgid "Starting EPG scan"
 msgstr "Zaèína prehµadáva» EPG"
@@ -524,42 +560,6 @@
 msgid "Sid"
 msgstr "Sid"
 
-msgid "Polarization"
-msgstr "Polarizácia"
-
-msgid "System"
-msgstr "systém"
-
-msgid "Srate"
-msgstr "Srate"
-
-msgid "Inversion"
-msgstr "Inversion"
-
-msgid "CoderateH"
-msgstr "CoderateH"
-
-msgid "CoderateL"
-msgstr "CoderateL"
-
-msgid "Modulation"
-msgstr "Modulácia"
-
-msgid "Bandwidth"
-msgstr "©írka pásma"
-
-msgid "Transmission"
-msgstr "Prenos"
-
-msgid "Guard"
-msgstr "Ochrana"
-
-msgid "Hierarchy"
-msgstr "Hierarchia"
-
-msgid "Rolloff"
-msgstr ""
-
 msgid "Channel settings are not unique!"
 msgstr "Nastavenia kanálu nie sú obyèajné!"
 
diff -ruN vdr-1.7.12/po/sl_SI.po vdr-1.7.13/po/sl_SI.po
--- vdr-1.7.12/po/sl_SI.po	2010-01-23 16:15:31.000000000 +0100
+++ vdr-1.7.13/po/sl_SI.po	2010-02-28 13:19:50.000000000 +0100
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: VDR 1.6.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-01-17 16:18+0100\n"
+"POT-Creation-Date: 2010-02-28 13:19+0100\n"
 "PO-Revision-Date: 2008-02-28 19:44+0100\n"
 "Last-Translator: Matjaz Thaler <matjaz.thaler@guest.arnes.si>\n"
 "Language-Team: Slovenian\n"
@@ -16,6 +16,15 @@
 "Content-Type: text/plain; charset=ISO-8859-2\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "*** Invalid Channel ***"
+msgstr "*** Neznan kanal ***"
+
+msgid "Channel not available!"
+msgstr "Kanal ni razpolo¾ljiv!"
+
+msgid "Can't start Transfer Mode!"
+msgstr "Ne morem zaèeti s prenosnim naèinom!"
+
 msgid "off"
 msgstr "izklop"
 
@@ -28,14 +37,41 @@
 msgid "none"
 msgstr "nobeden"
 
-msgid "*** Invalid Channel ***"
-msgstr "*** Neznan kanal ***"
+msgid "Polarization"
+msgstr "Polarizacija"
 
-msgid "Channel not available!"
-msgstr "Kanal ni razpolo¾ljiv!"
+msgid "System"
+msgstr ""
 
-msgid "Can't start Transfer Mode!"
-msgstr "Ne morem zaèeti s prenosnim naèinom!"
+msgid "Srate"
+msgstr "Srate"
+
+msgid "Inversion"
+msgstr "Inverzija"
+
+msgid "CoderateH"
+msgstr "CoderateH"
+
+msgid "CoderateL"
+msgstr "CoderateL"
+
+msgid "Modulation"
+msgstr "Modulacija"
+
+msgid "Bandwidth"
+msgstr "Pasovna ¹irina"
+
+msgid "Transmission"
+msgstr "Prenos"
+
+msgid "Guard"
+msgstr "Za¹èita"
+
+msgid "Hierarchy"
+msgstr "Hierarhija"
+
+msgid "Rolloff"
+msgstr ""
 
 msgid "Starting EPG scan"
 msgstr "Prièenjam EPG-scan"
@@ -524,42 +560,6 @@
 msgid "Sid"
 msgstr "Sid"
 
-msgid "Polarization"
-msgstr "Polarizacija"
-
-msgid "System"
-msgstr ""
-
-msgid "Srate"
-msgstr "Srate"
-
-msgid "Inversion"
-msgstr "Inverzija"
-
-msgid "CoderateH"
-msgstr "CoderateH"
-
-msgid "CoderateL"
-msgstr "CoderateL"
-
-msgid "Modulation"
-msgstr "Modulacija"
-
-msgid "Bandwidth"
-msgstr "Pasovna ¹irina"
-
-msgid "Transmission"
-msgstr "Prenos"
-
-msgid "Guard"
-msgstr "Za¹èita"
-
-msgid "Hierarchy"
-msgstr "Hierarhija"
-
-msgid "Rolloff"
-msgstr ""
-
 msgid "Channel settings are not unique!"
 msgstr "Nastavitve kanala niso edinstvene!"
 
diff -ruN vdr-1.7.12/po/sv_SE.po vdr-1.7.13/po/sv_SE.po
--- vdr-1.7.12/po/sv_SE.po	2010-01-23 16:15:31.000000000 +0100
+++ vdr-1.7.13/po/sv_SE.po	2010-02-28 13:19:50.000000000 +0100
@@ -10,7 +10,7 @@
 msgstr ""
 "Project-Id-Version: VDR 1.6.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-01-17 16:18+0100\n"
+"POT-Creation-Date: 2010-02-28 13:19+0100\n"
 "PO-Revision-Date: 2008-03-12 18:25+0100\n"
 "Last-Translator: Magnus Andersson <svankan@bahnhof.se>\n"
 "Language-Team: Swedish\n"
@@ -18,6 +18,15 @@
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "*** Invalid Channel ***"
+msgstr "*** Felaktig kanal ***"
+
+msgid "Channel not available!"
+msgstr "Kanalen är inte tillgänglig!"
+
+msgid "Can't start Transfer Mode!"
+msgstr "Kan inte starta Transfer Mode!"
+
 msgid "off"
 msgstr "av"
 
@@ -30,14 +39,41 @@
 msgid "none"
 msgstr "ingen"
 
-msgid "*** Invalid Channel ***"
-msgstr "*** Felaktig kanal ***"
+msgid "Polarization"
+msgstr "Polarisation"
 
-msgid "Channel not available!"
-msgstr "Kanalen är inte tillgänglig!"
+msgid "System"
+msgstr ""
 
-msgid "Can't start Transfer Mode!"
-msgstr "Kan inte starta Transfer Mode!"
+msgid "Srate"
+msgstr "Srate"
+
+msgid "Inversion"
+msgstr "Inversion"
+
+msgid "CoderateH"
+msgstr "CoderateH"
+
+msgid "CoderateL"
+msgstr "CoderateL"
+
+msgid "Modulation"
+msgstr "Modulation"
+
+msgid "Bandwidth"
+msgstr "Bandbredd"
+
+msgid "Transmission"
+msgstr "Transmission"
+
+msgid "Guard"
+msgstr "Guard"
+
+msgid "Hierarchy"
+msgstr "Hierarchy"
+
+msgid "Rolloff"
+msgstr ""
 
 msgid "Starting EPG scan"
 msgstr "Påbörjar EPG skanning"
@@ -526,42 +562,6 @@
 msgid "Sid"
 msgstr "Sid"
 
-msgid "Polarization"
-msgstr "Polarisation"
-
-msgid "System"
-msgstr ""
-
-msgid "Srate"
-msgstr "Srate"
-
-msgid "Inversion"
-msgstr "Inversion"
-
-msgid "CoderateH"
-msgstr "CoderateH"
-
-msgid "CoderateL"
-msgstr "CoderateL"
-
-msgid "Modulation"
-msgstr "Modulation"
-
-msgid "Bandwidth"
-msgstr "Bandbredd"
-
-msgid "Transmission"
-msgstr "Transmission"
-
-msgid "Guard"
-msgstr "Guard"
-
-msgid "Hierarchy"
-msgstr "Hierarchy"
-
-msgid "Rolloff"
-msgstr ""
-
 msgid "Channel settings are not unique!"
 msgstr "Kanalinställningarna är ej unika!"
 
diff -ruN vdr-1.7.12/po/tr_TR.po vdr-1.7.13/po/tr_TR.po
--- vdr-1.7.12/po/tr_TR.po	2010-01-23 16:15:31.000000000 +0100
+++ vdr-1.7.13/po/tr_TR.po	2010-02-28 13:19:50.000000000 +0100
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: VDR 1.6.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-01-17 16:18+0100\n"
+"POT-Creation-Date: 2010-02-28 13:19+0100\n"
 "PO-Revision-Date: 2008-02-28 00:33+0100\n"
 "Last-Translator: Oktay Yolgeçen <oktay_73@yahoo.de>\n"
 "Language-Team: Turkish\n"
@@ -15,6 +15,15 @@
 "Content-Type: text/plain; charset=ISO-8859-9\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "*** Invalid Channel ***"
+msgstr "*** Geçersiz kanal ***"
+
+msgid "Channel not available!"
+msgstr "Kanal kullanýlamýyor!"
+
+msgid "Can't start Transfer Mode!"
+msgstr "Transfer modu baþlatýlamýyor!"
+
 msgid "off"
 msgstr "kapalý"
 
@@ -27,14 +36,41 @@
 msgid "none"
 msgstr "hiç"
 
-msgid "*** Invalid Channel ***"
-msgstr "*** Geçersiz kanal ***"
+msgid "Polarization"
+msgstr "Kutuplaþma"
 
-msgid "Channel not available!"
-msgstr "Kanal kullanýlamýyor!"
+msgid "System"
+msgstr ""
 
-msgid "Can't start Transfer Mode!"
-msgstr "Transfer modu baþlatýlamýyor!"
+msgid "Srate"
+msgstr "Srate"
+
+msgid "Inversion"
+msgstr "Ýnversiyon"
+
+msgid "CoderateH"
+msgstr "CoderateH"
+
+msgid "CoderateL"
+msgstr "CoderateL"
+
+msgid "Modulation"
+msgstr "Modülasyon"
+
+msgid "Bandwidth"
+msgstr "Bant geniþliði"
+
+msgid "Transmission"
+msgstr "Ýletim"
+
+msgid "Guard"
+msgstr "Koruma"
+
+msgid "Hierarchy"
+msgstr "Hiyerarþi"
+
+msgid "Rolloff"
+msgstr ""
 
 msgid "Starting EPG scan"
 msgstr "EPG tarama baþlýyor"
@@ -523,42 +559,6 @@
 msgid "Sid"
 msgstr "Sid"
 
-msgid "Polarization"
-msgstr "Kutuplaþma"
-
-msgid "System"
-msgstr ""
-
-msgid "Srate"
-msgstr "Srate"
-
-msgid "Inversion"
-msgstr "Ýnversiyon"
-
-msgid "CoderateH"
-msgstr "CoderateH"
-
-msgid "CoderateL"
-msgstr "CoderateL"
-
-msgid "Modulation"
-msgstr "Modülasyon"
-
-msgid "Bandwidth"
-msgstr "Bant geniþliði"
-
-msgid "Transmission"
-msgstr "Ýletim"
-
-msgid "Guard"
-msgstr "Koruma"
-
-msgid "Hierarchy"
-msgstr "Hiyerarþi"
-
-msgid "Rolloff"
-msgstr ""
-
 msgid "Channel settings are not unique!"
 msgstr "Kanal ayarlarý belli deðýl!"
 
diff -ruN vdr-1.7.12/po/uk_UA.po vdr-1.7.13/po/uk_UA.po
--- vdr-1.7.12/po/uk_UA.po	2010-01-23 16:15:31.000000000 +0100
+++ vdr-1.7.13/po/uk_UA.po	2010-02-28 13:19:50.000000000 +0100
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: VDR 1.7.7\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-01-17 16:18+0100\n"
+"POT-Creation-Date: 2010-02-28 13:19+0100\n"
 "PO-Revision-Date: 2009-05-31 13:17+0200\n"
 "Last-Translator: Yarema aka Knedlyk <yupadmin@gmail.com>\n"
 "Language-Team: Ukrainian\n"
@@ -15,6 +15,15 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "*** Invalid Channel ***"
+msgstr "*** Ð�ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¸Ð¹ ÐºÐ°Ð½Ð°Ð» ***"
+
+msgid "Channel not available!"
+msgstr "ÐšÐ°Ð½Ð°Ð» Ð½ÐµÐ´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¸Ð¹!"
+
+msgid "Can't start Transfer Mode!"
+msgstr "Ð�ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ Ð²ÐºÐ»ÑŽÑ‡Ð¸Ñ‚Ð¸ Ñ€ÐµÐ¶Ð¸Ð¼ Ð¿Ñ€Ð¾Ð¿ÑƒÑ�ÐºÑƒ!"
+
 msgid "off"
 msgstr "Ð²Ð¸ÐºÐ»"
 
@@ -27,14 +36,41 @@
 msgid "none"
 msgstr "Ð½Ñ–Ñ‡Ð¾Ð³Ð¾"
 
-msgid "*** Invalid Channel ***"
-msgstr "*** Ð�ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¸Ð¹ ÐºÐ°Ð½Ð°Ð» ***"
+msgid "Polarization"
+msgstr "ÐŸÐ¾Ð»Ñ�Ñ€Ð¸Ð·Ð°Ñ†Ñ–Ñ�"
 
-msgid "Channel not available!"
-msgstr "ÐšÐ°Ð½Ð°Ð» Ð½ÐµÐ´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¸Ð¹!"
+msgid "System"
+msgstr "Ð¡Ð¸Ñ�Ñ‚ÐµÐ¼Ð°"
 
-msgid "Can't start Transfer Mode!"
-msgstr "Ð�ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ Ð²ÐºÐ»ÑŽÑ‡Ð¸Ñ‚Ð¸ Ñ€ÐµÐ¶Ð¸Ð¼ Ð¿Ñ€Ð¾Ð¿ÑƒÑ�ÐºÑƒ!"
+msgid "Srate"
+msgstr "Ð¡Ð¸Ð¼Ð². ÑˆÐ²Ð¸Ð´ÐºÑ–Ñ�Ñ‚ÑŒ"
+
+msgid "Inversion"
+msgstr "Ð†Ð½Ð²ÐµÑ€Ñ�Ñ–Ñ�"
+
+msgid "CoderateH"
+msgstr "CoderateH"
+
+msgid "CoderateL"
+msgstr "CoderateL"
+
+msgid "Modulation"
+msgstr "ÐœÐ¾Ð´ÑƒÐ»Ñ�Ñ†Ñ–Ñ�"
+
+msgid "Bandwidth"
+msgstr "Ð”Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½"
+
+msgid "Transmission"
+msgstr "ÐŸÐµÑ€ÐµÐ´Ð°Ñ‡Ð°"
+
+msgid "Guard"
+msgstr "Ð—Ð°Ñ…Ð¸Ñ�Ñ‚"
+
+msgid "Hierarchy"
+msgstr "Ð†Ñ”Ñ€Ð°Ñ€Ñ…Ñ–Ñ�"
+
+msgid "Rolloff"
+msgstr "ÐšÑ€ÐµÐ½"
 
 msgid "Starting EPG scan"
 msgstr "ÐŸÐ¾Ñ‡Ð¸Ð½Ð°ÑŽ EPG-Ñ�ÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ�"
@@ -523,42 +559,6 @@
 msgid "Sid"
 msgstr "Sid"
 
-msgid "Polarization"
-msgstr "ÐŸÐ¾Ð»Ñ�Ñ€Ð¸Ð·Ð°Ñ†Ñ–Ñ�"
-
-msgid "System"
-msgstr "Ð¡Ð¸Ñ�Ñ‚ÐµÐ¼Ð°"
-
-msgid "Srate"
-msgstr "Ð¡Ð¸Ð¼Ð². ÑˆÐ²Ð¸Ð´ÐºÑ–Ñ�Ñ‚ÑŒ"
-
-msgid "Inversion"
-msgstr "Ð†Ð½Ð²ÐµÑ€Ñ�Ñ–Ñ�"
-
-msgid "CoderateH"
-msgstr "CoderateH"
-
-msgid "CoderateL"
-msgstr "CoderateL"
-
-msgid "Modulation"
-msgstr "ÐœÐ¾Ð´ÑƒÐ»Ñ�Ñ†Ñ–Ñ�"
-
-msgid "Bandwidth"
-msgstr "Ð”Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½"
-
-msgid "Transmission"
-msgstr "ÐŸÐµÑ€ÐµÐ´Ð°Ñ‡Ð°"
-
-msgid "Guard"
-msgstr "Ð—Ð°Ñ…Ð¸Ñ�Ñ‚"
-
-msgid "Hierarchy"
-msgstr "Ð†Ñ”Ñ€Ð°Ñ€Ñ…Ñ–Ñ�"
-
-msgid "Rolloff"
-msgstr "ÐšÑ€ÐµÐ½"
-
 msgid "Channel settings are not unique!"
 msgstr "Ð�Ð°Ñ�Ñ‚Ñ€Ð¾Ð¹ÐºÐ¸ ÐºÐ°Ð½Ð°Ð»Ñƒ Ð½Ðµ Ñ”Ð´Ð¸Ð½Ñ–!"
 
diff -ruN vdr-1.7.12/po/zh_CN.po vdr-1.7.13/po/zh_CN.po
--- vdr-1.7.12/po/zh_CN.po	2010-01-23 16:15:31.000000000 +0100
+++ vdr-1.7.13/po/zh_CN.po	2010-02-28 13:19:50.000000000 +0100
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: VDR 1.6.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-01-17 16:18+0100\n"
+"POT-Creation-Date: 2010-02-28 13:19+0100\n"
 "PO-Revision-Date: 2009-09-23 23:50+0800\n"
 "Last-Translator: Nan Feng <nfgx@21cn.com>\n"
 "Language-Team: Chinese\n"
@@ -18,6 +18,15 @@
 "X-Poedit-Country: CHINA\n"
 "X-Poedit-SourceCharset: utf-8\n"
 
+msgid "*** Invalid Channel ***"
+msgstr "***æ— æ•ˆçš„é¢‘é�“ ***"
+
+msgid "Channel not available!"
+msgstr "é¢‘é�“ä¸�å�¯ç”¨!"
+
+msgid "Can't start Transfer Mode!"
+msgstr "ä¸�èƒ½å�¯åŠ¨ä¼ é€�æ¨¡å¼�"
+
 msgid "off"
 msgstr "å…³"
 
@@ -30,14 +39,41 @@
 msgid "none"
 msgstr "æ— "
 
-msgid "*** Invalid Channel ***"
-msgstr "***æ— æ•ˆçš„é¢‘é�“ ***"
+msgid "Polarization"
+msgstr "æž�åŒ–æ–¹å¼�"
 
-msgid "Channel not available!"
-msgstr "é¢‘é�“ä¸�å�¯ç”¨!"
+msgid "System"
+msgstr "å�«æ˜Ÿç³»ç»Ÿ"
 
-msgid "Can't start Transfer Mode!"
-msgstr "ä¸�èƒ½å�¯åŠ¨ä¼ é€�æ¨¡å¼�"
+msgid "Srate"
+msgstr "ç¬¦å�·çŽ‡"
+
+msgid "Inversion"
+msgstr "å��å�‘"
+
+msgid "CoderateH"
+msgstr "é«˜ç¬¦å�·é¢‘çŽ‡"
+
+msgid "CoderateL"
+msgstr "è®ºç¬¦å�·é¢‘çŽ‡"
+
+msgid "Modulation"
+msgstr "è°ƒåˆ¶"
+
+msgid "Bandwidth"
+msgstr "å¸¦å®½"
+
+msgid "Transmission"
+msgstr "ä¼ é€�"
+
+msgid "Guard"
+msgstr "é˜²æŠ¤"
+
+msgid "Hierarchy"
+msgstr "å±‚æ¬¡"
+
+msgid "Rolloff"
+msgstr "è¶Šé›¶çŽ‡"
 
 msgid "Starting EPG scan"
 msgstr "å¼€å§‹èŠ‚ç›®å�•æ‰«æ��"
@@ -526,42 +562,6 @@
 msgid "Sid"
 msgstr "Sid"
 
-msgid "Polarization"
-msgstr "æž�åŒ–æ–¹å¼�"
-
-msgid "System"
-msgstr "å�«æ˜Ÿç³»ç»Ÿ"
-
-msgid "Srate"
-msgstr "ç¬¦å�·çŽ‡"
-
-msgid "Inversion"
-msgstr "å��å�‘"
-
-msgid "CoderateH"
-msgstr "é«˜ç¬¦å�·é¢‘çŽ‡"
-
-msgid "CoderateL"
-msgstr "è®ºç¬¦å�·é¢‘çŽ‡"
-
-msgid "Modulation"
-msgstr "è°ƒåˆ¶"
-
-msgid "Bandwidth"
-msgstr "å¸¦å®½"
-
-msgid "Transmission"
-msgstr "ä¼ é€�"
-
-msgid "Guard"
-msgstr "é˜²æŠ¤"
-
-msgid "Hierarchy"
-msgstr "å±‚æ¬¡"
-
-msgid "Rolloff"
-msgstr "è¶Šé›¶çŽ‡"
-
 msgid "Channel settings are not unique!"
 msgstr "é¢‘é�“è®¾ç½®ä¸�æ˜¯å”¯ä¸€çš„ï¼�"
 
diff -ruN vdr-1.7.12/receiver.c vdr-1.7.13/receiver.c
--- vdr-1.7.12/receiver.c	2010-01-30 11:25:38.000000000 +0100
+++ vdr-1.7.13/receiver.c	2010-02-28 15:25:32.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: receiver.c 2.2 2010/01/30 10:25:38 kls Exp $
+ * $Id: receiver.c 2.3 2010/02/28 14:25:32 kls Exp $
  */
 
 #include "receiver.h"
@@ -81,7 +81,7 @@
      return AddPid(Channel->Vpid()) &&
             (Channel->Ppid() == Channel->Vpid() || AddPid(Channel->Ppid())) &&
             AddPids(Channel->Apids()) &&
-            (!Setup.UseDolbyDigital || AddPids(Channel->Dpids())) &&
+            AddPids(Channel->Dpids()) &&
             AddPids(Channel->Spids());
      }
 return true;
diff -ruN vdr-1.7.12/remux.c vdr-1.7.13/remux.c
--- vdr-1.7.12/remux.c	2010-01-30 11:43:12.000000000 +0100
+++ vdr-1.7.13/remux.c	2010-02-28 15:42:07.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: remux.c 2.41 2010/01/30 10:43:12 kls Exp $
+ * $Id: remux.c 2.42 2010/02/28 14:42:07 kls Exp $
  */
 
 #include "remux.h"
@@ -601,7 +601,7 @@
                             dpids[NumDpids] = dpid;
                             dtypes[NumDpids] = stream.getStreamType();
                             strn0cpy(dlangs[NumDpids], lang, sizeof(dlangs[NumDpids]));
-                            if (updatePrimaryDevice)
+                            if (updatePrimaryDevice && Setup.UseDolbyDigital)
                                cDevice::PrimaryDevice()->SetAvailableTrack(ttDolby, NumDpids, dpid, lang);
                             NumDpids++;
                             dpids[NumDpids]= 0;
diff -ruN vdr-1.7.12/runvdr.template vdr-1.7.13/runvdr.template
--- vdr-1.7.12/runvdr.template	2010-01-17 13:39:27.000000000 +0100
+++ vdr-1.7.13/runvdr.template	2010-01-17 13:39:27.000000000 +0100
@@ -20,7 +20,7 @@
 # See the main source file 'vdr.c' for copyright information and
 # how to reach the author.
 #
-# $Id: runvdr 2.1 2010/01/17 12:39:27 kls Exp $
+# $Id: runvdr.template 2.1 2010/01/17 12:39:27 kls Exp $
 
 VDRPRG="./vdr"
 
diff -ruN vdr-1.7.12/skinclassic.c vdr-1.7.13/skinclassic.c
--- vdr-1.7.12/skinclassic.c	2010-01-03 15:55:10.000000000 +0100
+++ vdr-1.7.13/skinclassic.c	2010-02-13 14:44:48.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: skinclassic.c 2.3 2010/01/03 14:55:10 kls Exp $
+ * $Id: skinclassic.c 2.4 2010/02/13 13:44:48 kls Exp $
  */
 
 #include "skinclassic.h"
@@ -13,7 +13,9 @@
 #include "osd.h"
 #include "themes.h"
 
-#define ScrollWidth  5
+#define ScrollWidth (Setup.FontOsdSize / 4)
+#define TextFrame   (Setup.FontOsdSize / 10)
+#define TextSpacing (Setup.FontOsdSize / 4)
 
 static cTheme Theme;
 
@@ -94,7 +96,7 @@
   lineHeight = font->Height();
   message = false;
   osd = cOsdProvider::NewOsd(cOsd::OsdLeft(), cOsd::OsdTop() + (Setup.ChannelInfoPos ? 0 : cOsd::OsdHeight() - Lines * lineHeight));
-  timeWidth = font->Width("00:00") + 4;
+  timeWidth = font->Width("00:00") + 2 * TextFrame;
   tArea Areas[] = { { 0, 0, cOsd::OsdWidth() - 1, Lines * lineHeight - 1, 8 } };
   if (Setup.AntiAlias && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk)
      osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
@@ -113,7 +115,7 @@
 void cSkinClassicDisplayChannel::SetChannel(const cChannel *Channel, int Number)
 {
   osd->DrawRectangle(0, 0, osd->Width() - 1, lineHeight - 1, Theme.Color(clrBackground));
-  osd->DrawText(2, 0, ChannelString(Channel, Number), Theme.Color(clrChannelName), Theme.Color(clrBackground), cFont::GetFont(fontOsd));
+  osd->DrawText(TextFrame, 0, ChannelString(Channel, Number), Theme.Color(clrChannelName), Theme.Color(clrBackground), cFont::GetFont(fontOsd));
   lastDate = NULL;
 }
 
@@ -124,9 +126,9 @@
   for (int i = 0; i < 2; i++) {
       const cEvent *e = !i ? Present : Following;
       if (e) {
-         osd->DrawText(             2, (2 * i + 1) * lineHeight, e->GetTimeString(), Theme.Color(clrChannelEpgTimeFg), Theme.Color(clrChannelEpgTimeBg), cFont::GetFont(fontOsd));
-         osd->DrawText(timeWidth + 10, (2 * i + 1) * lineHeight, e->Title(), Theme.Color(clrChannelEpgTitle), Theme.Color(clrBackground), cFont::GetFont(fontOsd));
-         osd->DrawText(timeWidth + 10, (2 * i + 2) * lineHeight, e->ShortText(), Theme.Color(clrChannelEpgShortText), Theme.Color(clrBackground), cFont::GetFont(fontSml));
+         osd->DrawText(                  TextFrame, (2 * i + 1) * lineHeight, e->GetTimeString(), Theme.Color(clrChannelEpgTimeFg), Theme.Color(clrChannelEpgTimeBg), cFont::GetFont(fontOsd));
+         osd->DrawText(timeWidth + 2 * TextSpacing, (2 * i + 1) * lineHeight, e->Title(), Theme.Color(clrChannelEpgTitle), Theme.Color(clrBackground), cFont::GetFont(fontOsd));
+         osd->DrawText(timeWidth + 2 * TextSpacing, (2 * i + 2) * lineHeight, e->ShortText(), Theme.Color(clrChannelEpgShortText), Theme.Color(clrBackground), cFont::GetFont(fontSml));
          }
       }
 }
@@ -152,7 +154,7 @@
      if (!*lastDate || strcmp(date, lastDate)) {
         const cFont *font = cFont::GetFont(fontSml);
         int w = font->Width(date);
-        osd->DrawText(osd->Width() - w - 2, 0, date, Theme.Color(clrChannelDate), Theme.Color(clrBackground), cFont::GetFont(fontSml), w);
+        osd->DrawText(osd->Width() - w - TextFrame, 0, date, Theme.Color(clrChannelDate), Theme.Color(clrBackground), cFont::GetFont(fontSml), w);
         lastDate = date;
         }
      }
@@ -196,7 +198,7 @@
   lineHeight = font->Height();
   dateWidth = 0;
   x0 = 0;
-  x1 = x0 + 10;
+  x1 = x0 + 2 * TextSpacing;
   x3 = cOsd::OsdWidth();
   x2 = x3 - 2 * ScrollWidth;
   y0 = 0;
@@ -440,9 +442,9 @@
   if (!*lastDate || strcmp(date, lastDate)) {
      const cFont *font = cFont::GetFont(fontOsd);
      int w = font->Width(date);
-     osd->DrawText(x3 - w - 2, y0, date, Theme.Color(clrMenuDate), Theme.Color(clrMenuTitleBg), font, w);
+     osd->DrawText(x3 - w - TextFrame, y0, date, Theme.Color(clrMenuDate), Theme.Color(clrMenuTitleBg), font, w);
      lastDate = date;
-     dateWidth = max(w + 2, dateWidth);
+     dateWidth = max(w + TextFrame, dateWidth);
      }
   osd->Flush();
 }
@@ -638,7 +640,7 @@
   int ItemsWidth = font->Width(Title);
   for (int i = 0; i < NumTracks; i++)
       ItemsWidth = max(ItemsWidth, font->Width(Tracks[i]));
-  ItemsWidth += 10;
+  ItemsWidth += 2 * TextSpacing;
   x0 = 0;
   x1 = cOsd::OsdWidth();
   int d = x1 - x0;
diff -ruN vdr-1.7.12/skinsttng.c vdr-1.7.13/skinsttng.c
--- vdr-1.7.12/skinsttng.c	2010-01-03 15:51:35.000000000 +0100
+++ vdr-1.7.13/skinsttng.c	2010-02-13 14:30:59.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: skinsttng.c 2.4 2010/01/03 14:51:35 kls Exp $
+ * $Id: skinsttng.c 2.5 2010/02/13 13:30:59 kls Exp $
  */
 
 // Star Trek: The Next Generation® is a registered trademark of Paramount Pictures
@@ -49,9 +49,12 @@
 #include "symbols/teletext.xpm"
 #include "symbols/volume.xpm"
 
-#define Roundness   10
-#define Gap          5
-#define ScrollWidth  5
+#define Roundness     (Setup.FontOsdSize / 2)
+#define Gap           (Setup.FontOsdSize / 5)
+#define ScrollWidth   (Setup.FontOsdSize / 4)
+#define TextFrame     (Setup.FontOsdSize / 10)
+#define TextSpacing   (Setup.FontOsdSize / 4)
+#define SymbolSpacing (Setup.FontOsdSize / 4)
 
 static cTheme Theme;
 
@@ -161,7 +164,7 @@
   message = false;
   if (withInfo) {
      x0 = 0;
-     x1 = x0 + font->Width("00:00") + 4;
+     x1 = x0 + font->Width("00:00") + 2 * TextFrame;
      x2 = x1 + Roundness;
      x3 = x2 + Gap;
      x7 = cOsd::OsdWidth();
@@ -240,28 +243,27 @@
 void cSkinSTTNGDisplayChannel::SetChannel(const cChannel *Channel, int Number)
 {
   osd->DrawRectangle(x3, y0, x4 - 1, y1 - 1, frameColor);
-  int x = x4 - 5;
+  int x = x4 - SymbolSpacing;
   if (Channel && !Channel->GroupSep()) {
-     int d = 3;
      bool rec = cRecordControls::Active();
-     x -= bmRecording.Width() + d;
+     x -= bmRecording.Width() + SymbolSpacing;
      osd->DrawBitmap(x, y0 + (y1 - y0 - bmRecording.Height()) / 2, bmRecording, Theme.Color(rec ? clrChannelSymbolRecFg : clrChannelSymbolOff), rec ? Theme.Color(clrChannelSymbolRecBg) : frameColor);
-     x -= bmEncrypted.Width() + d;
+     x -= bmEncrypted.Width() + SymbolSpacing;
      osd->DrawBitmap(x, y0 + (y1 - y0 - bmEncrypted.Height()) / 2, bmEncrypted, Theme.Color(Channel->Ca() ? clrChannelSymbolOn : clrChannelSymbolOff), frameColor);
-     x -= bmDolbyDigital.Width() + d;
+     x -= bmDolbyDigital.Width() + SymbolSpacing;
      osd->DrawBitmap(x, y0 + (y1 - y0 - bmDolbyDigital.Height()) / 2, bmDolbyDigital, Theme.Color(Channel->Dpid(0) ? clrChannelSymbolOn : clrChannelSymbolOff), frameColor);
-     x -= bmAudio.Width() + d;
+     x -= bmAudio.Width() + SymbolSpacing;
      osd->DrawBitmap(x, y0 + (y1 - y0 - bmAudio.Height()) / 2, bmAudio, Theme.Color(Channel->Apid(1) ? clrChannelSymbolOn : clrChannelSymbolOff), frameColor);
      if (Channel->Vpid()) {
-        x -= bmTeletext.Width() + d;
+        x -= bmTeletext.Width() + SymbolSpacing;
         osd->DrawBitmap(x, y0 + (y1 - y0 - bmTeletext.Height()) / 2, bmTeletext, Theme.Color(Channel->Tpid() ? clrChannelSymbolOn : clrChannelSymbolOff), frameColor);
         }
      else if (Channel->Apid(0)) {
-        x -= bmRadio.Width() + d;
+        x -= bmRadio.Width() + SymbolSpacing;
         osd->DrawBitmap(x, y0 + (y1 - y0 - bmRadio.Height()) / 2, bmRadio, Theme.Color(clrChannelSymbolOn), frameColor);
         }
      }
-  osd->DrawText(x3 + 2, y0, ChannelString(Channel, Number), Theme.Color(clrChannelName), frameColor, cFont::GetFont(fontOsd), x - x3 - 2);
+  osd->DrawText(x3 + TextFrame, y0, ChannelString(Channel, Number), Theme.Color(clrChannelName), frameColor, cFont::GetFont(fontOsd), x - x3 - TextFrame);
 }
 
 void cSkinSTTNGDisplayChannel::SetEvents(const cEvent *Present, const cEvent *Following)
@@ -276,9 +278,9 @@
   for (int i = 0; i < 2; i++) {
       const cEvent *e = !i ? Present : Following;
       if (e) {
-         osd->DrawText(x0 + 2, y3 + 2 * i * lineHeight, e->GetTimeString(), Theme.Color(clrChannelEpgTime), frameColor, cFont::GetFont(fontOsd));
-         osd->DrawText(x3 + 2, y3 + 2 * i * lineHeight, e->Title(), Theme.Color(clrChannelEpgTitle), Theme.Color(clrBackground), cFont::GetFont(fontOsd), x4 - x3 - 2);
-         osd->DrawText(x3 + 2, y3 + (2 * i + 1) * lineHeight, e->ShortText(), Theme.Color(clrChannelEpgShortText), Theme.Color(clrBackground), cFont::GetFont(fontSml), x4 - x3 - 2);
+         osd->DrawText(x0 + TextFrame, y3 + 2 * i * lineHeight, e->GetTimeString(), Theme.Color(clrChannelEpgTime), frameColor, cFont::GetFont(fontOsd));
+         osd->DrawText(x3 + TextFrame, y3 + 2 * i * lineHeight, e->Title(), Theme.Color(clrChannelEpgTitle), Theme.Color(clrBackground), cFont::GetFont(fontOsd), x4 - x3 - TextFrame);
+         osd->DrawText(x3 + TextFrame, y3 + (2 * i + 1) * lineHeight, e->ShortText(), Theme.Color(clrChannelEpgShortText), Theme.Color(clrBackground), cFont::GetFont(fontSml), x4 - x3 - TextFrame);
          }
       }
 }
@@ -309,13 +311,13 @@
         cString date = DayDateTime();
         int w = font->Width(date);
         if (!*lastDate || strcmp(date, lastDate)) {
-           osd->DrawText(x4 - w - 2, y7 - font->Height(), date, Theme.Color(clrChannelDate), frameColor, font, w);
+           osd->DrawText(x4 - w - TextFrame, y7 - font->Height(), date, Theme.Color(clrChannelDate), frameColor, font, w);
            lastDate = date;
            }
         cDevice *Device = cDevice::PrimaryDevice();
         const tTrackId *Track = Device->GetTrack(Device->GetCurrentAudioTrack());
         if (!Track && *lastTrackId.description || Track && strcmp(lastTrackId.description, Track->description)) {
-           osd->DrawText(x3 + 2, y6, Track ? Track->description : "", Theme.Color(clrChannelName), frameColor, font, x4 - x3 - w - 4);
+           osd->DrawText(x3 + TextFrame, y6, Track ? Track->description : "", Theme.Color(clrChannelName), frameColor, font, x4 - x3 - w - 2 * TextFrame);
            strn0cpy(lastTrackId.description, Track ? Track->description : "", sizeof(lastTrackId.description));
            }
         }
@@ -493,7 +495,7 @@
   const cFont *font = cFont::GetFont(fontOsd);
   const char *VDR = " VDR";
   int w = font->Width(VDR);
-  osd->DrawText(x3 + 5, y0, Title, Theme.Color(clrMenuTitle), frameColor, font, x4 - w - x3 - 5);
+  osd->DrawText(x3 + TextSpacing, y0, Title, Theme.Color(clrMenuTitle), frameColor, font, x4 - w - x3 - TextSpacing);
   osd->DrawText(x4 - w, y0, VDR, frameColor, clrBlack, font, w, lineHeight);
 }
 
@@ -501,9 +503,9 @@
 {
   cString date = DayDateTime();
   const cFont *font = cFont::GetFont(fontSml);
-  int d = 10;
+  int d = 2 * Gap;
   int d2 = d / 2;
-  int t4 = x4 - font->Width(date) - 2;
+  int t4 = x4 - font->Width(date) - TextFrame;
   int w = t4 - x3;
   int t0 = x3 + d2;
   int t1 = x3 + w / 4;
@@ -558,13 +560,13 @@
   for (int i = 0; i < MaxTabs; i++) {
       const char *s = GetTabbedText(Text, i);
       if (s) {
-         int xt = x3 + 5 + Tab(i);
+         int xt = x3 + TextSpacing + Tab(i);
          osd->DrawText(xt, y, s, ColorFg, ColorBg, font, x4 - xt);
          }
       if (!Tab(i + 1))
          break;
       }
-  SetEditableWidth(x4 - x3 - 5 - Tab(1));
+  SetEditableWidth(x4 - x3 - TextSpacing - Tab(1));
 }
 
 void cSkinSTTNGDisplayMenu::SetScrollbar(int Total, int Offset)
@@ -577,7 +579,7 @@
   if (!Event)
      return;
   const cFont *font = cFont::GetFont(fontOsd);
-  int xl = x3 + 5;
+  int xl = x3 + TextSpacing;
   int y = y3;
   cTextScroller ts;
   char t[32];
@@ -637,7 +639,7 @@
      return;
   const cRecordingInfo *Info = Recording->Info();
   const cFont *font = cFont::GetFont(fontOsd);
-  int xl = x3 + 5;
+  int xl = x3 + TextSpacing;
   int y = y3;
   cTextScroller ts;
   char t[32];
@@ -710,7 +712,7 @@
      if (!*lastDate || strcmp(date, lastDate)) {
         const cFont *font = cFont::GetFont(fontSml);
         int w = font->Width(date);
-        osd->DrawText(x4 - w - 2, y7 - font->Height(), date, Theme.Color(clrMenuDate), frameColor, font, w);
+        osd->DrawText(x4 - w - TextFrame, y7 - font->Height(), date, Theme.Color(clrMenuDate), frameColor, font, w);
         lastDate = date;
         }
      }
@@ -806,7 +808,7 @@
 
 void cSkinSTTNGDisplayReplay::SetTitle(const char *Title)
 {
-  osd->DrawText(x3 + 5, y0, Title, Theme.Color(clrReplayTitle), frameColor, cFont::GetFont(fontSml), x4 - x3 - 5);
+  osd->DrawText(x3 + TextSpacing, y0, Title, Theme.Color(clrReplayTitle), frameColor, cFont::GetFont(fontSml), x4 - x3 - TextSpacing);
 }
 
 static const char *const *ReplaySymbols[2][2][5] = {
@@ -844,7 +846,7 @@
 {
   const cFont *font = cFont::GetFont(fontSml);
   int w = font->Width(Total);
-  osd->DrawText(x4 - w - 5, y6, Total, Theme.Color(clrReplayTotal), frameColor, font, w);
+  osd->DrawText(x4 - w - TextSpacing, y6, Total, Theme.Color(clrReplayTotal), frameColor, font, w);
 }
 
 void cSkinSTTNGDisplayReplay::SetJump(const char *Jump)
@@ -924,10 +926,10 @@
 
 void cSkinSTTNGDisplayVolume::SetVolume(int Current, int Total, bool Mute)
 {
-  int xl = x3 + 5;
-  int xr = x4 - 5;
-  int yt = y0 + 3;
-  int yb = y1 - 3;
+  int xl = x3 + TextSpacing;
+  int xr = x4 - TextSpacing;
+  int yt = y0 + TextFrame;
+  int yb = y1 - TextFrame;
   if (mute != Mute) {
      osd->DrawRectangle(x3, y0, x4 - 1, y1 - 1, frameColor);
      mute = Mute;
@@ -935,9 +937,9 @@
   cBitmap bm(Mute ? mute_xpm : volume_xpm);
   osd->DrawBitmap(xl, y0 + (y1 - y0 - bm.Height()) / 2, bm, Theme.Color(clrVolumeSymbol), frameColor);
   if (!Mute) {
-     xl += bm.Width() + 5;
+     xl += bm.Width() + TextSpacing;
      int w = (y1 - y0) / 3;
-     int d = 3;
+     int d = TextFrame;
      int n = (xr - xl + d) / (w + d);
      int x = xr - n * (w + d);
      tColor Color = Theme.Color(clrVolumeBarLower);
@@ -988,7 +990,7 @@
   int ItemsWidth = font->Width(Title);
   for (int i = 0; i < NumTracks; i++)
       ItemsWidth = max(ItemsWidth, font->Width(Tracks[i]));
-  ItemsWidth += 10;
+  ItemsWidth += 2 * TextSpacing;
   x0 = 0;
   x1 = lineHeight / 2;
   x3 = (x1 + Roundness + Gap + 7) & ~0x07; // must be multiple of 8
@@ -1052,7 +1054,7 @@
   osd->DrawRectangle(x3, y6, x4 - 1, y7 - 1, frameColor);
   osd->DrawRectangle(x5, y6, x6 - 1, y7 - 1, frameColor);
   osd->DrawEllipse  (x6, y6, x7 - 1, y7 - 1, frameColor, 5);
-  osd->DrawText(x3 + 5, y0, Title, Theme.Color(clrMenuTitle), frameColor, font, x4 - x3 - 5);
+  osd->DrawText(x3 + TextSpacing, y0, Title, Theme.Color(clrMenuTitle), frameColor, font, x4 - x3 - TextSpacing);
   for (int i = 0; i < NumTracks; i++)
       SetItem(Tracks[i], i, false);
 }
@@ -1084,7 +1086,7 @@
         }
      }
   const cFont *font = cFont::GetFont(fontOsd);
-  int xt = x3 + 5;
+  int xt = x3 + TextSpacing;
   osd->DrawText(xt, y, Text, ColorFg, ColorBg, font, x4 - xt);
 }
 
@@ -1105,7 +1107,7 @@
     default: ;
     }
   if (bm)
-     osd->DrawBitmap(x3 + 5, y6 + (y7 - y6 - bm->Height()) / 2, *bm, Theme.Color(clrChannelSymbolOn), frameColor);
+     osd->DrawBitmap(x3 + TextSpacing, y6 + (y7 - y6 - bm->Height()) / 2, *bm, Theme.Color(clrChannelSymbolOn), frameColor);
   else
      osd->DrawRectangle(x3, y6, x4 - 1, y7 - 1, frameColor);
 }
diff -ruN vdr-1.7.12/sourceparams.c vdr-1.7.13/sourceparams.c
--- vdr-1.7.12/sourceparams.c	1970-01-01 01:00:00.000000000 +0100
+++ vdr-1.7.13/sourceparams.c	2010-02-28 13:15:49.000000000 +0100
@@ -0,0 +1,43 @@
+/*
+ * sourceparams.c: Source parameter handling
+ *
+ * See the main source file 'vdr.c' for copyright information and
+ * how to reach the author.
+ *
+ * $Id: sourceparams.c 1.1 2010/02/28 12:15:49 kls Exp $
+ */
+
+#include "sourceparams.h"
+#include "sources.h"
+
+// --- cSourceParam ----------------------------------------------------------
+
+cSourceParam::cSourceParam(char Source, const char *Description)
+{
+  source = Source;
+  if ('A' <= source && source <= 'Z') {
+     if (SourceParams.Get(source)) {
+        esyslog("ERROR: source parameters for '%c' already defined", source);
+        return;
+        }
+     SourceParams.Add(this);
+     if (Source != 'C' && Source != 'S' && Source != 'T')
+        Sources.Add(new cSource(Source, Description));
+     dsyslog("registered source parameters for '%c - %s'", source, Description);
+     }
+  else
+     esyslog("ERROR: invalid source '%c'", source);
+}
+
+// --- cSourceParams ---------------------------------------------------------
+
+cSourceParams SourceParams;
+
+cSourceParam *cSourceParams::Get(char Source) const
+{
+  for (cSourceParam *sp = First(); sp; sp = Next(sp)) {
+      if (sp->Source() == Source)
+         return sp;
+      }
+  return NULL;
+}
diff -ruN vdr-1.7.12/sourceparams.h vdr-1.7.13/sourceparams.h
--- vdr-1.7.12/sourceparams.h	1970-01-01 01:00:00.000000000 +0100
+++ vdr-1.7.13/sourceparams.h	2010-02-28 12:58:03.000000000 +0100
@@ -0,0 +1,53 @@
+/*
+ * sourceparams.h: Source parameter handling
+ *
+ * See the main source file 'vdr.c' for copyright information and
+ * how to reach the author.
+ *
+ * $Id: sourceparams.h 1.1 2010/02/28 11:58:03 kls Exp $
+ */
+
+#ifndef __SOURCEPARAMS_H
+#define __SOURCEPARAMS_H
+
+#include "channels.h"
+#include "osdbase.h"
+#include "tools.h"
+
+class cSourceParam : public cListObject {
+private:
+  char source;
+public:
+  cSourceParam(char Source, const char *Description);
+    ///< Sets up a parameter handler for the given Source.
+    ///< Source must be in the range 'A'...'Z', and there can only
+    ///< be one cSourceParam for any given source.
+    ///< Description contains a short, one line description of this source.
+    ///< If a plugin sets up a new cSourceParam, this will also trigger
+    ///< defining the appropriate cSource automatically.
+    ///< Objects of cSourceParam shall only be created on the heap, and
+    ///< shall never be deleted (they will be deleted automatically when
+    ///< the program ends).
+  char Source(void) const { return source; }
+  virtual void SetData(cChannel *Channel) = 0;
+    ///< Sets all source specific parameters to those of the given Channel.
+    ///< Must also reset a counter to use with later calls to GetOsdItem().
+  virtual void GetData(cChannel *Channel) = 0;
+    ///< Copies all source specific parameters to the given Channel.
+  virtual cOsdItem *GetOsdItem(void) = 0;
+    ///< Returns all the OSD items necessary for editing the source
+    ///< specific parameters of the channel that was given in the last
+    ///< call to SetData(). Each call to GetOsdItem() returns exactly
+    ///< one such item. After all items have been fetched, any further
+    ///< calls to GetOsdItem() return NULL. After another call to
+    ///< SetData(), the OSD items can be fetched again.
+  };
+
+class cSourceParams : public cList<cSourceParam> {
+public:
+  cSourceParam *Get(char Source) const;
+  };
+
+extern cSourceParams SourceParams;
+
+#endif //__SOURCEPARAMS_H
diff -ruN vdr-1.7.12/sources.c vdr-1.7.13/sources.c
--- vdr-1.7.12/sources.c	2008-02-10 15:07:26.000000000 +0100
+++ vdr-1.7.13/sources.c	2010-02-28 13:00:31.000000000 +0100
@@ -4,11 +4,10 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: sources.c 2.0 2008/02/10 14:07:26 kls Exp $
+ * $Id: sources.c 2.1 2010/02/28 12:00:31 kls Exp $
  */
 
 #include "sources.h"
-#include <ctype.h>
 
 // --- cSource ---------------------------------------------------------------
 
@@ -18,6 +17,12 @@
   description = NULL;
 }
 
+cSource::cSource(char Source, const char *Description)
+{
+  code = int(Source) << 24;
+  description = strdup(Description);
+}
+
 cSource::~cSource()
 {
   free(description);
@@ -36,58 +41,50 @@
 {
   char buffer[16];
   char *q = buffer;
-  switch (Code & st_Mask) {
-    case stCable: *q++ = 'C'; break;
-    case stSat:   *q++ = 'S';
-                  {
-                    int pos = Code & ~st_Mask;
-                    q += snprintf(q, sizeof(buffer) - 2, "%u.%u", (pos & ~st_Neg) / 10, (pos & ~st_Neg) % 10); // can't simply use "%g" here since the silly 'locale' messes up the decimal point
-                    *q++ = (Code & st_Neg) ? 'E' : 'W';
-                  }
-                  break;
-    case stTerr:  *q++ = 'T'; break;
-    default:      *q++ = Code + '0'; // backward compatibility
-    }
+  *q++ = (Code & st_Mask) >> 24;
+  int n = (Code & st_Pos);
+  if (n > 0x00007FFF)
+     n |= 0xFFFF0000;
+  if (n) {
+     q += snprintf(q, sizeof(buffer) - 2, "%u.%u", abs(n) / 10, abs(n) % 10); // can't simply use "%g" here since the silly 'locale' messes up the decimal point
+     *q++ = (n < 0) ? 'E' : 'W';
+     }
   *q = 0;
   return buffer;
 }
 
 int cSource::FromString(const char *s)
 {
-  int type = stNone;
-  switch (toupper(*s)) {
-    case 'C': type = stCable; break;
-    case 'S': type = stSat;   break;
-    case 'T': type = stTerr;  break;
-    case '0' ... '9': type = *s - '0'; break; // backward compatibility
-    default: esyslog("ERROR: unknown source key '%c'", *s);
-             return stNone;
-    }
-  int code = type;
-  if (type == stSat) {
-     int pos = 0;
-     bool dot = false;
-     bool neg = false;
-     while (*++s) {
-           switch (toupper(*s)) {
-             case '0' ... '9': pos *= 10;
-                               pos += *s - '0';
-                               break;
-             case '.':         dot = true;
-                               break;
-             case 'E':         neg = true; // fall through to 'W'
-             case 'W':         if (!dot)
-                                  pos *= 10;
-                               break;
-             default: esyslog("ERROR: unknown source character '%c'", *s);
-                      return stNone;
-             }
-           }
-     if (neg)
-        pos |= st_Neg;
-     code |= pos;
+  if ('A' <= *s && *s <= 'Z') {
+     int code = int(*s) << 24;
+     if (code == stSat) {
+        int pos = 0;
+        bool dot = false;
+        bool neg = false;
+        while (*++s) {
+              switch (*s) {
+                case '0' ... '9': pos *= 10;
+                                  pos += *s - '0';
+                                  break;
+                case '.':         dot = true;
+                                  break;
+                case 'E':         neg = true; // fall through to 'W'
+                case 'W':         if (!dot)
+                                     pos *= 10;
+                                  break;
+                default: esyslog("ERROR: unknown source character '%c'", *s);
+                         return stNone;
+                }
+              }
+        if (neg)
+           pos = -pos;
+        code |= (pos & st_Pos);
+        }
+     return code;
      }
-  return code;
+  else
+    esyslog("ERROR: unknown source key '%c'", *s);
+  return stNone;
 }
 
 int cSource::FromData(eSourceType SourceType, int Position, bool East)
@@ -95,7 +92,7 @@
   int code = SourceType;
   if (SourceType == stSat) {
      if (East)
-        code |= st_Neg;
+        Position = -Position;
      code |= (Position & st_Pos);;
      }
   return code;
diff -ruN vdr-1.7.12/sources.conf vdr-1.7.13/sources.conf
--- vdr-1.7.12/sources.conf	2009-12-23 15:35:49.000000000 +0100
+++ vdr-1.7.13/sources.conf	2010-02-28 13:05:32.000000000 +0100
@@ -21,7 +21,7 @@
 
 S3E     Telecom 2C
 S4E     Eurobird 4
-S5E     Sirius 4
+S4.8E   Sirius 4
 S7E     Eutelsat W3A
 S9E     Eurobird 9
 S10E    Eutelsat W1
@@ -190,8 +190,8 @@
 
 # Cable
 
-C       Cable
+C       DVB-C
 
 # Terrestrial
 
-T       Terrestrial
+T       DVB-T
diff -ruN vdr-1.7.12/sources.h vdr-1.7.13/sources.h
--- vdr-1.7.12/sources.h	2005-05-14 11:30:41.000000000 +0200
+++ vdr-1.7.13/sources.h	2010-02-21 17:11:19.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: sources.h 2.0 2005/05/14 09:30:41 kls Exp $
+ * $Id: sources.h 2.1 2010/02/21 16:11:19 kls Exp $
  */
 
 #ifndef __SOURCES_H
@@ -15,19 +15,19 @@
 class cSource : public cListObject {
 public:
   enum eSourceType {
-    stNone  = 0x0000,
-    stCable = 0x4000,
-    stSat   = 0x8000,
-    stTerr  = 0xC000,
-    st_Mask = 0xC000,
-    st_Neg  = 0x0800,
-    st_Pos  = 0x07FF,
+    stNone  = 0x00000000,
+    stCable = ('C' << 24),
+    stSat   = ('S' << 24),
+    stTerr  = ('T' << 24),
+    st_Mask = 0xFF000000,
+    st_Pos  = 0x0000FFFF,
     };
 private:
   int code;
   char *description;
 public:
   cSource(void);
+  cSource(char Source, const char *Description);
   ~cSource();
   int Code(void) const { return code; }
   const char *Description(void) const { return description; }
diff -ruN vdr-1.7.12/tools.c vdr-1.7.13/tools.c
--- vdr-1.7.12/tools.c	2009-12-23 16:12:15.000000000 +0100
+++ vdr-1.7.13/tools.c	2010-02-28 14:31:46.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 2.6 2009/12/23 15:12:15 kls Exp $
+ * $Id: tools.c 2.7 2010/02/28 13:31:46 kls Exp $
  */
 
 #include "tools.h"
@@ -1423,6 +1423,8 @@
         LOG_ERROR_STR(tempName);
         result = false;
         }
+     fflush(f);
+     fsync(fileno(f));
      if (fclose(f) < 0) {
         LOG_ERROR_STR(tempName);
         result = false;
diff -ruN vdr-1.7.12/vdr.5 vdr-1.7.13/vdr.5
--- vdr-1.7.12/vdr.5	2010-01-31 13:59:50.000000000 +0100
+++ vdr-1.7.13/vdr.5	2010-02-21 15:29:06.000000000 +0100
@@ -8,7 +8,7 @@
 .\" License as specified in the file COPYING that comes with the
 .\" vdr distribution.
 .\"
-.\" $Id: vdr.5 2.13 2010/01/31 12:59:50 kls Exp $
+.\" $Id: vdr.5 2.15 2010/02/21 14:29:06 kls Exp $
 .\"
 .TH vdr 5 "10 Feb 2008" "1.6" "Video Disk Recorder Files"
 .SH NAME
@@ -142,7 +142,7 @@
 \fBDelivery System:\fR The satellite delivery system (0 = DVB-S, 1 = DVB-S2).
 
 \fBPolarization:\fR Satellite antenna polarization.
-h = horizontal, v = vertical, r = circular right, l = circular left.
+H = horizontal, V = vertical, R = circular right, L = circular left.
 
 The polarization parameters have no integer numbers following them. This is for
 compatibility with files from older versions and also to keep the DVB-S entries
@@ -163,13 +163,13 @@
 An example of a parameter field for a DVB-S2 channel might look like this:
 \fBhC910M2O35S1\fR
 
+Plugins that implement devices that need their own set of parameters may
+store those in the parameters string in arbitrary format (not necessarily
+the "character/number" format listed above). The only condition is that
+the string may not contain colons (':') or newline characters.
 .TP
 .B Source
 The signal source of this channel, as defined in the file \fIsources.conf\fR.
-For compatibility with files from older versions numeric values will be accepted
-and also written back correctly, but they will have no meaning for the \fBDiSEqC\fR
-settings. You should replace the numerical values with the proper source identifiers
-defined in \fIsources.conf\fR.
 .TP
 .B Srate
 The symbol rate of this channel (DVB-S and DVB-C only).
@@ -406,6 +406,7 @@
 \fBC\fR@Cable
 \fBT\fR@Terrestrial
 .TE
+
 and is followed by further data pertaining to that particular source. In case of
 \fBS\fRatellite this is the orbital position in degrees, followed by \fBE\fR for
 east or \fBW\fR for west.
@@ -452,6 +453,15 @@
 There can be any number of actions in a line, including none at all - in which case
 the entry would be used only to set the LOF to use for the given frequency range
 and polarization.
+
+By default it is assumed that every DVB-S device can receive every satellite.
+If this is not the case in a particular setup, lines of the form
+
+\fB1 2 4:\fR
+
+may be inserted in the \fIdiseqc.conf\fR file, defining the devices that are able
+to receive the satellites following thereafter. In this case, only the devices
+1, 2 and 4 would be able to receive any satellites following this line.
 .SS REMOTE CONTROL KEYS
 The file \fIremote.conf\fR contains the key assignments for all remote control
 units. Each line consists of one key assignment in the following format:
diff -ruN vdr-1.7.12/vdr.c vdr-1.7.13/vdr.c
--- vdr-1.7.12/vdr.c	2010-01-31 12:14:40.000000000 +0100
+++ vdr-1.7.13/vdr.c	2010-02-21 15:08:09.000000000 +0100
@@ -22,7 +22,7 @@
  *
  * The project's page is at http://www.tvdr.de
  *
- * $Id: vdr.c 2.16 2010/01/31 11:14:40 kls Exp $
+ * $Id: vdr.c 2.17 2010/02/21 14:08:09 kls Exp $
  */
 
 #include <getopt.h>
@@ -58,6 +58,7 @@
 #include "shutdown.h"
 #include "skinclassic.h"
 #include "skinsttng.h"
+#include "sourceparams.h"
 #include "sources.h"
 #include "themes.h"
 #include "timers.h"
@@ -1303,6 +1304,7 @@
   Remotes.Clear();
   Audios.Clear();
   Skins.Clear();
+  SourceParams.Clear();
   if (ShutdownHandler.GetExitCode() != 2) {
      Setup.CurrentChannel = cDevice::CurrentChannel();
      Setup.CurrentVolume  = cDevice::CurrentVolume();
