Index: trunk/psModules/src/config/pmConfigMask.c
===================================================================
--- trunk/psModules/src/config/pmConfigMask.c	(revision 18651)
+++ trunk/psModules/src/config/pmConfigMask.c	(revision 18713)
@@ -138,4 +138,24 @@
 }
 
+// Remove from the header keywords starting with the provided string
+static int maskRemoveHeader(psMetadata *header, // Header from which to remove keywords
+                            const char *start // Remove keywords that start with this string
+                            )
+{
+    psString regex = NULL;              // Regular expression for keywords
+    psStringAppend(&regex, "^%s[0-9][0-9]", start);
+    psMetadataIterator *iter = psMetadataIteratorAlloc(header, PS_LIST_HEAD, regex); // Iterator
+    psFree(regex);
+    psMetadataItem *item;               // Item from iteration
+    int num = 0;                        // Number of items removed
+    while ((item = psMetadataGetAndIncrement(iter))) {
+        psMetadataRemoveKey(header, item->name);
+        num++;
+    }
+    psFree(iter);
+    return num;
+}
+
+
 // write the named mask bits to the header
 bool pmConfigMaskWriteHeader(const pmConfig *config, psMetadata *header)
@@ -143,4 +163,10 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
     PS_ASSERT_METADATA_NON_NULL(header, false);
+
+    maskRemoveHeader(header, "MSKNAM");
+    maskRemoveHeader(header, "MSKVAL");
+    if (psMetadataLookup(header, "MSKNUM")) {
+        psMetadataRemoveKey(header, "MSKNUM");
+    }
 
     char namekey[80];
@@ -168,13 +194,13 @@
         }
 
-        snprintf (namekey,  64, "MSKNAM%02d", nMask);
-        snprintf (valuekey, 64, "MSKVAL%02d", nMask);
-
-        psMetadataAddStr (header, PS_LIST_TAIL, namekey, 0, "Bitmask bit name", item->name);
-        psMetadataAddU8 (header, PS_LIST_TAIL, valuekey, 0, "Bitmask bit value", item->data.U8);
-        nMask ++;
-    }
-
-    psMetadataAddS32 (header, PS_LIST_TAIL, "MSKNUM", 0, "Bitmask bit count", nMask);
+        snprintf(namekey,  64, "MSKNAM%02d", nMask);
+        snprintf(valuekey, 64, "MSKVAL%02d", nMask);
+
+        psMetadataAddStr(header, PS_LIST_TAIL, namekey, 0, "Bitmask bit name", item->name);
+        psMetadataAddU8(header, PS_LIST_TAIL, valuekey, 0, "Bitmask bit value", item->data.U8);
+        nMask++;
+    }
+
+    psMetadataAddS32(header, PS_LIST_TAIL, "MSKNUM", 0, "Bitmask bit count", nMask);
     return true;
 }
