diff --git a/NEWS b/NEWS
index f83f72697..387a1a597 100644
--- a/NEWS
+++ b/NEWS
@@ -5,14 +5,19 @@ ver 0.19 (not yet released)
   - alsa: new input plugin
 * new resampler option using libsoxr
 
-ver 0.18.6 (not yet released)
+ver 0.18.6 (2013/12/24)
 * input
   - cdio_paranoia: support libcdio-paranoia 0.90
+* tags
+  - riff: recognize upper-case "ID3" chunk name
+* decoder
+  - ffmpeg: use relative timestamps
 * output
   - openal: fix build failure on Mac OS X
   - osx: fix build failure
 * mixer
   - alsa: fix build failure with uClibc
+* fix replay gain during cross-fade
 * accept files without metadata
 
 ver 0.18.5 (2013/11/23)
diff --git a/src/OutputControl.cxx b/src/OutputControl.cxx
index be0d2bec9..bcfd6a8c1 100644
--- a/src/OutputControl.cxx
+++ b/src/OutputControl.cxx
@@ -96,6 +96,8 @@ audio_output_set_replay_gain_mode(struct audio_output *ao,
 {
 	if (ao->replay_gain_filter != nullptr)
 		replay_gain_filter_set_mode(ao->replay_gain_filter, mode);
+	if (ao->other_replay_gain_filter != nullptr)
+		replay_gain_filter_set_mode(ao->other_replay_gain_filter, mode);
 }
 
 void
diff --git a/src/PlayerThread.cxx b/src/PlayerThread.cxx
index 42c7120f0..aa42eed49 100644
--- a/src/PlayerThread.cxx
+++ b/src/PlayerThread.cxx
@@ -1080,8 +1080,11 @@ Player::Run()
 
 	delete cross_fade_tag;
 
-	if (song != nullptr)
+	if (song != nullptr) {
+		const auto uri = song->GetURI();
+		FormatDefault(player_domain, "played \"%s\"", uri.c_str());
 		song->Free();
+	}
 
 	pc.Lock();
 
diff --git a/src/decoder/FfmpegDecoderPlugin.cxx b/src/decoder/FfmpegDecoderPlugin.cxx
index a14b04510..01b551bb1 100644
--- a/src/decoder/FfmpegDecoderPlugin.cxx
+++ b/src/decoder/FfmpegDecoderPlugin.cxx
@@ -250,13 +250,14 @@ static DecoderCommand
 ffmpeg_send_packet(Decoder &decoder, InputStream &is,
 		   const AVPacket *packet,
 		   AVCodecContext *codec_context,
-		   const AVRational *time_base,
+		   const AVStream *stream,
 		   AVFrame *frame,
 		   uint8_t **buffer, int *buffer_size)
 {
 	if (packet->pts >= 0 && packet->pts != (int64_t)AV_NOPTS_VALUE)
 		decoder_timestamp(decoder,
-				  time_from_ffmpeg(packet->pts, *time_base));
+				  time_from_ffmpeg(packet->pts - stream->start_time,
+				  stream->time_base));
 
 	AVPacket packet2 = *packet;
 
@@ -469,7 +470,7 @@ ffmpeg_decode(Decoder &decoder, InputStream &input)
 		if (packet.stream_index == audio_stream)
 			cmd = ffmpeg_send_packet(decoder, input,
 						 &packet, codec_context,
-						 &av_stream->time_base,
+						 av_stream,
 						 frame,
 						 &interleaved_buffer, &interleaved_buffer_size);
 		else
@@ -480,7 +481,8 @@ ffmpeg_decode(Decoder &decoder, InputStream &input)
 		if (cmd == DecoderCommand::SEEK) {
 			int64_t where =
 				time_to_ffmpeg(decoder_seek_where(decoder),
-					       av_stream->time_base);
+					       av_stream->time_base) +
+				av_stream->start_time;
 
 			if (av_seek_frame(format_context, audio_stream, where,
 					  AV_TIME_BASE) < 0)
diff --git a/src/input/CdioParanoiaInputPlugin.cxx b/src/input/CdioParanoiaInputPlugin.cxx
index 73fb8acdd..bf1c3c908 100644
--- a/src/input/CdioParanoiaInputPlugin.cxx
+++ b/src/input/CdioParanoiaInputPlugin.cxx
@@ -43,7 +43,7 @@
 #include <assert.h>
 
 #ifdef HAVE_CDIO_PARANOIA_PARANOIA_H
-#include <cdio/parannoia/paranoia.h>
+#include <cdio/paranoia/paranoia.h>
 #else
 #include <cdio/paranoia.h>
 #endif
diff --git a/src/tag/Riff.cxx b/src/tag/Riff.cxx
index 73b2139d3..0f8f265fc 100644
--- a/src/tag/Riff.cxx
+++ b/src/tag/Riff.cxx
@@ -86,7 +86,8 @@ riff_seek_id3(FILE *file)
 			/* pad byte */
 			++size;
 
-		if (memcmp(chunk.id, "id3 ", 4) == 0)
+		if (memcmp(chunk.id, "id3 ", 4) == 0 ||
+		    memcmp(chunk.id, "ID3 ", 4) == 0)
 			/* found it! */
 			return size;