Index: trunk/psModules/src/camera/pmFPACopy.c
===================================================================
--- trunk/psModules/src/camera/pmFPACopy.c	(revision 8821)
+++ trunk/psModules/src/camera/pmFPACopy.c	(revision 8823)
@@ -74,4 +74,10 @@
     psArray *sourceReadouts = source->readouts; // The source readouts
     int numReadouts = sourceReadouts->n; // Number of readouts copied
+
+    // Copy the value for a concept
+    #define COPY_CONCEPT(TARGET, SOURCE, NAME, TYPE) \
+    psMetadataItem *targetItem = psMetadataLookup(TARGET, NAME); \
+    psMetadataItem *sourceItem = psMetadataLookup(SOURCE, NAME); \
+    targetItem->data.TYPE = sourceItem->data.TYPE;
 
     // Need to check/change CELL.XPARITY and CELL.YPARITY
@@ -87,4 +93,8 @@
                 xFlip = true;
             }
+        } else
+        {
+            // Use the source parity
+            COPY_CONCEPT(target->concepts, source->concepts, "CELL.XPARITY", S32);
         }
         int yParityTarget = psMetadataLookupS32(&mdok, target->concepts, "CELL.YPARITY"); // Target y parity
@@ -95,4 +105,8 @@
                 yFlip = true;
             }
+        } else
+        {
+            // Use the source parity
+            COPY_CONCEPT(target->concepts, source->concepts, "CELL.YPARITY", S32);
         }
         psTrace("psModules.camera", 3, "xFlip: %d; yFlip: %d\n", xFlip, yFlip);
Index: trunk/psModules/src/camera/pmFPAMosaic.c
===================================================================
--- trunk/psModules/src/camera/pmFPAMosaic.c	(revision 8821)
+++ trunk/psModules/src/camera/pmFPAMosaic.c	(revision 8823)
@@ -34,4 +34,8 @@
 }
 
+// Update a concept to the assumed value
+#define FIX_CONCEPT(SOURCE, NAME, TYPE, VALUE) \
+psMetadataItem *item = psMetadataLookup(SOURCE, NAME); \
+item->data.TYPE = VALUE;
 
 // Get the bounds for an chip's pixels on the HDU
@@ -726,12 +730,15 @@
     if (!mdok) {
         psLogMsg(__func__, PS_LOG_WARN, "CELL.X0 is not set for the target cell; assuming 0.\n");
+        FIX_CONCEPT(targetCell->concepts, "CELL.X0", S32, 0);
     }
     int y0Target = psMetadataLookupS32(&mdok, targetCell->concepts, "CELL.Y0");
     if (!mdok) {
         psLogMsg(__func__, PS_LOG_WARN, "CELL.Y0 is not set for the target cell; assuming 0.\n");
+        FIX_CONCEPT(targetCell->concepts, "CELL.Y0", S32, 0);
     }
     int xParityTarget = psMetadataLookupS32(&mdok, targetCell->concepts, "CELL.XPARITY");
     if (!mdok || (xParityTarget != -1 && xParityTarget != 1)) {
         psLogMsg(__func__, PS_LOG_WARN, "CELL.XPARITY is not set for the target cell; assuming 1.\n");
+        FIX_CONCEPT(targetCell->concepts, "CELL.XPARITY", S32, 1);
         xParityTarget = 1;
     }
@@ -739,4 +746,5 @@
     if (!mdok || (yParityTarget != -1 && yParityTarget != 1)) {
         psLogMsg(__func__, PS_LOG_WARN, "CELL.YPARITY is not set for the target cell; assuming 1.\n");
+        FIX_CONCEPT(targetCell->concepts, "CELL.YPARITY", S32, 1);
         yParityTarget = 1;
     }
@@ -763,4 +771,5 @@
     if (!mdok || xBinTarget == 0) {
         psLogMsg(__func__, PS_LOG_WARN, "CELL.XBIN is not set for the target cell; assuming %d.\n",*xBinChip);
+        FIX_CONCEPT(targetCell->concepts, "CELL.XBIN", S32, *xBinChip);
     } else {
         *xBinChip = xBinTarget;
@@ -769,4 +778,5 @@
     if (!mdok || yBinTarget == 0) {
         psLogMsg(__func__, PS_LOG_WARN, "CELL.YBIN is not set for the target cell; assuming %d.\n",*yBinChip);
+        FIX_CONCEPT(targetCell->concepts, "CELL.YBIN", S32, *yBinChip);
     } else {
         *yBinChip = yBinTarget;
@@ -828,20 +838,25 @@
     if (!mdok) {
         psLogMsg(__func__, PS_LOG_WARN, "CHIP.X0 is not set for the target chip; assuming 0.\n");
+        FIX_CONCEPT(targetChip->concepts, "CHIP.X0", S32, 0);
     }
     int y0Target = psMetadataLookupS32(&mdok, targetChip->concepts, "CHIP.Y0");
     if (!mdok) {
         psLogMsg(__func__, PS_LOG_WARN, "CHIP.Y0 is not set for the target chip; assuming 0.\n");
+        FIX_CONCEPT(targetChip->concepts, "CHIP.Y0", S32, 0);
     }
     x0Target += psMetadataLookupS32(&mdok, targetCell->concepts, "CELL.X0");
     if (!mdok) {
         psLogMsg(__func__, PS_LOG_WARN, "CELL.X0 is not set for the target cell; assuming 0.\n");
+        FIX_CONCEPT(targetCell->concepts, "CELL.X0", S32, 0);
     }
     y0Target += psMetadataLookupS32(&mdok, targetCell->concepts, "CELL.Y0");
     if (!mdok) {
         psLogMsg(__func__, PS_LOG_WARN, "CELL.Y0 is not set for the target cell; assuming 0.\n");
+        FIX_CONCEPT(targetCell->concepts, "CELL.Y0", S32, 0);
     }
     int xParityChipTarget = psMetadataLookupS32(&mdok, targetChip->concepts, "CHIP.XPARITY");
     if (!mdok || (xParityChipTarget != -1 && xParityChipTarget != 1)) {
         psLogMsg(__func__, PS_LOG_WARN, "CHIP.XPARITY is not set for the target chip; assuming 1.\n");
+        FIX_CONCEPT(targetChip->concepts, "CHIP.XPARITY", S32, 1);
         xParityChipTarget = 1;
     }
@@ -849,4 +864,5 @@
     if (!mdok || (yParityChipTarget != -1 && yParityChipTarget != 1)) {
         psLogMsg(__func__, PS_LOG_WARN, "CHIP.YPARITY is not set for the target chip; assuming 1.\n");
+        FIX_CONCEPT(targetChip->concepts, "CHIP.YPARITY", S32, 1);
         yParityChipTarget = 1;
     }
@@ -854,4 +870,5 @@
     if (!mdok || (xParityCellTarget != -1 && xParityCellTarget != 1)) {
         psLogMsg(__func__, PS_LOG_WARN, "CELL.XPARITY is not set for the target cell; assuming 1.\n");
+        FIX_CONCEPT(targetCell->concepts, "CELL.XPARITY", S32, 1);
         xParityCellTarget = 1;
     }
@@ -859,4 +876,5 @@
     if (!mdok || (yParityCellTarget != -1 && yParityCellTarget != 1)) {
         psLogMsg(__func__, PS_LOG_WARN, "CELL.YPARITY is not set for the target cell; assuming 1.\n");
+        FIX_CONCEPT(targetCell->concepts, "CELL.YPARITY", S32, 1);
         yParityCellTarget = 1;
     }
