Index: trunk/ppImage/src/ppImageDetrendFringe.c
===================================================================
--- trunk/ppImage/src/ppImageDetrendFringe.c	(revision 24911)
+++ trunk/ppImage/src/ppImageDetrendFringe.c	(revision 25930)
@@ -84,4 +84,6 @@
     psArray *cells = chip->cells;       // Component cells
     psArray *fringes = psArrayAlloc(cells->n); // Fringes, to return
+    int video_cell_zero = 0;
+    
     for (int i = 0; i < cells->n; i++) {
         fringes->data[i] = NULL;
@@ -89,13 +91,42 @@
         pmCell *cell = cells->data[i];  // Cell of interest
 
+	psTrace("psModules.detrend",7,"Readouts: Cell %d chip: %ld\n",i,cell->readouts->n);
 	// XXX for now, skip the video cells (cell->readouts->n > 1)
-	if (cell->readouts->n > 1) {
-	    psWarning ("Skipping Video Cell (%d) for ppImageDetrendFringe.c:getFringes", i);
-	    continue;
-	}
-
+	// CZW: This mess creates a fake set of fringe stats by stealing the previous one.
+	// We let the fitting code know that this is all lies by scaling the weights by a crazy amount.
+
+	if ( (cell->readouts->n > 1) ) {
+	  psTrace("psModules.detrend",7,"Should be skipping scichip: %d\n",i);
+	  psWarning ("Skipping Video Cell (%d) for ppImageDetrendFringe.c:getFringes", i);
+
+	  if (i == 0) {
+	    video_cell_zero = 1;
+	  }
+	  else {
+	    pmFringeStats *prevFringe = fringes->data[i-1];
+	    pmFringeStats *fringe     = pmFringeStatsAlloc(prevFringe->regions);
+	    for (int j = 0; j < fringe->regions->nRequested; j++) {
+	      fringe->f->data.F32[j] = prevFringe->f->data.F32[j];
+	      fringe->df->data.F32[j] = prevFringe->df->data.F32[j] / 1e6;
+	    }
+	    fringes->data[i] = fringe;
+	  }
+	    
+	  continue;
+	}
+	
         fringes->data[i] = psMemIncrRefCounter(psMetadataLookupPtr(NULL, cell->analysis, source));
     }
 
+    if (video_cell_zero == 1) {
+      pmFringeStats *prevFringe = fringes->data[1];
+      pmFringeStats *fringe     = pmFringeStatsAlloc(prevFringe->regions);
+      for (int j = 0; j < fringe->regions->nRequested; j++) {
+	fringe->f->data.F32[j] = NAN;
+	fringe->df->data.F32[j] = 1.0;
+      }
+      fringes->data[0] = fringe;
+    }
+    
     return fringes;
 }
@@ -112,5 +143,5 @@
     psArray *science = NULL;
     if (isResidual) {
-	science = getFringes(scienceChip, "FRINGE.RESIDUALS"); // Fringe residuals on science chip
+	science = getFringes(scienceChip,  "FRINGE.RESIDUALS"); // Fringe residuals on science chip
     } else {
 	science = getFringes(scienceChip, "FRINGE.MEASUREMENTS"); // Fringe measurements on science chip
@@ -124,12 +155,13 @@
     psArray *references = getFringes(refChip, "FRINGE.MEASUREMENTS"); // Fringe measurements on reference chip
     int numRefs = ((psArray*)references->data[0])->n; // Number of reference fringes
-    psArray *referencesCat = psArrayAlloc(numRefs); // Reference fringes
-    for (int i = 0; i < numRefs; i++) { // Iterate over fringes
-        psArray *refs = psArrayAlloc(references->n); // Array of fringes for each cell
-        for (int j = 0; j < references->n; j++) { // Iterate over cells
-            psArray *ref = references->data[j]; // Array of references for this cell
+    psArray *referencesCat = psArrayAlloc(numRefs);   // Reference fringes
+    for (int i = 0; i < numRefs; i++) {               // Iterate over fringes
+        psArray *refs = psArrayAlloc(references->n);  // Array of fringes for each cell
+        for (int j = 0; j < references->n; j++) {     // Iterate over cells
+            psArray *ref = references->data[j];       // Array of references for this cell
+	    
             refs->data[j] = psMemIncrRefCounter(ref->data[i]);
         }
-        referencesCat->data[i] = pmFringeStatsConcatenate(refs, NULL, NULL);
+	referencesCat->data[i] = pmFringeStatsConcatenate(refs, NULL, NULL);
         psFree(refs);
     }
