diff --git a/Makefile.am b/Makefile.am
index 5bfabe752..137a567c5 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -56,7 +56,6 @@ mpd_headers = \
 	src/output_all.h \
 	src/output_thread.h \
 	src/output_control.h \
-	src/output_state.h \
 	src/output_print.h \
 	src/output_command.h \
 	src/filter_internal.h \
@@ -82,7 +81,6 @@ mpd_headers = \
 	src/decoder_plugin.h \
 	src/decoder_internal.h \
 	src/directory.h \
-	src/directory_save.h \
 	src/database.h \
 	src/encoder_plugin.h \
 	src/encoder_list.h \
@@ -144,11 +142,9 @@ mpd_headers = \
 	src/playlist.h \
 	src/playlist_error.h \
 	src/playlist_internal.h \
-	src/playlist_state.h \
 	src/playlist_plugin.h \
 	src/playlist_list.h \
 	src/playlist_vector.h \
-	src/playlist_database.h \
 	src/playlist/extm3u_playlist_plugin.h \
 	src/playlist/m3u_playlist_plugin.h \
 	src/playlist/pls_playlist_plugin.h \
@@ -162,7 +158,6 @@ mpd_headers = \
 	src/riff.h \
 	src/aiff.h \
 	src/queue.h \
-	src/queue_save.h \
 	src/refcount.h \
 	src/replay_gain_config.h \
 	src/replay_gain_info.h \
@@ -171,11 +166,9 @@ mpd_headers = \
 	src/time_print.c src/time_print.h \
 	src/song.h \
 	src/song_print.h \
-	src/song_save.h \
 	src/song_sticker.h \
 	src/song_sort.c src/song_sort.h \
 	src/socket_util.h \
-	src/state_file.h \
 	src/stats.h \
 	src/sticker.h \
 	src/sticker_print.h \
@@ -187,7 +180,6 @@ mpd_headers = \
 	src/tag_id3.h \
 	src/tag_rva2.h \
 	src/tag_print.h \
-	src/tag_save.h \
 	src/tokenizer.h \
 	src/strset.h \
 	src/uri.h \
@@ -241,14 +233,14 @@ src_mpd_SOURCES = \
 	src/decoder_internal.c \
 	src/decoder_print.c \
 	src/Directory.cxx \
-	src/directory_save.c \
+	src/DirectorySave.cxx src/DirectorySave.hxx \
 	src/DatabaseGlue.cxx \
 	src/DatabasePrint.cxx src/DatabasePrint.hxx \
 	src/DatabaseQueue.cxx src/DatabaseQueue.hxx \
 	src/DatabasePlaylist.cxx src/DatabasePlaylist.hxx \
 	src/db_error.h \
 	src/db_lock.c src/db_lock.h \
-	src/db_save.c src/db_save.h \
+	src/DatabaseSave.cxx src/DatabaseSave.hxx \
 	src/DatabasePlugin.hxx \
 	src/DatabaseVisitor.hxx \
 	src/DatabaseSelection.cxx src/DatabaseSelection.hxx \
@@ -313,28 +305,28 @@ src_mpd_SOURCES = \
 	src/PlaylistMapper.cxx src/PlaylistMapper.hxx \
 	src/PlaylistAny.cxx src/PlaylistAny.hxx \
 	src/PlaylistSong.cxx src/PlaylistSong.hxx \
-	src/playlist_state.c \
+	src/PlaylistState.cxx src/PlaylistState.hxx \
 	src/PlaylistQueue.cxx src/PlaylistQueue.hxx \
 	src/playlist_vector.c \
-	src/playlist_database.c \
+	src/PlaylistDatabase.cxx \
 	src/queue.c \
 	src/QueuePrint.cxx src/QueuePrint.hxx \
-	src/queue_save.c \
+	src/QueueSave.cxx src/QueueSave.hxx \
 	src/replay_gain_config.c \
 	src/replay_gain_info.c \
 	src/sig_handlers.c \
 	src/Song.cxx \
 	src/song_update.c \
 	src/song_print.c \
-	src/song_save.c \
+	src/SongSave.cxx src/SongSave.hxx \
 	src/resolver.c src/resolver.h \
 	src/socket_util.c \
-	src/state_file.c \
+	src/StateFile.cxx src/StateFile.hxx \
 	src/Stats.cxx \
 	src/tag.c \
 	src/tag_pool.c \
 	src/tag_print.c \
-	src/tag_save.c \
+	src/TagSave.cxx src/TagSave.hxx \
 	src/tag_handler.c src/tag_handler.h \
 	src/tag_file.c src/tag_file.h \
 	src/tokenizer.c \
@@ -821,7 +813,7 @@ OUTPUT_API_SRC = \
 	src/output_thread.c \
 	src/output_error.h \
 	src/output_control.c \
-	src/output_state.c \
+	src/OutputState.cxx src/OutputState.hxx \
 	src/output_print.c \
 	src/output_command.c \
 	src/output_plugin.c src/output_plugin.h \
@@ -1046,9 +1038,9 @@ noinst_PROGRAMS = \
 	test/read_conf \
 	test/run_resolver \
 	test/DumpDatabase \
-	test/run_input \
+	test/RunInput \
 	test/dump_text_file \
-	test/dump_playlist \
+	test/DumpPlaylist \
 	test/run_decoder \
 	test/read_tags \
 	test/run_filter \
@@ -1083,25 +1075,25 @@ test_DumpDatabase_LDADD = \
 test_DumpDatabase_SOURCES = test/DumpDatabase.cxx \
 	src/DatabaseRegistry.cxx \
 	src/DatabaseSelection.cxx \
-	src/Directory.cxx src/directory_save.c \
-	src/playlist_vector.c src/playlist_database.c \
-	src/db_lock.c src/db_save.c \
-	src/Song.cxx src/song_sort.c src/song_save.c \
-	src/tag.c src/tag_pool.c src/tag_save.c \
+	src/Directory.cxx src/DirectorySave.cxx \
+	src/playlist_vector.c src/PlaylistDatabase.cxx \
+	src/db_lock.c src/DatabaseSave.cxx \
+	src/Song.cxx src/song_sort.c src/SongSave.cxx \
+	src/tag.c src/tag_pool.c src/TagSave.cxx \
 	src/path.c \
 	src/SongFilter.cxx \
 	src/text_file.c \
 	src/conf.c src/tokenizer.c src/utils.c src/string_util.c
 
-test_run_input_LDADD = \
+test_RunInput_LDADD = \
 	$(INPUT_LIBS) \
 	$(ARCHIVE_LIBS) \
 	$(GLIB_LIBS)
-test_run_input_SOURCES = test/run_input.c \
+test_RunInput_SOURCES = test/RunInput.c \
 	test/stdbin.h \
 	src/io_thread.c src/io_thread.h \
 	src/conf.c src/tokenizer.c src/utils.c src/string_util.c\
-	src/tag.c src/tag_pool.c src/tag_save.c \
+	src/tag.c src/tag_pool.c src/TagSave.cxx \
 	src/fd_util.c
 
 test_dump_text_file_LDADD = \
@@ -1116,7 +1108,7 @@ test_dump_text_file_SOURCES = test/dump_text_file.c \
 	src/text_input_stream.c src/fifo_buffer.c \
 	src/fd_util.c
 
-test_dump_playlist_LDADD = \
+test_DumpPlaylist_LDADD = \
 	$(PLAYLIST_LIBS) \
 	$(FLAC_LIBS) \
 	$(INPUT_LIBS) \
@@ -1125,12 +1117,12 @@ test_dump_playlist_LDADD = \
 	$(TAG_LIBS) \
 	libutil.a \
 	$(GLIB_LIBS)
-test_dump_playlist_SOURCES = test/dump_playlist.c \
+test_DumpPlaylist_SOURCES = test/DumpPlaylist.cxx \
 	$(DECODER_SRC) \
 	src/io_thread.c src/io_thread.h \
 	src/conf.c src/tokenizer.c src/utils.c src/string_util.c\
 	src/uri.c \
-	src/Song.cxx src/tag.c src/tag_pool.c src/tag_save.c \
+	src/Song.cxx src/tag.c src/tag_pool.c src/TagSave.cxx \
 	src/tag_handler.c src/tag_file.c \
 	src/audio_check.c src/pcm_buffer.c \
 	src/text_input_stream.c src/fifo_buffer.c \
@@ -1138,7 +1130,7 @@ test_dump_playlist_SOURCES = test/dump_playlist.c \
 	src/fd_util.c
 
 if HAVE_FLAC
-test_dump_playlist_SOURCES += \
+test_DumpPlaylist_SOURCES += \
 	src/replay_gain_info.c \
 	src/decoder/FLACMetaData.cxx
 endif
@@ -1213,11 +1205,11 @@ test_run_filter_SOURCES = test/run_filter.c \
 if ENABLE_DESPOTIFY
 test_read_tags_SOURCES += \
 	src/despotify_utils.c
-test_run_input_SOURCES += \
+test_RunInput_SOURCES += \
 	src/despotify_utils.c
 test_dump_text_file_SOURCES += \
 	src/despotify_utils.c
-test_dump_playlist_SOURCES += \
+test_DumpPlaylist_SOURCES += \
 	src/despotify_utils.c
 test_run_decoder_SOURCES += \
 	src/despotify_utils.c
diff --git a/src/DatabaseGlue.cxx b/src/DatabaseGlue.cxx
index 03a717cb2..88791879e 100644
--- a/src/DatabaseGlue.cxx
+++ b/src/DatabaseGlue.cxx
@@ -20,11 +20,11 @@
 #include "config.h"
 #include "DatabaseGlue.hxx"
 #include "DatabaseRegistry.hxx"
+#include "DatabaseSave.hxx"
 
 extern "C" {
 #include "database.h"
 #include "db_error.h"
-#include "db_save.h"
 #include "stats.h"
 #include "conf.h"
 #include "glib_compat.h"
diff --git a/src/db_save.c b/src/DatabaseSave.cxx
similarity index 98%
rename from src/db_save.c
rename to src/DatabaseSave.cxx
index 4af9d58b8..711d5b2f3 100644
--- a/src/db_save.c
+++ b/src/DatabaseSave.cxx
@@ -18,15 +18,18 @@
  */
 
 #include "config.h"
-#include "db_save.h"
+#include "DatabaseSave.hxx"
 #include "db_lock.h"
 #include "directory.h"
-#include "directory_save.h"
+#include "DirectorySave.hxx"
 #include "song.h"
+
+extern "C" {
 #include "path.h"
 #include "text_file.h"
 #include "tag.h"
 #include "tag_internal.h"
+}
 
 #include <glib.h>
 
diff --git a/src/db_save.h b/src/DatabaseSave.hxx
similarity index 88%
rename from src/db_save.h
rename to src/DatabaseSave.hxx
index d232d7331..f96bf5e21 100644
--- a/src/db_save.h
+++ b/src/DatabaseSave.hxx
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003-2011 The Music Player Daemon Project
+ * Copyright (C) 2003-2013 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -17,12 +17,11 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
-#ifndef MPD_DB_SAVE_H
-#define MPD_DB_SAVE_H
+#ifndef MPD_DATABASE_SAVE_HXX
+#define MPD_DATABASE_SAVE_HXX
 
 #include "gerror.h"
 
-#include <stdbool.h>
 #include <stdio.h>
 
 struct directory;
diff --git a/src/directory_save.c b/src/DirectorySave.cxx
similarity index 96%
rename from src/directory_save.c
rename to src/DirectorySave.cxx
index de1df050a..83a1ffd5a 100644
--- a/src/directory_save.c
+++ b/src/DirectorySave.cxx
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003-2011 The Music Player Daemon Project
+ * Copyright (C) 2003-2013 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -18,12 +18,15 @@
  */
 
 #include "config.h"
-#include "directory_save.h"
+#include "DirectorySave.hxx"
 #include "directory.h"
 #include "song.h"
+#include "SongSave.hxx"
+#include "PlaylistDatabase.hxx"
+
+extern "C" {
 #include "text_file.h"
-#include "song_save.h"
-#include "playlist_database.h"
+}
 
 #include <assert.h>
 #include <string.h>
@@ -152,7 +155,7 @@ directory_load(FILE *fp, struct directory *directory,
 			if (directory_get_song(directory, name) != NULL) {
 				g_set_error(error, directory_quark(), 0,
 					    "Duplicate song '%s'", name);
-				return NULL;
+				return false;
 			}
 
 			song = song_load(fp, directory, name,
diff --git a/src/directory_save.h b/src/DirectorySave.hxx
similarity index 87%
rename from src/directory_save.h
rename to src/DirectorySave.hxx
index 2d0056830..18c3bf64e 100644
--- a/src/directory_save.h
+++ b/src/DirectorySave.hxx
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003-2011 The Music Player Daemon Project
+ * Copyright (C) 2003-2013 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -17,12 +17,11 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
-#ifndef MPD_DIRECTORY_SAVE_H
-#define MPD_DIRECTORY_SAVE_H
+#ifndef MPD_DIRECTORY_SAVE_HXX
+#define MPD_DIRECTORY_SAVE_HXX
 
 #include <glib.h>
 
-#include <stdbool.h>
 #include <stdio.h>
 
 struct directory;
diff --git a/src/Main.cxx b/src/Main.cxx
index 44042d8ca..9a5fa1cd9 100644
--- a/src/Main.cxx
+++ b/src/Main.cxx
@@ -22,6 +22,7 @@
 #include "PlaylistFile.hxx"
 #include "UpdateGlue.hxx"
 #include "chunk.h"
+#include "StateFile.hxx"
 
 extern "C" {
 #include "daemon.h"
@@ -51,7 +52,6 @@ extern "C" {
 #include "decoder_list.h"
 #include "input_init.h"
 #include "playlist_list.h"
-#include "state_file.h"
 #include "tag.h"
 #include "zeroconf.h"
 #include "event_pipe.h"
diff --git a/src/output_state.c b/src/OutputState.cxx
similarity index 95%
rename from src/output_state.c
rename to src/OutputState.cxx
index 7bcafb36b..95aeacbca 100644
--- a/src/output_state.c
+++ b/src/OutputState.cxx
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003-2011 The Music Player Daemon Project
+ * Copyright (C) 2003-2013 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -23,9 +23,12 @@
  */
 
 #include "config.h"
-#include "output_state.h"
+#include "OutputState.hxx"
 #include "output_internal.h"
+
+extern "C" {
 #include "output_all.h"
+}
 
 #include <glib.h>
 
diff --git a/src/output_state.h b/src/OutputState.hxx
similarity index 90%
rename from src/output_state.h
rename to src/OutputState.hxx
index 320a3520a..5ab765ba8 100644
--- a/src/output_state.h
+++ b/src/OutputState.hxx
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003-2011 The Music Player Daemon Project
+ * Copyright (C) 2003-2013 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -22,10 +22,9 @@
  *
  */
 
-#ifndef OUTPUT_STATE_H
-#define OUTPUT_STATE_H
+#ifndef MPD_OUTPUT_STATE_HXX
+#define MPD_OUTPUT_STATE_HXX
 
-#include <stdbool.h>
 #include <stdio.h>
 
 bool
diff --git a/src/playlist_database.c b/src/PlaylistDatabase.cxx
similarity index 92%
rename from src/playlist_database.c
rename to src/PlaylistDatabase.cxx
index 6b9d87155..b88ebbd6b 100644
--- a/src/playlist_database.c
+++ b/src/PlaylistDatabase.cxx
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003-2011 The Music Player Daemon Project
+ * Copyright (C) 2003-2013 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -18,10 +18,13 @@
  */
 
 #include "config.h"
-#include "playlist_database.h"
+#include "PlaylistDatabase.hxx"
+
+extern "C" {
 #include "playlist_vector.h"
 #include "text_file.h"
 #include "string_util.h"
+}
 
 #include <string.h>
 #include <stdlib.h>
@@ -47,9 +50,9 @@ bool
 playlist_metadata_load(FILE *fp, struct list_head *pv, const char *name,
 		       GString *buffer, GError **error_r)
 {
-	struct playlist_metadata pm = {
-		.mtime = 0,
-	};
+	struct playlist_metadata pm;
+	pm.mtime = 0;
+
 	char *line, *colon;
 	const char *value;
 
diff --git a/src/playlist_database.h b/src/PlaylistDatabase.hxx
similarity index 88%
rename from src/playlist_database.h
rename to src/PlaylistDatabase.hxx
index 3238fa06b..0b4cd3f3a 100644
--- a/src/playlist_database.h
+++ b/src/PlaylistDatabase.hxx
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003-2011 The Music Player Daemon Project
+ * Copyright (C) 2003-2013 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -17,12 +17,11 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
-#ifndef MPD_PLAYLIST_DATABASE_H
-#define MPD_PLAYLIST_DATABASE_H
+#ifndef MPD_PLAYLIST_DATABASE_HXX
+#define MPD_PLAYLIST_DATABASE_HXX
 
 #include "check.h"
 
-#include <stdbool.h>
 #include <stdio.h>
 #include <glib.h>
 
diff --git a/src/PlaylistSave.hxx b/src/PlaylistSave.hxx
index 20b2ca425..ff5f0c494 100644
--- a/src/PlaylistSave.hxx
+++ b/src/PlaylistSave.hxx
@@ -22,7 +22,6 @@
 
 #include "playlist_error.h"
 
-#include <stdbool.h>
 #include <stdio.h>
 
 struct song;
diff --git a/src/playlist_state.c b/src/PlaylistState.cxx
similarity index 99%
rename from src/playlist_state.c
rename to src/PlaylistState.cxx
index 4aa2c2c92..0cfd32723 100644
--- a/src/playlist_state.c
+++ b/src/PlaylistState.cxx
@@ -23,13 +23,15 @@
  */
 
 #include "config.h"
-#include "playlist_state.h"
+#include "PlaylistState.hxx"
+#include "QueueSave.hxx"
+
+extern "C" {
 #include "playlist.h"
 #include "player_control.h"
-#include "queue_save.h"
-#include "path.h"
 #include "text_file.h"
 #include "conf.h"
+}
 
 #include <string.h>
 #include <stdlib.h>
diff --git a/src/playlist_state.h b/src/PlaylistState.hxx
similarity index 91%
rename from src/playlist_state.h
rename to src/PlaylistState.hxx
index f67d01d2c..d38fe9d12 100644
--- a/src/playlist_state.h
+++ b/src/PlaylistState.hxx
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003-2011 The Music Player Daemon Project
+ * Copyright (C) 2003-2013 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -22,11 +22,10 @@
  *
  */
 
-#ifndef PLAYLIST_STATE_H
-#define PLAYLIST_STATE_H
+#ifndef MPD_PLAYLIST_STATE_HXX
+#define MPD_PLAYLIST_STATE_HXX
 
 #include <glib.h>
-#include <stdbool.h>
 #include <stdio.h>
 
 struct playlist;
diff --git a/src/queue_save.c b/src/QueueSave.cxx
similarity index 95%
rename from src/queue_save.c
rename to src/QueueSave.cxx
index 00b5ecbb1..96713c700 100644
--- a/src/queue_save.c
+++ b/src/QueueSave.cxx
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003-2011 The Music Player Daemon Project
+ * Copyright (C) 2003-2013 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -18,13 +18,16 @@
  */
 
 #include "config.h"
-#include "queue_save.h"
-#include "queue.h"
+#include "QueueSave.hxx"
 #include "song.h"
+#include "SongSave.hxx"
+
+extern "C" {
+#include "queue.h"
 #include "uri.h"
 #include "database.h"
-#include "song_save.h"
 #include "text_file.h"
+}
 
 #include <stdlib.h>
 
diff --git a/src/queue_save.h b/src/QueueSave.hxx
similarity index 90%
rename from src/queue_save.h
rename to src/QueueSave.hxx
index 5526d615d..d6b09329b 100644
--- a/src/queue_save.h
+++ b/src/QueueSave.hxx
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003-2011 The Music Player Daemon Project
+ * Copyright (C) 2003-2013 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -22,8 +22,8 @@
  * back into memory.
  */
 
-#ifndef QUEUE_SAVE_H
-#define QUEUE_SAVE_H
+#ifndef MPD_QUEUE_SAVE_HXX
+#define MPD_QUEUE_SAVE_HXX
 
 #include <glib.h>
 #include <stdio.h>
diff --git a/src/song_save.c b/src/SongSave.cxx
similarity index 96%
rename from src/song_save.c
rename to src/SongSave.cxx
index 4fcb46e22..21d073b86 100644
--- a/src/song_save.c
+++ b/src/SongSave.cxx
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003-2011 The Music Player Daemon Project
+ * Copyright (C) 2003-2013 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -18,13 +18,16 @@
  */
 
 #include "config.h"
-#include "song_save.h"
+#include "SongSave.hxx"
 #include "song.h"
-#include "tag_save.h"
+#include "TagSave.hxx"
 #include "directory.h"
+
+extern "C" {
 #include "tag.h"
 #include "text_file.h"
 #include "string_util.h"
+}
 
 #include <glib.h>
 
diff --git a/src/song_save.h b/src/SongSave.hxx
similarity index 91%
rename from src/song_save.h
rename to src/SongSave.hxx
index f6ecbbfeb..d8805acd7 100644
--- a/src/song_save.h
+++ b/src/SongSave.hxx
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003-2011 The Music Player Daemon Project
+ * Copyright (C) 2003-2013 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -17,8 +17,8 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
-#ifndef MPD_SONG_SAVE_H
-#define MPD_SONG_SAVE_H
+#ifndef MPD_SONG_SAVE_HXX
+#define MPD_SONG_SAVE_HXX
 
 #include <glib.h>
 
diff --git a/src/state_file.c b/src/StateFile.cxx
similarity index 94%
rename from src/state_file.c
rename to src/StateFile.cxx
index de0e70538..6635d9f9d 100644
--- a/src/state_file.c
+++ b/src/StateFile.cxx
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003-2011 The Music Player Daemon Project
+ * Copyright (C) 2003-2013 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -18,12 +18,15 @@
  */
 
 #include "config.h"
-#include "state_file.h"
-#include "output_state.h"
+#include "StateFile.hxx"
+#include "OutputState.hxx"
 #include "playlist.h"
-#include "playlist_state.h"
+#include "PlaylistState.hxx"
+
+extern "C" {
 #include "volume.h"
 #include "text_file.h"
+}
 
 #include <glib.h>
 #include <assert.h>
@@ -117,7 +120,7 @@ state_file_read(struct player_control *pc)
 static gboolean
 timer_save_state_file(gpointer data)
 {
-	struct player_control *pc = data;
+	struct player_control *pc = (struct player_control *)data;
 
 	if (prev_volume_version == sw_volume_state_get_hash() &&
 	    prev_output_version == audio_output_state_get_version() &&
diff --git a/src/state_file.h b/src/StateFile.hxx
similarity index 89%
rename from src/state_file.h
rename to src/StateFile.hxx
index 4c4f881cc..77629aba9 100644
--- a/src/state_file.h
+++ b/src/StateFile.hxx
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003-2011 The Music Player Daemon Project
+ * Copyright (C) 2003-2013 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -17,8 +17,8 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
-#ifndef MPD_STATE_FILE_H
-#define MPD_STATE_FILE_H
+#ifndef MPD_STATE_FILE_HXX
+#define MPD_STATE_FILE_HXX
 
 struct player_control;
 
diff --git a/src/tag_save.c b/src/TagSave.cxx
similarity index 93%
rename from src/tag_save.c
rename to src/TagSave.cxx
index 2fdaef56c..639dc2d97 100644
--- a/src/tag_save.c
+++ b/src/TagSave.cxx
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003-2011 The Music Player Daemon Project
+ * Copyright (C) 2003-2013 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -18,7 +18,7 @@
  */
 
 #include "config.h"
-#include "tag_save.h"
+#include "TagSave.hxx"
 #include "tag.h"
 #include "tag_internal.h"
 #include "song.h"
diff --git a/src/tag_save.h b/src/TagSave.hxx
similarity index 88%
rename from src/tag_save.h
rename to src/TagSave.hxx
index 9f6a580c8..a7ccfa613 100644
--- a/src/tag_save.h
+++ b/src/TagSave.hxx
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003-2011 The Music Player Daemon Project
+ * Copyright (C) 2003-2013 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -17,8 +17,8 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
-#ifndef MPD_TAG_SAVE_H
-#define MPD_TAG_SAVE_H
+#ifndef MPD_TAG_SAVE_HXX
+#define MPD_TAG_SAVE_HXX
 
 #include <stdio.h>
 
diff --git a/src/db/SimpleDatabasePlugin.cxx b/src/db/SimpleDatabasePlugin.cxx
index d83c1ca73..4b92da6cf 100644
--- a/src/db/SimpleDatabasePlugin.cxx
+++ b/src/db/SimpleDatabasePlugin.cxx
@@ -22,10 +22,10 @@
 #include "DatabaseSelection.hxx"
 #include "DatabaseHelpers.hxx"
 #include "SongFilter.hxx"
+#include "DatabaseSave.hxx"
 
 extern "C" {
 #include "db_error.h"
-#include "db_save.h"
 #include "db_lock.h"
 #include "conf.h"
 }
diff --git a/src/playlist_global.c b/src/playlist_global.c
index 43bf26755..e66febce0 100644
--- a/src/playlist_global.c
+++ b/src/playlist_global.c
@@ -24,7 +24,6 @@
 
 #include "config.h"
 #include "playlist.h"
-#include "playlist_state.h"
 #include "event_pipe.h"
 #include "Main.hxx"
 
diff --git a/test/dump_playlist.c b/test/DumpPlaylist.cxx
similarity index 99%
rename from test/dump_playlist.c
rename to test/DumpPlaylist.cxx
index 566872664..231ae31a2 100644
--- a/test/dump_playlist.c
+++ b/test/DumpPlaylist.cxx
@@ -18,16 +18,19 @@
  */
 
 #include "config.h"
+#include "TagSave.hxx"
+#include "song.h"
+
+extern "C" {
 #include "io_thread.h"
 #include "input_init.h"
 #include "input_stream.h"
-#include "tag_save.h"
 #include "conf.h"
-#include "song.h"
 #include "decoder_api.h"
 #include "decoder_list.h"
 #include "playlist_list.h"
 #include "playlist_plugin.h"
+}
 
 #include <glib.h>
 
diff --git a/test/run_input.c b/test/RunInput.cxx
similarity index 97%
rename from test/run_input.c
rename to test/RunInput.cxx
index acf25a283..52b53db5a 100644
--- a/test/run_input.c
+++ b/test/RunInput.cxx
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003-2011 The Music Player Daemon Project
+ * Copyright (C) 2003-2013 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -18,17 +18,20 @@
  */
 
 #include "config.h"
+#include "TagSave.hxx"
+#include "stdbin.h"
+
+extern "C" {
 #include "io_thread.h"
 #include "input_init.h"
 #include "input_stream.h"
-#include "tag_save.h"
 #include "tag.h"
 #include "conf.h"
-#include "stdbin.h"
 
 #ifdef ENABLE_ARCHIVE
 #include "archive_list.h"
 #endif
+}
 
 #include <glib.h>