added other implementations