Index: trunk/psModules/src/camera/pmFPACopy.c
===================================================================
--- trunk/psModules/src/camera/pmFPACopy.c	(revision 12949)
+++ trunk/psModules/src/camera/pmFPACopy.c	(revision 13034)
@@ -211,4 +211,17 @@
         if (mdok && trimsec && !psRegionIsNaN(*trimsec)) {
             *trimsec = psImageBinningSetRuffRegion(binning, *trimsec);
+	    // force integer pixels : truncate x0, roundup x1:
+	    trimsec->x0 = (int)trimsec->x0;
+	    if (trimsec->x1 > (int)trimsec->x1) {
+		trimsec->x1 = (int)trimsec->x1 + 1;
+	    } else {
+		trimsec->x1 = (int)trimsec->x1;
+	    }		
+	    trimsec->y0 = (int)trimsec->y0;
+	    if (trimsec->y1 > (int)trimsec->y1) {
+		trimsec->y1 = (int)trimsec->y1 + 1;
+	    } else {
+		trimsec->y1 = (int)trimsec->y1;
+	    }		
         }
         psList *biassecs = psMetadataLookupPtr(&mdok, target->concepts, "CELL.BIASSEC"); // The bias sections
@@ -219,4 +232,17 @@
                 if (!psRegionIsNaN(*biassec)) {
                     *biassec = psImageBinningSetRuffRegion(binning, *biassec);
+		    // force integer pixels : truncate x0, roundup x1:
+		    biassec->x0 = (int)biassec->x0;
+		    if (biassec->x1 > (int)biassec->x1) {
+			biassec->x1 = (int)biassec->x1 + 1;
+		    } else {
+			biassec->x1 = (int)biassec->x1;
+		    }		
+		    biassec->y0 = (int)biassec->y0;
+		    if (biassec->y1 > (int)biassec->y1) {
+			biassec->y1 = (int)biassec->y1 + 1;
+		    } else {
+			biassec->y1 = (int)biassec->y1;
+		    }		
                 }
             }
Index: trunk/psModules/src/camera/pmFPAfile.c
===================================================================
--- trunk/psModules/src/camera/pmFPAfile.c	(revision 12949)
+++ trunk/psModules/src/camera/pmFPAfile.c	(revision 13034)
@@ -17,4 +17,5 @@
 #include "pmFPAfile.h"
 #include "pmFPACopy.h"
+#include "pmConcepts.h"
 
 static void pmFPAfileFree(pmFPAfile *file)
@@ -326,6 +327,10 @@
     PS_ASSERT_PTR_NON_NULL(view, false);
 
+    // XXX this should be smarter (ie, only copy concepts from the current chips)
+    // but such a call is needed, so re-copy stuff rather than no copy
+    pmFPACopyConcepts (out, in);
+
     // pmFPAWrite takes care of all PHUs as needed
-    if ((view->chip == -1) || in->hdu) {
+    if (view->chip == -1) {
         status = pmFPACopyStructure (out, in, xBin, yBin);
         return status;
@@ -338,8 +343,8 @@
     pmChip *outChip = out->chips->data[view->chip];
 
-    if ((view->cell == -1) || inChip->hdu) {
+    if (view->cell == -1) {
         status = pmChipCopyStructure (outChip, inChip, xBin, yBin);
         return status;
-    }
+    } 
     if (view->cell >= inChip->cells->n) {
         psError(PS_ERR_IO, true, "Requested cell == %d>= inChip->cells->n == %ld",
@@ -350,10 +355,6 @@
     pmCell *outCell = outChip->cells->data[view->cell];
 
-    if ((view->readout == -1) || inCell->hdu) {
-        status = pmCellCopyStructure (outCell, inCell, xBin, yBin);
-        return status;
-    }
-    psError(PS_ERR_UNKNOWN, true, "Returning false");
-    return false;
+    status = pmCellCopyStructure (outCell, inCell, xBin, yBin);
+    return status;
 }
 
Index: trunk/psModules/src/camera/pmFPAfileIO.c
===================================================================
--- trunk/psModules/src/camera/pmFPAfileIO.c	(revision 12949)
+++ trunk/psModules/src/camera/pmFPAfileIO.c	(revision 13034)
@@ -434,4 +434,5 @@
       case PM_FPA_FILE_FRINGE:
       case PM_FPA_FILE_CMF:
+      case PM_FPA_FILE_PSF:
         psTrace ("psModules.camera", 5, "closing %s (%s) (%d:%d:%d)\n", file->filename, file->name, view->chip, view->cell, view->readout);
         status = psFitsClose (file->fits);
@@ -447,5 +448,4 @@
       case PM_FPA_FILE_OBJ:
       case PM_FPA_FILE_CMP:
-      case PM_FPA_FILE_PSF:
       case PM_FPA_FILE_JPEG:
       case PM_FPA_FILE_KAPA:
@@ -500,7 +500,7 @@
       case PM_FPA_FILE_CMP:
       case PM_FPA_FILE_CMF:
+      case PM_FPA_FILE_PSF:
         psTrace ("psModules.camera", 5, "NOT freeing %s (%s) : save for further analysis\n", file->filename, file->name);
         return true;
-      case PM_FPA_FILE_PSF:
       case PM_FPA_FILE_JPEG:
       case PM_FPA_FILE_KAPA:
@@ -638,4 +638,5 @@
       case PM_FPA_FILE_FRINGE:
       case PM_FPA_FILE_CMF:
+      case PM_FPA_FILE_PSF:
         psTrace ("psModules.camera", 5, "opening %s (%s) (%d:%d:%d)\n", file->filename, file->name, view->chip, view->cell, view->readout);
         file->fits = psFitsOpen (file->filename, mode);
@@ -672,5 +673,4 @@
       case PM_FPA_FILE_CMP:
       case PM_FPA_FILE_RAW:
-      case PM_FPA_FILE_PSF:
       case PM_FPA_FILE_JPEG:
       case PM_FPA_FILE_KAPA:
@@ -751,4 +751,5 @@
 
 // XXX this function is only called from pmFPAfileWrite
+// XXX for each data type, there should be a function which writes the PHU, if needed
 bool pmFPAfileWritePHU(pmFPAfile *file, const pmFPAview *view, const pmConfig *config)
 {
