diff --git a/NEWS b/NEWS
index 54a828c8c..78b94fef4 100644
--- a/NEWS
+++ b/NEWS
@@ -18,7 +18,7 @@ ver 0.20 (not yet released)
 * reset song priority on playback
 * remove dependency on GLib
 
-ver 0.19.7 (not yet released)
+ver 0.19.7 (2014/12/17)
 * input
   - nfs: fix crash while canceling a failing file open operation
   - nfs: fix memory leak on connection failure
@@ -27,7 +27,10 @@ ver 0.19.7 (not yet released)
 * storage
   - nfs: implement I/O timeout (60 seconds)
 * playlist
+  - embcue: fix filename suffix detection
   - don't skip non-existent songs in "listplaylist"
+* decoder
+  - ffmpeg: fix time stamp underflow
 * fix memory allocator bug on Windows
 
 ver 0.19.6 (2014/12/08)
@@ -178,6 +181,12 @@ ver 0.19 (2014/10/10)
 * install systemd unit for socket activation
 * Android port
 
+ver 0.18.21 (2014/12/17)
+* playlist
+  - embcue: fix filename suffix detection
+* decoder
+  - ffmpeg: fix time stamp underflow
+
 ver 0.18.20 (2014/12/08)
 * decoder
   - ffmpeg: support FFmpeg 2.5
diff --git a/src/LogBackend.cxx b/src/LogBackend.cxx
index 6591fef2d..04c2e6324 100644
--- a/src/LogBackend.cxx
+++ b/src/LogBackend.cxx
@@ -194,6 +194,12 @@ FileLog(const Domain &domain, const char *message)
 		domain.GetName(),
 		chomp_length(message), message);
 
+#ifdef WIN32
+	/* force-flush the log file, because setvbuf() does not seem
+	   to have an effect on WIN32 */
+	fflush(stderr);
+#endif
+
 #ifdef HAVE_GLIB
 	g_free(converted);
 #endif
diff --git a/src/LogInit.cxx b/src/LogInit.cxx
index accd1d4d8..117c6d8dc 100644
--- a/src/LogInit.cxx
+++ b/src/LogInit.cxx
@@ -111,6 +111,9 @@ log_early_init(bool verbose)
 #ifdef ANDROID
 	(void)verbose;
 #else
+	/* force stderr to be line-buffered */
+	setvbuf(stderr, nullptr, _IOLBF, 0);
+
 	if (verbose)
 		SetLogThreshold(LogLevel::DEBUG);
 #endif
diff --git a/src/decoder/plugins/FfmpegDecoderPlugin.cxx b/src/decoder/plugins/FfmpegDecoderPlugin.cxx
index 7e164e5bd..0afdea6e4 100644
--- a/src/decoder/plugins/FfmpegDecoderPlugin.cxx
+++ b/src/decoder/plugins/FfmpegDecoderPlugin.cxx
@@ -316,10 +316,13 @@ ffmpeg_send_packet(Decoder &decoder, InputStream &is,
 		   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 - start_time_fallback(*stream),
-				  stream->time_base));
+	if (packet->pts >= 0 && packet->pts != (int64_t)AV_NOPTS_VALUE) {
+		auto start = start_time_fallback(*stream);
+		if (packet->pts >= start)
+			decoder_timestamp(decoder,
+					  time_from_ffmpeg(packet->pts - start,
+							   stream->time_base));
+	}
 
 	AVPacket packet2 = *packet;
 
diff --git a/src/playlist/plugins/EmbeddedCuePlaylistPlugin.cxx b/src/playlist/plugins/EmbeddedCuePlaylistPlugin.cxx
index 9e8f91e05..8baa11c03 100644
--- a/src/playlist/plugins/EmbeddedCuePlaylistPlugin.cxx
+++ b/src/playlist/plugins/EmbeddedCuePlaylistPlugin.cxx
@@ -178,7 +178,7 @@ const struct playlist_plugin embcue_playlist_plugin = {
 	embcue_playlist_open_uri,
 	nullptr,
 
+	nullptr,
 	embcue_playlist_suffixes,
 	nullptr,
-	nullptr,
 };
diff --git a/src/util/HugeAllocator.hxx b/src/util/HugeAllocator.hxx
index e02e69f10..fa45e5610 100644
--- a/src/util/HugeAllocator.hxx
+++ b/src/util/HugeAllocator.hxx
@@ -71,7 +71,9 @@ static inline void *
 HugeAllocate(size_t size)
 {
 	// TODO: use MEM_LARGE_PAGES
-	return VirtualAlloc(nullptr, size, MEM_RESERVE, PAGE_READWRITE);
+	return VirtualAlloc(nullptr, size,
+			    MEM_COMMIT|MEM_RESERVE,
+			    PAGE_READWRITE);
 }
 
 static inline void