Index: trunk/psastro/src/psastroOneChip.c
===================================================================
--- trunk/psastro/src/psastroOneChip.c	(revision 15671)
+++ trunk/psastro/src/psastroOneChip.c	(revision 16075)
@@ -36,14 +36,23 @@
     if (gridSearch) {
 	// generate the bright subset of maxNstar entries (note: rawstars is sorted by S/N)
-	psArray *gridStars = psArrayAlloc (PS_MIN (maxNstar, rawstars->n));
+	psArray *subset = psArrayAlloc (PS_MIN (maxNstar, rawstars->n));
 	for (int i = 0; (i < maxNstar) && (i < rawstars->n); i++) {
-	    gridStars->data[i] = psMemIncrRefCounter (rawstars->data[i]);
-	}
+	    subset->data[i] = psMemIncrRefCounter (rawstars->data[i]);
+	}
+
+	// XXX set clump scale from recipe
+	psArray *gridStars = psastroRemoveClumps (subset, 150);
+	psFree (subset);
+
+	psArray *refSubset = psastroRemoveClumps (refstars, 150);
+
+	psLogMsg ("psastro", 3, "grid search using %ld raw vs %ld ref stars\n", gridStars->n, refSubset->n);
 
 	// find initial offset / rotation / scale
-	pmAstromStats *gridStats = pmAstromGridMatch (gridStars, refstars, recipe);
+	pmAstromStats *gridStats = pmAstromGridMatch (gridStars, refSubset, recipe);
 	if (gridStats == NULL) {
 	    psLogMsg ("psastro", 3, "failed to find a grid match solution\n");
 	    psFree (gridStars);
+	    psFree (refSubset);
 	    return false;
 	}
@@ -51,9 +60,10 @@
 
 	// tweak the position by finding peak of matches stars
-	stats = pmAstromGridTweak (gridStars, refstars, recipe, gridStats);
+	stats = pmAstromGridTweak (gridStars, refSubset, recipe, gridStats);
 	if (stats == NULL) {
 	    psLogMsg ("psastro", 3, "failed to measure tweaked grid solution\n");
 	    psFree (gridStats);
 	    psFree (gridStars);
+	    psFree (refSubset);
 	    return false;
 	}
@@ -65,4 +75,5 @@
 	psFree (gridStats);
 	psFree (gridStars);
+	psFree (refSubset);
     }
 
