Index: /trunk/psModules/src/camera/pmFPAMosaic.c
===================================================================
--- /trunk/psModules/src/camera/pmFPAMosaic.c	(revision 13298)
+++ /trunk/psModules/src/camera/pmFPAMosaic.c	(revision 13299)
@@ -1105,4 +1105,17 @@
 
     // If the cells contain the headers, we need to apply the WCS terms from (one of?) the cells
+    int xParityTarget = psMetadataLookupS32(NULL, target->concepts, "CHIP.XPARITY") *
+        psMetadataLookupS32(NULL, targetCell->concepts, "CELL.XPARITY"); // Target parity in x
+    if (xParityTarget != -1 && xParityTarget != 1) {
+        psError(PS_ERR_BAD_PARAMETER_VALUE, true, "CHIP.XPARITY or CELL.XPARITY is not set for target.");
+        return false;
+    }
+    int yParityTarget = psMetadataLookupS32(NULL, target->concepts, "CHIP.YPARITY") *
+        psMetadataLookupS32(NULL, targetCell->concepts, "CELL.YPARITY"); // Target parity in y
+    if (yParityTarget != -1 && yParityTarget != 1) {
+        psError(PS_ERR_BAD_PARAMETER_VALUE, true, "CHIP.YPARITY or CELL.YPARITY is not set for target.");
+        return false;
+    }
+
     for (int i = 0; i < source->cells->n; i++) {
         pmCell *cell = source->cells->data[i];
@@ -1122,15 +1135,11 @@
             return false;
         }
-        int xParityCell = psMetadataLookupS32(NULL, cell->concepts, "CELL.XPARITY"); // Cell parity in x
-        if (xParityCell != -1 && xParityCell != 1) {
-            psError(PS_ERR_BAD_PARAMETER_VALUE, true, "CELL.XPARITY is not set.");
-            return false;
-        }
-        int xParityChip = psMetadataLookupS32(NULL, chip->concepts, "CHIP.XPARITY"); // Chip parity in x
-        if (xParityChip != -1 && xParityChip != 1) {
-            psError(PS_ERR_BAD_PARAMETER_VALUE, true, "CHIP.XPARITY is not set.");
-            return false;
-        }
-        bool xFlip = (xParityCell == xParityChip ? false : true); // Flip the x sense of the WCS?
+        int xParitySource = psMetadataLookupS32(NULL, cell->concepts, "CELL.XPARITY") *
+            psMetadataLookupS32(NULL, source->concepts, "CHIP.XPARITY"); // Source parity in x
+        if (xParitySource != -1 && xParitySource != 1) {
+            psError(PS_ERR_BAD_PARAMETER_VALUE, true, "CHIP.XPARITY or CELL.XPARITY is not set for source.");
+            return false;
+        }
+        bool xFlip = (xParitySource == xParityTarget ? false : true); // Flip the x sense of the WCS?
         int x0Cell = psMetadataLookupS32(NULL, cell->concepts, "CELL.X0"); // Cell offset in x
 
@@ -1150,15 +1159,11 @@
             return false;
         }
-        int yParityCell = psMetadataLookupS32(NULL, cell->concepts, "CELL.YPARITY"); // Cell parity in y
-        if (yParityCell != -1 && yParityCell != 1) {
-            psError(PS_ERR_BAD_PARAMETER_VALUE, true, "CELL.YPARITY is not set.");
-            return false;
-        }
-        int yParityChip = psMetadataLookupS32(NULL, chip->concepts, "CHIP.YPARITY"); // Chip parity in y
-        if (yParityChip != -1 && yParityChip != 1) {
-            psError(PS_ERR_BAD_PARAMETER_VALUE, true, "CHIP.YPARITY is not set.");
-            return false;
-        }
-        bool yFlip = (yParityCell == yParityChip ? false : true); // Flip the y sense of the WCS?
+        int yParitySource = psMetadataLookupS32(NULL, cell->concepts, "CELL.YPARITY") *
+            psMetadataLookupS32(NULL, cell->parent->concepts, "CHIP.YPARITY"); // Source parity in y
+        if (yParitySource != -1 && yParitySource != 1) {
+            psError(PS_ERR_BAD_PARAMETER_VALUE, true, "CHIP.YPARITY or CELL.YPARITY is not set for source.");
+            return false;
+        }
+        bool yFlip = (yParitySource == yParityTarget ? false : true); // Flip the y sense of the WCS?
         int y0Cell = psMetadataLookupS32(NULL, cell->concepts, "CELL.Y0"); // Cell offset in y
 
