diff --git a/gettext-tools/src/msgl-header.c b/gettext-tools/src/msgl-header.c
index 987c1c4..25ae33a 100644
--- a/gettext-tools/src/msgl-header.c
+++ b/gettext-tools/src/msgl-header.c
@@ -30,16 +30,12 @@
 #define SIZEOF(a) (sizeof(a) / sizeof(a[0]))
 
 
-void
-msgdomain_list_set_header_field (msgdomain_list_ty *mdlp,
-                                 const char *field, const char *value)
+/* The known fields in their usual order.  */
+static const struct
 {
-  /* The known fields in their usual order.  */
-  static const struct
-    {
-      const char *name;
-      size_t len;
-    }
+  const char *name;
+  size_t len;
+}
   known_fields[] =
     {
       { "Project-Id-Version:", sizeof ("Project-Id-Version:") - 1 },
@@ -54,6 +50,11 @@ msgdomain_list_set_header_field (msgdomain_list_ty *mdlp,
       { "Content-Transfer-Encoding:",
         sizeof ("Content-Transfer-Encoding:") - 1 }
     };
+
+void
+msgdomain_list_set_header_field (msgdomain_list_ty *mdlp,
+                                 const char *field, const char *value)
+{
   size_t field_len;
   int field_index;
   size_t k, i;
@@ -168,3 +169,71 @@ msgdomain_list_set_header_field (msgdomain_list_ty *mdlp,
           }
     }
 }
+
+
+void
+message_list_delete_header_field (message_list_ty *mlp,
+                                  const char *field)
+{
+  size_t j;
+  int field_index;
+  size_t k;
+
+  /* Search the field in known_fields[].  */
+  field_index = -1;
+  for (k = 0; k < SIZEOF (known_fields); k++)
+    if (strcmp (known_fields[k].name, field) == 0)
+      {
+        field_index = k;
+        break;
+      }
+
+  size_t field_len;
+  field_len = strlen (field);
+
+  /* Search the header entry.  */
+  for (j = 0; j < mlp->nitems; j++)
+    if (is_header (mlp->item[j]) && !mlp->item[j]->obsolete)
+      {
+        message_ty *mp = mlp->item[j];
+
+        /* Modify the header entry.  */
+        const char *header = mp->msgstr;
+        char *new_header =
+          XCALLOC (strlen (header) + 1,
+                    char);
+
+        /* Test whether the field already occurs in the header entry.  */
+        const char *h;
+
+        for (h = header; *h != '\0'; )
+          {
+            if (strncmp (h, field, field_len) == 0)
+              break;
+            h = strchr (h, '\n');
+            if (h == NULL)
+              break;
+            h++;
+          }
+        if (h != NULL && *h != '\0')
+          {
+            /* Replace the field.  */
+            char *p = new_header;
+            memcpy (p, header, h - header);
+            p += h - header;
+            h = strchr (h, '\n');
+            if (h != NULL)
+              {
+                h++;
+                stpcpy (p, h);
+              }
+          }
+        else
+          {
+            char *p = new_header;
+            p = stpcpy (p, header);
+          }
+        
+        mp->msgstr = new_header;
+      }
+}
diff --git a/gettext-tools/src/msgl-header.h b/gettext-tools/src/msgl-header.h
index 9685157..34726e7 100644
--- a/gettext-tools/src/msgl-header.h
+++ b/gettext-tools/src/msgl-header.h
@@ -34,6 +34,9 @@ extern void
        msgdomain_list_set_header_field (msgdomain_list_ty *mdlp,
                                         const char *field, const char *value);
 
+extern void
+       message_list_delete_header_field (message_list_ty *mlp, const char *field);
+
 
 #ifdef __cplusplus
 }
diff --git a/gettext-tools/src/write-csharp.c b/gettext-tools/src/write-csharp.c
index 5cf573a..30e8411 100644
--- a/gettext-tools/src/write-csharp.c
+++ b/gettext-tools/src/write-csharp.c
@@ -78,6 +78,7 @@
 #include "message.h"
 #include "msgfmt.h"
 #include "msgl-iconv.h"
+#include "msgl-header.h"
 #include "plural-exp.h"
 #include "po-charset.h"
 #include "xalloc.h"
@@ -645,6 +646,8 @@ msgdomain_write_csharp (message_list_ty *mlp, const char *canon_encoding,
   /* Convert the messages to Unicode.  */
   iconv_message_list (mlp, canon_encoding, po_charset_utf8, NULL);
 
+  message_list_delete_header_field (mlp, "POT-Creation-Date:");
+  
   /* Create a temporary directory where we can put the C# file.
      A simple temporary file would also be possible but would require us to
      define our own variant of mkstemp(): On one hand the functions mktemp(),
diff --git a/gettext-tools/src/write-desktop.c b/gettext-tools/src/write-desktop.c
index 898ac30..e568d47 100644
--- a/gettext-tools/src/write-desktop.c
+++ b/gettext-tools/src/write-desktop.c
@@ -29,6 +29,7 @@
 #include <stdio.h>
 #include "error.h"
 #include "msgl-iconv.h"
+#include "msgl-header.h"
 #include "po-charset.h"
 #include "read-catalog.h"
 #include "read-po.h"
@@ -203,6 +204,8 @@ msgdomain_write_desktop (message_list_ty *mlp,
   /* Convert the messages to Unicode.  */
   iconv_message_list (mlp, canon_encoding, po_charset_utf8, NULL);
 
+  message_list_delete_header_field (mlp, "POT-Creation-Date:");
+  
   /* Create a single-element operands and run the bulk operation on it.  */
   operand.language = (char *) locale_name;
   operand.mlp = mlp;
diff --git a/gettext-tools/src/write-java.c b/gettext-tools/src/write-java.c
index eef8c79..039ed94 100644
--- a/gettext-tools/src/write-java.c
+++ b/gettext-tools/src/write-java.c
@@ -61,6 +61,7 @@
 #include "message.h"
 #include "msgfmt.h"
 #include "msgl-iconv.h"
+#include "msgl-header.h"
 #include "plural-exp.h"
 #include "po-charset.h"
 #include "xalloc.h"
@@ -1066,6 +1067,8 @@ msgdomain_write_java (message_list_ty *mlp, const char *canon_encoding,
   /* Convert the messages to Unicode.  */
   iconv_message_list (mlp, canon_encoding, po_charset_utf8, NULL);
 
+  message_list_delete_header_field (mlp, "POT-Creation-Date:");
+
   if (output_source)
     {
       tmpdir = NULL;
diff --git a/gettext-tools/src/write-mo.c b/gettext-tools/src/write-mo.c
index b4a7894..b99dece 100644
--- a/gettext-tools/src/write-mo.c
+++ b/gettext-tools/src/write-mo.c
@@ -48,6 +48,9 @@
 #include "binary-io.h"
 #include "fwriteerror.h"
 #include "gettext.h"
+#include "read-catalog.h"
+#include "read-stringtable.h"
+#include "msgl-header.h"
 
 #define _(str) gettext (str)
 
@@ -804,6 +807,7 @@ msgdomain_write_mo (message_list_ty *mlp,
 
       if (output_file != NULL)
         {
+          message_list_delete_header_field (mlp, "POT-Creation-Date:");
           write_table (output_file, mlp);
 
           /* Make sure nothing went wrong.  */
diff --git a/gettext-tools/src/write-qt.c b/gettext-tools/src/write-qt.c
index 978bf09..4a47d24 100644
--- a/gettext-tools/src/write-qt.c
+++ b/gettext-tools/src/write-qt.c
@@ -35,6 +35,7 @@
 #include "message.h"
 #include "po-charset.h"
 #include "msgl-iconv.h"
+#include "msgl-header.h"
 #include "hash-string.h"
 #include "unistr.h"
 #include "xalloc.h"
@@ -742,6 +743,7 @@ strings, not in the untranslated strings\n")));
 
       if (output_file != NULL)
         {
+          message_list_delete_header_field (mlp, "POT-Creation-Date:");
           write_qm (output_file, mlp);
 
           /* Make sure nothing went wrong.  */
diff --git a/gettext-tools/src/write-resources.c b/gettext-tools/src/write-resources.c
index e5103c4..ec74ead 100644
--- a/gettext-tools/src/write-resources.c
+++ b/gettext-tools/src/write-resources.c
@@ -38,6 +38,7 @@
 #include "message.h"
 #include "msgfmt.h"
 #include "msgl-iconv.h"
+#include "msgl-header.h"
 #include "po-charset.h"
 #include "xalloc.h"
 #include "concat-filename.h"
@@ -114,6 +115,8 @@ msgdomain_write_csharp_resources (message_list_ty *mlp,
                                   const char *domain_name,
                                   const char *file_name)
 {
+  message_list_delete_header_field (mlp, "POT-Creation-Date:");
+  
   /* If no entry for this domain don't even create the file.  */
   if (mlp->nitems != 0)
     {
diff --git a/gettext-tools/src/write-tcl.c b/gettext-tools/src/write-tcl.c
index 0dbe3aa..04b62d9 100644
--- a/gettext-tools/src/write-tcl.c
+++ b/gettext-tools/src/write-tcl.c
@@ -34,6 +34,7 @@
 #include "xerror.h"
 #include "message.h"
 #include "msgl-iconv.h"
+#include "msgl-header.h"
 #include "po-charset.h"
 #include "xalloc.h"
 #include "xmalloca.h"
@@ -216,6 +217,7 @@ but the Tcl message catalog format doesn't support plural handling\n")));
         return 1;
       }
 
+    message_list_delete_header_field (mlp, "POT-Creation-Date:");
     write_msg (output_file, mlp, frobbed_locale_name);
 
     /* Make sure nothing went wrong.  */
diff --git a/gettext-tools/src/write-xml.c b/gettext-tools/src/write-xml.c
index 79b7b5d..f6cd6c0 100644
--- a/gettext-tools/src/write-xml.c
+++ b/gettext-tools/src/write-xml.c
@@ -29,6 +29,7 @@
 #include <stdio.h>
 #include "error.h"
 #include "msgl-iconv.h"
+#include "msgl-header.h"
 #include "po-charset.h"
 #include "read-catalog.h"
 #include "read-po.h"
@@ -94,6 +95,8 @@ msgdomain_write_xml (message_list_ty *mlp,
   /* Convert the messages to Unicode.  */
   iconv_message_list (mlp, canon_encoding, po_charset_utf8, NULL);
 
+  message_list_delete_header_field (mlp, "POT-Creation-Date:");
+  
   /* Create a single-element operands and run the bulk operation on it.  */
   operand.language = (char *) locale_name;
   operand.mlp = mlp;
diff --git a/gettext-tools/tests/Makefile.am b/gettext-tools/tests/Makefile.am
index 0dfb4d8..38b47b9 100644
--- a/gettext-tools/tests/Makefile.am
+++ b/gettext-tools/tests/Makefile.am
@@ -46,7 +46,7 @@ TESTS = gettext-1 gettext-2 gettext-3 gettext-4 gettext-5 gettext-6 gettext-7 \
 	msgfilter-sr-latin-1 msgfilter-quote-1 \
 	msgfmt-1 msgfmt-2 msgfmt-3 msgfmt-4 msgfmt-5 msgfmt-6 msgfmt-7 \
 	msgfmt-8 msgfmt-9 msgfmt-10 msgfmt-11 msgfmt-12 msgfmt-13 msgfmt-14 \
-	msgfmt-15 msgfmt-16 msgfmt-17 msgfmt-18 \
+	msgfmt-15 msgfmt-16 msgfmt-17 msgfmt-18 msgfmt-19 \
 	msgfmt-properties-1 \
 	msgfmt-qt-1 msgfmt-qt-2 \
 	msgfmt-desktop-1 msgfmt-desktop-2 \
diff --git a/gettext-tools/tests/msgfmt-19 b/gettext-tools/tests/msgfmt-19
new file mode 100755
index 0000000..88574c8
--- /dev/null
+++ b/gettext-tools/tests/msgfmt-19
@@ -0,0 +1,66 @@
+#! /bin/sh
+. "${srcdir=.}/init.sh"; path_prepend_ . ../src
+
+# Test accelerators.
+
+cat <<\EOF > mf-19-1.po
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU bison\n"
+"POT-Creation-Date: 2017-04-05 19:47+0200\n"
+"PO-Revision-Date: 2017-06-07 09:07+0000\n"
+"Last-Translator: ABC DEF <abc@gnu.uucp>\n"
+"Language-Team: test <test@li.org>\n"
+"Language: test\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "pen &File"
+msgstr "pen File"
+
+msgid "how _Help"
+msgstr "how Help"
+EOF
+
+
+cat <<\EOF > mf-19-2.po
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU bison\n"
+"POT-Creation-Date: 2016-03-04 18:46+0100\n"
+"PO-Revision-Date: 2017-06-07 09:07+0000\n"
+"Last-Translator: ABC DEF <abc@gnu.uucp>\n"
+"Language-Team: test <test@li.org>\n"
+"Language: test\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "pen &File"
+msgstr "pen File"
+
+msgid "how _Help"
+msgstr "how Help"
+EOF
+
+
+: ${MSGFMT=msgfmt}
+${MSGFMT} -o mf-19-1.mo mf-19-1.po 2>/dev/null
+test $? = 0 || { Exit 1; }
+
+: ${MSGFMT=msgfmt}
+${MSGFMT} -o mf-19-2.mo mf-19-2.po 2>/dev/null
+test $? = 0 || { Exit 1; }
+
+: ${DIFF=diff}
+${DIFF} mf-19-1.mo mf-19-2.mo
+test $? = 0 || { Exit 1; }
