 	struct Iterate <0, LAST_PASS, CURRENT_BIT, RADIX_BITS>
 	{
 		template <typename Detail>
-		static cudaError_t Invoke(Enactor *enactor, Detail &detail)
+		static cudaError_t Invoke(Detail &detail)
 		{
 			typedef PassPolicy<0, CURRENT_BIT, typename Detail::KeyTraits, NopKeyConversion> PassPolicy;
 
-			cudaError_t retval = enactor->template EnactPass<Policy, PassPolicy>(detail);
+			cudaError_t retval = detail.template EnactPass<Policy, PassPolicy>();
 			if (retval) return retval;
 
 			return Iterate<
 				1,
 				LAST_PASS,
 				CURRENT_BIT + RADIX_BITS,
-				RADIX_BITS>::Invoke(enactor, detail);
+				RADIX_BITS>::Invoke(detail);
 		}
 	};
 

	struct Iterate <LAST_PASS, LAST_PASS, CURRENT_BIT, RADIX_BITS>
	{
		template <typename Detail>
		static cudaError_t Invoke(Enactor *enactor, Detail &detail)
		{
			typedef PassPolicy<LAST_PASS, CURRENT_BIT, NopKeyConversion, typename Detail::KeyTraits> PassPolicy;

			return enactor->template EnactPass<Policy, PassPolicy>(detail);
		}
	};


			problem_storage(problem_storage),
			max_grid_size(max_grid_size)
	{}


	template <typename Policy>
	cudaError_t EnactSort()
	{
		return enactor->template EnactSort<Policy>(*this);
	}

	template <typename Policy, typename PassPolicy>
	cudaError_t EnactPass()
	{
		return enactor->template EnactPass<Policy, PassPolicy>(*this);
	}
};


