implemented following