 		               BF_STATUS_DEVICE_ERROR );
 		BF_CHECK_CUFFT( cufftXtSetCallback(_handle,
 		                                   (void**)&callback_load_c_hptr,
-		                                   CUFFT_CB_LD_COMPLEX, 0) );
+		                                   CUFFT_CB_LD_COMPLEX,
+		                                   (void**)&callback_data) );
 		break;
 	}
 	case BF_DTYPE_CI8: {

		               BF_STATUS_DEVICE_ERROR );
		BF_CHECK_CUFFT( cufftXtSetCallback(_handle,
		                                   (void**)&callback_load_r_hptr,
		                                   CUFFT_CB_LD_REAL, 0) );
		break;
	}
	case BF_DTYPE_U16: {

                                size_t offset,
                                void*  callerInfo,
                                void*  sharedPointer) {
	// WAR for CUFFT insisting on pointers aligned to sizeof(cufftComplex)
	CallbackData* callback_data = (CallbackData*)callerInfo;
	*(char*)&dataIn += callback_data->ptr_offset;
	
	short2 val = ((short2*)dataIn)[offset];
	return make_float2(val.x * (1.f/32768),
	                   val.y * (1.f/32768));
