Index: trunk/psModules/src/camera/pmFPAConstruct.c
===================================================================
--- trunk/psModules/src/camera/pmFPAConstruct.c	(revision 11792)
+++ trunk/psModules/src/camera/pmFPAConstruct.c	(revision 11801)
@@ -469,4 +469,5 @@
 // It returns a view corresponding to the PHU
 static pmFPAview *addSource(pmFPA *fpa,       // The FPA
+                            const char *fpaname, // The desired FPA name
                             const pmFPAview *phuView, // The view corresponding to the PHU, or NULL
                             const psMetadata *header, // The PHU header, or NULL
@@ -479,5 +480,20 @@
     assert(format);
 
-    bool mdok = true;                   // Status from metadata lookups
+    bool mdok;                          // Status of MD lookup
+
+    // If FPA.NAME is already defined, new name must match it; otherwise, warn the user that something
+    // potentially bad is happening.
+    if (fpaname && install) {
+        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 "
+                     "fpa (%s).\n", fpaname, currentName);
+        }
+        psMetadataAddStr(fpa->concepts, PS_LIST_HEAD, "FPA.NAME", PS_META_REPLACE, "Name of FPA", fpaname);
+    } else if (!psMetadataLookup(fpa->concepts, "FPA.NAME")) {
+        // Make sure there is an FPA.NAME
+        psMetadataAddStr(fpa->concepts, PS_LIST_HEAD, "FPA.NAME", 0, "Name of FPA", "UNKNOWN");
+    }
+
     psMetadata *fileInfo = psMetadataLookupMetadata(&mdok, format, "FILE"); // The file information
     if (!mdok || !fileInfo) {
@@ -759,5 +775,6 @@
 
 
-bool pmFPAAddSourceFromView(pmFPA *fpa, const pmFPAview *phuView, const psMetadata *format)
+bool pmFPAAddSourceFromView(pmFPA *fpa, const char *fpaname, const pmFPAview *phuView,
+                            const psMetadata *format)
 {
     PS_ASSERT_PTR_NON_NULL(fpa, false);
@@ -765,5 +782,5 @@
     PS_ASSERT_PTR_NON_NULL(format, false);
 
-    pmFPAview *view = addSource(fpa, phuView, NULL, format, true);
+    pmFPAview *view = addSource(fpa, fpaname, phuView, NULL, format, true);
     bool status = (view != NULL);
     psFree(view);
@@ -785,21 +802,14 @@
 
     // Check the name of the FPA
-    psString newFPAname = phuNameFromHeader("FPA.NAME", fileInfo, phu); // New name for the FPA
-    if (!newFPAname) {
-        psError(PS_ERR_IO, true, "Unable to determine FPA.NAME : check for FPA.NAME in FILE in FORMAT");
-        return NULL;
-    }
-
-    // If FPAname already defined, new name must match it; otherwise, warn the user that something potentially
-    // bad is happening.
-    const char *currentFPAname = psMetadataLookupStr(&mdok, fpa->concepts, "FPA.NAME"); // Current name
-    if (mdok && currentFPAname && strlen(currentFPAname) > 0 && strcmp(currentFPAname, newFPAname) != 0) {
-        psLogMsg(__func__, PS_LOG_WARN, "FPA.NAME for new source (%s) doesn't match FPA.NAME for current "
-                 "fpa (%s).\n", newFPAname, currentFPAname);
-    }
-    psMetadataAddStr(fpa->concepts, PS_LIST_HEAD, "FPA.NAME", PS_META_REPLACE, "Name of FPA", newFPAname);
-    psFree(newFPAname);                 // Drop reference
-
-    return addSource(fpa, NULL, phu, format, true);
+    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;
+    }
+
+    pmFPAview *view = addSource(fpa, fpaname, NULL, phu, format, true); // View of PHU, to return
+    psFree(fpaname);
+
+    return view;
 }
 
@@ -811,5 +821,5 @@
     PS_ASSERT_PTR_NON_NULL(format, NULL);
 
-    return addSource(fpa, NULL, phu, format, false);
+    return addSource(fpa, NULL, NULL, phu, format, false);
 }
 
