diff --git a/NEWS b/NEWS
index 057dba43c..a509c8e13 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,7 @@
 ver 0.21.15 (not yet released)
 * decoder
   - dsdiff, dsf: fix displayed bit rate
+  - mpcdec: fix bogus ReplayGain values
 * output
   - solaris: fix build with glibc 2.30
 
diff --git a/src/decoder/plugins/MpcdecDecoderPlugin.cxx b/src/decoder/plugins/MpcdecDecoderPlugin.cxx
index f7f0870fd..68ecc115d 100644
--- a/src/decoder/plugins/MpcdecDecoderPlugin.cxx
+++ b/src/decoder/plugins/MpcdecDecoderPlugin.cxx
@@ -141,8 +141,12 @@ static constexpr ReplayGainTuple
 ImportMpcdecReplayGain(mpc_uint16_t gain, mpc_uint16_t peak) noexcept
 {
 	auto t = ReplayGainTuple::Undefined();
-	t.gain = MPC_OLD_GAIN_REF - (gain  / 256.);
-	t.peak = pow(10, peak / 256. / 20) / 32767;
+
+	if (gain != 0 && peak != 0) {
+		t.gain = MPC_OLD_GAIN_REF - (gain  / 256.);
+		t.peak = pow(10, peak / 256. / 20) / 32767;
+	}
+
 	return t;
 }
 
@@ -187,7 +191,8 @@ mpcdec_decode(DecoderClient &client, InputStream &is)
 
 	{
 		const auto rgi = ImportMpcdecReplayGain(info);
-		client.SubmitReplayGain(&rgi);
+		if (rgi.IsDefined())
+			client.SubmitReplayGain(&rgi);
 	}
 
 	client.Ready(audio_format, is.IsSeekable(),