Index: trunk/psLib/src/imageops/psImageBackground.c
===================================================================
--- trunk/psLib/src/imageops/psImageBackground.c	(revision 37050)
+++ trunk/psLib/src/imageops/psImageBackground.c	(revision 41523)
@@ -104,5 +104,5 @@
     float min = +PS_MAX_F32;
     float max = -PS_MAX_F32;
-
+    
     if ((nSubset < 0.01*nGoodPixels) && (nGoodPixels >= 0.1*nPixels)) {
 	psTrace ("psLib.imageops", 4, "case 3: nSubset < 0.01*nGoodPixels && nGoodPixels > 0.1*nPixels (%d x %d : %d : %d : %d)\n", (int) nx, (int) ny, (int) nSubset, (int) nGoodPixels, (int) nPixels);
@@ -144,13 +144,18 @@
 	// generate a vector of all pixels which may in theory be selected
 	psVector *pixelVector = psVectorAllocEmpty(nGoodPixels, PS_TYPE_F32);
+	int ipix = 0;
 	for (long iy = 0; iy < ny; iy++) {
 	    for (long ix = 0; ix < nx; ix++) {
 		if (!isfinite(image->data.F32[iy][ix])) continue;
 		if (mask && mask->data.PS_TYPE_IMAGE_MASK_DATA[iy][ix] & maskValue) continue;
-		psVectorAppend(pixelVector, image->data.F32[iy][ix]);
+		psAssert (ipix < pixelVector->nalloc, "we must have mis-counted above");
+		pixelVector->data.F32[ipix] = image->data.F32[iy][ix];
+		ipix ++;
 	    }
 	}
+	pixelVector->n = ipix;
+	psAssert (ipix <= pixelVector->nalloc, "we must have mis-counted above");
 	psAssert (nGoodPixels == pixelVector->n, "we must have mis-counted above");
-	
+
 	// generate the unique random subset
 	for (int i = 0; i < nSubset; i++) {
