Index: /trunk/psModules/src/camera/pmFPAConstruct.c
===================================================================
--- /trunk/psModules/src/camera/pmFPAConstruct.c	(revision 15217)
+++ /trunk/psModules/src/camera/pmFPAConstruct.c	(revision 15218)
@@ -1098,5 +1098,5 @@
         const char *currentName = psMetadataLookupStr(&mdok, fpa->concepts, "FPA.NAME"); // Current name
         if (mdok && currentName && strlen(currentName) > 0 && strcmp(currentName, fpaname) != 0) {
-            psLogMsg(__func__, PS_LOG_WARN, "FPA.NAME for new source (%s) doesn't match FPA.NAME for current "
+            psWarning("FPA.NAME for new source (%s) doesn't match FPA.NAME for current "
                      "fpa (%s).\n", fpaname, currentName);
         }
@@ -1356,6 +1356,5 @@
     psString fpaname = phuNameFromHeader("FPA.NAME", fileInfo, phu); // New name for the FPA
     if (!fpaname || strlen(fpaname) == 0) {
-        psError(PS_ERR_IO, true, "Unable to determine FPA.NAME: check for FPA.NAME in FILE in camera format");
-        return NULL;
+        psWarning("Unable to determine FPA.NAME: check for FPA.NAME in FILE in camera format");
     }
 
Index: /trunk/psModules/src/camera/pmFPAfileIO.c
===================================================================
--- /trunk/psModules/src/camera/pmFPAfileIO.c	(revision 15217)
+++ /trunk/psModules/src/camera/pmFPAfileIO.c	(revision 15218)
@@ -37,4 +37,5 @@
 #include "pmSourcePlots.h"
 #include "pmFPAConstruct.h"
+#include "pmConcepts.h"
 
 // attempt create, read, write, close, or free pmFPAfiles available in files files are
@@ -374,4 +375,37 @@
             psError(PS_ERR_UNKNOWN, false, "Unable to set compression options for %s (%s) (%d:%d:%d)\n",
                     file->filename, file->name, view->chip, view->cell, view->readout);
+            return false;
+        }
+    }
+
+
+    // Ensure headers and all are updated
+    // This is here so that the individual write functions (e.g., images, PSFs, sources, etc) don't have to
+    // take care of all this themselves (because they generally don't).
+    {
+        pmHDU *hdu = pmFPAviewThisHDU(view, file->fpa);
+        if (hdu) {
+            pmConfigConformHeader(hdu->header, file->format);
+        }
+
+        pmFPA *fpa = file->fpa;         // FPA of interest
+        pmChip *chip = pmFPAviewThisChip(view, file->fpa); // Chip of interest, or NULL
+        pmCell *cell = pmFPAviewThisCell(view, file->fpa); // Cell of interest, or NULL
+        pmFPAUpdateNames(fpa, chip, cell);
+
+        pmConceptSource sources = PM_CONCEPT_SOURCE_HEADER | PM_CONCEPT_SOURCE_CELLS |
+            PM_CONCEPT_SOURCE_DEFAULTS; // Concept sources to write
+        if (cell) {
+            if (!pmConceptsWriteCell(cell, sources, true, NULL)) {
+                psError(PS_ERR_IO, false, "Unable to write concepts for cell.\n");
+                return false;
+            }
+        } else if (chip) {
+            if (!pmConceptsWriteChip(chip, sources, true, true, NULL)) {
+                psError(PS_ERR_IO, false, "Unable to write concepts for chip.\n");
+                return false;
+            }
+        } else if (!pmConceptsWriteFPA(fpa, sources, true, NULL)) {
+            psError(PS_ERR_IO, false, "Unable to write concepts for FPA.\n");
             return false;
         }
Index: /trunk/psModules/src/config/pmConfig.c
===================================================================
--- /trunk/psModules/src/config/pmConfig.c	(revision 15217)
+++ /trunk/psModules/src/config/pmConfig.c	(revision 15218)
@@ -1166,14 +1166,4 @@
     psFree(rulesIter);
 
-    // XXX do we need to update the header based on elements of the FILE?
-    # if (0)
-    psMetadata *file = psMetadataLookupMetadata(&mdok, format, "FILE"); // How to identify this format
-    if (!mdok || !file) {
-        psError(PS_ERR_IO, true, "Unable to find FILE in camera format.\n");
-        return false;
-    }
-    psString fpaName = psMetadataLookupStr(&mdok, file, "FPA.NAME");
-    # endif
-
     return true;
 }
