Use ServiceLoader for discovery