implementing required features