 class Characteristic {
 public:
 	// constructor
-	__device__ __host__ Characteristic(curandState& localState, int iter, int id) : state(localState), current_iter(iter), idata(id);
+	__device__ __host__ Characteristic(int iter, int id) : current_iter(iter), idata(id);
 	__device__ __host__ virtual ~Characteristic() {}
+
+	// set the state of the random number generator
+	void SetState(curandState& localState) { state = localState; }
 
 	// compute the conditional log-posterior density of the measurements given the characteristic
 	__device__ __host__ virtual double logdensity_meas(double* chi, double* meas, double* meas_unc)

public:
	// constructor
	PopulationPar(double rate, DataAugmentation<ChiType>& D, dim3& nB, dim3& nT) :
		target_rate(rate), daug(D), nBlocks(nB), nThreads(nT)
	{
		h_theta.resize(dim_theta);
		d_theta = h_theta;

	{
		int idata = blockDim.x * blockIdx.x + threadIdx.x;
		if (idata < c_ndata) {
			curandState localState = devStates[idata]; // grab state of this random number generator

			// instantiate the characteristic object
			ChiType Chi(current_iter, idata);
			Chi.SetState(localState);

		}

