                              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;
+	
 	T val = ((T*)dataIn)[offset];
 	return val * (1.f/(maxval<T>()+1));
 }

		               BF_STATUS_DEVICE_ERROR );
		BF_CHECK_CUFFT( cufftXtSetCallback(_handle,
		                                   (void**)&callback_load_r_hptr,
		                                   CUFFT_CB_LD_REAL, 0) );
		break;
	}
	case BF_DTYPE_CF32: // Fall-through

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