 			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);
+	}
 };
 
 



	//-----------------------------------------------------------------------------
	// Utility Routines
	//-----------------------------------------------------------------------------


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

			cudaError_t retval = detail.template EnactPass<Policy, PassPolicy>();
			if (retval) return retval;

			return Iterate<
				1,
				LAST_PASS,
				CURRENT_BIT + RADIX_BITS,
				RADIX_BITS>::Invoke(detail);
		}
	};

