diff --git a/lalinference/python/rapidpe_compute_intrinsic_grid.py b/lalinference/python/rapidpe_compute_intrinsic_grid.py
index fbff94926fa08b13d05a84cc8e3c6e2dedf8d4d9..725ee64d168ef3119d935e46e09110c1e5b2fcba 100644
--- a/lalinference/python/rapidpe_compute_intrinsic_grid.py
+++ b/lalinference/python/rapidpe_compute_intrinsic_grid.py
@@ -42,9 +42,9 @@ from glue.ligolw.utils import process
 import lalsimulation
 from lalinference.rapid_pe import amrlib, lalsimutils, common_cl
 
-def get_cr_from_grid(cells, weight, cr_thr=0.9):
+def get_cr_from_grid(cells, weight, cr_thr=0.9, min_n=None, max_n=None):
     """
-    Given a set of cells and the weight of that cell, calculate a N% CR including cells which contribute to that probability mass.
+    Given a set of cells and the weight of that cell, calculate a N% CR including cells which contribute to that probability mass. If n is set, cr_thr is ignored and instead this many points are taken.
     """
     if cr_thr == 0.0:
         return numpy.empty((0,))
@@ -57,8 +57,13 @@ def get_cr_from_grid(cells, weight, cr_thr=0.9):
     cell_sort[:,0] = cell_sort[:,0].cumsum()
     cell_sort[:,0] /= cell_sort[-1,0]
 
-    # find the CR probability
     idx = cell_sort[:,0].searchsorted(1-cr_thr)
+    n_select = cell_sort.shape[0] - idx
+    if min_n is not None:
+        n_select = max(n_select, min_n)
+    if max_n is not None:
+        n_select = min(n_select, max_n)
+    idx = cell_sort.shape[0] - n_select
 
     return cell_sort[idx:,1:]
 
@@ -188,6 +193,8 @@ grid_section.add_argument("-P", "--prerefine", help="Refine this initial grid ba
 refine_section = argp.add_argument_group("refine options", "Options for refining a pre-existing grid.")
 refine_section.add_argument("--refine", help="Refine a prexisting grid. Pass this option the grid points from previous levels (or the --setup) option.")
 refine_section.add_argument("-r", "--result-file", help="XML file containing newest result to refine.")
+refine_section.add_argument("-M", "--max-n-points", help="Refine *at most* this many points, can override confidence region thresholds.")
+refine_section.add_argument("-m", "--min-n-points", help="Refine *at least* this many points, can override confidence region thresholds.")
 
 opts = argp.parse_args()
 
@@ -375,7 +382,7 @@ if opts.result_file is not None:
 
     if opts.refine:
         # FIXME: We use overlap threshold as a proxy for confidence level
-        selected = get_cr_from_grid(selected, results, cr_thr=opts.overlap_threshold)
+        selected = get_cr_from_grid(selected, results, cr_thr=opts.overlap_threshold, min_n=opts.min_n_poiunts, max_n=opts.max_n_points)
         print "Selected %d cells from %3.2f%% confidence region" % (len(selected), opts.overlap_threshold*100)
 
 if opts.prerefine: