 	printf("Custom enactor on 17-bit-effective keys, %d iterations, %d elements", iterations, num_elements);
 	
 	//
-	// Allocate device storage and create sorting enactor  
-	//
-
-	RadixSortStorage<unsigned int> device_storage;	
+	// Allocate device storage and create sorting enactor (with uints as values) 
+	//
+
+	RadixSortStorage<unsigned int, unsigned int> device_storage;	
 	CUDA_SAFE_CALL( cudaMalloc((void**) &device_storage.d_keys, sizeof(unsigned int) * num_elements) );
-
-	AmberRadixSortingEnactor<> sorting_enactor(num_elements);
+	CUDA_SAFE_CALL( cudaMalloc((void**) &device_storage.d_values, sizeof(unsigned int) * num_elements) );
+
+	AmberRadixSortingEnactor<unsigned int> sorting_enactor(num_elements);
 
 
 	

		
		Base::template DigitPlacePass<0, 4, 0,  MandatoryPassNopFunctor<ConvertedKeyType>, MandatoryPassNopFunctor<ConvertedKeyType> >(converted_storage);		// d_keys (orig) -> d_alt_keys (orig, inner)
		Base::template DigitPlacePass<1, 4, 4,  MandatoryPassNopFunctor<ConvertedKeyType>, MandatoryPassNopFunctor<ConvertedKeyType> >(inner_pass_storage); 	// d_alt_keys (orig, inner) -> d_keys (inner)
		Base::template DigitPlacePass<2, 4, 8,  MandatoryPassNopFunctor<ConvertedKeyType>, MandatoryPassNopFunctor<ConvertedKeyType> >(inner_pass_storage); 	// d_keys (inner) -> d_alt_keys  (orig, inner)
		Base::template DigitPlacePass<3, 3, 12, MandatoryPassNopFunctor<ConvertedKeyType>, MandatoryPassNopFunctor<ConvertedKeyType> >(inner_pass_storage); 	// d_alt_keys (orig, inner) -> d_keys (inner)
		Base::template DigitPlacePass<4, 2, 15, MandatoryPassNopFunctor<ConvertedKeyType>, MandatoryPassNopFunctor<ConvertedKeyType> >(final_pass_storage); 	// d_keys (inner) -> d_keys (orig)

		return cudaSuccess;
	}

    cutGetCmdLineArgumenti( argc, (const char**) argv, "n", (int*)&num_elements);
	g_verbose = cutCheckCmdLineFlag( argc, (const char**) argv, "v");

	TestSort(iterations, num_elements, true);	// custom enactor (explicit passes)
	TestSort(iterations, num_elements, false); 	// default (dynamic pass detection)
}


