Index: trunk/psModules/src/config/pmConfigCamera.c
===================================================================
--- trunk/psModules/src/config/pmConfigCamera.c	(revision 14461)
+++ trunk/psModules/src/config/pmConfigCamera.c	(revision 14475)
@@ -25,6 +25,6 @@
 // Generate the skycell version of a named camera configuration
 bool pmConfigCameraSkycellVersion(psMetadata *site, // The site configuration
-                           const char *name // Name of the un-mosaicked camera
-                           )
+                                  const char *name // Name of the un-mosaicked camera
+                                  )
 {
     PS_ASSERT_METADATA_NON_NULL(site, false);
@@ -37,5 +37,5 @@
         return false;
     }
-    if (!pmConfigGenerateSkycellVersion(cameras, cameras, name)) {
+    if (!pmConfigGenerateSkycellVersion(cameras, cameras, name, site)) {
         psError(PS_ERR_UNKNOWN, true, "Failed to build skycell camera description for %s\n", name);
         return false;
@@ -61,5 +61,5 @@
     while ((camerasItem = psMetadataGetAndIncrement(camerasIter))) {
         assert(camerasItem->type == PS_DATA_METADATA); // Only metadata are allowed here!
-        if (!pmConfigGenerateSkycellVersion(cameras, new, camerasItem->name)) {
+        if (!pmConfigGenerateSkycellVersion(cameras, new, camerasItem->name, site)) {
             psError(PS_ERR_UNKNOWN, true, "Failed to build skycell camera description for %s\n",
                     camerasItem->name);
@@ -86,11 +86,13 @@
 const static char *skycellConceptsCell[] = { "CELL.BIASSEC", "CELL.TRIMSEC", "CELL.READDIR", "CELL.XPARITY",
                                              "CELL.YPARITY", "CELL.XWINDOW", "CELL.YWINDOW", "CELL.X0",
-                                             "CELL.Y0", "CELL.XSIZE", "CELL.YSIZE", 0 };
+                                             "CELL.Y0", "CELL.XSIZE", "CELL.YSIZE", "CELL.EXPOSURE",
+                                             "CELL.TIME", 0 };
 const static char *skycellConceptsChip[] = { "CHIP.XPARITY", "CHIP.YPARITY", "CHIP.XSIZE", "CHIP.YSIZE", 0 };
-
-// Do we update a particular concept?
+const static char *skycellConceptsFPA[] = { "FPA.EXPOSURE", "FPA.TIME", 0 };
+
+// Do we update a particular concept for a skycell?
 static bool updateConcept(const char *name, // Name of concept
                           const char **concepts // List of concepts NOT to update
-    )
+                          )
 {
     for (int i = 0; concepts[i]; i++) {
@@ -102,8 +104,30 @@
 }
 
+// What do we call the skycell concept in the FITS header?
+static const char* skycellConceptName(const char *name, // Name of concept
+                                      const psMetadata *site // Site configuration
+                                      )
+{
+    if (!site) {
+        return name;
+    }
+    bool mdok;                          // Status of MD lookup
+    psMetadata *skycells = psMetadataLookupMetadata(&mdok, site, "SKYCELLS"); // Skycell concept headers
+    if (!skycells) {
+        return name;
+    }
+    const char *keyword = psMetadataLookupStr(&mdok, skycells, name); // Keyword to use for this concept
+    if (!mdok || !keyword || strlen(keyword) == 0) {
+        return name;
+    }
+    return keyword;
+}
+
+
 // Generate a skycell version of a camera configuration
 bool pmConfigGenerateSkycellVersion(psMetadata *oldCameras, // Old list of camera configurations
                                     psMetadata *newCameras, // New list of camera configurations
-                                    const char *name // Name of original camera configuration
+                                    const char *name, // Name of original camera configuration
+                                    const psMetadata *site // Site configuration
                                     )
 {
@@ -201,4 +225,7 @@
         while ((name = psListGetAndIncrement(iter))) {
             psMetadataAddStr(translation, PS_LIST_TAIL, name, 0, NULL, name);
+            if (updateConcept(name, skycellConceptsFPA)) {
+                psMetadataAddStr(translation, PS_LIST_TAIL, name, 0, NULL, skycellConceptName(name, site));
+            }
         }
         psFree(iter);
@@ -209,5 +236,5 @@
         while ((name = psListGetAndIncrement(iter))) {
             if (updateConcept(name, skycellConceptsChip)) {
-                psMetadataAddStr(translation, PS_LIST_TAIL, name, 0, NULL, name);
+                psMetadataAddStr(translation, PS_LIST_TAIL, name, 0, NULL, skycellConceptName(name, site));
             }
         }
@@ -219,5 +246,5 @@
         while ((name = psListGetAndIncrement(iter))) {
             if (updateConcept(name, skycellConceptsCell)) {
-                psMetadataAddStr(translation, PS_LIST_TAIL, name, 0, NULL, name);
+                psMetadataAddStr(translation, PS_LIST_TAIL, name, 0, NULL, skycellConceptName(name, site));
             }
         }
