Index: /trunk/psModules/src/camera/pmFPAMosaic.c
===================================================================
--- /trunk/psModules/src/camera/pmFPAMosaic.c	(revision 7604)
+++ /trunk/psModules/src/camera/pmFPAMosaic.c	(revision 7605)
@@ -810,5 +810,5 @@
     for (int i = 0; i < cells->n; i++) {
         pmCell *cell = cells->data[i];  // The cell of interest
-        if (!cell) {
+        if (!cell || !cell->data_exists) {
             continue;
         }
@@ -870,5 +870,5 @@
     for (int i = 0; i < chips->n; i++) {
         pmChip *chip = chips->data[i];  // The chip of interest
-        if (!chip) {
+        if (!chip || !chip->data_exists) {
             continue;
         }
@@ -876,5 +876,5 @@
         for (int j = 0; j < cells->n; j++) {
             pmCell *cell = cells->data[j];  // The cell of interest
-            if (!cell) {
+            if (!cell || !cell->data_exists) {
                 continue;
             }
@@ -997,4 +997,9 @@
     psFree(newReadout);                 // Drop reference
 
+    // Data now exists in the targets
+    pmChipSetDataStatus(target, true);
+    pmCellSetDataStatus(targetCell, true);
+    newReadout->data_exists = true;
+
     // Update the headers
     pmHDU *sourceHDU = pmHDUFromChip(source); // The HDU for the source
@@ -1062,7 +1067,9 @@
     psList *sourceCells = psListAlloc(NULL); // List of source cells
     psArray *chips = source->chips;        // Array of chips
+    pmChip *firstSourceChip = NULL;     // The first chip in the source FPA; for headers
+    pmCell *firstSourceCell = NULL;     // The first cell in the source FPA; for headers
     for (long i = 0; i < chips->n; i++) {
         pmChip *chip = chips->data[i];  // Chip of interest
-        if (!chip) {
+        if (!chip || !chip->data_exists) {
             continue;
         }
@@ -1070,8 +1077,14 @@
         for (long j = 0; j < cells->n; j++) {
             pmCell *cell = cells->data[j]; // Cell of interest
-            if (!cell) {
+            if (!cell || !cell->data_exists) {
                 continue;
             }
             psListAdd(sourceCells, PS_LIST_TAIL, cell);
+
+            // These are valid chip and cell to use for the header; grab the first such
+            if (!firstSourceCell && !firstSourceChip) {
+                firstSourceCell = cell;
+                firstSourceChip = chip;
+            }
         }
     }
@@ -1092,7 +1105,20 @@
     psFree(newReadout);                 // Drop reference
 
+    // Data now exists in the targets
+    pmChipSetDataStatus(targetChip, true);
+    pmCellSetDataStatus(targetCell, true);
+    newReadout->data_exists = true;
+
     // Update the headers
-    pmHDU *sourceHDU = pmHDUFromFPA(source); // The HDU for the source
-    pmHDU *targetHDU = pmHDUFromFPA(target); // The HDU for the target
+    pmHDU *sourceHDU = pmHDUGetHighest(source, firstSourceChip, firstSourceCell); // The HDU for the source
+    if (!sourceHDU) {
+        psLogMsg(__func__, PS_LOG_WARN, "Unable to find HDU in source FPA; unable to copy headers.\n");
+        return false;
+    }
+    pmHDU *targetHDU = pmHDUGetHighest(target, targetChip, targetCell); // The HDU for the target
+    if (!targetHDU) {
+        psLogMsg(__func__, PS_LOG_WARN, "Unable to find HDU in target FPA; unable to copy headers.\n");
+        return false;
+    }
     targetHDU->header = psMetadataCopy(targetHDU->header, sourceHDU->header);
 
