Index: trunk/psModules/src/camera/pmFPAMosaic.c
===================================================================
--- trunk/psModules/src/camera/pmFPAMosaic.c	(revision 11749)
+++ trunk/psModules/src/camera/pmFPAMosaic.c	(revision 11754)
@@ -737,16 +737,30 @@
         FIX_CONCEPT(targetCell->concepts, "CELL.Y0", S32, 0);
     }
-    int xParityTarget = psMetadataLookupS32(&mdok, targetCell->concepts, "CELL.XPARITY");
-    if (!mdok || (xParityTarget != -1 && xParityTarget != 1)) {
+    int xParityCellTarget = psMetadataLookupS32(&mdok, targetCell->concepts, "CELL.XPARITY");
+    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);
-        xParityTarget = 1;
-    }
-    int yParityTarget = psMetadataLookupS32(&mdok, targetCell->concepts, "CELL.YPARITY");
-    if (!mdok || (yParityTarget != -1 && yParityTarget != 1)) {
+        xParityCellTarget = 1;
+    }
+    int yParityCellTarget = psMetadataLookupS32(&mdok, targetCell->concepts, "CELL.YPARITY");
+    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);
-        yParityTarget = 1;
-    }
+        yParityCellTarget = 1;
+    }
+    int xParityChipTarget = psMetadataLookupS32(&mdok, targetCell->parent->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(targetCell->parent->concepts, "CHIP.XPARITY", S32, 1);
+        xParityChipTarget = 1;
+    }
+    int yParityChipTarget = psMetadataLookupS32(&mdok, targetCell->parent->concepts, "CHIP.YPARITY");
+    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(targetCell->parent->concepts, "CHIP.YPARITY", S32, 1);
+        yParityChipTarget = 1;
+    }
+    int xParityTarget = xParityChipTarget * xParityCellTarget;
+    int yParityTarget = yParityChipTarget * yParityCellTarget;
 
     // Binning for the mosaicked chip is the minimum binning allowed by the cells
Index: trunk/psModules/src/config/pmConfigCamera.c
===================================================================
--- trunk/psModules/src/config/pmConfigCamera.c	(revision 11749)
+++ trunk/psModules/src/config/pmConfigCamera.c	(revision 11754)
@@ -30,6 +30,6 @@
 // Remove certain concepts from the list of sources.  These concepts are important in the mosaicking process,
 // and are added explicitly to the defaults (elsewhere) so that the user can't get them wrong.
-static void removeConceptsSources(psMetadata *source // Source for concepts
-                                 )
+static void removeCellConceptsSources(psMetadata *source // Source for concepts
+    )
 {
     if (!source) {
@@ -43,4 +43,17 @@
     removeConcept(source, "CELL.X0");
     removeConcept(source, "CELL.Y0");
+
+    return;
+}
+
+// Remove certain concepts from the list of sources.  These concepts are important in the mosaicking process,
+// and are added explicitly to the defaults (elsewhere) so that the user can't get them wrong.
+static void removeChipConceptsSources(psMetadata *source // Source for concepts
+    )
+{
+    if (!source) {
+        return;
+    }
+
     removeConcept(source, "CHIP.XPARITY");
     removeConcept(source, "CHIP.YPARITY");
@@ -50,5 +63,4 @@
     return;
 }
-
 
 // Generate a mosaicked version of a camera configuration
@@ -286,11 +298,9 @@
         }
 
-        removeConceptsSources(translation);
-        removeConceptsSources(database);
-        removeConceptsSources(defaults);
+        removeCellConceptsSources(translation);
+        removeCellConceptsSources(database);
+        removeCellConceptsSources(defaults);
 
         // Add in the positioning concepts
-        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.XPARITY", 0, NULL, 1);
         psMetadataAddS32(defaults, PS_LIST_TAIL, "CELL.YPARITY", 0, NULL, 1);
@@ -307,4 +317,9 @@
 
         if (level == PM_FPA_LEVEL_FPA) {
+            removeChipConceptsSources(translation);
+            removeChipConceptsSources(database);
+            removeChipConceptsSources(defaults);
+            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, "CHIP.X0", 0, NULL, 0);
             psMetadataAddS32(defaults, PS_LIST_TAIL, "CHIP.Y0", 0, NULL, 0);
