added own implementation