 	}
 
 	// compute the conditional log-posterior density of the characteristics given the population parameter
-	template<class ChiType>
-	__global__ virtual double logdensity_pop(double* theta) {
+	template<class ChiType> __global__
+	virtual void logdensity_pop(double* theta, double* chi, double* p_logdens_pop) {
 		return 0.0;
 	}
 
 	// propose a new value of the population parameters
-	virtual hvector Propose(hvector& snorm_deviate, hvector& scaled_proposal)
+	virtual hvector Propose()
 	{
         // get the unit proposal
         for (int k=0; k<dim_theta; k++) {

class Characteristic {
public:
	// constructor
	__device__ __host__ Characteristic(curandState& localState, int iter) : state(localState), current_iter(iter);
	__device__ __host__ virtual ~Characteristic() {}

	// compute the conditional log-posterior density of the measurements given the characteristic

				scaled_proposal_j += cholfact[cholfact_index] * snorm_deviate[k];
				cholfact_index++;
			}
			proposed_chi[j] = chi[c_ndata * j + idata] + scaled_proposal_j;
			scaled_proposal[j] = scaled_proposal_j;
		}
		return proposed_chi;
