Index: trunk/psModules/src/camera/pmFPAWrite.c
===================================================================
--- trunk/psModules/src/camera/pmFPAWrite.c	(revision 19385)
+++ trunk/psModules/src/camera/pmFPAWrite.c	(revision 21279)
@@ -107,5 +107,4 @@
     if (writeBlank || writeImage) {
 
-        pmFPAUpdateNames(cell->parent->parent, cell->parent, cell);
         pmConceptSource source = PM_CONCEPT_SOURCE_HEADER | PM_CONCEPT_SOURCE_CELLS |
                                  PM_CONCEPT_SOURCE_DEFAULTS | PM_CONCEPT_SOURCE_DATABASE;
@@ -157,5 +156,4 @@
 
         if (writeBlank || writeImage) {
-            pmFPAUpdateNames(chip->parent, chip, NULL);
             pmConceptSource source = PM_CONCEPT_SOURCE_HEADER | PM_CONCEPT_SOURCE_CELLS |
                                      PM_CONCEPT_SOURCE_DEFAULTS | PM_CONCEPT_SOURCE_DATABASE;
@@ -221,5 +219,4 @@
 
         if (writeBlank || writeImage) {
-            pmFPAUpdateNames(fpa, NULL, NULL);
             pmConceptSource source = PM_CONCEPT_SOURCE_HEADER | PM_CONCEPT_SOURCE_CELLS |
                                      PM_CONCEPT_SOURCE_DEFAULTS | PM_CONCEPT_SOURCE_DATABASE;
@@ -255,16 +252,34 @@
 
 // Update the FPA.OBS, CHIP.NAME and CELL.NAME in the FITS header, if required
-bool pmFPAUpdateNames(pmFPA *fpa, pmChip *chip, pmCell *cell)
-{
-    pmHDU *hdu = pmHDUGetHighest(fpa, chip, cell); // Highest HDU, i.e., the PHU
-    if (!hdu) {
+bool pmFPAUpdateNames(pmFPA *fpa, pmChip *chip, pmCell *cell, psS64 imageId, psS64 sourceId)
+{
+    pmHDU *hduHigh = pmHDUGetHighest(fpa, chip, cell); // Highest HDU, i.e., the PHU
+    if (!hduHigh) {
+        psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to find PHU.\n");
+        return false;
+    }
+    if (!hduHigh->header) {
+        hduHigh->header = psMetadataAlloc();
+    }
+    if (!pmHDUWriteIdentifiers(hduHigh, imageId, sourceId)) {
+        psError(PS_ERR_UNKNOWN, false, "Unable to write identifiers to header.");
+        return false;
+    }
+
+    pmHDU *hduLow = pmHDUGetLowest(fpa, chip, cell); // Lowest HDU, i.e., the extension
+    if (!hduLow) {
         psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to find HDU.\n");
         return false;
     }
-    if (!hdu->header) {
-        hdu->header = psMetadataAlloc();
-    }
+    if (!hduLow->header) {
+        hduLow->header = psMetadataAlloc();
+    }
+    if (hduLow != hduHigh && !pmHDUWriteIdentifiers(hduLow, imageId, sourceId)) {
+        psError(PS_ERR_UNKNOWN, false, "Unable to write identifiers to header.");
+        return false;
+    }
+
     bool mdok;                          // Status of MD lookup
-    psMetadata *fileData = psMetadataLookupMetadata(&mdok, hdu->format, "FILE"); // File information
+    psMetadata *fileData = psMetadataLookupMetadata(&mdok, hduHigh->format, "FILE"); // File information
     if (!mdok || !fileData) {
         psError(PS_ERR_UNKNOWN, true, "Unable to find FILE information in camera format.\n");
@@ -275,5 +290,5 @@
         if (mdok && fpaObsHdr && strlen(fpaObsHdr) > 0) {
             const char *fpaObs = psMetadataLookupStr(NULL, fpa->concepts, "FPA.OBS");
-            psMetadataAddStr(hdu->header, PS_LIST_TAIL, fpaObsHdr, PS_META_REPLACE,
+            psMetadataAddStr(hduHigh->header, PS_LIST_TAIL, fpaObsHdr, PS_META_REPLACE,
                              "Observation identifier", fpaObs);
         }
@@ -298,5 +313,6 @@
         }
 
-        psMetadataAddStr(hdu->header, PS_LIST_TAIL, contentKey, PS_META_REPLACE, "Content of file", content);
+        psMetadataAddStr(hduHigh->header, PS_LIST_TAIL, contentKey, PS_META_REPLACE,
+                         "Content of file", content);
         psFree(content);                // Drop reference
     }
