implement block descent method