                 Scalar4 orientation_j;
                 vec3<Scalar> r_jk;
 
-                // regenerate depletant using seed from queue
-                hoomd::RandomGenerator rng(hoomd::RNGIdentifier::HPMCDepletants, seed+i, check_didx, select*num_types + depletant_type, timestep);
-                vec3<Scalar> pos_test = vec3<Scalar>(generatePositionInOBB(rng, obb_i, dim));
-                Shape shape_test(quat<Scalar>(), s_params[depletant_type]);
-                if (shape_test.hasOrientation())
-                    {
-                    shape_test.orientation = generateRandomOrientation(rng,dim);
-                    }
+                // build depletant shape from shared memory
+                Scalar3 pos_test = s_pos_group[check_group];
+                Shape shape_test(quat<Scalar>(s_orientation_group[check_group]), s_params[depletant_type]);
 
                 // build shape j from global memory
                 postype_j = check_old ? d_postype[check_j] : d_trial_postype[check_j];

        const unsigned int min_shared_bytes = args.num_types * sizeof(typename Shape::param_type) +
                   args.overlap_idx.getNumElements() * sizeof(unsigned int);

        unsigned int shared_bytes = max_queue_size*2*sizeof(unsigned int) +
                                    max_depletant_queue_size*sizeof(unsigned int) +
                                    min_shared_bytes;


    // 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]);
    Scalar4 *s_orientation_group = (Scalar4*)(s_params + num_types);
    Scalar3 *s_pos_group = (Scalar3*)(s_orientation_group + n_groups);
    unsigned int *s_check_overlaps = (unsigned int *) (s_pos_group + n_groups);
    unsigned int *s_queue_j = (unsigned int*)(s_check_overlaps + overlap_idx.getNumElements());
    unsigned int *s_queue_gid = (unsigned int*)(s_queue_j + max_queue_size);
    unsigned int *s_queue_didx = (unsigned int *)(s_queue_gid + max_queue_size);

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