Index: trunk/psModules/src/config/pmConfigCamera.c
===================================================================
--- trunk/psModules/src/config/pmConfigCamera.c	(revision 13857)
+++ trunk/psModules/src/config/pmConfigCamera.c	(revision 14461)
@@ -80,4 +80,23 @@
     psFree(new);
 
+    return true;
+}
+
+// Don't update these skycell concepts; last one MUST be 0 (i.e., NULL).
+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 };
+const static char *skycellConceptsChip[] = { "CHIP.XPARITY", "CHIP.YPARITY", "CHIP.XSIZE", "CHIP.YSIZE", 0 };
+
+// Do we update a particular concept?
+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++) {
+        if (strcmp(name, concepts[i]) == 0) {
+            return false;
+        }
+    }
     return true;
 }
@@ -189,5 +208,7 @@
         iter = psListIteratorAlloc(concepts, PS_LIST_HEAD, false);
         while ((name = psListGetAndIncrement(iter))) {
-            psMetadataAddStr(translation, PS_LIST_TAIL, name, 0, NULL, name);
+            if (updateConcept(name, skycellConceptsChip)) {
+                psMetadataAddStr(translation, PS_LIST_TAIL, name, 0, NULL, name);
+            }
         }
         psFree(iter);
@@ -197,8 +218,5 @@
         iter = psListIteratorAlloc(concepts, PS_LIST_HEAD, false);
         while ((name = psListGetAndIncrement(iter))) {
-            // We've done CELL.BIASSEC and CELL.TRIMSEC under CELLS, above.
-            // CELL.READDIR is set to 1 (rows) in the defaults
-            if (strcmp(name, "CELL.BIASSEC") != 0 && strcmp(name, "CELL.TRIMSEC") != 0 &&
-                strcmp(name, "CELL.READDIR") != 0) {
+            if (updateConcept(name, skycellConceptsCell)) {
                 psMetadataAddStr(translation, PS_LIST_TAIL, name, 0, NULL, name);
             }
@@ -206,4 +224,11 @@
         psFree(iter);
         psFree(concepts);
+
+        psMetadataAddStr(translation, PS_LIST_TAIL, "CELL.XSIZE", 0, NULL, "NAXIS1");
+        psMetadataAddStr(translation, PS_LIST_TAIL, "CELL.YSIZE", 0, NULL, "NAXIS2");
+        psMetadataAddStr(translation, PS_LIST_TAIL, "CELL.XWINDOW", 0, NULL, "NAXIS1");
+        psMetadataAddStr(translation, PS_LIST_TAIL, "CELL.YWINDOW", 0, NULL, "NAXIS2");
+        psMetadataAddStr(translation, PS_LIST_TAIL, "CHIP.XSIZE", 0, NULL, "NAXIS1");
+        psMetadataAddStr(translation, PS_LIST_TAIL, "CHIP.YSIZE", 0, NULL, "NAXIS2");
 
         psMetadataAddMetadata(format, PS_LIST_TAIL, "TRANSLATION", 0, "How to translate the FITS headers",
@@ -214,7 +239,18 @@
     {
         psMetadata *defaults = psMetadataAlloc(); // Default values for concepts
+
+        psMetadataAddS32(defaults, PS_LIST_TAIL, "CELL.XPARITY", 0, NULL, 1);
+        psMetadataAddS32(defaults, PS_LIST_TAIL, "CELL.YPARITY", 0, NULL, 1);
+        psMetadataAddS32(defaults, PS_LIST_TAIL, "CHIP.XPARITY", 0, NULL, 1);
+        psMetadataAddS32(defaults, PS_LIST_TAIL, "CHIP.YPARITY", 0, NULL, 1);
+        psMetadataAddS32(defaults, PS_LIST_TAIL, "CELL.Y0", 0, NULL, 0);
+        psMetadataAddS32(defaults, PS_LIST_TAIL, "CELL.X0", 0, NULL, 0);
+        psMetadataAddS32(defaults, PS_LIST_TAIL, "CHIP.Y0", 0, NULL, 0);
+        psMetadataAddS32(defaults, PS_LIST_TAIL, "CHIP.X0", 0, NULL, 0);
         psMetadataAddS32(defaults, PS_LIST_TAIL, "CELL.READDIR", 0, "Read direction (rows)", 1);
+
         psMetadataAddMetadata(format, PS_LIST_TAIL, "DEFAULTS", 0, "Default values for concepts", defaults);
         psFree(defaults);
+
     }
 
