diff --git a/src/Main.cxx b/src/Main.cxx
index e2eb7e92000a146797c7fdecb38b7c63b7d51b99..d12f0f3f37337af2f1fd2b58c02bf46be31cef73 100644
--- a/src/Main.cxx
+++ b/src/Main.cxx
@@ -593,7 +593,7 @@ try {
 		instance->neighbors->Open();
 #endif
 
-	ZeroconfInit(instance->event_loop);
+	ZeroconfInit(GetGlobalConfig(), instance->event_loop);
 
 	for (auto &partition : instance->partitions)
 		StartPlayerThread(partition.pc);
diff --git a/src/zeroconf/ZeroconfGlue.cxx b/src/zeroconf/ZeroconfGlue.cxx
index 9e704b8fb70acdf007435e58e8ebf2582c10bd11..e3ecb8eba62a997d349bb2beabe021bcd77e201c 100644
--- a/src/zeroconf/ZeroconfGlue.cxx
+++ b/src/zeroconf/ZeroconfGlue.cxx
@@ -21,7 +21,7 @@
 #include "ZeroconfGlue.hxx"
 #include "ZeroconfAvahi.hxx"
 #include "ZeroconfBonjour.hxx"
-#include "config/Global.hxx"
+#include "config/Data.hxx"
 #include "config/Option.hxx"
 #include "Listen.hxx"
 #include "util/Domain.hxx"
@@ -40,12 +40,12 @@ static constexpr Domain zeroconf_domain("zeroconf");
 static int zeroconfEnabled;
 
 void
-ZeroconfInit(gcc_unused EventLoop &loop)
+ZeroconfInit(const ConfigData &config, gcc_unused EventLoop &loop)
 {
 	const char *serviceName;
 
-	zeroconfEnabled = config_get_bool(ConfigOption::ZEROCONF_ENABLED,
-					  DEFAULT_ZEROCONF_ENABLED);
+	zeroconfEnabled = config.GetBool(ConfigOption::ZEROCONF_ENABLED,
+					 DEFAULT_ZEROCONF_ENABLED);
 	if (!zeroconfEnabled)
 		return;
 
@@ -56,8 +56,8 @@ ZeroconfInit(gcc_unused EventLoop &loop)
 		return;
 	}
 
-	serviceName = config_get_string(ConfigOption::ZEROCONF_NAME,
-					SERVICE_NAME);
+	serviceName = config.GetString(ConfigOption::ZEROCONF_NAME,
+				       SERVICE_NAME);
 
 #ifdef HAVE_AVAHI
 	AvahiInit(loop, serviceName);
diff --git a/src/zeroconf/ZeroconfGlue.hxx b/src/zeroconf/ZeroconfGlue.hxx
index 92d2097e6a28d9a6214c42a481e51c09ec1db91c..34672fbc30cd99fda045ebc83b12dc70a620f644 100644
--- a/src/zeroconf/ZeroconfGlue.hxx
+++ b/src/zeroconf/ZeroconfGlue.hxx
@@ -22,12 +22,13 @@
 
 #include "check.h"
 
+struct ConfigData;
 class EventLoop;
 
 #ifdef HAVE_ZEROCONF
 
 void
-ZeroconfInit(EventLoop &loop);
+ZeroconfInit(const ConfigData &config, EventLoop &loop);
 
 void
 ZeroconfDeinit();
@@ -35,7 +36,7 @@ ZeroconfDeinit();
 #else /* ! HAVE_ZEROCONF */
 
 static inline void
-ZeroconfInit(EventLoop &)
+ZeroconfInit(const ConfigData &, EventLoop &)
 {}
 
 static inline void