abstracted BaseDiscoverer for code reuse