                             // or back up if the queue is already full
                             // we will recheck and insert this on the next time through
                             k -= group_size;
-                            break;
                             }
-                        } // end if (insert_in_queue)
-                    } // end loop over depletants in queue
-
-                if (q >= depletant_queue_size)
-                    q = group; // start over
-                } // end while (s_queue_size < max_queue_size && k < excell_size)
+                        } // end if k < excell_size
+                    } // end while (s_queue_size < max_queue_size && k < excell_size)
+                } // end if active
 
             // sync to make sure all threads in the block are caught up
             __syncthreads();

    // load the per type pair parameters into shared memory
    extern __shared__ char s_data[];
    typename Shape::param_type *s_params = (typename Shape::param_type *)(&s_data[0]);
    unsigned int *s_check_overlaps = (unsigned int *) (s_params + num_types);
    unsigned int *s_queue_j = (unsigned int*)(s_check_overlaps + overlap_idx.getNumElements());
    unsigned int *s_queue_didx_narrow = (unsigned int*)(s_queue_j + max_queue_size);
    unsigned int *s_queue_didx = (unsigned int *)(s_queue_didx_narrow + max_queue_size);

    // copy over parameters one int per thread for fast loads
        {


                        if (insert_point < max_queue_size)
                            {
                            s_queue_gid[insert_point] = group;
                            s_queue_j[insert_point] = (j << 1) | (old ? 1 : 0);
                            }
                        else
