diff -ruN vdr-1.7.32/CONTRIBUTORS vdr-1.7.33/CONTRIBUTORS
--- vdr-1.7.32/CONTRIBUTORS	2012-11-18 14:12:31.000000000 +0100
+++ vdr-1.7.33/CONTRIBUTORS	2012-12-05 15:14:31.000000000 +0100
@@ -229,6 +229,8 @@
  for a patch that was used to implement the --localedir option
  for reporting a problem with updating CA descriptors in transfer mode on full
  featured DVB cards
+ for pointing out a bug in handling lowercase polarization characters in channel
+ definitions if no DiSEqC is used
 
 Ulrich R�der <roeder@efr-net.de>
  for pointing out that there are channels that have a symbol rate higher than 27500
@@ -1774,6 +1776,8 @@
  for reporting duplicate texts in i18n.c
  for suggesting to use 'gettext' for internationalization
  for exporting some libsi functions
+ for suggesting to add functions to cDevice that allow derived output devices to
+ implement scaling the video to a given size and location
 
 Mattias Gr�nlund <Mattias@Gronlund.net>
  for pointing out a missing cleanup at program exit in case there is a problem
@@ -1976,6 +1980,7 @@
  for pointing out that the variable HasSnr was unused in cDvbTuner::GetSignalQuality()
  for fixing cConfig::Load() for g++ version 4.7.0
  for fixing some typos in HISTORY and CONTRIBUTORS
+ for fixing some spellings in osd.h and svdrp.c
 
 Steffen Beyer <cpunk@reactor.de>
  for fixing setting the colored button help after deleting a recording in case the next
@@ -2224,6 +2229,10 @@
  for suggesting that the primary device should only be avoided for recording if
  it is an old SD full featured card
  for his support in using convert/ffmpeg in the pic2mpg script of the 'pictures' plugin
+ for requesting a way of getting to the very end of an edited recording, since version
+ 1.7.32 no longer generates a mark at that point
+ for suggesting to automatically go into Pause mode if an editing mark is set during
+ replay
 
 J�rgen Schilling <juergen_schilling@web.de>
  for reporting that color buttons were displayed in the recording info menu if it
@@ -2265,6 +2274,8 @@
  for reporting that the "'1' for encrypted radio channels" part in the description
  of the VPID in vdr.5 is obsolete
  for a patch that was used to implement storing the channel name in info.vdr
+ for making the SVDRP command HITK discard any keys if the remote control is currently
+ turned off
 
 Daniel Karsubka <dkar@gmx.de>
  for suggesting to write the epg.data file when VDR exits
@@ -2626,6 +2637,9 @@
  that might inadvertently be called with a 'char *' as the second argument on some
  compilers and cause a crash
  for reporting a possible memory leak in SI::StructureLoop::getNextAsPointer()
+ for making the TDT EIT filter always be set, because otherwise when turning on using
+ the transponder time in the Setup menu, it would only be used after the next restart
+ of VDR
 
 Ales Jurik <ajurik@quick.cz>
  for reporting broken SI data on Czech/Slovak channels after changing the default
@@ -2728,6 +2742,8 @@
  contains only the address of the local host
  for a patch that was used as a base for making editing marks be updated every 10
  seconds during replay
+ for suggesting to synchronize system time to the transponder time using adjtime() in
+ order to avoid discontinuities
 
 Rene van den Braken <rene@vandenbraken.name>
  for reporting a bug in writing the PCR pid into the PMT in
@@ -2760,6 +2776,8 @@
  for a patch that was used to implement SCR (Satellite Channel Routing)
  for implementing the SVDRP command 'UPDR'
  for reporting that the SVDRP command UPDR didn't update the global recordings list
+ for fixing a typo in skins.h
+ for fixing some #include statements in plugins to use <vdr/...> instead of "vdr/..."
 
 Alex Lasnier <alex@fepg.org>
  for adding tuning support for ATSC devices
@@ -2834,6 +2852,7 @@
  for fixing cUnbufferedFile::Seek() in case it is compiled without USE_FADVISE
  for reporting a problem with EPG scan on systems with only a single DVB device that
  use software output
+ for fixing calling iconv_close() only with a valid iconv_t value
 
 Sergiu Dotenco <sergiu.dotenco@googlemail.com>
  for reporting a missing initialization in sDvbSpuRect
@@ -2958,7 +2977,7 @@
  for a patch that was used to implement the setup options "OSD/Color key [0123]"
 
 Andrey Pridvorov <ua0lnj@bk.ru>
- for reporting a problem with detecting frames in MPEG 4 video, and pointing towards
+ for reporting a problem with detecting frames in H.264 video, and pointing towards
  a better way of doing it
 
 Jens Vogel <jens.vogel@akjv.de>
@@ -2970,6 +2989,29 @@
  for a patch that was used to move cleaning up the EPG data and writing the epg.data
  file into a separate thread to avoid sluggish response to user input on slow systems
  for fixing sorting folders before recordings in case of UTF-8
+ for reporting that cCuttingThread::GetPendingPackets() should get only non-video
+ packets
+ for pointing out that the name H264 should be used instead of MPEG4
+ for pointing out that the cutter should only increment the TS continuity counter for
+ packets that have a payload
+ for pointing out that when adjusting the DTS values in the cutter, it hase to compensate
+ for dropped B-frames
+ for simplifying calculating the PTS offset in cPtsFixer::Fix() and fixing the overflow
+ handling of PCR values
 
 Peter M�nster <pmlists@free.fr>
  for fixing 'make install' to not overwrite existing configuration files
+
+Mike Hay <mike.hay@linenshorts.com>
+ for reporting a problem with handling the case of the polarization character in
+ channel definitions if no DiSEqC is used
+
+Stefan Hofmann <stefan.hofmann@t-online.de>
+ for suggesting to implement support for remote controls that only have a combined
+ "Play/Pause" key instead of separate keys for "Play" and "Pause"
+
+Stefan Blochberger <Stefan.Blochberger@gmx.de>
+ for suggesting to automatically display the progress display whenever replay of a
+ recording is started
+ for suggesting that floating point numbers presented to the user shall be displayed
+ in the way defined by the current locale
diff -ruN vdr-1.7.32/HISTORY vdr-1.7.33/HISTORY
--- vdr-1.7.32/HISTORY	2012-11-18 14:11:56.000000000 +0100
+++ vdr-1.7.33/HISTORY	2012-12-08 12:05:39.000000000 +0100
@@ -7245,7 +7245,7 @@
 - Decreased the ring buffer put/get trigger sizes from 1/3 to 1/10.
 - The script given to VDR with the '-r' option is now also called whenever a
   recording is deleted (thanks to Alexander Wenzel).
-- Improved detecting frames in MPEG 4 video (reported by Andrey Pridvorov).
+- Improved detecting frames in H.264 video (reported by Andrey Pridvorov).
 - cPatPmtParser::ParsePmt() now also recognizes stream type 0x81 as "AC3", so that
   recordings that have been converted from the old PES format to TS can be played
   (suggested by Jens Vogel).
@@ -7305,7 +7305,7 @@
   Sundararaj Reel).
 - Fixed handling timers in case an event is modified and "phased out" while the timer
   is recording.
-- Improved frame detection by parsing just far enough into the MPEG-4 NAL units to get
+- Improved frame detection by parsing just far enough into the H.264 NAL units to get
   the necessary information about frames and slices.
 - The initial syncing of the frame detector is now done immediately after the first
   complete GOP has been seen. This makes recordings and especially pausing live video
@@ -7334,7 +7334,85 @@
   simply mark a position, but have no effect on the actual cutting process.
 - When positioned at an offset where two (or more) editing marks are placed on top
   of each other, the '4' key moves the first one of them to the left, while the '6'
-  key moves the last one of them to the right. The '7' and '9' key handle multiple
+  key moves the last one of them to the right. The '7' and '9' keys handle multiple
   marks at the same place as if it were one single mark.
 - Modified editing marks are now written to disk whenever the replay progress display
   gets hidden (thanks to Christoph Haubrich).
+
+2012-12-08: Version 1.7.33
+
+- In order to be able to play TS recordings from other sources, in which there is
+  more than one PMT PID in the PAT, 'int cPatPmtParser::PatPmt(void)' has been changed
+  to 'bool cPatPmtParser::IsPatPmt(int Pid)'.
+- Fixed learning remote control keys with the LCARS skin.
+- Updated the Macedonian OSD texts (thanks to Dimitar Petrovski).
+- Fixed getting only non-video packets in cCuttingThread::GetPendingPackets() (reported
+  by S�ren Moch).
+- Changed all occurrences of MPEG4 to H264 (pointed out by S�ren Moch).
+- Fixed getting the number of editing sequences in case the last sequence has no actual
+  end mark.
+- The cutter now only increments the TS continuity counter for packets that have a
+  payload (pointed out by S�ren Moch).
+- Fixed adjusting the DTS values in the cutter, to compensate for dropped B-frames
+  (pointed out by S�ren Moch).
+- Fixed a typo in skins.h (thanks to Lars Hanisch).
+- Simplified calculating the PTS offset in cPtsFixer::Fix() and fixed the overflow
+  handling of PCR values (thanks to S�ren Moch).
+- Fixed calling iconv_close() only with a valid iconv_t value (thanks to Juergen Lock).
+- Fixed faulty opening of the Recordings menu when pressing the Play key during normal
+  live viewing mode in case there is a "last viewed" recording.
+- Fixed some #include statements in plugins to use <vdr/...> instead of "vdr/..."
+  (thanks to Lars Hanisch).
+- Fixed some spellings in osd.h and svdrp.c (thanks to Ville Skytt�).
+- Fixed handling lowercase polarization characters in channel definitions if no DiSEqC
+  is used (reported by Mike Hay, actual bug pointed out by Stefan Huelswitt).
+- Synchronizing system time to the transponder time is now done using adjtime() in order
+  to avoid discontinuities (suggested by Manuel Reimer). If the time difference is more
+  than 10 seconds, stime() is still used to do the initial sync.
+- The '7' and '9' keys now jump to the very beginning or end, respectively, of the
+  recording, even if there is no mark set at that point (following a request from
+  Andre Weidemann).
+- Now always setting the TDT EIT filter, because otherwise when turning on using the
+  transponder time in the Setup menu, it would only be used after the next restart
+  of VDR (thanks to Sundararaj Reel).
+- The new functions cDevice::CanScaleVideo() and cDevice::ScaleVideo() can be used by
+  derived output devices to implement scaling the video to a given size and location
+  (based on a suggestion by Lucian Muresan).
+- The SVDRP command HITK now discards any keys if the remote control is currently
+  turned off (thanks to Alexander Hans).
+- The new remote control key "Play/Pause" can be used with remote controls that don't
+  have separate keys for "Play" and "Pause", but rather have a single key for both
+  functions (thanks to Stefan Hofmann for suggesting to implement support for such
+  remote controls).
+- The new option "Setup/Replay/Pause on mark set" can be used to activate automatically
+  going into Pause mode if an editing mark is set during replay (suggested by Andre
+  Weidemann).
+- When regenerating the index of a recording, the frame rate stored in the info file
+  is now automatically fixed if it differs from the value detected by the frame
+  detector.
+- Fixed creating the edited version directory if a relative file name is given in
+  the call to 'vdr --edit' (the '/video' part was stripped from the given file name
+  even if it wasn't there).
+- The new option "Setup/Replay/Progress display time" can be used to activate
+  automatically displaying the progress display whenever replay of a recording is
+  started (suggested by Stefan Blochberger).
+- Changed reading and writing of floating point numbers into configuration files to
+  make it independent of the decimal point used in the current locale. All calls to
+  atof() have been replaced with the new function atod(), which makes sure the string
+  representation of a floating point number using a '.' as decimal point will be
+  handled correctly, even if the locale in use expects a ',' as the decimal point.
+  Plugins that read floating point numbers from their own configuration files will
+  also need to use atod() for this, or use a method of their own (this is not necessary
+  if values are stored in VDR's setup.conf file, because VDR takes care of this).
+  The reason for these changes is that floating point numbers presented to the user
+  shall be displayed in the way defined by the current locale (suggested by Stefan
+  Blochberger).
+  If you use plugins that store floating point values in configuration files of their
+  own and have not yet been adapted to this change, you should set
+  export LC_NUMERIC=C
+  before running VDR. Otherwise your plugin's configuration data may not be read or
+  written correctly.
+- The new functions SetItemEvent(), SetItemTimer(), SetItemChannel() and
+  SetItemRecording() of the cSkinDisplayMenu class can be reimplemented by skin
+  plugins to display these items in a more elaborate way than just a simple line of
+  text.
diff -ruN vdr-1.7.32/MANUAL vdr-1.7.33/MANUAL
--- vdr-1.7.32/MANUAL	2012-11-13 13:09:38.000000000 +0100
+++ vdr-1.7.33/MANUAL	2012-12-05 12:39:42.000000000 +0100
@@ -39,6 +39,7 @@
 
   Info        display information on the currently viewed programme or recording,
               or on the current item in a menu
+  Play/Pause  combined key to resume or pause replay, or pause live video
   Play        resume normal replay
   Pause       pause replay or live video
   Stop        stop replay
@@ -365,7 +366,9 @@
   - 4, 6    Move an editing mark back and forward. You need to first jump to
             an editing mark for this to work.
   - 7, 9    Jump back and forward between editing marks. Replay goes into still
-            mode after jumping to a mark.
+            mode after jumping to a mark. If the current position is at the
+            first or last mark, or if there are no marks at all, these keys
+            jump to the very beginning or end, respectively, of the recording.
   - 8       Positions replay at a point 3 seconds before the current or next
             "begin" mark and starts replay.
   - 2       Start the actual cutting process.
@@ -879,6 +882,15 @@
                          Defines whether the replay progress display shows the
                          remaining time or the total length of the recording.
 
+  Progress display time (s) = 0
+                         Defines how long (in seconds) the progress display is shown
+                         when replay of a recording is started. The default value of 0
+                         means that it will not be shown.
+
+  Pause replay when setting mark = no
+                         Defines whether the player automatically goes into Pause
+                         mode when setting an editing mark.
+
   Resume ID = 0          Defines an additional ID that can be used in a multi user
                          environment, so that every user has his/her own resume
                          files for each recording. The valid range is 0...99, with
diff -ruN vdr-1.7.32/PLUGINS/src/dvbhddevice/dvbhdffdevice.h vdr-1.7.33/PLUGINS/src/dvbhddevice/dvbhdffdevice.h
--- vdr-1.7.32/PLUGINS/src/dvbhddevice/dvbhdffdevice.h	2012-11-05 09:49:29.000000000 +0100
+++ vdr-1.7.33/PLUGINS/src/dvbhddevice/dvbhdffdevice.h	2012-12-03 14:43:55.000000000 +0100
@@ -3,15 +3,15 @@
  *
  * See the README file for copyright information and how to reach the author.
  *
- * $Id: dvbhdffdevice.h 1.8 2012/11/05 08:49:29 kls Exp $
+ * $Id: dvbhdffdevice.h 1.9 2012/12/03 13:43:55 kls Exp $
  */
 
 #ifndef __DVBHDFFDEVICE_H
 #define __DVBHDFFDEVICE_H
 
 #include "hdffcmd.h"
-#include "vdr/dvbdevice.h"
-#include "vdr/dvbspu.h"
+#include <vdr/dvbdevice.h>
+#include <vdr/dvbspu.h>
 
 /// The cDvbHdFfDevice implements a DVB device which can be accessed through the Linux DVB driver API.
 
diff -ruN vdr-1.7.32/PLUGINS/src/dvbsddevice/dvbsdffdevice.h vdr-1.7.33/PLUGINS/src/dvbsddevice/dvbsdffdevice.h
--- vdr-1.7.32/PLUGINS/src/dvbsddevice/dvbsdffdevice.h	2011-08-27 13:32:42.000000000 +0200
+++ vdr-1.7.33/PLUGINS/src/dvbsddevice/dvbsdffdevice.h	2012-12-03 14:43:55.000000000 +0100
@@ -3,14 +3,14 @@
  *
  * See the README file for copyright information and how to reach the author.
  *
- * $Id: dvbsdffdevice.h 2.13 2011/08/27 11:32:42 kls Exp $
+ * $Id: dvbsdffdevice.h 2.14 2012/12/03 13:43:55 kls Exp $
  */
 
 #ifndef __DVBSDFFDEVICE_H
 #define __DVBSDFFDEVICE_H
 
-#include "vdr/dvbdevice.h"
-#include "vdr/dvbspu.h"
+#include <vdr/dvbdevice.h>
+#include <vdr/dvbspu.h>
 
 /// The cDvbSdFfDevice implements a DVB device which can be accessed through the Linux DVB driver API.
 
diff -ruN vdr-1.7.32/PLUGINS/src/dvbsddevice/dvbsdffosd.h vdr-1.7.33/PLUGINS/src/dvbsddevice/dvbsdffosd.h
--- vdr-1.7.32/PLUGINS/src/dvbsddevice/dvbsdffosd.h	2009-12-29 12:52:05.000000000 +0100
+++ vdr-1.7.33/PLUGINS/src/dvbsddevice/dvbsdffosd.h	2012-12-03 14:43:55.000000000 +0100
@@ -3,13 +3,13 @@
  *
  * See the README file for copyright information and how to reach the author.
  *
- * $Id: dvbsdffosd.h 2.1 2009/12/29 11:52:05 kls Exp $
+ * $Id: dvbsdffosd.h 2.2 2012/12/03 13:43:55 kls Exp $
  */
 
 #ifndef __DVBSDFFODF_H
 #define __DVBSDFFODF_H
 
-#include "vdr/osd.h"
+#include <vdr/osd.h>
 
 class cDvbOsdProvider : public cOsdProvider {
 private:
diff -ruN vdr-1.7.32/config.c vdr-1.7.33/config.c
--- vdr-1.7.32/config.c	2012-09-15 13:52:03.000000000 +0200
+++ vdr-1.7.33/config.c	2012-12-06 10:00:23.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: config.c 2.28 2012/09/15 11:52:03 kls Exp $
+ * $Id: config.c 2.31 2012/12/06 09:00:23 kls Exp $
  */
 
 #include "config.h"
@@ -458,6 +458,8 @@
   MultiSpeedMode = 0;
   ShowReplayMode = 0;
   ShowRemainingTime = 0;
+  ProgressDisplayTime = 0;
+  PauseOnMarkSet = 0;
   ResumeID = 0;
   CurrentChannel = -1;
   CurrentVolume = MAXVOLUME;
@@ -507,7 +509,7 @@
 
 void cSetup::Store(const char *Name, double &Value, const char *Plugin)
 {
-  Store(Name, cString::sprintf("%f", Value), Plugin);
+  Store(Name, dtoa(Value), Plugin);
 }
 
 bool cSetup::Load(const char *FileName)
@@ -628,24 +630,24 @@
   else if (!strcasecmp(Name, "UseDolbyDigital"))     UseDolbyDigital    = atoi(Value);
   else if (!strcasecmp(Name, "ChannelInfoPos"))      ChannelInfoPos     = atoi(Value);
   else if (!strcasecmp(Name, "ChannelInfoTime"))     ChannelInfoTime    = atoi(Value);
-  else if (!strcasecmp(Name, "OSDLeftP"))            OSDLeftP           = atof(Value);
-  else if (!strcasecmp(Name, "OSDTopP"))             OSDTopP            = atof(Value);
-  else if (!strcasecmp(Name, "OSDWidthP"))         { OSDWidthP          = atof(Value); ChkDoublePlausibility(OSDWidthP, 0.87); }
-  else if (!strcasecmp(Name, "OSDHeightP"))        { OSDHeightP         = atof(Value); ChkDoublePlausibility(OSDHeightP, 0.84); }
+  else if (!strcasecmp(Name, "OSDLeftP"))            OSDLeftP           = atod(Value);
+  else if (!strcasecmp(Name, "OSDTopP"))             OSDTopP            = atod(Value);
+  else if (!strcasecmp(Name, "OSDWidthP"))         { OSDWidthP          = atod(Value); ChkDoublePlausibility(OSDWidthP, 0.87); }
+  else if (!strcasecmp(Name, "OSDHeightP"))        { OSDHeightP         = atod(Value); ChkDoublePlausibility(OSDHeightP, 0.84); }
   else if (!strcasecmp(Name, "OSDLeft"))             OSDLeft            = atoi(Value);
   else if (!strcasecmp(Name, "OSDTop"))              OSDTop             = atoi(Value);
   else if (!strcasecmp(Name, "OSDWidth"))          { OSDWidth           = atoi(Value); OSDWidth &= ~0x07; } // OSD width must be a multiple of 8
   else if (!strcasecmp(Name, "OSDHeight"))           OSDHeight          = atoi(Value);
-  else if (!strcasecmp(Name, "OSDAspect"))           OSDAspect          = atof(Value);
+  else if (!strcasecmp(Name, "OSDAspect"))           OSDAspect          = atod(Value);
   else if (!strcasecmp(Name, "OSDMessageTime"))      OSDMessageTime     = atoi(Value);
   else if (!strcasecmp(Name, "UseSmallFont"))        UseSmallFont       = atoi(Value);
   else if (!strcasecmp(Name, "AntiAlias"))           AntiAlias          = atoi(Value);
   else if (!strcasecmp(Name, "FontOsd"))             Utf8Strn0Cpy(FontOsd, Value, MAXFONTNAME);
   else if (!strcasecmp(Name, "FontSml"))             Utf8Strn0Cpy(FontSml, Value, MAXFONTNAME);
   else if (!strcasecmp(Name, "FontFix"))             Utf8Strn0Cpy(FontFix, Value, MAXFONTNAME);
-  else if (!strcasecmp(Name, "FontOsdSizeP"))      { FontOsdSizeP       = atof(Value); ChkDoublePlausibility(FontOsdSizeP, 0.038); }
-  else if (!strcasecmp(Name, "FontSmlSizeP"))      { FontSmlSizeP       = atof(Value); ChkDoublePlausibility(FontSmlSizeP, 0.035); }
-  else if (!strcasecmp(Name, "FontFixSizeP"))      { FontFixSizeP       = atof(Value); ChkDoublePlausibility(FontFixSizeP, 0.031); }
+  else if (!strcasecmp(Name, "FontOsdSizeP"))      { FontOsdSizeP       = atod(Value); ChkDoublePlausibility(FontOsdSizeP, 0.038); }
+  else if (!strcasecmp(Name, "FontSmlSizeP"))      { FontSmlSizeP       = atod(Value); ChkDoublePlausibility(FontSmlSizeP, 0.035); }
+  else if (!strcasecmp(Name, "FontFixSizeP"))      { FontFixSizeP       = atod(Value); ChkDoublePlausibility(FontFixSizeP, 0.031); }
   else if (!strcasecmp(Name, "FontOsdSize"))         FontOsdSize        = atoi(Value);
   else if (!strcasecmp(Name, "FontSmlSize"))         FontSmlSize        = atoi(Value);
   else if (!strcasecmp(Name, "FontFixSize"))         FontFixSize        = atoi(Value);
@@ -658,6 +660,8 @@
   else if (!strcasecmp(Name, "MultiSpeedMode"))      MultiSpeedMode     = atoi(Value);
   else if (!strcasecmp(Name, "ShowReplayMode"))      ShowReplayMode     = atoi(Value);
   else if (!strcasecmp(Name, "ShowRemainingTime"))   ShowRemainingTime  = atoi(Value);
+  else if (!strcasecmp(Name, "ProgressDisplayTime")) ProgressDisplayTime= atoi(Value);
+  else if (!strcasecmp(Name, "PauseOnMarkSet"))      PauseOnMarkSet     = atoi(Value);
   else if (!strcasecmp(Name, "ResumeID"))            ResumeID           = atoi(Value);
   else if (!strcasecmp(Name, "CurrentChannel"))      CurrentChannel     = atoi(Value);
   else if (!strcasecmp(Name, "CurrentVolume"))       CurrentVolume      = atoi(Value);
@@ -761,6 +765,8 @@
   Store("MultiSpeedMode",     MultiSpeedMode);
   Store("ShowReplayMode",     ShowReplayMode);
   Store("ShowRemainingTime",  ShowRemainingTime);
+  Store("ProgressDisplayTime",ProgressDisplayTime);
+  Store("PauseOnMarkSet",     PauseOnMarkSet);
   Store("ResumeID",           ResumeID);
   Store("CurrentChannel",     CurrentChannel);
   Store("CurrentVolume",      CurrentVolume);
diff -ruN vdr-1.7.32/config.h vdr-1.7.33/config.h
--- vdr-1.7.32/config.h	2012-10-03 11:59:34.000000000 +0200
+++ vdr-1.7.33/config.h	2012-12-05 12:33:20.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.54 2012/10/03 09:59:34 kls Exp $
+ * $Id: config.h 2.57 2012/12/05 11:33:20 kls Exp $
  */
 
 #ifndef __CONFIG_H
@@ -22,13 +22,13 @@
 
 // VDR's own version number:
 
-#define VDRVERSION  "1.7.32"
-#define VDRVERSNUM   10732  // Version * 10000 + Major * 100 + Minor
+#define VDRVERSION  "1.7.33"
+#define VDRVERSNUM   10733  // Version * 10000 + Major * 100 + Minor
 
 // The plugin API's version number:
 
-#define APIVERSION  "1.7.32"
-#define APIVERSNUM   10732  // Version * 10000 + Major * 100 + Minor
+#define APIVERSION  "1.7.33"
+#define APIVERSNUM   10733  // 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
@@ -319,6 +319,8 @@
   int MultiSpeedMode;
   int ShowReplayMode;
   int ShowRemainingTime;
+  int ProgressDisplayTime;
+  int PauseOnMarkSet;
   int ResumeID;
   int CurrentChannel;
   int CurrentVolume;
diff -ruN vdr-1.7.32/cutter.c vdr-1.7.33/cutter.c
--- vdr-1.7.32/cutter.c	2012-11-18 13:09:00.000000000 +0100
+++ vdr-1.7.33/cutter.c	2012-12-02 15:30:55.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: cutter.c 2.16 2012/11/18 12:09:00 kls Exp $
+ * $Id: cutter.c 2.21 2012/12/02 14:30:55 kls Exp $
  */
 
 #include "cutter.h"
@@ -132,7 +132,7 @@
         int Pid = TsPid(Data);
         if (Pid == PATPID)
            patPmtParser.ParsePat(Data, TS_SIZE);
-        else if (Pid == patPmtParser.PmtPid())
+        else if (patPmtParser.IsPmtPid(Pid))
            patPmtParser.ParsePmt(Data, TS_SIZE);
         else {
            int64_t Pts = TsGetPts(Data, TS_SIZE);
@@ -154,8 +154,10 @@
 class cPtsFixer {
 private:
   int delta; // time between two frames
-  int64_t last; // the last (i.e. highest) video PTS value seen
-  int64_t offset; // offset to add to PTS values
+  int64_t deltaDts; // the difference between two consecutive DTS values (may differ from 'delta' in case of multiple fields per frame)
+  int64_t lastPts; // the video PTS of the last frame (in display order)
+  int64_t lastDts; // the last video DTS value seen
+  int64_t offset; // offset to add to all timestamps
   bool fixCounters; // controls fixing the TS continuity counters (only from the second CutIn up)
   uchar counter[MAXPID]; // the TS continuity counter for each PID
   cPatPmtParser patPmtParser;
@@ -168,7 +170,9 @@
 cPtsFixer::cPtsFixer(void)
 {
   delta = 0;
-  last = -1;
+  deltaDts = 0;
+  lastPts = -1;
+  lastDts = -1;
   offset = -1;
   fixCounters = false;
   memset(counter, 0x00, sizeof(counter));
@@ -186,31 +190,44 @@
         return;
      }
   // Determine the PTS offset at the beginning of each sequence (except the first one):
-  if (CutIn && last >= 0) {
+  if (CutIn && lastPts >= 0) {
      int64_t Pts = TsGetPts(Data, Length);
-     if (Pts >= 0) {
-        // offset is calculated so that Pts + offset results in last + delta:
-        offset = Pts - PtsAdd(last, delta);
-        if (offset <= 0)
-           offset = -offset;
-        else
-           offset = MAX33BIT + 1 - offset;
-        }
+     if (Pts >= 0)
+        offset = (lastPts + delta - Pts) & MAX33BIT; // offset is calculated so that Pts + offset results in lastPts + delta
      fixCounters = true;
      }
   // Keep track of the highest video PTS:
+  bool GotPts = false;
+  int64_t PrevDts = lastDts;
   uchar *p = Data;
   int len = Length;
   while (len >= TS_SIZE && *p == TS_SYNC_BYTE) {
         int Pid = TsPid(p);
         if (Pid == patPmtParser.Vpid()) {
-           int64_t Pts = PtsAdd(TsGetPts(p, TS_SIZE), offset); // offset is taken into account here, to make last have the "new" value already!
-           if (Pts >= 0 && (last < 0 || PtsDiff(last, Pts) > 0))
-              last = Pts;
+           if (!GotPts) { // in case of multiple fields per frame, the offset is calculated only with the first one
+              int64_t Pts = TsGetPts(p, TS_SIZE);
+              if (Pts >= 0) {
+                 if (offset >= 0)
+                    Pts = PtsAdd(Pts, offset); // offset is taken into account here, to make lastPts have the "new" value already!
+                 if (lastPts < 0 || PtsDiff(lastPts, Pts) > 0)
+                    lastPts = Pts;
+                 }
+              GotPts = true;
+              }
+           if (!CutIn) {
+              int64_t Dts = TsGetDts(p, TS_SIZE);
+              if (Dts >= 0) {
+                 if (offset >= 0)
+                    Dts = PtsAdd(Dts, offset); // offset is taken into account here, to make lastDts have the "new" value already!
+                 deltaDts = PtsDiff(PrevDts, Dts);
+                 PrevDts = Dts;
+                 }
+              }
            }
         // Adjust the TS continuity counter:
         if (fixCounters) {
-           counter[Pid] = (counter[Pid] + 1) & TS_CONT_CNT_MASK;
+           if (TsHasPayload(p))
+              counter[Pid] = (counter[Pid] + 1) & TS_CONT_CNT_MASK;
            TsSetContinuityCounter(p, counter[Pid]);
            }
         else
@@ -228,12 +245,18 @@
            if (Pts >= 0)
               TsSetPts(p, TS_SIZE, PtsAdd(Pts, offset));
            int64_t Dts = TsGetDts(p, TS_SIZE);
-           if (Dts >= 0)
-              TsSetDts(p, TS_SIZE, PtsAdd(Dts, offset));
+           if (Dts >= 0) {
+              if (CutIn) {
+                 lastDts = PtsAdd(lastDts, deltaDts);
+                 TsSetDts(p, TS_SIZE, lastDts);
+                 }
+              else
+                 TsSetDts(p, TS_SIZE, PtsAdd(Dts, offset));
+              }
            int64_t Pcr = TsGetPcr(p);
            if (Pcr >= 0) {
               int64_t NewPcr = Pcr + offset * PCRFACTOR;
-              if (NewPcr >= MAX27MHZ)
+              if (NewPcr > MAX27MHZ)
                  NewPcr -= MAX27MHZ + 1;
               TsSetPcr(p, NewPcr);
               }
@@ -241,6 +264,7 @@
            len -= TS_SIZE;
            }
      }
+  lastDts = PrevDts;
 }
 
 // --- cCuttingThread --------------------------------------------------------
@@ -408,8 +432,10 @@
                int Pid = TsPid(p);
                if (Pid == PATPID)
                   PatPmtParser.ParsePat(p, TS_SIZE);
-               else if (Pid == PatPmtParser.PmtPid())
+               else if (PatPmtParser.IsPmtPid(Pid)) {
                   PatPmtParser.ParsePmt(p, TS_SIZE);
+                  Processed[PatPmtParser.Vpid()] = true; // we only want non-video packets
+                  }
                else if (!Processed[Pid]) {
                   int64_t Pts = TsGetPts(p, TS_SIZE);
                   if (Pts >= 0) {
diff -ruN vdr-1.7.32/device.c vdr-1.7.33/device.c
--- vdr-1.7.32/device.c	2012-11-13 10:11:43.000000000 +0100
+++ vdr-1.7.33/device.c	2012-11-19 10:59:09.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.69 2012/11/13 09:11:43 kls Exp $
+ * $Id: device.c 2.70 2012/11/19 09:59:09 kls Exp $
  */
 
 #include "device.h"
@@ -1149,7 +1149,7 @@
            int Pid = TsPid(Data);
            if (Pid == PATPID)
               patPmtParser.ParsePat(Data, TS_SIZE);
-           else if (Pid == patPmtParser.PmtPid())
+           else if (patPmtParser.IsPmtPid(Pid))
               patPmtParser.ParsePmt(Data, TS_SIZE);
            else if (Pid == patPmtParser.Vpid()) {
               if (TsPayloadStart(Data)) {
@@ -1486,7 +1486,7 @@
               if (PayloadOffset < TS_SIZE) {
                  if (Pid == PATPID)
                     patPmtParser.ParsePat(Data, TS_SIZE);
-                 else if (Pid == patPmtParser.PmtPid())
+                 else if (patPmtParser.IsPmtPid(Pid))
                     patPmtParser.ParsePmt(Data, TS_SIZE);
                  else if (Pid == patPmtParser.Vpid()) {
                     isPlayingVideo = true;
diff -ruN vdr-1.7.32/device.h vdr-1.7.33/device.h
--- vdr-1.7.32/device.h	2012-08-26 15:25:44.000000000 +0200
+++ vdr-1.7.33/device.h	2012-12-04 12:52:58.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.41 2012/08/26 13:25:44 kls Exp $
+ * $Id: device.h 2.42 2012/12/04 11:52:58 kls Exp $
  */
 
 #ifndef __DEVICE_H
@@ -655,6 +655,33 @@
   virtual bool IsPlayingVideo(void) const { return isPlayingVideo; }
        ///< \return Returns true if the currently attached player has delivered
        ///< any video packets.
+  virtual cRect CanScaleVideo(const cRect &Rect, int Alignment = taCenter) { return cRect::Null; }
+       ///< Asks the output device whether it can scale the currently shown video in
+       ///< such a way that it fits into the given Rect, while retaining its proper
+       ///< aspect ratio. If the scaled video doesn't exactly fit into Rect, Alignment
+       ///< is used to determine how to align the actual rectangle with the requested
+       ///< one. The actual rectangle can be smaller, larger or the same size as the
+       ///< given Rect, and its location may differ, depending on the capabilities of
+       ///< the output device, which may not be able to display a scaled video at
+       ///< arbitrary sizes and locations. The device shall, however, do its best to
+       ///< match the requested Rect as closely as possible, preferring a size and
+       ///< location that fits completely into the requested Rect if possible.
+       ///< Returns the rectangle that can actually be used when scaling the video.
+       ///< A skin plugin using this function should rearrange its content according
+       ///< to the rectangle returned from calling this function, and should especially
+       ///< be prepared for cases where the returned rectangle is way off the requested
+       ///< Rect, or even Null. In such cases, the skin may want to fall back to
+       ///< working with full screen video.
+       ///< If this device can't scale the video, a Null rectangle is returned (this
+       ///< is also the default implementation).
+  virtual void ScaleVideo(const cRect &Rect = cRect::Null) {}
+       ///< Scales the currently shown video in such a way that it fits into the given
+       ///< Rect. Rect should be one retrieved through a previous call to
+       ///< CanScaleVideo() (otherwise results may be undefined).
+       ///< Even if video output is scaled, the functions GetVideoSize() and
+       ///< GetOsdSize() must still return the same values as if in full screen mode!
+       ///< If this device can't scale the video, nothing happens.
+       ///< To restore full screen video, call this function with a Null rectangle.
   virtual bool HasIBPTrickSpeed(void) { return false; }
        ///< Returns true if this device can handle all frames in 'fast forward'
        ///< trick speeds.
diff -ruN vdr-1.7.32/dvbdevice.c vdr-1.7.33/dvbdevice.c
--- vdr-1.7.32/dvbdevice.c	2012-10-07 13:11:30.000000000 +0200
+++ vdr-1.7.33/dvbdevice.c	2012-12-03 15:07:01.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: dvbdevice.c 2.74 2012/10/07 11:11:30 kls Exp $
+ * $Id: dvbdevice.c 2.75 2012/12/03 14:07:01 kls Exp $
  */
 
 #include "dvbdevice.h"
@@ -261,16 +261,16 @@
           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 'H': polarization = 'H'; s++; break;
           case 'I': s = ParseParameter(s, inversion, InversionValues); break;
-          case 'L': polarization = *s++; break;
+          case 'L': polarization = 'L'; s++; break;
           case 'M': s = ParseParameter(s, modulation, ModulationValues); break;
           case 'O': s = ParseParameter(s, rollOff, RollOffValues); break;
           case 'P': s = ParseParameter(s, plpId); break;
-          case 'R': polarization = *s++; break;
+          case 'R': polarization = 'R'; s++; break;
           case 'S': s = ParseParameter(s, system, SystemValuesSat); break; // we only need the numerical value, so Sat or Terr doesn't matter
           case 'T': s = ParseParameter(s, transmission, TransmissionValues); break;
-          case 'V': polarization = *s++; break;
+          case 'V': polarization = 'V'; s++; break;
           case 'Y': s = ParseParameter(s, hierarchy, HierarchyValues); break;
           default: esyslog("ERROR: unknown parameter key '%c'", *s);
                    return false;
diff -ruN vdr-1.7.32/eit.c vdr-1.7.33/eit.c
--- vdr-1.7.32/eit.c	2012-08-25 13:13:00.000000000 +0200
+++ vdr-1.7.33/eit.c	2012-12-04 12:10:10.000000000 +0100
@@ -8,10 +8,11 @@
  * Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
  * Adapted to 'libsi' for VDR 1.3.0 by Marcel Wiesweg <marcel.wiesweg@gmx.de>.
  *
- * $Id: eit.c 2.21 2012/08/25 11:13:00 kls Exp $
+ * $Id: eit.c 2.23 2012/12/04 11:10:10 kls Exp $
  */
 
 #include "eit.h"
+#include <sys/time.h>
 #include "epg.h"
 #include "i18n.h"
 #include "libsi/section.h"
@@ -313,35 +314,48 @@
 
 // --- cTDT ------------------------------------------------------------------
 
+#define MAX_TIME_DIFF   1 // number of seconds the local time may differ from dvb time before making any corrections
+#define MAX_ADJ_DIFF   10 // number of seconds the local time may differ from dvb time to allow smooth adjustment
+#define ADJ_DELTA     300 // number of seconds between calls for smooth time adjustment
+
 class cTDT : public SI::TDT {
 private:
   static cMutex mutex;
-  static int lastDiff;
+  static time_t lastAdj;
 public:
   cTDT(const u_char *Data);
   };
 
 cMutex cTDT::mutex;
-int cTDT::lastDiff = 0;
+time_t cTDT::lastAdj = 0;
 
 cTDT::cTDT(const u_char *Data)
 :SI::TDT(Data, false)
 {
   CheckParse();
 
-  time_t sattim = getTime();
+  time_t dvbtim = getTime();
   time_t loctim = time(NULL);
 
-  int diff = abs(sattim - loctim);
-  if (diff > 2) {
+  int diff = dvbtim - loctim;
+  if (abs(diff) > MAX_TIME_DIFF) {
      mutex.Lock();
-     if (abs(diff - lastDiff) < 3) {
-        if (stime(&sattim) == 0)
-           isyslog("system time changed from %s (%ld) to %s (%ld)", *TimeToString(loctim), loctim, *TimeToString(sattim), sattim);
+     if (abs(diff) > MAX_ADJ_DIFF) {
+        if (stime(&dvbtim) == 0)
+           isyslog("system time changed from %s (%ld) to %s (%ld)", *TimeToString(loctim), loctim, *TimeToString(dvbtim), dvbtim);
         else
            esyslog("ERROR while setting system time: %m");
         }
-     lastDiff = diff;
+     else if (time(NULL) - lastAdj > ADJ_DELTA) {
+        lastAdj = time(NULL);
+        timeval delta;
+        delta.tv_sec = diff;
+        delta.tv_usec = 0;
+        if (adjtime(&delta, NULL) == 0)
+           isyslog("system time adjustment initiated from %s (%ld) to %s (%ld)", *TimeToString(loctim), loctim, *TimeToString(dvbtim), dvbtim);
+        else
+           esyslog("ERROR while adjusting system time: %m");
+        }
      mutex.Unlock();
      }
 }
@@ -353,8 +367,7 @@
 cEitFilter::cEitFilter(void)
 {
   Set(0x12, 0x40, 0xC0);  // event info now&next actual/other TS (0x4E/0x4F), future actual/other TS (0x5X/0x6X)
-  if (Setup.SetSystemTime && Setup.TimeTransponder)
-     Set(0x14, 0x70);     // TDT
+  Set(0x14, 0x70);        // TDT
 }
 
 void cEitFilter::SetDisableUntil(time_t Time)
diff -ruN vdr-1.7.32/interface.c vdr-1.7.33/interface.c
--- vdr-1.7.32/interface.c	2011-12-04 15:52:38.000000000 +0100
+++ vdr-1.7.33/interface.c	2012-11-19 13:21:43.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: interface.c 2.1 2011/12/04 14:52:38 kls Exp $
+ * $Id: interface.c 2.2 2012/11/19 12:21:43 kls Exp $
  */
 
 #include "interface.h"
@@ -160,6 +160,7 @@
       dsyslog("remote control %s - %s", Remote->Name(), known ? "keys known" : "learning keys");
       if (!known) {
          cSkinDisplayMenu *DisplayMenu = Skins.Current()->DisplayMenu();
+         DisplayMenu->SetMenuCategory(mcUnknown);
          char Headline[256];
          snprintf(Headline, sizeof(Headline), tr("Learning Remote Control Keys"));
          cRemote::Clear();
diff -ruN vdr-1.7.32/keys.c vdr-1.7.33/keys.c
--- vdr-1.7.32/keys.c	2010-04-05 12:05:58.000000000 +0200
+++ vdr-1.7.33/keys.c	2012-12-04 13:52:52.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: keys.c 2.1 2010/04/05 10:05:58 kls Exp $
+ * $Id: keys.c 2.2 2012/12/04 12:52:52 kls Exp $
  */
 
 #include "keys.h"
@@ -33,6 +33,7 @@
                     { k8,                    "8"                },
                     { k9,                    "9"                },
                     { kInfo,          trNOOP("Key$Info")        },
+                    { kPlayPause,     trNOOP("Key$Play/Pause")  },
                     { kPlay,          trNOOP("Key$Play")        },
                     { kPause,         trNOOP("Key$Pause")       },
                     { kStop,          trNOOP("Key$Stop")        },
diff -ruN vdr-1.7.32/keys.h vdr-1.7.33/keys.h
--- vdr-1.7.32/keys.h	2010-04-05 12:06:04.000000000 +0200
+++ vdr-1.7.33/keys.h	2012-12-04 13:51:25.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: keys.h 2.1 2010/04/05 10:06:04 kls Exp $
+ * $Id: keys.h 2.2 2012/12/04 12:51:25 kls Exp $
  */
 
 #ifndef __KEYS_H
@@ -27,6 +27,7 @@
              kBlue,
              k0, k1, k2, k3, k4, k5, k6, k7, k8, k9,
              kInfo,
+             kPlayPause, // combined Play/Pause key
              kPlay,
              kPause,
              kStop,
diff -ruN vdr-1.7.32/menu.c vdr-1.7.33/menu.c
--- vdr-1.7.32/menu.c	2012-11-18 14:07:53.000000000 +0100
+++ vdr-1.7.33/menu.c	2012-12-07 14:48:15.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.65 2012/11/18 13:07:53 kls Exp $
+ * $Id: menu.c 2.71 2012/12/07 13:48:15 kls Exp $
  */
 
 #include "menu.h"
@@ -284,6 +284,7 @@
   virtual int Compare(const cListObject &ListObject) const;
   virtual void Set(void);
   cChannel *Channel(void) { return channel; }
+  virtual void SetMenuItem(cSkinDisplayMenu *DisplayMenu, int Index, bool Current, bool Selectable);
   };
 
 cMenuChannelItem::eChannelSortMode cMenuChannelItem::sortMode = csmNumber;
@@ -323,6 +324,12 @@
   SetText(buffer);
 }
 
+void cMenuChannelItem::SetMenuItem(cSkinDisplayMenu *DisplayMenu, int Index, bool Current, bool Selectable)
+{
+  if (!DisplayMenu->SetItemChannel(channel, Index, Current, Selectable, sortMode == csmProvider))
+     DisplayMenu->SetItem(Text(), Index, Current, Selectable);
+}
+
 // --- cMenuChannels ---------------------------------------------------------
 
 #define CHANNELNUMBERTIMEOUT 1000 //ms
@@ -1001,6 +1008,7 @@
   virtual int Compare(const cListObject &ListObject) const;
   virtual void Set(void);
   cTimer *Timer(void) { return timer; }
+  virtual void SetMenuItem(cSkinDisplayMenu *DisplayMenu, int Index, bool Current, bool Selectable);
   };
 
 cMenuTimerItem::cMenuTimerItem(cTimer *Timer)
@@ -1049,6 +1057,12 @@
                     File));
 }
 
+void cMenuTimerItem::SetMenuItem(cSkinDisplayMenu *DisplayMenu, int Index, bool Current, bool Selectable)
+{
+  if (!DisplayMenu->SetItemTimer(timer, Index, Current, Selectable))
+     DisplayMenu->SetItem(Text(), Index, Current, Selectable);
+}
+
 // --- cMenuTimers -----------------------------------------------------------
 
 class cMenuTimers : public cOsdMenu {
@@ -1215,7 +1229,7 @@
      cChannel *channel = Channels.GetByChannelID(event->ChannelID(), true);
      if (channel) {
         SetTitle(channel->Name());
-        int TimerMatch = tmNone;
+        eTimerMatch TimerMatch = tmNone;
         Timers.GetMatch(event, &TimerMatch);
         if (Buttons)
            SetHelp(TimerMatch == tmFull ? tr("Button$Timer") : tr("Button$Record"), NULL, NULL, CanSwitch ? tr("Button$Switch") : NULL);
@@ -1273,13 +1287,14 @@
   const cEvent *event;
   const cChannel *channel;
   bool withDate;
-  int timerMatch;
+  eTimerMatch timerMatch;
   cMenuScheduleItem(const cEvent *Event, cChannel *Channel = NULL, bool WithDate = false);
   static void SetSortMode(eScheduleSortMode SortMode) { sortMode = SortMode; }
   static void IncSortMode(void) { sortMode = eScheduleSortMode((sortMode == ssmAllAll) ? ssmAllThis : sortMode + 1); }
   static eScheduleSortMode SortMode(void) { return sortMode; }
   virtual int Compare(const cListObject &ListObject) const;
   bool Update(bool Force = false);
+  virtual void SetMenuItem(cSkinDisplayMenu *DisplayMenu, int Index, bool Current, bool Selectable);
   };
 
 cMenuScheduleItem::eScheduleSortMode cMenuScheduleItem::sortMode = ssmAllThis;
@@ -1309,7 +1324,7 @@
 bool cMenuScheduleItem::Update(bool Force)
 {
   bool result = false;
-  int OldTimerMatch = timerMatch;
+  eTimerMatch OldTimerMatch = timerMatch;
   Timers.GetMatch(event, &timerMatch);
   if (Force || timerMatch != OldTimerMatch) {
      cString buffer;
@@ -1330,6 +1345,12 @@
   return result;
 }
 
+void cMenuScheduleItem::SetMenuItem(cSkinDisplayMenu *DisplayMenu, int Index, bool Current, bool Selectable)
+{
+  if (!DisplayMenu->SetItemEvent(event, Index, Current, Selectable, channel, withDate, timerMatch))
+     DisplayMenu->SetItem(Text(), Index, Current, Selectable);
+}
+
 // --- cMenuWhatsOn ----------------------------------------------------------
 
 class cMenuWhatsOn : public cOsdMenu {
@@ -1430,7 +1451,7 @@
   cMenuScheduleItem *item = (cMenuScheduleItem *)Get(Current());
   if (item) {
      if (item->timerMatch == tmFull) {
-        int tm = tmNone;
+        eTimerMatch tm = tmNone;
         cTimer *timer = Timers.GetMatch(item->event, &tm);
         if (timer)
            return AddSubMenu(new cMenuEditTimer(timer));
@@ -1676,7 +1697,7 @@
   cMenuScheduleItem *item = (cMenuScheduleItem *)Get(Current());
   if (item) {
      if (item->timerMatch == tmFull) {
-        int tm = tmNone;
+        eTimerMatch tm = tmNone;
         cTimer *timer = Timers.GetMatch(item->event, &tm);
         if (timer)
            return AddSubMenu(new cMenuEditTimer(timer));
@@ -2153,7 +2174,8 @@
 
 class cMenuRecordingItem : public cOsdItem {
 private:
-  char *fileName;
+  cRecording *recording;
+  int level;
   char *name;
   int totalEntries, newEntries;
 public:
@@ -2161,13 +2183,15 @@
   ~cMenuRecordingItem();
   void IncrementCounter(bool New);
   const char *Name(void) { return name; }
-  const char *FileName(void) { return fileName; }
+  cRecording *Recording(void) { return recording; }
   bool IsDirectory(void) { return name != NULL; }
+  virtual void SetMenuItem(cSkinDisplayMenu *DisplayMenu, int Index, bool Current, bool Selectable);
   };
 
 cMenuRecordingItem::cMenuRecordingItem(cRecording *Recording, int Level)
 {
-  fileName = strdup(Recording->FileName());
+  recording = Recording;
+  level = Level;
   name = NULL;
   totalEntries = newEntries = 0;
   SetText(Recording->Title('\t', true, Level));
@@ -2177,7 +2201,6 @@
 
 cMenuRecordingItem::~cMenuRecordingItem()
 {
-  free(fileName);
   free(name);
 }
 
@@ -2189,6 +2212,12 @@
   SetText(cString::sprintf("%d\t\t%d\t%s", totalEntries, newEntries, name));
 }
 
+void cMenuRecordingItem::SetMenuItem(cSkinDisplayMenu *DisplayMenu, int Index, bool Current, bool Selectable)
+{
+  if (!DisplayMenu->SetItemRecording(recording, Index, Current, Selectable, level, totalEntries, newEntries))
+     DisplayMenu->SetItem(Text(), Index, Current, Selectable);
+}
+
 // --- cMenuRecordings -------------------------------------------------------
 
 cMenuRecordings::cMenuRecordings(const char *Base, int Level, bool OpenSubMenus)
@@ -2224,8 +2253,7 @@
         NewHelpKeys = 1;
      else {
         NewHelpKeys = 2;
-        cRecording *recording = GetRecording(ri);
-        if (recording && recording->Info()->Title())
+        if (ri->Recording()->Info()->Title())
            NewHelpKeys = 3;
         }
      }
@@ -2248,12 +2276,8 @@
   char *LastItemText = NULL;
   cThreadLock RecordingsLock(&Recordings);
   if (Refresh) {
-     cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current());
-     if (ri) {
-        cRecording *Recording = Recordings.GetByName(ri->FileName());
-        if (Recording)
-           CurrentRecording = Recording->FileName();
-        }
+     if (cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current()))
+        CurrentRecording = ri->Recording()->FileName();
      }
   Clear();
   GetRecordingsSortMode(DirectoryName());
@@ -2293,14 +2317,6 @@
   return d;
 }
 
-cRecording *cMenuRecordings::GetRecording(cMenuRecordingItem *Item)
-{
-  cRecording *recording = Recordings.GetByName(Item->FileName());
-  if (!recording)
-     Skins.Message(mtError, tr("Error while accessing recording!"));
-  return recording;
-}
-
 bool cMenuRecordings::Open(bool OpenSubMenus)
 {
   cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current());
@@ -2324,11 +2340,8 @@
      if (ri->IsDirectory())
         Open();
      else {
-        cRecording *recording = GetRecording(ri);
-        if (recording) {
-           cReplayControl::SetRecording(recording->FileName());
-           return osReplay;
-           }
+        cReplayControl::SetRecording(ri->Recording()->FileName());
+        return osReplay;
         }
      }
   return osContinue;
@@ -2340,13 +2353,10 @@
      return osContinue;
   cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current());
   if (ri && !ri->IsDirectory()) {
-     cRecording *recording = GetRecording(ri);
-     if (recording) {
-        cDevice::PrimaryDevice()->StopReplay(); // must do this first to be able to rewind the currently replayed recording
-        cResumeFile ResumeFile(ri->FileName(), recording->IsPesRecording());
-        ResumeFile.Delete();
-        return Play();
-        }
+     cDevice::PrimaryDevice()->StopReplay(); // must do this first to be able to rewind the currently replayed recording
+     cResumeFile ResumeFile(ri->Recording()->FileName(), ri->Recording()->IsPesRecording());
+     ResumeFile.Delete();
+     return Play();
      }
   return osContinue;
 }
@@ -2358,7 +2368,7 @@
   cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current());
   if (ri && !ri->IsDirectory()) {
      if (Interface->Confirm(tr("Delete recording?"))) {
-        cRecordControl *rc = cRecordControls::GetRecordControl(ri->FileName());
+        cRecordControl *rc = cRecordControls::GetRecordControl(ri->Recording()->FileName());
         if (rc) {
            if (Interface->Confirm(tr("Timer still recording - really delete?"))) {
               cTimer *timer = rc->Timer();
@@ -2375,33 +2385,32 @@
            else
               return osContinue;
            }
-        cRecording *recording = GetRecording(ri);
-        if (recording) {
-           if (cCutter::Active(ri->FileName())) {
-              if (Interface->Confirm(tr("Recording is being edited - really delete?"))) {
-                 cCutter::Stop();
-                 recording = Recordings.GetByName(ri->FileName()); // cCutter::Stop() might have deleted it if it was the edited version
-                 // we continue with the code below even if recording is NULL,
-                 // in order to have the menu updated etc.
-                 }
-              else
-                 return osContinue;
-              }
-           if (cReplayControl::NowReplaying() && strcmp(cReplayControl::NowReplaying(), ri->FileName()) == 0)
-              cControl::Shutdown();
-           if (!recording || recording->Delete()) {
-              cReplayControl::ClearLastReplayed(ri->FileName());
-              Recordings.DelByName(ri->FileName());
-              cOsdMenu::Del(Current());
-              SetHelpKeys();
-              cVideoDiskUsage::ForceCheck();
-              Display();
-              if (!Count())
-                 return osBack;
+        cRecording *recording = ri->Recording();
+        cString FileName = recording->FileName();
+        if (cCutter::Active(ri->Recording()->FileName())) {
+           if (Interface->Confirm(tr("Recording is being edited - really delete?"))) {
+              cCutter::Stop();
+              recording = Recordings.GetByName(FileName); // cCutter::Stop() might have deleted it if it was the edited version
+              // we continue with the code below even if recording is NULL,
+              // in order to have the menu updated etc.
               }
            else
-              Skins.Message(mtError, tr("Error while deleting recording!"));
+              return osContinue;
            }
+        if (cReplayControl::NowReplaying() && strcmp(cReplayControl::NowReplaying(), FileName) == 0)
+           cControl::Shutdown();
+        if (!recording || recording->Delete()) {
+           cReplayControl::ClearLastReplayed(FileName);
+           Recordings.DelByName(FileName);
+           cOsdMenu::Del(Current());
+           SetHelpKeys();
+           cVideoDiskUsage::ForceCheck();
+           Display();
+           if (!Count())
+              return osBack;
+           }
+        else
+           Skins.Message(mtError, tr("Error while deleting recording!"));
         }
      }
   return osContinue;
@@ -2412,11 +2421,8 @@
   if (HasSubMenu() || Count() == 0)
      return osContinue;
   cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current());
-  if (ri && !ri->IsDirectory()) {
-     cRecording *recording = GetRecording(ri);
-     if (recording && recording->Info()->Title())
-        return AddSubMenu(new cMenuRecording(recording, true));
-     }
+  if (ri && !ri->IsDirectory() && ri->Recording()->Info()->Title())
+     return AddSubMenu(new cMenuRecording(ri->Recording(), true));
   return osContinue;
 }
 
@@ -2426,14 +2432,11 @@
      return osContinue;
   cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current());
   if (ri && !ri->IsDirectory()) {
-     cRecording *recording = GetRecording(ri);
-     if (recording) {
-        cMenuCommands *menu;
-        eOSState state = AddSubMenu(menu = new cMenuCommands(tr("Recording commands"), &RecordingCommands, cString::sprintf("\"%s\"", *strescape(recording->FileName(), "\\\"$"))));
-        if (Key != kNone)
-           state = menu->ProcessKey(Key);
-        return state;
-        }
+     cMenuCommands *menu;
+     eOSState state = AddSubMenu(menu = new cMenuCommands(tr("Recording commands"), &RecordingCommands, cString::sprintf("\"%s\"", *strescape(ri->Recording()->FileName(), "\\\"$"))));
+     if (Key != kNone)
+        state = menu->ProcessKey(Key);
+     return state;
      }
   return osContinue;
 }
@@ -2454,6 +2457,7 @@
 
   if (state == osUnknown) {
      switch (Key) {
+       case kPlayPause:
        case kPlay:
        case kOk:     return Play();
        case kRed:    return (helpKeys > 1 && RecordingCommands.Count()) ? Commands() : Play();
@@ -3139,6 +3143,8 @@
   Add(new cMenuEditBoolItem(tr("Setup.Replay$Multi speed mode"), &data.MultiSpeedMode));
   Add(new cMenuEditBoolItem(tr("Setup.Replay$Show replay mode"), &data.ShowReplayMode));
   Add(new cMenuEditBoolItem(tr("Setup.Replay$Show remaining time"), &data.ShowRemainingTime));
+  Add(new cMenuEditIntItem( tr("Setup.Replay$Progress display time (s)"), &data.ProgressDisplayTime, 0, 60));
+  Add(new cMenuEditBoolItem(tr("Setup.Replay$Pause replay when setting mark"), &data.PauseOnMarkSet));
   Add(new cMenuEditIntItem(tr("Setup.Replay$Resume ID"), &data.ResumeID, 0, 99));
 }
 
@@ -4475,6 +4481,8 @@
   cStatus::MsgReplaying(this, Recording.Name(), Recording.FileName(), true);
   marks.Load(fileName, Recording.FramesPerSecond(), Recording.IsPesRecording());
   SetTrackDescriptions(false);
+  if (Setup.ProgressDisplayTime)
+     ShowTimed(Setup.ProgressDisplayTime);
 }
 
 cReplayControl::~cReplayControl()
@@ -4685,6 +4693,7 @@
          timeSearchActive = false;
          }
          break;
+    case kPlayPause:
     case kPlay:
     case kUp:
     case kPause:
@@ -4739,7 +4748,7 @@
         marks.Add(Current);
         bool Play, Forward;
         int Speed;
-        if (GetReplayMode(Play, Forward, Speed) && !Play)
+        if (Setup.PauseOnMarkSet || GetReplayMode(Play, Forward, Speed) && !Play)
            Goto(Current, true);
         }
      ShowTimed(2);
@@ -4749,15 +4758,19 @@
 
 void cReplayControl::MarkJump(bool Forward)
 {
-  if (marks.Count()) {
-     int Current, Total;
-     if (GetIndex(Current, Total)) {
+  int Current, Total;
+  if (GetIndex(Current, Total)) {
+     if (marks.Count()) {
         cMark *m = Forward ? marks.GetNext(Current) : marks.GetPrev(Current);
         if (m) {
            Goto(m->Position(), true);
            displayFrames = true;
+           return;
            }
         }
+     // There are either no marks at all, or we already were at the first or last one,
+     // so jump to the very beginning or end:
+     Goto(Forward ? Total : 0, true);
      }
 }
 
@@ -4861,6 +4874,15 @@
      TimeSearchProcess(Key);
      return osContinue;
      }
+  if (Key == kPlayPause) {
+     bool Play, Forward;
+     int Speed;
+     GetReplayMode(Play, Forward, Speed);
+     if (Speed >= 0)
+        Key = Play ? kPlay : kPause;
+     else
+        Key = Play ? kPause : kPlay;
+     }
   bool DoShowMode = true;
   switch (int(Key)) {
     // Positioning:
diff -ruN vdr-1.7.32/menu.h vdr-1.7.33/menu.h
--- vdr-1.7.32/menu.h	2012-09-07 10:48:34.000000000 +0200
+++ vdr-1.7.33/menu.h	2012-12-07 14:44:13.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.12 2012/09/07 08:48:34 kls Exp $
+ * $Id: menu.h 2.13 2012/12/07 13:44:13 kls Exp $
  */
 
 #ifndef __MENU_H
@@ -208,7 +208,6 @@
   eOSState Commands(eKeys Key = kNone);
 protected:
   cString DirectoryName(void);
-  cRecording *GetRecording(cMenuRecordingItem *Item);
 public:
   cMenuRecordings(const char *Base = NULL, int Level = 0, bool OpenSubMenus = false);
   ~cMenuRecordings();
diff -ruN vdr-1.7.32/osd.h vdr-1.7.33/osd.h
--- vdr-1.7.32/osd.h	2012-06-02 12:32:38.000000000 +0200
+++ vdr-1.7.33/osd.h	2012-12-03 14:49:02.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: osd.h 2.17 2012/06/02 10:32:38 kls Exp $
+ * $Id: osd.h 2.18 2012/12/03 13:49:02 kls Exp $
  */
 
 #ifndef __OSD_H
@@ -735,7 +735,7 @@
        ///< Initializes the OSD with the given coordinates.
        ///< By default it is assumed that the full area will be able to display
        ///< full 32 bit graphics (ARGB with eight bit for each color and the alpha
-       ///< value, repectively). However, the actual hardware in use may not be
+       ///< value, respectively). However, the actual hardware in use may not be
        ///< able to display such a high resolution OSD, so there is an option to
        ///< divide the full OSD area into several sub-areas with lower color depths
        ///< and individual palettes. The sub-areas need not necessarily cover the
diff -ruN vdr-1.7.32/osdbase.c vdr-1.7.33/osdbase.c
--- vdr-1.7.32/osdbase.c	2012-04-23 11:41:22.000000000 +0200
+++ vdr-1.7.33/osdbase.c	2012-12-07 10:50:47.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: osdbase.c 2.6 2012/04/23 09:41:22 kls Exp $
+ * $Id: osdbase.c 2.7 2012/12/07 09:50:47 kls Exp $
  */
 
 #include "osdbase.h"
@@ -55,6 +55,11 @@
   fresh = Fresh;
 }
 
+void cOsdItem::SetMenuItem(cSkinDisplayMenu *DisplayMenu, int Index, bool Current, bool Selectable)
+{
+  DisplayMenu->SetItem(Text(), Index, Current, Selectable);
+}
+
 eOSState cOsdItem::ProcessKey(eKeys Key)
 {
   return Key == kOk ? state : osUnknown;
@@ -246,7 +251,7 @@
      int n = 0;
      for (cOsdItem *item = Get(first); item; item = Next(item)) {
          bool CurrentSelectable = (i == current) && item->Selectable();
-         displayMenu->SetItem(item->Text(), i - first, CurrentSelectable, item->Selectable());
+         item->SetMenuItem(displayMenu, i - first, CurrentSelectable, item->Selectable());
          if (CurrentSelectable)
             cStatus::MsgOsdCurrentItem(item->Text());
          if (++n == displayMenuItems)
@@ -275,7 +280,7 @@
 {
   cOsdItem *item = Get(current);
   if (item) {
-     displayMenu->SetItem(item->Text(), current - first, Current && item->Selectable(), item->Selectable());
+     item->SetMenuItem(displayMenu, current - first, Current && item->Selectable(), item->Selectable());
      if (Current && item->Selectable())
         cStatus::MsgOsdCurrentItem(item->Text());
      if (!Current)
@@ -296,7 +301,7 @@
      int Offset = Index - first;
      if (Offset >= 0 && Offset < first + displayMenuItems) {
         bool Current = Index == current;
-        displayMenu->SetItem(Item->Text(), Offset, Current && Item->Selectable(), Item->Selectable());
+        Item->SetMenuItem(displayMenu, Offset, Current && Item->Selectable(), Item->Selectable());
         if (Current && Item->Selectable())
            cStatus::MsgOsdCurrentItem(Item->Text());
         }
diff -ruN vdr-1.7.32/osdbase.h vdr-1.7.33/osdbase.h
--- vdr-1.7.32/osdbase.h	2012-04-23 11:40:07.000000000 +0200
+++ vdr-1.7.33/osdbase.h	2012-12-07 10:49:35.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: osdbase.h 2.4 2012/04/23 09:40:07 kls Exp $
+ * $Id: osdbase.h 2.5 2012/12/07 09:49:35 kls Exp $
  */
 
 #ifndef __OSDBASE_H
@@ -63,6 +63,7 @@
   void SetFresh(bool Fresh);
   const char *Text(void) const { return text; }
   virtual void Set(void) {}
+  virtual void SetMenuItem(cSkinDisplayMenu *DisplayMenu, int Index, bool Current, bool Selectable);
   virtual eOSState ProcessKey(eKeys Key);
   };
 
diff -ruN vdr-1.7.32/pat.c vdr-1.7.33/pat.c
--- vdr-1.7.32/pat.c	2012-04-15 11:54:53.000000000 +0200
+++ vdr-1.7.33/pat.c	2012-11-25 15:12:21.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: pat.c 2.18 2012/04/15 09:54:53 kls Exp $
+ * $Id: pat.c 2.19 2012/11/25 14:12:21 kls Exp $
  */
 
 #include "pat.h"
@@ -352,7 +352,7 @@
             switch (stream.getStreamType()) {
               case 1: // STREAMTYPE_11172_VIDEO
               case 2: // STREAMTYPE_13818_VIDEO
-              case 0x1B: // MPEG4
+              case 0x1B: // H.264
                       Vpid = esPid;
                       Ppid = pmt.getPCRPid();
                       Vtype = stream.getStreamType();
diff -ruN vdr-1.7.32/po/ar.po vdr-1.7.33/po/ar.po
--- vdr-1.7.32/po/ar.po	2012-11-18 14:31:54.000000000 +0100
+++ vdr-1.7.33/po/ar.po	2012-12-08 12:05:15.000000000 +0100
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: VDR 1.7.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
 "PO-Revision-Date: 2008-10-16 11:16-0400\n"
 "Last-Translator: Osama Alrawab <alrawab@hotmail.com>\n"
 "Language-Team: Arabic <ar@li.org>\n"
@@ -417,6 +417,9 @@
 msgid "Key$Info"
 msgstr "معلومات"
 
+msgid "Key$Play/Pause"
+msgstr ""
+
 msgid "Key$Play"
 msgstr "عرض"
 
@@ -750,9 +753,6 @@
 msgid "Commands"
 msgstr "الاوامر"
 
-msgid "Error while accessing recording!"
-msgstr "حدث خطاء عند محاولة الوصول لتسجيلات"
-
 msgid "Delete recording?"
 msgstr "حذف التسجيل"
 
@@ -1127,6 +1127,12 @@
 msgid "Setup.Replay$Show remaining time"
 msgstr ""
 
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "رقم المواصلة"
 
@@ -1412,3 +1418,6 @@
 
 msgid "free"
 msgstr "مساحة حرة"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "حدث خطاء عند محاولة الوصول لتسجيلات"
diff -ruN vdr-1.7.32/po/ca_ES.po vdr-1.7.33/po/ca_ES.po
--- vdr-1.7.32/po/ca_ES.po	2012-11-18 14:31:53.000000000 +0100
+++ vdr-1.7.33/po/ca_ES.po	2012-12-08 12:05:14.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: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
 "PO-Revision-Date: 2008-03-02 19:02+0100\n"
 "Last-Translator: Luca Olivetti <luca@ventoso.org>\n"
 "Language-Team: Catalan <vdr@linuxtv.org>\n"
@@ -413,6 +413,9 @@
 msgid "Key$Info"
 msgstr "Informaci�"
 
+msgid "Key$Play/Pause"
+msgstr ""
+
 msgid "Key$Play"
 msgstr "Reproduir"
 
@@ -741,9 +744,6 @@
 msgid "Commands"
 msgstr "Ordres"
 
-msgid "Error while accessing recording!"
-msgstr "Error a l'accedir a la gravaci�!"
-
 msgid "Delete recording?"
 msgstr "Esborrar gravaci�?"
 
@@ -1104,6 +1104,12 @@
 msgid "Setup.Replay$Show remaining time"
 msgstr ""
 
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "ID de Continuar"
 
@@ -1386,3 +1392,6 @@
 
 msgid "free"
 msgstr "lliure"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Error a l'accedir a la gravaci�!"
diff -ruN vdr-1.7.32/po/cs_CZ.po vdr-1.7.33/po/cs_CZ.po
--- vdr-1.7.32/po/cs_CZ.po	2012-11-18 14:31:53.000000000 +0100
+++ vdr-1.7.33/po/cs_CZ.po	2012-12-08 12:05:14.000000000 +0100
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: VDR 1.7.14\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
 "PO-Revision-Date: 2010-05-06 11:00+0200\n"
 "Last-Translator: Radek Šťastný <dedkus@gmail.com>\n"
 "Language-Team: Czech <vdr@linuxtv.org>\n"
@@ -412,6 +412,9 @@
 msgid "Key$Info"
 msgstr "Info"
 
+msgid "Key$Play/Pause"
+msgstr ""
+
 msgid "Key$Play"
 msgstr "Přehrát"
 
@@ -740,9 +743,6 @@
 msgid "Commands"
 msgstr "Příkazy"
 
-msgid "Error while accessing recording!"
-msgstr "Chyba při přístupu k nahrávkám!"
-
 msgid "Delete recording?"
 msgstr "Smazat nahrávku?"
 
@@ -1103,6 +1103,12 @@
 msgid "Setup.Replay$Show remaining time"
 msgstr ""
 
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "ID obnovení"
 
@@ -1385,3 +1391,6 @@
 
 msgid "free"
 msgstr "volno"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Chyba při přístupu k nahrávkám!"
diff -ruN vdr-1.7.32/po/da_DK.po vdr-1.7.33/po/da_DK.po
--- vdr-1.7.32/po/da_DK.po	2012-11-18 14:31:53.000000000 +0100
+++ vdr-1.7.33/po/da_DK.po	2012-12-08 12:05:14.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: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
 "PO-Revision-Date: 2007-08-12 14:17+0200\n"
 "Last-Translator: Mogens Elneff <mogens@elneff.dk>\n"
 "Language-Team: Danish <vdr@linuxtv.org>\n"
@@ -410,6 +410,9 @@
 msgid "Key$Info"
 msgstr "Info"
 
+msgid "Key$Play/Pause"
+msgstr ""
+
 msgid "Key$Play"
 msgstr "Afspil"
 
@@ -738,9 +741,6 @@
 msgid "Commands"
 msgstr "Kommandoer"
 
-msgid "Error while accessing recording!"
-msgstr "Fejl ved l�sning af optagelse!"
-
 msgid "Delete recording?"
 msgstr "Slet optagelse?"
 
@@ -1101,6 +1101,12 @@
 msgid "Setup.Replay$Show remaining time"
 msgstr ""
 
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "Genoptagelses ID"
 
@@ -1383,3 +1389,6 @@
 
 msgid "free"
 msgstr "fri"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Fejl ved l�sning af optagelse!"
diff -ruN vdr-1.7.32/po/de_DE.po vdr-1.7.33/po/de_DE.po
--- vdr-1.7.32/po/de_DE.po	2012-11-18 14:33:16.000000000 +0100
+++ vdr-1.7.33/po/de_DE.po	2012-12-08 12:05:15.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: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
 "PO-Revision-Date: 2010-01-16 16:46+0100\n"
 "Last-Translator: Klaus Schmidinger <kls@tvdr.de>\n"
 "Language-Team: German <vdr@linuxtv.org>\n"
@@ -410,6 +410,9 @@
 msgid "Key$Info"
 msgstr "Info"
 
+msgid "Key$Play/Pause"
+msgstr "Wiedergabe/Pause"
+
 msgid "Key$Play"
 msgstr "Wiedergabe"
 
@@ -738,9 +741,6 @@
 msgid "Commands"
 msgstr "Befehle"
 
-msgid "Error while accessing recording!"
-msgstr "Fehler beim Ansprechen der Aufzeichnung!"
-
 msgid "Delete recording?"
 msgstr "Aufzeichnung l�schen?"
 
@@ -1101,6 +1101,12 @@
 msgid "Setup.Replay$Show remaining time"
 msgstr "Verbleibende Zeit anzeigen"
 
+msgid "Setup.Replay$Progress display time (s)"
+msgstr "Anzeigedauer f�r Fortschrittsanzeige (s)"
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr "Pause beim Setzen einer Schnittmarke"
+
 msgid "Setup.Replay$Resume ID"
 msgstr "Wiedergabe-ID"
 
@@ -1383,3 +1389,6 @@
 
 msgid "free"
 msgstr "frei"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Fehler beim Ansprechen der Aufzeichnung!"
diff -ruN vdr-1.7.32/po/el_GR.po vdr-1.7.33/po/el_GR.po
--- vdr-1.7.32/po/el_GR.po	2012-11-18 14:31:54.000000000 +0100
+++ vdr-1.7.33/po/el_GR.po	2012-12-08 12:05:14.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: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
 "PO-Revision-Date: 2007-08-12 14:17+0200\n"
 "Last-Translator: Dimitrios Dimitrakos <mail@dimitrios.de>\n"
 "Language-Team: Greek <vdr@linuxtv.org>\n"
@@ -410,6 +410,9 @@
 msgid "Key$Info"
 msgstr "�����������"
 
+msgid "Key$Play/Pause"
+msgstr ""
+
 msgid "Key$Play"
 msgstr "�����������"
 
@@ -738,9 +741,6 @@
 msgid "Commands"
 msgstr "�������"
 
-msgid "Error while accessing recording!"
-msgstr "�������� ���� ���������� ��������!"
-
 msgid "Delete recording?"
 msgstr "�������� ��������?"
 
@@ -1101,6 +1101,12 @@
 msgid "Setup.Replay$Show remaining time"
 msgstr ""
 
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "ID ������������"
 
@@ -1383,3 +1389,6 @@
 
 msgid "free"
 msgstr "���������"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "�������� ���� ���������� ��������!"
diff -ruN vdr-1.7.32/po/es_ES.po vdr-1.7.33/po/es_ES.po
--- vdr-1.7.32/po/es_ES.po	2012-11-18 14:31:53.000000000 +0100
+++ vdr-1.7.33/po/es_ES.po	2012-12-08 12:05:14.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: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
 "PO-Revision-Date: 2008-03-02 19:02+0100\n"
 "Last-Translator: Luca Olivetti <luca@ventoso.org>\n"
 "Language-Team: Spanish <vdr@linuxtv.org>\n"
@@ -411,6 +411,9 @@
 msgid "Key$Info"
 msgstr "Info"
 
+msgid "Key$Play/Pause"
+msgstr ""
+
 msgid "Key$Play"
 msgstr "Reproducir"
 
@@ -739,9 +742,6 @@
 msgid "Commands"
 msgstr "�rdenes"
 
-msgid "Error while accessing recording!"
-msgstr "�Error al acceder a la grabaci�n!"
-
 msgid "Delete recording?"
 msgstr "�Eliminar grabacion?"
 
@@ -1102,6 +1102,12 @@
 msgid "Setup.Replay$Show remaining time"
 msgstr ""
 
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "ID de continuaci�n"
 
@@ -1384,3 +1390,6 @@
 
 msgid "free"
 msgstr "libre"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "�Error al acceder a la grabaci�n!"
diff -ruN vdr-1.7.32/po/et_EE.po vdr-1.7.33/po/et_EE.po
--- vdr-1.7.32/po/et_EE.po	2012-11-18 14:31:53.000000000 +0100
+++ vdr-1.7.33/po/et_EE.po	2012-12-08 12:05:14.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: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
 "PO-Revision-Date: 2007-08-12 14:17+0200\n"
 "Last-Translator: Arthur Konovalov <artlov@gmail.com>\n"
 "Language-Team: Estonian <vdr@linuxtv.org>\n"
@@ -410,6 +410,9 @@
 msgid "Key$Info"
 msgstr "Info"
 
+msgid "Key$Play/Pause"
+msgstr ""
+
 msgid "Key$Play"
 msgstr "Start"
 
@@ -738,9 +741,6 @@
 msgid "Commands"
 msgstr "Käsud"
 
-msgid "Error while accessing recording!"
-msgstr "Salvestuse taasesitus nurjus!"
-
 msgid "Delete recording?"
 msgstr "Kustutada salvestus?"
 
@@ -1101,6 +1101,12 @@
 msgid "Setup.Replay$Show remaining time"
 msgstr "Järelejäänud aja kuvamine"
 
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "Jätkamise ID"
 
@@ -1383,3 +1389,6 @@
 
 msgid "free"
 msgstr "vaba"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Salvestuse taasesitus nurjus!"
diff -ruN vdr-1.7.32/po/fi_FI.po vdr-1.7.33/po/fi_FI.po
--- vdr-1.7.32/po/fi_FI.po	2012-11-18 14:31:53.000000000 +0100
+++ vdr-1.7.33/po/fi_FI.po	2012-12-08 12:05:14.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: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
 "PO-Revision-Date: 2007-08-15 15:52+0200\n"
 "Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n"
 "Language-Team: Finnish <vdr@linuxtv.org>\n"
@@ -413,6 +413,9 @@
 msgid "Key$Info"
 msgstr "Tiedot"
 
+msgid "Key$Play/Pause"
+msgstr ""
+
 msgid "Key$Play"
 msgstr "Toista"
 
@@ -741,9 +744,6 @@
 msgid "Commands"
 msgstr "Komennot"
 
-msgid "Error while accessing recording!"
-msgstr "Tallenteen toistaminen epäonnistui!"
-
 msgid "Delete recording?"
 msgstr "Poistetaanko tallenne?"
 
@@ -1104,6 +1104,12 @@
 msgid "Setup.Replay$Show remaining time"
 msgstr "Näytä jäljellä oleva aika"
 
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "Tallenteen paluutunniste"
 
@@ -1386,3 +1392,6 @@
 
 msgid "free"
 msgstr "vapaana"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Tallenteen toistaminen epäonnistui!"
diff -ruN vdr-1.7.32/po/fr_FR.po vdr-1.7.33/po/fr_FR.po
--- vdr-1.7.32/po/fr_FR.po	2012-11-18 14:31:54.000000000 +0100
+++ vdr-1.7.33/po/fr_FR.po	2012-12-08 12:05:14.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: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
 "PO-Revision-Date: 2008-02-27 18:14+0100\n"
 "Last-Translator: Jean-Claude Repetto <jc@repetto.org>\n"
 "Language-Team: French <vdr@linuxtv.org>\n"
@@ -416,6 +416,9 @@
 msgid "Key$Info"
 msgstr "Info"
 
+msgid "Key$Play/Pause"
+msgstr ""
+
 msgid "Key$Play"
 msgstr "Lecture"
 
@@ -744,9 +747,6 @@
 msgid "Commands"
 msgstr "Commandes"
 
-msgid "Error while accessing recording!"
-msgstr "Impossible d'acc�der � l'enregistrement"
-
 msgid "Delete recording?"
 msgstr "Supprimer l'enregistrement ?"
 
@@ -1107,6 +1107,12 @@
 msgid "Setup.Replay$Show remaining time"
 msgstr ""
 
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "ID de reprise"
 
@@ -1389,3 +1395,6 @@
 
 msgid "free"
 msgstr "restant"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Impossible d'acc�der � l'enregistrement"
diff -ruN vdr-1.7.32/po/hr_HR.po vdr-1.7.33/po/hr_HR.po
--- vdr-1.7.32/po/hr_HR.po	2012-11-18 14:31:55.000000000 +0100
+++ vdr-1.7.33/po/hr_HR.po	2012-12-08 12:05:15.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: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
 "PO-Revision-Date: 2008-03-17 19:00+0100\n"
 "Last-Translator: Adrian Caval <anrxc@sysphere.org>\n"
 "Language-Team: Croatian <vdr@linuxtv.org>\n"
@@ -412,6 +412,9 @@
 msgid "Key$Info"
 msgstr "Info"
 
+msgid "Key$Play/Pause"
+msgstr ""
+
 msgid "Key$Play"
 msgstr "Start"
 
@@ -740,9 +743,6 @@
 msgid "Commands"
 msgstr "Naredbe"
 
-msgid "Error while accessing recording!"
-msgstr "Gre�ka pri pristupanju snimke!"
-
 msgid "Delete recording?"
 msgstr "Obrisati snimku?"
 
@@ -1103,6 +1103,12 @@
 msgid "Setup.Replay$Show remaining time"
 msgstr ""
 
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "ID nastavka"
 
@@ -1385,3 +1391,6 @@
 
 msgid "free"
 msgstr "slobodno"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Gre�ka pri pristupanju snimke!"
diff -ruN vdr-1.7.32/po/hu_HU.po vdr-1.7.33/po/hu_HU.po
--- vdr-1.7.32/po/hu_HU.po	2012-11-18 14:31:53.000000000 +0100
+++ vdr-1.7.33/po/hu_HU.po	2012-12-08 12:05:14.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: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
 "PO-Revision-Date: 2012-01-02 11:54+0200\n"
 "Last-Translator: Istv�n F�ley <ifuley@tigercomp.ro>\n"
 "Language-Team: Hungarian <vdr@linuxtv.org>\n"
@@ -413,6 +413,9 @@
 msgid "Key$Info"
 msgstr "Inform�ci�"
 
+msgid "Key$Play/Pause"
+msgstr ""
+
 msgid "Key$Play"
 msgstr "Lej�tsz�s"
 
@@ -741,9 +744,6 @@
 msgid "Commands"
 msgstr "Parancsok"
 
-msgid "Error while accessing recording!"
-msgstr "Hiba a felv�tel hozz�f�r�s�n�l"
-
 msgid "Delete recording?"
 msgstr "Felv�tel t�rl�se?"
 
@@ -1105,6 +1105,12 @@
 msgid "Setup.Replay$Show remaining time"
 msgstr ""
 
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "Lej�tsz�s ID"
 
@@ -1387,3 +1393,6 @@
 
 msgid "free"
 msgstr "szabad"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Hiba a felv�tel hozz�f�r�s�n�l"
diff -ruN vdr-1.7.32/po/it_IT.po vdr-1.7.33/po/it_IT.po
--- vdr-1.7.32/po/it_IT.po	2012-11-18 14:31:53.000000000 +0100
+++ vdr-1.7.33/po/it_IT.po	2012-12-08 12:05:14.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: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
 "PO-Revision-Date: 2012-06-06 22:50+0100\n"
 "Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
 "Language-Team: Italian <vdr@linuxtv.org>\n"
@@ -417,6 +417,9 @@
 msgid "Key$Info"
 msgstr "Info"
 
+msgid "Key$Play/Pause"
+msgstr ""
+
 msgid "Key$Play"
 msgstr "Riproduci"
 
@@ -745,9 +748,6 @@
 msgid "Commands"
 msgstr "Comandi"
 
-msgid "Error while accessing recording!"
-msgstr "Errore accesso alla registrazione!"
-
 msgid "Delete recording?"
 msgstr "Eliminare la registrazione?"
 
@@ -1108,6 +1108,12 @@
 msgid "Setup.Replay$Show remaining time"
 msgstr "Mostra tempo rimanente"
 
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "ID di ripristino"
 
@@ -1390,3 +1396,6 @@
 
 msgid "free"
 msgstr "disponibili"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Errore accesso alla registrazione!"
diff -ruN vdr-1.7.32/po/lt_LT.po vdr-1.7.33/po/lt_LT.po
--- vdr-1.7.32/po/lt_LT.po	2012-11-18 14:31:54.000000000 +0100
+++ vdr-1.7.33/po/lt_LT.po	2012-12-08 12:05:14.000000000 +0100
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: VDR 1.7.16\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
 "PO-Revision-Date: 2010-10-30 11:55+0200\n"
 "Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>\n"
 "Language-Team: Lithuanian <vdr@linuxtv.org>\n"
@@ -410,6 +410,9 @@
 msgid "Key$Info"
 msgstr "Info"
 
+msgid "Key$Play/Pause"
+msgstr ""
+
 msgid "Key$Play"
 msgstr "Grona"
 
@@ -738,9 +741,6 @@
 msgid "Commands"
 msgstr "Komandos"
 
-msgid "Error while accessing recording!"
-msgstr "Klaida atidarant įrašą!"
-
 msgid "Delete recording?"
 msgstr "Ištrinti įrašą?"
 
@@ -1101,6 +1101,12 @@
 msgid "Setup.Replay$Show remaining time"
 msgstr ""
 
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "Kūrinio ID"
 
@@ -1383,3 +1389,6 @@
 
 msgid "free"
 msgstr "laisva"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Klaida atidarant įrašą!"
diff -ruN vdr-1.7.32/po/mk_MK.po vdr-1.7.33/po/mk_MK.po
--- vdr-1.7.32/po/mk_MK.po	2012-11-18 14:31:54.000000000 +0100
+++ vdr-1.7.33/po/mk_MK.po	2012-12-08 12:05:14.000000000 +0100
@@ -7,8 +7,8 @@
 msgstr ""
 "Project-Id-Version: VDR-1.7.14\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
-"PO-Revision-Date: 2010-03-11 00:54+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
+"PO-Revision-Date: 2012-11-19 15:18+0100\n"
 "Last-Translator: Dimitar Petrovski <dimeptr@gmail.com>\n"
 "Language-Team: Macedonian <en@li.org>\n"
 "Language: mk\n"
@@ -75,7 +75,7 @@
 msgstr "Рол-оф"
 
 msgid "PlpId"
-msgstr ""
+msgstr "PlpId"
 
 msgid "Starting EPG scan"
 msgstr "Започнувам скенирање на EPG"
@@ -411,6 +411,9 @@
 msgid "Key$Info"
 msgstr "Инфо"
 
+msgid "Key$Play/Pause"
+msgstr ""
+
 msgid "Key$Play"
 msgstr "Старт"
 
@@ -644,10 +647,10 @@
 msgstr "Директориум"
 
 msgid "Button$Single"
-msgstr ""
+msgstr "Единчен"
 
 msgid "Button$Repeating"
-msgstr ""
+msgstr "Периодичен"
 
 msgid "First day"
 msgstr "Прв ден"
@@ -739,14 +742,11 @@
 msgid "Commands"
 msgstr "Наредби"
 
-msgid "Error while accessing recording!"
-msgstr "Грешка при пристап до снимката!"
-
 msgid "Delete recording?"
 msgstr "Избриши снимка?"
 
 msgid "Recording is being edited - really delete?"
-msgstr ""
+msgstr "Снимката се уредува - бриши?"
 
 msgid "Error while deleting recording!"
 msgstr "Грешка при бришење на снимката!"
@@ -848,19 +848,19 @@
 msgstr "Директориуми во менито за тајмер"
 
 msgid "Setup.OSD$Number keys for characters"
-msgstr ""
+msgstr "Нумерички копчиња за букви"
 
 msgid "Setup.OSD$Color key 0"
-msgstr ""
+msgstr "Копче во боја 0"
 
 msgid "Setup.OSD$Color key 1"
-msgstr ""
+msgstr "Копче во боја 1"
 
 msgid "Setup.OSD$Color key 2"
-msgstr ""
+msgstr "Копче во боја 2"
 
 msgid "Setup.OSD$Color key 3"
-msgstr ""
+msgstr "Копче во боја 3"
 
 msgid "EPG"
 msgstr "EPG (електронски водич на програми)"
@@ -931,7 +931,7 @@
 msgstr "Примарен DVB уред"
 
 msgid "Setup.DVB$Standard compliance"
-msgstr ""
+msgstr "Согласност со стандард"
 
 msgid "Setup.DVB$Video format"
 msgstr "Видео формат"
@@ -986,10 +986,10 @@
 
 #, c-format
 msgid "Setup.LNB$Device %d connected to sat cable"
-msgstr ""
+msgstr "Уред %d поврзан со сателитски кабел"
 
 msgid "Setup.LNB$own"
-msgstr ""
+msgstr "свој"
 
 msgid "CAM reset"
 msgstr "Рестартирај CAM"
@@ -1079,7 +1079,7 @@
 msgstr "Траење на директно снимање (мин)"
 
 msgid "Setup.Recording$present event"
-msgstr ""
+msgstr "сегашен настан"
 
 msgid "Setup.Recording$Max. video file size (MB)"
 msgstr "Максимална големина на датотека (MB)"
@@ -1100,6 +1100,12 @@
 msgstr "Прикажи начин на пуштање"
 
 msgid "Setup.Replay$Show remaining time"
+msgstr "Прикажи преостанато време"
+
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
 msgstr ""
 
 msgid "Setup.Replay$Resume ID"
@@ -1136,7 +1142,7 @@
 msgstr "Премотување канали"
 
 msgid "Setup.Miscellaneous$Show channel names with source"
-msgstr ""
+msgstr "Прикажи имиња на канали со извор"
 
 msgid "Setup.Miscellaneous$Emergency exit"
 msgstr "Итен излез"
@@ -1215,7 +1221,7 @@
 msgstr "Нема одредено ознаки за сечење!"
 
 msgid "No editing sequences defined!"
-msgstr ""
+msgstr "Нема одредено секвенци за уредување!"
 
 msgid "Can't start editing process!"
 msgstr "Не може да почне уредување!"
@@ -1260,7 +1266,7 @@
 msgstr "Регенерирањето на индексот заврши"
 
 msgid "Index file regeneration failed!"
-msgstr ""
+msgstr "Регенерирањето на индексот е неуспешен!"
 
 msgid "Can't shutdown - option '-s' not given!"
 msgstr "Невозможно гаснење - недостасува опцијата '-s'!"
@@ -1299,22 +1305,22 @@
 msgstr "Класичен VDR"
 
 msgid "DISK"
-msgstr ""
+msgstr "ДИСК"
 
 msgid "LOAD"
-msgstr ""
+msgstr "ТОВАР"
 
 msgid "TIMERS"
-msgstr ""
+msgstr "ТАЈМЕР"
 
 msgid "DEVICES"
-msgstr ""
+msgstr "УРЕДИ"
 
 msgid "LIVE"
-msgstr ""
+msgstr "ЖИВО"
 
 msgid "PLAY"
-msgstr ""
+msgstr "ПУШТИ"
 
 msgid "ST:TNG Panels"
 msgstr "ST:TNG Панели"
@@ -1384,3 +1390,6 @@
 
 msgid "free"
 msgstr "слободен"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Грешка при пристап до снимката!"
diff -ruN vdr-1.7.32/po/nl_NL.po vdr-1.7.33/po/nl_NL.po
--- vdr-1.7.32/po/nl_NL.po	2012-11-18 14:31:54.000000000 +0100
+++ vdr-1.7.33/po/nl_NL.po	2012-12-08 12:05:14.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: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
 "PO-Revision-Date: 2008-02-26 17:20+0100\n"
 "Last-Translator: Johan Schuring <johan.schuring@vetteblei.nl>\n"
 "Language-Team: Dutch <vdr@linuxtv.org>\n"
@@ -414,6 +414,9 @@
 msgid "Key$Info"
 msgstr "Info"
 
+msgid "Key$Play/Pause"
+msgstr ""
+
 msgid "Key$Play"
 msgstr "Weergeven"
 
@@ -742,9 +745,6 @@
 msgid "Commands"
 msgstr "Commando's"
 
-msgid "Error while accessing recording!"
-msgstr "Fout bij lezen opname!"
-
 msgid "Delete recording?"
 msgstr "Opname verwijderen?"
 
@@ -1105,6 +1105,12 @@
 msgid "Setup.Replay$Show remaining time"
 msgstr ""
 
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "Hervattings ID"
 
@@ -1387,3 +1393,6 @@
 
 msgid "free"
 msgstr "vrij"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Fout bij lezen opname!"
diff -ruN vdr-1.7.32/po/nn_NO.po vdr-1.7.33/po/nn_NO.po
--- vdr-1.7.32/po/nn_NO.po	2012-11-18 14:31:54.000000000 +0100
+++ vdr-1.7.33/po/nn_NO.po	2012-12-08 12:05:15.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: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
 "PO-Revision-Date: 2007-08-12 14:17+0200\n"
 "Last-Translator: Truls Slevigen <truls@slevigen.no>\n"
 "Language-Team: Norwegian Nynorsk <vdr@linuxtv.org>\n"
@@ -411,6 +411,9 @@
 msgid "Key$Info"
 msgstr ""
 
+msgid "Key$Play/Pause"
+msgstr ""
+
 msgid "Key$Play"
 msgstr ""
 
@@ -739,9 +742,6 @@
 msgid "Commands"
 msgstr "Kommandoer"
 
-msgid "Error while accessing recording!"
-msgstr "Feil under lesing av opptak!"
-
 msgid "Delete recording?"
 msgstr "Slette opptak?"
 
@@ -1102,6 +1102,12 @@
 msgid "Setup.Replay$Show remaining time"
 msgstr ""
 
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "Resume ID"
 
@@ -1384,3 +1390,6 @@
 
 msgid "free"
 msgstr "ledig"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Feil under lesing av opptak!"
diff -ruN vdr-1.7.32/po/pl_PL.po vdr-1.7.33/po/pl_PL.po
--- vdr-1.7.32/po/pl_PL.po	2012-11-18 14:31:53.000000000 +0100
+++ vdr-1.7.33/po/pl_PL.po	2012-12-08 12:05:14.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: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
 "PO-Revision-Date: 2008-03-09 12:59+0100\n"
 "Last-Translator: Michael Rakowski <mrak@gmx.de>\n"
 "Language-Team: Polish <vdr@linuxtv.org>\n"
@@ -411,6 +411,9 @@
 msgid "Key$Info"
 msgstr "Info"
 
+msgid "Key$Play/Pause"
+msgstr ""
+
 msgid "Key$Play"
 msgstr "Odtw�rz"
 
@@ -739,9 +742,6 @@
 msgid "Commands"
 msgstr "Polecenia"
 
-msgid "Error while accessing recording!"
-msgstr "Bl�d podczas dost�pu do nagrania!"
-
 msgid "Delete recording?"
 msgstr "Usun�� nagranie?"
 
@@ -1102,6 +1102,12 @@
 msgid "Setup.Replay$Show remaining time"
 msgstr ""
 
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "ID wznowienia"
 
@@ -1384,3 +1390,6 @@
 
 msgid "free"
 msgstr "wolnego"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Bl�d podczas dost�pu do nagrania!"
diff -ruN vdr-1.7.32/po/pt_PT.po vdr-1.7.33/po/pt_PT.po
--- vdr-1.7.32/po/pt_PT.po	2012-11-18 14:31:53.000000000 +0100
+++ vdr-1.7.33/po/pt_PT.po	2012-12-08 12:05:14.000000000 +0100
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: VDR 1.7.15\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
 "PO-Revision-Date: 2010-03-28 22:49+0100\n"
 "Last-Translator: Cris Silva <hudokkow@gmail.com>\n"
 "Language-Team: Portuguese <vdr@linuxtv.org>\n"
@@ -411,6 +411,9 @@
 msgid "Key$Info"
 msgstr "Info"
 
+msgid "Key$Play/Pause"
+msgstr ""
+
 msgid "Key$Play"
 msgstr "Reproduzir"
 
@@ -739,9 +742,6 @@
 msgid "Commands"
 msgstr "Comandos"
 
-msgid "Error while accessing recording!"
-msgstr "Erro a aceder �s grava��es!"
-
 msgid "Delete recording?"
 msgstr "Eliminar grava��o?"
 
@@ -1102,6 +1102,12 @@
 msgid "Setup.Replay$Show remaining time"
 msgstr ""
 
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "ID de resumo"
 
@@ -1384,3 +1390,6 @@
 
 msgid "free"
 msgstr "livre"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Erro a aceder �s grava��es!"
diff -ruN vdr-1.7.32/po/ro_RO.po vdr-1.7.33/po/ro_RO.po
--- vdr-1.7.32/po/ro_RO.po	2012-11-18 14:31:53.000000000 +0100
+++ vdr-1.7.33/po/ro_RO.po	2012-12-08 12:05:14.000000000 +0100
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: VDR 1.7.12\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
 "PO-Revision-Date: 2012-11-05 01:28+0100\n"
 "Last-Translator: Lucian Muresan <lucianm@users.sourceforge.net>\n"
 "Language-Team: Romanian <vdr@linuxtv.org>\n"
@@ -413,6 +413,9 @@
 msgid "Key$Info"
 msgstr "Info"
 
+msgid "Key$Play/Pause"
+msgstr ""
+
 msgid "Key$Play"
 msgstr "Redare"
 
@@ -741,9 +744,6 @@
 msgid "Commands"
 msgstr "Comenzi"
 
-msgid "Error while accessing recording!"
-msgstr "Eroare la accesarea înregistrării"
-
 msgid "Delete recording?"
 msgstr "Şterg înregistrarea?"
 
@@ -1104,6 +1104,12 @@
 msgid "Setup.Replay$Show remaining time"
 msgstr "Arată timpul rămas"
 
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "Identificator continuare"
 
@@ -1386,3 +1392,6 @@
 
 msgid "free"
 msgstr "liber"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Eroare la accesarea înregistrării"
diff -ruN vdr-1.7.32/po/ru_RU.po vdr-1.7.33/po/ru_RU.po
--- vdr-1.7.32/po/ru_RU.po	2012-11-18 14:31:55.000000000 +0100
+++ vdr-1.7.33/po/ru_RU.po	2012-12-08 12:05:15.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: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
 "PO-Revision-Date: 2008-12-15 14:37+0100\n"
 "Last-Translator: Oleg Roitburd <oleg@roitburd.de>\n"
 "Language-Team: Russian <vdr@linuxtv.org>\n"
@@ -411,6 +411,9 @@
 msgid "Key$Info"
 msgstr "����"
 
+msgid "Key$Play/Pause"
+msgstr ""
+
 msgid "Key$Play"
 msgstr "���������������"
 
@@ -739,9 +742,6 @@
 msgid "Commands"
 msgstr "�������"
 
-msgid "Error while accessing recording!"
-msgstr "������ ������� � ������!"
-
 msgid "Delete recording?"
 msgstr "������� ������?"
 
@@ -1102,6 +1102,12 @@
 msgid "Setup.Replay$Show remaining time"
 msgstr ""
 
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "ID ���������������"
 
@@ -1384,3 +1390,6 @@
 
 msgid "free"
 msgstr "��������"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "������ ������� � ������!"
diff -ruN vdr-1.7.32/po/sk_SK.po vdr-1.7.33/po/sk_SK.po
--- vdr-1.7.32/po/sk_SK.po	2012-11-18 14:31:54.000000000 +0100
+++ vdr-1.7.33/po/sk_SK.po	2012-12-08 12:05:15.000000000 +0100
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: VDR 1.7.16\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
 "PO-Revision-Date: 2011-02-15 16:29+0100\n"
 "Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n"
 "Language-Team: Slovak <vdr@linuxtv.org>\n"
@@ -410,6 +410,9 @@
 msgid "Key$Info"
 msgstr "Info"
 
+msgid "Key$Play/Pause"
+msgstr ""
+
 msgid "Key$Play"
 msgstr "Prehra�"
 
@@ -738,9 +741,6 @@
 msgid "Commands"
 msgstr "Pr�kazy"
 
-msgid "Error while accessing recording!"
-msgstr "Chyba pri pr�stupe k nahr�vkam!"
-
 msgid "Delete recording?"
 msgstr "Zmaza� nahr�vku?"
 
@@ -1101,6 +1101,12 @@
 msgid "Setup.Replay$Show remaining time"
 msgstr ""
 
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "ID obnovenie"
 
@@ -1383,3 +1389,6 @@
 
 msgid "free"
 msgstr "volne"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Chyba pri pr�stupe k nahr�vkam!"
diff -ruN vdr-1.7.32/po/sl_SI.po vdr-1.7.33/po/sl_SI.po
--- vdr-1.7.32/po/sl_SI.po	2012-11-18 14:31:55.000000000 +0100
+++ vdr-1.7.33/po/sl_SI.po	2012-12-08 12:05:15.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: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+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 <vdr@linuxtv.org>\n"
@@ -411,6 +411,9 @@
 msgid "Key$Info"
 msgstr "Info"
 
+msgid "Key$Play/Pause"
+msgstr ""
+
 msgid "Key$Play"
 msgstr "Predvajaj"
 
@@ -739,9 +742,6 @@
 msgid "Commands"
 msgstr "Ukazi"
 
-msgid "Error while accessing recording!"
-msgstr "Napaka pri dostopu do posnetka!"
-
 msgid "Delete recording?"
 msgstr "Izbri�i posnetek?"
 
@@ -1102,6 +1102,12 @@
 msgid "Setup.Replay$Show remaining time"
 msgstr ""
 
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "ID za predvajanje"
 
@@ -1384,3 +1390,6 @@
 
 msgid "free"
 msgstr "prosto"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Napaka pri dostopu do posnetka!"
diff -ruN vdr-1.7.32/po/sr_SR.po vdr-1.7.33/po/sr_SR.po
--- vdr-1.7.32/po/sr_SR.po	2012-11-18 14:31:54.000000000 +0100
+++ vdr-1.7.33/po/sr_SR.po	2012-12-08 12:05:14.000000000 +0100
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: VDR 1.7.1\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
 "PO-Revision-Date: 2011-01-09 15:57+0100\n"
 "Last-Translator: Milan Cvijanovi� <elcom_cvijo@hotmail.com>\n"
 "Language-Team: Serbian <vdr@linuxtv.org>\n"
@@ -412,6 +412,9 @@
 msgid "Key$Info"
 msgstr "Info"
 
+msgid "Key$Play/Pause"
+msgstr ""
+
 msgid "Key$Play"
 msgstr "Start"
 
@@ -747,9 +750,6 @@
 msgid "Commands"
 msgstr "Naredbe"
 
-msgid "Error while accessing recording!"
-msgstr "Gre�ka prilikom pristupa snimanju!"
-
 msgid "Delete recording?"
 msgstr "Obri�i snimku?"
 
@@ -1124,6 +1124,12 @@
 msgid "Setup.Replay$Show remaining time"
 msgstr ""
 
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "ID nastavka"
 
@@ -1410,3 +1416,6 @@
 
 msgid "free"
 msgstr "slobodno"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Gre�ka prilikom pristupa snimanju!"
diff -ruN vdr-1.7.32/po/sv_SE.po vdr-1.7.33/po/sv_SE.po
--- vdr-1.7.32/po/sv_SE.po	2012-11-18 14:31:54.000000000 +0100
+++ vdr-1.7.33/po/sv_SE.po	2012-12-08 12:05:14.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: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
 "PO-Revision-Date: 2008-03-12 18:25+0100\n"
 "Last-Translator: Magnus Andersson <svankan@bahnhof.se>\n"
 "Language-Team: Swedish <vdr@linuxtv.org>\n"
@@ -413,6 +413,9 @@
 msgid "Key$Info"
 msgstr "Info"
 
+msgid "Key$Play/Pause"
+msgstr ""
+
 msgid "Key$Play"
 msgstr "Spela upp"
 
@@ -741,9 +744,6 @@
 msgid "Commands"
 msgstr "Kommandon"
 
-msgid "Error while accessing recording!"
-msgstr "Inspelningen g�r inte att l�sa!"
-
 msgid "Delete recording?"
 msgstr "Ta bort inspelningen?"
 
@@ -1104,6 +1104,12 @@
 msgid "Setup.Replay$Show remaining time"
 msgstr ""
 
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "�teruppta ID"
 
@@ -1386,3 +1392,6 @@
 
 msgid "free"
 msgstr "ledigt"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Inspelningen g�r inte att l�sa!"
diff -ruN vdr-1.7.32/po/tr_TR.po vdr-1.7.33/po/tr_TR.po
--- vdr-1.7.32/po/tr_TR.po	2012-11-18 14:31:55.000000000 +0100
+++ vdr-1.7.33/po/tr_TR.po	2012-12-08 12:05:15.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: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+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 <vdr@linuxtv.org>\n"
@@ -410,6 +410,9 @@
 msgid "Key$Info"
 msgstr "Bilgi"
 
+msgid "Key$Play/Pause"
+msgstr ""
+
 msgid "Key$Play"
 msgstr "G�ster"
 
@@ -738,9 +741,6 @@
 msgid "Commands"
 msgstr "Komutlar"
 
-msgid "Error while accessing recording!"
-msgstr "Kay�t okuma hatas�!"
-
 msgid "Delete recording?"
 msgstr "Kay�t� sil?"
 
@@ -1101,6 +1101,12 @@
 msgid "Setup.Replay$Show remaining time"
 msgstr ""
 
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "G�steri� ID'si"
 
@@ -1383,3 +1389,6 @@
 
 msgid "free"
 msgstr "bo�"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Kay�t okuma hatas�!"
diff -ruN vdr-1.7.32/po/uk_UA.po vdr-1.7.33/po/uk_UA.po
--- vdr-1.7.32/po/uk_UA.po	2012-11-18 14:31:54.000000000 +0100
+++ vdr-1.7.33/po/uk_UA.po	2012-12-08 12:05:14.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: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
 "PO-Revision-Date: 2010-04-25 16:35+0200\n"
 "Last-Translator: Yarema aka Knedlyk <yupadmin@gmail.com>\n"
 "Language-Team: Ukrainian <vdr@linuxtv.org>\n"
@@ -410,6 +410,9 @@
 msgid "Key$Info"
 msgstr "Інфо"
 
+msgid "Key$Play/Pause"
+msgstr ""
+
 msgid "Key$Play"
 msgstr "Програвання"
 
@@ -738,9 +741,6 @@
 msgid "Commands"
 msgstr "Команди"
 
-msgid "Error while accessing recording!"
-msgstr "Помилка доступу до запису!"
-
 msgid "Delete recording?"
 msgstr "Витерти запис?"
 
@@ -1101,6 +1101,12 @@
 msgid "Setup.Replay$Show remaining time"
 msgstr ""
 
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "ID продовження"
 
@@ -1383,3 +1389,6 @@
 
 msgid "free"
 msgstr "вільно"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Помилка доступу до запису!"
diff -ruN vdr-1.7.32/po/zh_CN.po vdr-1.7.33/po/zh_CN.po
--- vdr-1.7.32/po/zh_CN.po	2012-11-18 14:31:53.000000000 +0100
+++ vdr-1.7.33/po/zh_CN.po	2012-12-08 12:05:14.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: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
 "PO-Revision-Date: 2009-09-23 23:50+0800\n"
 "Last-Translator: Nan Feng <nfgx@21cn.com>\n"
 "Language-Team: Chinese (simplified) <vdr@linuxtv.org>\n"
@@ -413,6 +413,9 @@
 msgid "Key$Info"
 msgstr "信息"
 
+msgid "Key$Play/Pause"
+msgstr ""
+
 msgid "Key$Play"
 msgstr "播放"
 
@@ -741,9 +744,6 @@
 msgid "Commands"
 msgstr "常用操作命令"
 
-msgid "Error while accessing recording!"
-msgstr "存取录像错误！"
-
 msgid "Delete recording?"
 msgstr "是否删除录像？"
 
@@ -1104,6 +1104,12 @@
 msgid "Setup.Replay$Show remaining time"
 msgstr ""
 
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "恢复 ID"
 
@@ -1386,3 +1392,6 @@
 
 msgid "free"
 msgstr "可录像时间"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "存取录像错误！"
diff -ruN vdr-1.7.32/recording.c vdr-1.7.33/recording.c
--- vdr-1.7.32/recording.c	2012-11-13 14:46:49.000000000 +0100
+++ vdr-1.7.33/recording.c	2012-12-06 10:35:13.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: recording.c 2.73 2012/11/13 13:46:49 kls Exp $
+ * $Id: recording.c 2.78 2012/12/06 09:35:13 kls Exp $
  */
 
 #include "recording.h"
@@ -455,7 +455,7 @@
                             }
                        }
                        break;
-             case 'F': framesPerSecond = atof(t);
+             case 'F': framesPerSecond = atod(t);
                        break;
              case 'L': lifetime = atoi(t);
                        break;
@@ -482,7 +482,7 @@
   if (channelID.Valid())
      fprintf(f, "%sC %s%s%s\n", Prefix, *channelID.ToString(), channelName ? " " : "", channelName ? channelName : "");
   event->Dump(f, Prefix, true);
-  fprintf(f, "%sF %.10g\n", Prefix, framesPerSecond);
+  fprintf(f, "%sF %s\n", Prefix, *dtoa(framesPerSecond, "%.10g"));
   fprintf(f, "%sP %d\n", Prefix, priority);
   fprintf(f, "%sL %d\n", Prefix, lifetime);
   if (aux)
@@ -691,7 +691,8 @@
   FileName = fileName = strdup(FileName);
   if (*(fileName + strlen(fileName) - 1) == '/')
      *(fileName + strlen(fileName) - 1) = 0;
-  FileName += strlen(VideoDirectory) + 1;
+  if (strstr(FileName, VideoDirectory) == FileName)
+     FileName += strlen(VideoDirectory) + 1;
   const char *p = strrchr(FileName, '/');
 
   name = NULL;
@@ -1498,8 +1499,11 @@
            NumSequences++;
            BeginMark = GetNextBegin(EndMark);
            }
-     if (NumSequences == 0 && BeginMark->Position() > 0)
-        NumSequences = 1; // there is only one actual "begin" mark at a non-zero offset, and no actual "end" mark
+     if (BeginMark) {
+        NumSequences++; // the last sequence had no actual "end" mark
+        if (NumSequences == 1 && BeginMark->Position() == 0)
+           NumSequences = 0; // there is only one actual "begin" mark at offset zero, and no actual "end" mark
+        }
      }
   return NumSequences;
 }
@@ -1606,7 +1610,7 @@
                     int Pid = TsPid(p);
                     if (Pid == PATPID)
                        PatPmtParser.ParsePat(p, TS_SIZE);
-                    else if (Pid == PatPmtParser.PmtPid())
+                    else if (PatPmtParser.IsPmtPid(Pid))
                        PatPmtParser.ParsePmt(p, TS_SIZE);
                     Length -= TS_SIZE;
                     p += TS_SIZE;
@@ -1639,6 +1643,14 @@
         }
   if (IndexFileComplete) {
      if (IndexFileWritten) {
+        cRecordingInfo RecordingInfo(recordingName);
+        if (RecordingInfo.Read()) {
+           if (FrameDetector.FramesPerSecond() > 0 && !DoubleEqual(RecordingInfo.FramesPerSecond(), FrameDetector.FramesPerSecond())) {
+              RecordingInfo.SetFramesPerSecond(FrameDetector.FramesPerSecond());
+              RecordingInfo.Write();
+              Recordings.UpdateByName(recordingName);
+              }
+           }
         Skins.QueueMessage(mtInfo, tr("Index file regeneration complete"));
         return;
         }
@@ -2132,7 +2144,7 @@
                            int Pid = TsPid(buf);
                            if (Pid == PATPID)
                               PatPmtParser.ParsePat(buf, sizeof(buf));
-                           else if (Pid == PatPmtParser.PmtPid()) {
+                           else if (PatPmtParser.IsPmtPid(Pid)) {
                               PatPmtParser.ParsePmt(buf, sizeof(buf));
                               if (PatPmtParser.GetVersions(PatVersion, PmtVersion)) {
                                  close(fd);
diff -ruN vdr-1.7.32/remux.c vdr-1.7.33/remux.c
--- vdr-1.7.32/remux.c	2012-11-18 13:18:08.000000000 +0100
+++ vdr-1.7.33/remux.c	2012-11-25 15:16:11.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.71 2012/11/18 12:18:08 kls Exp $
+ * $Id: remux.c 2.73 2012/11/25 14:16:11 kls Exp $
  */
 
 #include "remux.h"
@@ -574,7 +574,7 @@
 {
   pmtSize = 0;
   patVersion = pmtVersion = -1;
-  pmtPid = -1;
+  pmtPids[0] = 0;
   vpid = vtype = 0;
   ppid = 0;
 }
@@ -594,14 +594,17 @@
      dbgpatpmt("PAT: TSid = %d, c/n = %d, v = %d, s = %d, ls = %d\n", Pat.getTransportStreamId(), Pat.getCurrentNextIndicator(), Pat.getVersionNumber(), Pat.getSectionNumber(), Pat.getLastSectionNumber());
      if (patVersion == Pat.getVersionNumber())
         return;
+     int NumPmtPids = 0;
      SI::PAT::Association assoc;
      for (SI::Loop::Iterator it; Pat.associationLoop.getNext(assoc, it); ) {
          dbgpatpmt("     isNITPid = %d\n", assoc.isNITPid());
          if (!assoc.isNITPid()) {
-            pmtPid = assoc.getPid();
+            if (NumPmtPids <= MAX_PMT_PIDS)
+               pmtPids[NumPmtPids++] = assoc.getPid();
             dbgpatpmt("     service id = %d, pid = %d\n", assoc.getServiceId(), assoc.getPid());
             }
          }
+     pmtPids[NumPmtPids] = 0;
      patVersion = Pat.getVersionNumber();
      }
   else
@@ -673,7 +676,7 @@
          switch (stream.getStreamType()) {
            case 0x01: // STREAMTYPE_11172_VIDEO
            case 0x02: // STREAMTYPE_13818_VIDEO
-           case 0x1B: // MPEG4
+           case 0x1B: // H.264
                       vpid = stream.getPid();
                       vtype = stream.getStreamType();
                       ppid = Pmt.getPCRPid();
@@ -839,7 +842,7 @@
         int Pid = TsPid(Data);
         if (Pid == PATPID)
            ParsePat(Data, TS_SIZE);
-        else if (Pid == PmtPid()) {
+        else if (IsPmtPid(Pid)) {
            ParsePmt(Data, TS_SIZE);
            if (patVersion >= 0 && pmtVersion >= 0)
               return true;
@@ -1107,9 +1110,9 @@
   return tsPayload.Used();
 }
 
-// --- cMpeg4Parser ----------------------------------------------------------
+// --- cH264Parser -----------------------------------------------------------
 
-class cMpeg4Parser : public cFrameParser {
+class cH264Parser : public cFrameParser {
 private:
   enum eNalUnitType {
     nutCodedSliceNonIdr     = 1,
@@ -1141,14 +1144,14 @@
   void ParseSequenceParameterSet(void);
   void ParseSliceHeader(void);
 public:
-  cMpeg4Parser(void);
-       ///< Sets up a new MPEG-4 parser.
+  cH264Parser(void);
+       ///< Sets up a new H.264 parser.
        ///< This class parses only the data absolutely necessary to determine the
        ///< frame borders and field count of the given H264 material.
   virtual int Parse(const uchar *Data, int Length, int Pid);
   };
 
-cMpeg4Parser::cMpeg4Parser(void)
+cH264Parser::cH264Parser(void)
 {
   byte = 0;
   bit = -1;
@@ -1161,7 +1164,7 @@
   gotSequenceParameterSet = false;
 }
 
-uchar cMpeg4Parser::GetByte(bool Raw)
+uchar cH264Parser::GetByte(bool Raw)
 {
   uchar b = tsPayload.GetByte();
   if (!Raw) {
@@ -1180,7 +1183,7 @@
   return b;
 }
 
-uchar cMpeg4Parser::GetBit(void)
+uchar cH264Parser::GetBit(void)
 {
   if (bit < 0) {
      byte = GetByte();
@@ -1189,7 +1192,7 @@
   return (byte & (1 << bit--)) ? 1 : 0;
 }
 
-uint32_t cMpeg4Parser::GetBits(int Bits)
+uint32_t cH264Parser::GetBits(int Bits)
 {
   uint32_t b = 0;
   while (Bits--)
@@ -1197,7 +1200,7 @@
   return b;
 }
 
-uint32_t cMpeg4Parser::GetGolombUe(void)
+uint32_t cH264Parser::GetGolombUe(void)
 {
   int z = -1;
   for (int b = 0; !b; z++)
@@ -1205,7 +1208,7 @@
   return (1 << z) - 1 + GetBits(z);
 }
 
-int32_t cMpeg4Parser::GetGolombSe(void)
+int32_t cH264Parser::GetGolombSe(void)
 {
   uint32_t v = GetGolombUe();
   if (v) {
@@ -1217,7 +1220,7 @@
   return v;
 }
 
-int cMpeg4Parser::Parse(const uchar *Data, int Length, int Pid)
+int cH264Parser::Parse(const uchar *Data, int Length, int Pid)
 {
   newFrame = independentFrame = false;
   tsPayload.Setup(const_cast<uchar *>(Data), Length, Pid);
@@ -1257,14 +1260,14 @@
   return tsPayload.Used();
 }
 
-void cMpeg4Parser::ParseAccessUnitDelimiter(void)
+void cH264Parser::ParseAccessUnitDelimiter(void)
 {
   if (debug && gotSequenceParameterSet)
      dbgframes("A");
   GetByte(); // primary_pic_type
 }
 
-void cMpeg4Parser::ParseSequenceParameterSet(void)
+void cH264Parser::ParseSequenceParameterSet(void)
 {
   uchar profile_idc = GetByte(); // profile_idc
   GetByte(); // constraint_set[0-5]_flags, reserved_zero_2bits
@@ -1316,7 +1319,7 @@
      }
 }
 
-void cMpeg4Parser::ParseSliceHeader(void)
+void cH264Parser::ParseSliceHeader(void)
 {
   newFrame = true;
   GetGolombUe(); // first_mb_in_slice
@@ -1366,13 +1369,13 @@
 {
   pid = Pid;
   type = Type;
-  isVideo = type == 0x01 || type == 0x02 || type == 0x1B; // MPEG 1, 2 or 4
+  isVideo = type == 0x01 || type == 0x02 || type == 0x1B; // MPEG 1, 2 or H.264
   delete parser;
   parser = NULL;
   if (type == 0x01 || type == 0x02)
      parser = new cMpeg2Parser;
   else if (type == 0x1B)
-     parser = new cMpeg4Parser;
+     parser = new cH264Parser;
   else if (type == 0x04 || type == 0x06) // MPEG audio or AC3 audio
      parser = new cAudioParser;
   else if (type != 0)
diff -ruN vdr-1.7.32/remux.h vdr-1.7.33/remux.h
--- vdr-1.7.32/remux.h	2012-11-18 13:17:23.000000000 +0100
+++ vdr-1.7.33/remux.h	2012-11-19 11:22:28.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: remux.h 2.35 2012/11/18 12:17:23 kls Exp $
+ * $Id: remux.h 2.36 2012/11/19 10:22:28 kls Exp $
  */
 
 #ifndef __REMUX_H
@@ -327,13 +327,15 @@
 
 // PAT/PMT Parser:
 
+#define MAX_PMT_PIDS 32
+
 class cPatPmtParser {
 private:
   uchar pmt[MAX_SECTION_SIZE];
   int pmtSize;
   int patVersion;
   int pmtVersion;
-  int pmtPid;
+  int pmtPids[MAX_PMT_PIDS + 1]; // list is zero-terminated
   int vpid;
   int ppid;
   int vtype;
@@ -373,9 +375,9 @@
   bool GetVersions(int &PatVersion, int &PmtVersion) const;
        ///< Returns true if a valid PAT/PMT has been parsed and stores
        ///< the current version numbers in the given variables.
-  int PmtPid(void) const { return pmtPid; }
-       ///< Returns the PMT pid as defined by the current PAT.
-       ///< If no PAT has been received yet, -1 will be returned.
+  bool IsPmtPid(int Pid) const { for (int i = 0; pmtPids[i]; i++) if (pmtPids[i] == Pid) return true; return false; }
+       ///< Returns true if Pid the one of the PMT pids as defined by the current PAT.
+       ///< If no PAT has been received yet, false will be returned.
   int Vpid(void) const { return vpid; }
        ///< Returns the video pid as defined by the current PMT, or 0 if no video
        ///< pid has been detected, yet.
diff -ruN vdr-1.7.32/skins.h vdr-1.7.33/skins.h
--- vdr-1.7.32/skins.h	2012-05-12 13:10:30.000000000 +0200
+++ vdr-1.7.33/skins.h	2012-12-07 18:18:44.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: skins.h 2.5 2012/05/12 11:10:30 kls Exp $
+ * $Id: skins.h 2.7 2012/12/07 17:18:44 kls Exp $
  */
 
 #ifndef __SKINS_H
@@ -17,6 +17,7 @@
 #include "recording.h"
 #include "themes.h"
 #include "thread.h"
+#include "timers.h"
 #include "tools.h"
 
 enum eMessageType { mtStatus = 0, mtInfo, mtWarning, mtError }; // will be used to calculate color offsets!
@@ -49,7 +50,7 @@
 
 class cSkinDisplayChannel : public cSkinDisplay {
        ///< This class is used to display the current channel, together with
-       ///< the present and following EPG even. How and to what extent this
+       ///< the present and following EPG event. How and to what extent this
        ///< is done is totally up to the derived class.
 public:
   virtual void SetChannel(const cChannel *Channel, int Number) = 0;
@@ -152,13 +153,43 @@
        ///< this function will be first called for the old current item
        ///< with Current set to false, and then for the new current item
        ///< with Current set to true.
-  /*TODO
-  virtual void SetItem(const cEvent *Event, int Index, bool Current, bool Selectable, bool NowNext???, bool Schedule???);
-  virtual void SetItem(const cTimer *Timer, int Index, bool Current, bool Selectable);
-  virtual void SetItem(const cChannel *Channel, int Index, bool Current, bool Selectable);
-  virtual void SetItem(const cRecording *Recording, int Index, bool Current, bool Selectable);
-  --> false: call SetItem(text)
-  */
+  virtual bool SetItemEvent(const cEvent *Event, int Index, bool Current, bool Selectable, const cChannel *Channel, bool WithDate, int TimerMatch) { return false; }
+       ///< Sets the item at the given Index to Event. See SetItem() for more information.
+       ///< If a derived skin class implements this function, it can display an Event item
+       ///< in a more elaborate way than just a simple line of text.
+       ///< If Channel is not NULL, the channel's name and/or number shall be displayed.
+       ///< If WithDate is true, the date of the Event shall be displayed (in addition to the time).
+       ///< TimerMatch tells how much of this event will be recorded by a timer.
+       ///< If the skin displays the Event item in its own way, it shall return true.
+       ///< The default implementation does nothing and returns false, which results in
+       ///< a call to SetItem() with a proper text.
+  virtual bool SetItemTimer(const cTimer *Timer, int Index, bool Current, bool Selectable) { return false; }
+       ///< Sets the item at the given Index to Timer. See SetItem() for more information.
+       ///< If a derived skin class implements this function, it can display a Timer item
+       ///< in a more elaborate way than just a simple line of text.
+       ///< If the skin displays the Timer item in its own way, it shall return true.
+       ///< The default implementation does nothing and returns false, which results in
+       ///< a call to SetItem() with a proper text.
+  virtual bool SetItemChannel(const cChannel *Channel, int Index, bool Current, bool Selectable, bool WithProvider) { return false; }
+       ///< Sets the item at the given Index to Channel. See SetItem() for more information.
+       ///< If a derived skin class implements this function, it can display a Channel item
+       ///< in a more elaborate way than just a simple line of text.
+       ///< If WithProvider ist true, the provider shall be displayed in addition to the
+       ///< channel's name.
+       ///< If the skin displays the Channel item in its own way, it shall return true.
+       ///< The default implementation does nothing and returns false, which results in
+       ///< a call to SetItem() with a proper text.
+  virtual bool SetItemRecording(const cRecording *Recording, int Index, bool Current, bool Selectable, int Level, int Total, int New) { return false; }
+       ///< Sets the item at the given Index to Recording. See SetItem() for more information.
+       ///< If a derived skin class implements this function, it can display a Recording item
+       ///< in a more elaborate way than just a simple line of text.
+       ///< Level is the currently displayed level of the video directory, where 0 is the
+       ///< top level. A value of -1 means that the full path names of the recordings
+       ///< shall be displayed. If Total is greater than 0, this is a directory with the given
+       ///< total number of entries, and New contains the number of new (unwatched) recordings.
+       ///< If the skin displays the Recording item in its own way, it shall return true.
+       ///< The default implementation does nothing and returns false, which results in
+       ///< a call to SetItem() with a proper text.
   virtual void SetScrollbar(int Total, int Offset);
        ///< Sets the Total number of items in the currently displayed list, and the
        ///< Offset of the first item that is currently displayed (the skin knows how
diff -ruN vdr-1.7.32/svdrp.c vdr-1.7.33/svdrp.c
--- vdr-1.7.32/svdrp.c	2012-05-12 13:55:18.000000000 +0200
+++ vdr-1.7.33/svdrp.c	2012-12-04 13:08:36.000000000 +0100
@@ -10,7 +10,7 @@
  * and interact with the Video Disk Recorder - or write a full featured
  * graphical interface that sits on top of an SVDRP connection.
  *
- * $Id: svdrp.c 2.19 2012/05/12 11:55:18 kls Exp $
+ * $Id: svdrp.c 2.21 2012/12/04 12:08:36 kls Exp $
  */
 
 #include "svdrp.h"
@@ -917,6 +917,10 @@
 void cSVDRP::CmdHITK(const char *Option)
 {
   if (*Option) {
+     if (!cRemote::Enabled()) {
+        Reply(550, "Remote control currently disabled (key \"%s\" discarded)", Option);
+        return;
+        }
      char buf[strlen(Option) + 1];
      strcpy(buf, Option);
      const char *delim = " \t";
@@ -1268,7 +1272,7 @@
                        Reply(250,"Channel \"%d\" moved to \"%d\"", From, To);
                        }
                     else
-                       Reply(501, "Can't move channel to same postion");
+                       Reply(501, "Can't move channel to same position");
                     }
                  else
                     Reply(501, "Channel \"%d\" not defined", To);
diff -ruN vdr-1.7.32/timers.c vdr-1.7.33/timers.c
--- vdr-1.7.32/timers.c	2012-10-16 10:22:39.000000000 +0200
+++ vdr-1.7.33/timers.c	2012-12-07 14:14:00.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: timers.c 2.14 2012/10/16 08:22:39 kls Exp $
+ * $Id: timers.c 2.15 2012/12/07 13:14:00 kls Exp $
  */
 
 #include "timers.h"
@@ -480,7 +480,7 @@
 
 #define FULLMATCH 1000
 
-int cTimer::Matches(const cEvent *Event, int *Overlap) const
+eTimerMatch cTimer::Matches(const cEvent *Event, int *Overlap) const
 {
   // Overlap is the percentage of the Event's duration that is covered by
   // this timer (based on FULLMATCH for finer granularity than just 100).
@@ -758,12 +758,12 @@
   return t0;
 }
 
-cTimer *cTimers::GetMatch(const cEvent *Event, int *Match)
+cTimer *cTimers::GetMatch(const cEvent *Event, eTimerMatch *Match)
 {
   cTimer *t = NULL;
-  int m = tmNone;
+  eTimerMatch m = tmNone;
   for (cTimer *ti = First(); ti; ti = Next(ti)) {
-      int tm = ti->Matches(Event);
+      eTimerMatch tm = ti->Matches(Event);
       if (tm > m) {
          t = ti;
          m = tm;
diff -ruN vdr-1.7.32/timers.h vdr-1.7.33/timers.h
--- vdr-1.7.32/timers.h	2012-04-15 15:21:31.000000000 +0200
+++ vdr-1.7.33/timers.h	2012-12-07 14:13:40.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: timers.h 2.4 2012/04/15 13:21:31 kls Exp $
+ * $Id: timers.h 2.5 2012/12/07 13:13:40 kls Exp $
  */
 
 #ifndef __TIMERS_H
@@ -77,7 +77,7 @@
   static time_t SetTime(time_t t, int SecondsFromMidnight);
   void SetFile(const char *File);
   bool Matches(time_t t = 0, bool Directly = false, int Margin = 0) const;
-  int Matches(const cEvent *Event, int *Overlap = NULL) const;
+  eTimerMatch Matches(const cEvent *Event, int *Overlap = NULL) const;
   bool Expired(void) const;
   time_t StartTime(void) const;
   time_t StopTime(void) const;
@@ -116,7 +116,7 @@
   cTimers(void);
   cTimer *GetTimer(cTimer *Timer);
   cTimer *GetMatch(time_t t);
-  cTimer *GetMatch(const cEvent *Event, int *Match = NULL);
+  cTimer *GetMatch(const cEvent *Event, eTimerMatch *Match = NULL);
   cTimer *GetNextActiveTimer(void);
   int BeingEdited(void) { return beingEdited; }
   void IncBeingEdited(void) { beingEdited++; }
diff -ruN vdr-1.7.32/tools.c vdr-1.7.33/tools.c
--- vdr-1.7.32/tools.c	2012-09-30 15:04:14.000000000 +0200
+++ vdr-1.7.33/tools.c	2012-12-08 12:16:30.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.26 2012/09/30 13:04:14 kls Exp $
+ * $Id: tools.c 2.29 2012/12/08 11:16:30 kls Exp $
  */
 
 #include "tools.h"
@@ -18,6 +18,7 @@
 #include <jpeglib.h>
 #undef boolean
 }
+#include <locale.h>
 #include <stdlib.h>
 #include <sys/time.h>
 #include <sys/vfs.h>
@@ -302,6 +303,39 @@
   return cString::sprintf("%s/%s", DirName && *DirName ? DirName : ".", FileName);
 }
 
+#define DECIMAL_POINT_C '.'
+
+double atod(const char *s)
+{
+  static lconv *loc = localeconv();
+  if (*loc->decimal_point != DECIMAL_POINT_C) {
+     char buf[strlen(s) + 1];
+     char *p = buf;
+     while (*s) {
+           if (*s == DECIMAL_POINT_C)
+              *p = *loc->decimal_point;
+           else
+              *p = *s;
+           p++;
+           s++;
+           }
+     *p = 0;
+     return atof(buf);
+     }
+  else
+     return atof(s);
+}
+
+cString dtoa(double d, const char *Format)
+{
+  static lconv *loc = localeconv();
+  char buf[16];
+  snprintf(buf, sizeof(buf), Format, d);
+  if (*loc->decimal_point != DECIMAL_POINT_C)
+     strreplace(buf, *loc->decimal_point, DECIMAL_POINT_C);
+  return buf;
+}
+
 cString itoa(int n)
 {
   char buf[16];
@@ -842,7 +876,8 @@
 cCharSetConv::~cCharSetConv()
 {
   free(result);
-  iconv_close(cd);
+  if (cd != (iconv_t)-1)
+     iconv_close(cd);
 }
 
 void cCharSetConv::SetSystemCharacterTable(const char *CharacterTable)
diff -ruN vdr-1.7.32/tools.h vdr-1.7.33/tools.h
--- vdr-1.7.32/tools.h	2012-09-30 13:02:21.000000000 +0200
+++ vdr-1.7.33/tools.h	2012-12-06 09:59:39.000000000 +0100
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: tools.h 2.22 2012/09/30 11:02:21 kls Exp $
+ * $Id: tools.h 2.23 2012/12/06 08:59:39 kls Exp $
  */
 
 #ifndef __TOOLS_H
@@ -216,6 +216,14 @@
 bool StrInArray(const char *a[], const char *s);
     ///< Returns true if the string s is equal to one of the strings pointed
     ///< to by the (NULL terminated) array a.
+double atod(const char *s);
+    ///< Converts the given string, which is a floating point number using a '.' as
+    ///< the decimal point, to a double value, independent of the currently selected
+    ///< locale.
+cString dtoa(double d, const char *Format = "%f");
+    ///< Converts the given double value to a string, making sure it uses a '.' as
+    ///< the decimal point, independent of the currently selected locale.
+    ///< If Format is given, it will be used instead of the default.
 cString itoa(int n);
 cString AddDirectory(const char *DirName, const char *FileName);
 bool EntriesOnSameFileSystem(const char *File1, const char *File2);
diff -ruN vdr-1.7.32/vdr.c vdr-1.7.33/vdr.c
--- vdr-1.7.32/vdr.c	2012-10-13 14:48:56.000000000 +0200
+++ vdr-1.7.33/vdr.c	2012-12-06 11:29:23.000000000 +0100
@@ -22,7 +22,7 @@
  *
  * The project's page is at http://www.tvdr.de
  *
- * $Id: vdr.c 2.42 2012/10/13 12:48:56 kls Exp $
+ * $Id: vdr.c 2.45 2012/12/06 10:29:23 kls Exp $
  */
 
 #include <getopt.h>
@@ -174,7 +174,6 @@
   // Initiate locale:
 
   setlocale(LC_ALL, "");
-  setlocale(LC_NUMERIC, "C"); // makes sure any floating point numbers written use a decimal point
 
   // Command line options:
 
@@ -1000,11 +999,11 @@
                break;
           // Direct main menu functions:
           #define DirectMainFunction(function)\
-            DELETE_MENU;\
+            { DELETE_MENU;\
             if (cControl::Control())\
                cControl::Control()->Hide();\
             Menu = new cMenuMain(function);\
-            key = kNone; // nobody else needs to see this key
+            key = kNone; } // nobody else needs to see this key
           case kSchedule:   DirectMainFunction(osSchedule); break;
           case kChannels:   DirectMainFunction(osChannels); break;
           case kTimers:     DirectMainFunction(osTimers); break;
@@ -1089,6 +1088,7 @@
                key = kNone;
                break;
           // Pausing live video:
+          case kPlayPause:
           case kPause:
                if (!cControl::Control()) {
                   DELETE_MENU;
