RefinementBatch ranges overlap

Looking at the post-refinement log:

 0-10   54.92260  58.49574  67.45137  90.00000  89.98422  90.00000 
 8-17   54.89974  58.46262  67.36989  90.00000  89.98477  90.00000 
15-25   54.92752  58.49984  67.43749  90.00000  89.98158  90.00000 
23-32   54.90036  58.47766  67.40630  90.00000  89.95393  90.00000 
30-40   54.92204  58.51050  67.51689  90.00000  89.93762  90.00000 
38-48   54.91028  58.51211  67.50965  90.00000  89.93241  90.00000 

Code to iterate over peaks and determine batches (core/algo/Refiner.cpp):

    for (nsx::Peak3D* peak : filtered_peaks) {
        // find appropriate batch
        const RefinementBatch* b = nullptr;
        const double z = peak->shape().center()[2];
        for (const auto& batch : _batches) {
            if (batch.contains(z)) {
                b = &batch;
                break;
            }
        }

The function RefinementBatch::contains:

bool RefinementBatch::contains(double f) const
{
    return (f > _fmin) && (f < _fmax);
}

The frame ranges overlap by 2 frames. This may make sense when doing the refinement, but when computing Miller indices, iterating through the list of peaks, some will belong to more than one batch, and it seems that only the batch with the lowest numerical index is used. I'm not sure if this logic is correct.