diff -Nu vdr-1.3.36-org/tools.c vdr-1.3.36/tools.c
--- vdr-1.3.36-org/tools.c	2005-11-20 12:55:37.000000000 +0100
+++ vdr-1.3.36/tools.c	2005-11-20 12:49:01.000000000 +0100
@@ -527,6 +527,11 @@
   s = TakePointer ? (char *)S : S ? strdup(S) : NULL;
 }
 
+cString::cString(const cString &String)
+{
+  s = String.s ? strdup(String.s) : NULL;
+}
+
 cString::~cString()
 {
   free(s);
@@ -534,7 +539,10 @@
 
 cString &cString::operator=(const cString &String)
 {
-  free(s);
+  if(s!=String.s)
+  {
+    free(s);
+  }
   s = String.s ? strdup(String.s) : NULL;
   return *this;
 }
diff -Nu vdr-1.3.36-org/tools.h vdr-1.3.36/tools.h
--- vdr-1.3.36-org/tools.h	2005-11-20 12:55:39.000000000 +0100
+++ vdr-1.3.36/tools.h	2005-11-20 10:04:51.000000000 +0100
@@ -75,6 +75,7 @@
   char *s;
 public:
   cString(const char *S = NULL, bool TakePointer = false);
+  cString(const cString &String);
   virtual ~cString();
   operator const char * () const { return s; } // for use in (const char *) context
   const char * operator*() const { return s; } // for use in (const void *) context (printf() etc.)
