only block when its necessary