Index: trunk/psModules/src/camera/pmFPACopy.c
===================================================================
--- trunk/psModules/src/camera/pmFPACopy.c	(revision 11864)
+++ trunk/psModules/src/camera/pmFPACopy.c	(revision 11865)
@@ -250,10 +250,16 @@
         int xParity = psMetadataLookupS32(NULL, target->concepts, "CELL.XPARITY"); // Parity in x
         int xBin = psMetadataLookupS32(NULL, source->concepts, "CELL.XBIN"); // CELL.XBIN from source
-        pmReadout *readout = source->readouts->data[0]; // A representative readout
+        int xSize = psMetadataLookupS32(NULL, source->concepts, "CELL.XSIZE"); // CELL.XSIZE of source
+
         psTrace("psModules.camera", 3, "CELL.X0: Before: %d After: %d\n", xZero,
-                xZero - (readout->image->numCols - 1) * xParity * xBin);
-        psTrace("psModules.camera", 9, "(xParity: %d xBin: %d numCols: %d)\n",
-                xParity, xBin, readout->image->numCols);
-        xZero -= (readout->image->numCols - 1) * xParity * xBin; // Change the parity on the X0 position
+                xZero - (xSize - 1) * xParity * xBin);
+        psTrace("psModules.camera", 9, "(xParity: %d xBin: %d numCols: %d)\n", xParity, xBin, xSize);
+
+        if (xParity == 0 || xBin == 0 || xSize == 0) {
+            psWarning("New CELL.X0 may be incorrect due to missing concepts "
+                      "(CELL.X0, CELL.XPARITY, CELL.XBIN, CELL.XSIZE)");
+        }
+
+        xZero -= (xSize - 1) * xParity * xBin; // Change the parity on the X0 position
         psMetadataItem *newItem = psMetadataLookup(target->concepts, "CELL.X0"); // CELL.X0 from target
         newItem->data.S32 = xZero;
@@ -262,11 +268,17 @@
         int yZero = psMetadataLookupS32(NULL, source->concepts, "CELL.Y0"); // CELL.Y0 from source
         int yParity = psMetadataLookupS32(NULL, target->concepts, "CELL.YPARITY"); // Parity in y
-        int yBin = psMetadataLookupS32(NULL, source->concepts, "CELL.YBIN"); // Parity in y
-        pmReadout *readout = source->readouts->data[0]; // A representative readout
+        int yBin = psMetadataLookupS32(NULL, source->concepts, "CELL.YBIN"); // Binning in y
+        int ySize = psMetadataLookupS32(NULL, source->concepts, "CELL.YSIZE"); // CELL.YSIZE of source
+
         psTrace("psModules.camera", 3, "CELL.Y0: Before: %d After: %d\n", yZero,
-                yZero - (readout->image->numRows - 1) * yParity * yBin);
-        psTrace("psModules.camera", 9, "(yParity: %d yBin: %d numRows: %d)\n",
-                yParity, yBin, readout->image->numRows);
-        yZero -= (readout->image->numRows - 1) * yParity * yBin; // Change the parity on the Y0 position
+                yZero - (ySize - 1) * yParity * yBin);
+        psTrace("psModules.camera", 9, "(yParity: %d yBin: %d numRows: %d)\n", yParity, yBin, ySize);
+
+        if (yParity == 0 || yBin == 0 || ySize == 0) {
+            psWarning("New CELL.Y0 may be incorrect due to missing concepts "
+                      "(CELL.Y0, CELL.YPARITY, CELL.YBIN, CELL.YSIZE)");
+        }
+
+        yZero -= (ySize - 1) * yParity * yBin; // Change the parity on the Y0 position
         psMetadataItem *newItem = psMetadataLookup(target->concepts, "CELL.Y0"); // CELL.Y0 from target
         newItem->data.S32 = yZero;
@@ -297,5 +309,5 @@
             targetPHU->header = psMetadataAlloc();
         }
-        //        pmHDU *sourcePHU = pmHDUGetHighest(source->parent->parent, source->parent, source); // A source HDU
+//        pmHDU *sourcePHU = pmHDUGetHighest(source->parent->parent, source->parent, source); // A source HDU
         pmHDU *sourcePHU = findBlankPHU(source); // The target PHU
         if (sourcePHU && sourcePHU->header) {
Index: trunk/psModules/src/concepts/pmConcepts.c
===================================================================
--- trunk/psModules/src/concepts/pmConcepts.c	(revision 11864)
+++ trunk/psModules/src/concepts/pmConcepts.c	(revision 11865)
@@ -639,4 +639,18 @@
         }
 
+        // CHIP.XSIZE
+        {
+            psMetadataItem *chipXsize = psMetadataItemAllocS32("CHIP.XSIZE", "Size of chip (pixels)", 0);
+            pmConceptRegister(chipXsize, NULL, NULL, PM_FPA_LEVEL_CHIP);
+            psFree(chipXsize);
+        }
+
+        // CHIP.YSIZE
+        {
+            psMetadataItem *chipYsize = psMetadataItemAllocS32("CHIP.YSIZE", "Size of chip (pixels)", 0);
+            pmConceptRegister(chipYsize, NULL, NULL, PM_FPA_LEVEL_CHIP);
+            psFree(chipYsize);
+        }
+
         // CHIP.TEMP
         {
@@ -808,4 +822,17 @@
         }
 
+        // CELL.XSIZE
+        {
+            psMetadataItem *cellXsize = psMetadataItemAllocS32("CELL.XSIZE", "Size of cell (pixels)", 0);
+            pmConceptRegister(cellXsize, NULL, NULL, PM_FPA_LEVEL_CELL);
+            psFree(cellXsize);
+        }
+
+        // CELL.YSIZE
+        {
+            psMetadataItem *cellYsize = psMetadataItemAllocS32("CELL.YSIZE", "Size of cell (pixels)", 0);
+            pmConceptRegister(cellYsize, NULL, NULL, PM_FPA_LEVEL_CELL);
+            psFree(cellYsize);
+        }
     }
 
Index: trunk/psModules/src/concepts/pmConceptsRead.c
===================================================================
--- trunk/psModules/src/concepts/pmConceptsRead.c	(revision 11864)
+++ trunk/psModules/src/concepts/pmConceptsRead.c	(revision 11865)
@@ -48,5 +48,4 @@
     }
 }
-
 
 // Parse a single concept
