implemented required functionality