implement discovery