diff --git a/NEWS b/NEWS
index a735f884d..3459777c4 100644
--- a/NEWS
+++ b/NEWS
@@ -28,9 +28,14 @@ ver 0.18 (2012/??/??)
 * improved decoder/output error reporting
 * eliminate timer wakeup on idle MPD
 
-ver 0.17.6 (not yet released)
+ver 0.17.6 (2013/10/14)
 * mixer:
   - alsa: fix busy loop when USB sound device gets unplugged
+* decoder:
+  - modplug: fix build with Debian package 1:0.8.8.4-4
+* stored playlists:
+  - fix loading playlists with references to local files
+  - obey filesystem_charset for URLs
 
 ver 0.17.5 (2013/08/04)
 * protocol:
diff --git a/src/PlaylistFile.cxx b/src/PlaylistFile.cxx
index 793ee5e58..e01bc1d26 100644
--- a/src/PlaylistFile.cxx
+++ b/src/PlaylistFile.cxx
@@ -241,7 +241,13 @@ LoadPlaylistFile(const char *utf8path, Error &error)
 		if (*s == 0 || *s == PLAYLIST_COMMENT)
 			continue;
 
-		if (!uri_has_scheme(s)) {
+		if (g_path_is_absolute(s)) {
+			const auto path = Path::ToUTF8(s);
+			if (path.empty())
+				continue;
+
+			s = g_strconcat("file://", path.c_str(), NULL);
+		} else if (!uri_has_scheme(s)) {
 			char *path_utf8;
 
 			path_utf8 = map_fs_to_utf8(s);
@@ -249,8 +255,13 @@ LoadPlaylistFile(const char *utf8path, Error &error)
 				continue;
 
 			s = path_utf8;
-		} else
-			s = g_strdup(s);
+		} else {
+			const auto path = Path::ToUTF8(s);
+			if (path.empty())
+				continue;
+
+			s = g_strdup(path.c_str());
+		}
 
 		contents.emplace_back(s);
 		if (contents.size() >= playlist_max_length)
diff --git a/src/PlaylistSave.cxx b/src/PlaylistSave.cxx
index 12c82dc73..6e17b6fc3 100644
--- a/src/PlaylistSave.cxx
+++ b/src/PlaylistSave.cxx
@@ -33,6 +33,8 @@
 
 #include <glib.h>
 
+#include <string.h>
+
 void
 playlist_print_song(FILE *file, const Song *song)
 {
@@ -114,6 +116,14 @@ playlist_load_spl(struct playlist *playlist, struct player_control *pc,
 	for (unsigned i = start_index; i < end_index; ++i) {
 		const auto &uri_utf8 = contents[i];
 
+		if (memcmp(uri_utf8.c_str(), "file:///", 8) == 0) {
+			const char *path_utf8 = uri_utf8.c_str() + 7;
+
+			if (playlist->AppendFile(*pc, path_utf8) != PLAYLIST_RESULT_SUCCESS)
+				g_warning("can't add file \"%s\"", path_utf8);
+			continue;
+		}
+
 		if ((playlist->AppendURI(*pc, uri_utf8.c_str())) != PLAYLIST_RESULT_SUCCESS) {
 			/* for windows compatibility, convert slashes */
 			char *temp2 = g_strdup(uri_utf8.c_str());