diff --git a/src/framework/Common.cpp b/src/framework/Common.cpp
index 1d1bd3f5..8dd752d0 100644
--- a/src/framework/Common.cpp
+++ b/src/framework/Common.cpp
@@ -5779,6 +5779,11 @@ void idCommonLocal::Init( int argc, const char **argv, const char *cmdline ) {
 
 	PrintLoadingMessage( common->GetLanguageDict()->GetString( "#str_104346" ) );
 
+#ifdef ID_DEDICATED
+	// Dedicated builds must disable hardware before the sound system starts.
+	cvarSystem->SetCVarBool( "s_noSound", true );
+#endif
+
 	// start the sound system, but don't do any hardware operations yet
 	soundSystem->Init();
 
@@ -5789,7 +5794,6 @@ void idCommonLocal::Init( int argc, const char **argv, const char *cmdline ) {
 
 #ifdef	ID_DEDICATED
 	idAsyncNetwork::server.InitPort();
-	cvarSystem->SetCVarBool( "s_noSound", true );
 #else
 	if ( idAsyncNetwork::serverDedicated.GetInteger() == 1 ) {
 		idAsyncNetwork::server.InitPort();
diff --git a/src/sound/snd_system.cpp b/src/sound/snd_system.cpp
index 706f2e26..e0c496c0 100644
--- a/src/sound/snd_system.cpp
+++ b/src/sound/snd_system.cpp
@@ -535,6 +535,13 @@ idSoundSystemLocal::Render
 */
 void idSoundSystemLocal::Render()
 {
+#if defined( ID_DEDICATED )
+	// Dedicated map-load pacifier updates can call Render. Never let those
+	// calls initialize or retry an audio backend that the server cannot use.
+	Sound_UpdateControllerRumble( 0.0f );
+	return;
+#endif
+
 
 	if( s_noSound.GetBool() )
 	{
