Index: trunk/ppBackground/src/ppBackgroundRestore.c
===================================================================
--- trunk/ppBackground/src/ppBackgroundRestore.c	(revision 34298)
+++ trunk/ppBackground/src/ppBackgroundRestore.c	(revision 34800)
@@ -5,4 +5,32 @@
 
 #include "ppBackground.h"
+
+psImageBinning *ppBackgroundBinningByRecipe(const psImage *image, // Image for which to generate a bg model
+					    const pmConfig *config, // Configuration
+					    psString recipe_name,
+					    psString Xbin_name,
+					    psString Ybin_name
+					    )
+{
+  bool status = true;
+
+  psMetadata *recipe  = psMetadataLookupPtr (&status, config->recipes, recipe_name);
+  assert (recipe);
+
+  // I have the fine image size, I know the binning factor, determine the ruff image size
+  psImageBinning *binning = psImageBinningAlloc();
+  binning->nXfine = image->numCols;
+  binning->nYfine = image->numRows;
+  binning->nXbin  = psMetadataLookupS32(&status, recipe, Xbin_name);
+  binning->nYbin  = psMetadataLookupS32(&status, recipe, Ybin_name);
+
+  psImageBinningSetRuffSize(binning, PS_IMAGE_BINNING_CENTER);
+  psImageBinningSetSkip(binning, image);
+
+  return binning;
+}
+
+  
+
 
 bool ppBackgroundRestore(pmChip *chip, const pmChip *background, const pmChip *pattern,
@@ -27,5 +55,18 @@
     if (background) {
         pmReadout *bgRO = pmFPAviewThisReadout(view, background->parent); // Readout with background
-        psImageBinning *binning = psphotBackgroundBinning(image, config);
+
+	psImageBinning *binning;
+	psMetadata *recipe = psMetadataLookupMetadata(NULL, config->recipes, PPBACKGROUND_RECIPE); // Recipe
+	if (!recipe) {
+	  binning = psphotBackgroundBinning(image, config);
+	}
+	else {
+	  binning = ppBackgroundBinningByRecipe(image,config,
+						psMetadataLookupStr(NULL,recipe,"BINNING_RECIPE"),
+						psMetadataLookupStr(NULL,recipe,"BINNING_XNAME"),
+						psMetadataLookupStr(NULL,recipe,"BINNING_YNAME"));
+	}
+						
+	fprintf(stderr,"%d %d %d %d\n",binning->nXfine,binning->nYfine,binning->nXbin,binning->nYbin);
         if (!binning) {
             psError(psErrorCodeLast(), false, "Unable to find background binning");
@@ -49,5 +90,9 @@
         for (int y = 0; y < numRows; y++) {
             for (int x = 0; x < numCols; x++) {
+	      if ((y % 250 == 0)&&(x % 250 == 0)) {
+		printf("%d %d %g\n",x,y,bgImage->data.F32[y][x]);
+	      }
                 image->data.F32[y][x] += bgImage->data.F32[y][x];
+		
             }
         }
