diff --git a/Makefile.am b/Makefile.am
index 56ae9c98b..8fe82a909 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -133,20 +133,20 @@ src_mpd_SOURCES = \
 	src/update/UpdateContainer.cxx src/update/UpdateContainer.hxx \
 	src/update/UpdateInternal.hxx \
 	src/update/UpdateRemove.cxx src/update/UpdateRemove.hxx \
-	src/Client.cxx src/Client.hxx \
-	src/ClientInternal.hxx \
-	src/ClientEvent.cxx \
-	src/ClientExpire.cxx \
-	src/ClientGlobal.cxx \
-	src/ClientIdle.cxx \
-	src/ClientList.cxx src/ClientList.hxx \
-	src/ClientNew.cxx \
-	src/ClientProcess.cxx \
-	src/ClientRead.cxx \
-	src/ClientWrite.cxx \
-	src/ClientMessage.cxx src/ClientMessage.hxx \
-	src/ClientSubscribe.cxx \
-	src/ClientFile.cxx src/ClientFile.hxx \
+	src/client/Client.cxx src/client/Client.hxx \
+	src/client/ClientInternal.hxx \
+	src/client/ClientEvent.cxx \
+	src/client/ClientExpire.cxx \
+	src/client/ClientGlobal.cxx \
+	src/client/ClientIdle.cxx \
+	src/client/ClientList.cxx src/client/ClientList.hxx \
+	src/client/ClientNew.cxx \
+	src/client/ClientProcess.cxx \
+	src/client/ClientRead.cxx \
+	src/client/ClientWrite.cxx \
+	src/client/ClientMessage.cxx src/client/ClientMessage.hxx \
+	src/client/ClientSubscribe.cxx \
+	src/client/ClientFile.cxx src/client/ClientFile.hxx \
 	src/Listen.cxx src/Listen.hxx \
 	src/LogInit.cxx src/LogInit.hxx \
 	src/LogBackend.cxx src/LogBackend.hxx \
diff --git a/src/DatabasePrint.cxx b/src/DatabasePrint.cxx
index fc149316d..b22141aef 100644
--- a/src/DatabasePrint.cxx
+++ b/src/DatabasePrint.cxx
@@ -23,7 +23,7 @@
 #include "SongFilter.hxx"
 #include "SongPrint.hxx"
 #include "TimePrint.hxx"
-#include "Client.hxx"
+#include "client/Client.hxx"
 #include "tag/Tag.hxx"
 #include "LightSong.hxx"
 #include "LightDirectory.hxx"
diff --git a/src/Listen.cxx b/src/Listen.cxx
index 9cdf1b823..faa3e0db1 100644
--- a/src/Listen.cxx
+++ b/src/Listen.cxx
@@ -21,7 +21,7 @@
 #include "Listen.hxx"
 #include "Main.hxx"
 #include "Instance.hxx"
-#include "Client.hxx"
+#include "client/Client.hxx"
 #include "config/ConfigData.hxx"
 #include "config/ConfigGlobal.hxx"
 #include "config/ConfigOption.hxx"
diff --git a/src/Main.cxx b/src/Main.cxx
index f91c63d99..a07f02389 100644
--- a/src/Main.cxx
+++ b/src/Main.cxx
@@ -32,8 +32,8 @@
 #include "DatabaseSimple.hxx"
 #include "Permission.hxx"
 #include "Listen.hxx"
-#include "Client.hxx"
-#include "ClientList.hxx"
+#include "client/Client.hxx"
+#include "client/ClientList.hxx"
 #include "command/AllCommands.hxx"
 #include "Partition.hxx"
 #include "Volume.hxx"
diff --git a/src/PlaylistPrint.cxx b/src/PlaylistPrint.cxx
index 56fbddfaf..2555acc2a 100644
--- a/src/PlaylistPrint.cxx
+++ b/src/PlaylistPrint.cxx
@@ -25,7 +25,7 @@
 #include "SongPrint.hxx"
 #include "DatabaseGlue.hxx"
 #include "DatabasePlugin.hxx"
-#include "Client.hxx"
+#include "client/Client.hxx"
 #include "InputStream.hxx"
 #include "DetachedSong.hxx"
 #include "fs/Traits.hxx"
diff --git a/src/SongPrint.cxx b/src/SongPrint.cxx
index cde6ef7d1..18d732161 100644
--- a/src/SongPrint.cxx
+++ b/src/SongPrint.cxx
@@ -24,7 +24,7 @@
 #include "TimePrint.hxx"
 #include "TagPrint.hxx"
 #include "Mapper.hxx"
-#include "Client.hxx"
+#include "client/Client.hxx"
 #include "util/UriUtil.hxx"
 
 #define SONG_FILE "file: "
diff --git a/src/Stats.cxx b/src/Stats.cxx
index 39a553513..5b979b322 100644
--- a/src/Stats.cxx
+++ b/src/Stats.cxx
@@ -20,7 +20,7 @@
 #include "config.h"
 #include "Stats.hxx"
 #include "PlayerControl.hxx"
-#include "Client.hxx"
+#include "client/Client.hxx"
 #include "DatabaseSelection.hxx"
 #include "DatabaseGlue.hxx"
 #include "DatabasePlugin.hxx"
diff --git a/src/StickerPrint.cxx b/src/StickerPrint.cxx
index d849b0d15..a952ff203 100644
--- a/src/StickerPrint.cxx
+++ b/src/StickerPrint.cxx
@@ -20,7 +20,7 @@
 #include "config.h"
 #include "StickerPrint.hxx"
 #include "StickerDatabase.hxx"
-#include "Client.hxx"
+#include "client/Client.hxx"
 
 void
 sticker_print_value(Client &client,
diff --git a/src/TagPrint.cxx b/src/TagPrint.cxx
index 4f5ea8be3..228b5fd90 100644
--- a/src/TagPrint.cxx
+++ b/src/TagPrint.cxx
@@ -21,7 +21,7 @@
 #include "TagPrint.hxx"
 #include "tag/Tag.hxx"
 #include "tag/TagSettings.h"
-#include "Client.hxx"
+#include "client/Client.hxx"
 
 #define SONG_TIME "Time: "
 
diff --git a/src/TimePrint.cxx b/src/TimePrint.cxx
index f02c25225..5526ec7d6 100644
--- a/src/TimePrint.cxx
+++ b/src/TimePrint.cxx
@@ -19,7 +19,7 @@
 
 #include "config.h"
 #include "TimePrint.hxx"
-#include "Client.hxx"
+#include "client/Client.hxx"
 
 void
 time_print(Client &client, const char *name, time_t t)
diff --git a/src/Client.cxx b/src/client/Client.cxx
similarity index 100%
rename from src/Client.cxx
rename to src/client/Client.cxx
diff --git a/src/Client.hxx b/src/client/Client.hxx
similarity index 100%
rename from src/Client.hxx
rename to src/client/Client.hxx
diff --git a/src/ClientEvent.cxx b/src/client/ClientEvent.cxx
similarity index 100%
rename from src/ClientEvent.cxx
rename to src/client/ClientEvent.cxx
diff --git a/src/ClientExpire.cxx b/src/client/ClientExpire.cxx
similarity index 100%
rename from src/ClientExpire.cxx
rename to src/client/ClientExpire.cxx
diff --git a/src/ClientFile.cxx b/src/client/ClientFile.cxx
similarity index 100%
rename from src/ClientFile.cxx
rename to src/client/ClientFile.cxx
diff --git a/src/ClientFile.hxx b/src/client/ClientFile.hxx
similarity index 100%
rename from src/ClientFile.hxx
rename to src/client/ClientFile.hxx
diff --git a/src/ClientGlobal.cxx b/src/client/ClientGlobal.cxx
similarity index 100%
rename from src/ClientGlobal.cxx
rename to src/client/ClientGlobal.cxx
diff --git a/src/ClientIdle.cxx b/src/client/ClientIdle.cxx
similarity index 100%
rename from src/ClientIdle.cxx
rename to src/client/ClientIdle.cxx
diff --git a/src/ClientInternal.hxx b/src/client/ClientInternal.hxx
similarity index 100%
rename from src/ClientInternal.hxx
rename to src/client/ClientInternal.hxx
diff --git a/src/ClientList.cxx b/src/client/ClientList.cxx
similarity index 100%
rename from src/ClientList.cxx
rename to src/client/ClientList.cxx
diff --git a/src/ClientList.hxx b/src/client/ClientList.hxx
similarity index 100%
rename from src/ClientList.hxx
rename to src/client/ClientList.hxx
diff --git a/src/ClientMessage.cxx b/src/client/ClientMessage.cxx
similarity index 100%
rename from src/ClientMessage.cxx
rename to src/client/ClientMessage.cxx
diff --git a/src/ClientMessage.hxx b/src/client/ClientMessage.hxx
similarity index 100%
rename from src/ClientMessage.hxx
rename to src/client/ClientMessage.hxx
diff --git a/src/ClientNew.cxx b/src/client/ClientNew.cxx
similarity index 100%
rename from src/ClientNew.cxx
rename to src/client/ClientNew.cxx
diff --git a/src/ClientProcess.cxx b/src/client/ClientProcess.cxx
similarity index 100%
rename from src/ClientProcess.cxx
rename to src/client/ClientProcess.cxx
diff --git a/src/ClientRead.cxx b/src/client/ClientRead.cxx
similarity index 100%
rename from src/ClientRead.cxx
rename to src/client/ClientRead.cxx
diff --git a/src/ClientSubscribe.cxx b/src/client/ClientSubscribe.cxx
similarity index 100%
rename from src/ClientSubscribe.cxx
rename to src/client/ClientSubscribe.cxx
diff --git a/src/ClientWrite.cxx b/src/client/ClientWrite.cxx
similarity index 100%
rename from src/ClientWrite.cxx
rename to src/client/ClientWrite.cxx
diff --git a/src/command/AllCommands.cxx b/src/command/AllCommands.cxx
index 47dd70aa0..ed1858ea8 100644
--- a/src/command/AllCommands.cxx
+++ b/src/command/AllCommands.cxx
@@ -31,7 +31,7 @@
 #include "Permission.hxx"
 #include "tag/TagType.h"
 #include "protocol/Result.hxx"
-#include "Client.hxx"
+#include "client/Client.hxx"
 #include "util/Tokenizer.hxx"
 #include "util/Error.hxx"
 
diff --git a/src/command/CommandListBuilder.cxx b/src/command/CommandListBuilder.cxx
index d6b6318bc..1dcbf2946 100644
--- a/src/command/CommandListBuilder.cxx
+++ b/src/command/CommandListBuilder.cxx
@@ -19,7 +19,7 @@
 
 #include "config.h"
 #include "CommandListBuilder.hxx"
-#include "ClientInternal.hxx"
+#include "client/ClientInternal.hxx"
 
 #include <string.h>
 
diff --git a/src/command/DatabaseCommands.cxx b/src/command/DatabaseCommands.cxx
index f650aca0c..eaff1e3ec 100644
--- a/src/command/DatabaseCommands.cxx
+++ b/src/command/DatabaseCommands.cxx
@@ -24,7 +24,7 @@
 #include "DatabasePrint.hxx"
 #include "DatabaseSelection.hxx"
 #include "CommandError.hxx"
-#include "Client.hxx"
+#include "client/Client.hxx"
 #include "tag/Tag.hxx"
 #include "util/Error.hxx"
 #include "SongFilter.hxx"
diff --git a/src/command/FileCommands.cxx b/src/command/FileCommands.cxx
index 9a9e3ad37..b3676fa48 100644
--- a/src/command/FileCommands.cxx
+++ b/src/command/FileCommands.cxx
@@ -22,8 +22,8 @@
 #include "CommandError.hxx"
 #include "protocol/Ack.hxx"
 #include "protocol/Result.hxx"
-#include "ClientFile.hxx"
-#include "Client.hxx"
+#include "client/ClientFile.hxx"
+#include "client/Client.hxx"
 #include "util/CharUtil.hxx"
 #include "util/UriUtil.hxx"
 #include "util/Error.hxx"
diff --git a/src/command/MessageCommands.cxx b/src/command/MessageCommands.cxx
index cb3c9d306..b04e72c07 100644
--- a/src/command/MessageCommands.cxx
+++ b/src/command/MessageCommands.cxx
@@ -19,8 +19,8 @@
 
 #include "config.h"
 #include "MessageCommands.hxx"
-#include "Client.hxx"
-#include "ClientList.hxx"
+#include "client/Client.hxx"
+#include "client/ClientList.hxx"
 #include "Instance.hxx"
 #include "Main.hxx"
 #include "protocol/Result.hxx"
diff --git a/src/command/OtherCommands.cxx b/src/command/OtherCommands.cxx
index b7b84bcde..4d61884c1 100644
--- a/src/command/OtherCommands.cxx
+++ b/src/command/OtherCommands.cxx
@@ -43,8 +43,8 @@
 #include "Permission.hxx"
 #include "PlaylistFile.hxx"
 #include "PlaylistVector.hxx"
-#include "ClientFile.hxx"
-#include "Client.hxx"
+#include "client/ClientFile.hxx"
+#include "client/Client.hxx"
 #include "Idle.hxx"
 
 #include <assert.h>
diff --git a/src/command/PlayerCommands.cxx b/src/command/PlayerCommands.cxx
index 20de2af92..759a37030 100644
--- a/src/command/PlayerCommands.cxx
+++ b/src/command/PlayerCommands.cxx
@@ -23,7 +23,7 @@
 #include "Playlist.hxx"
 #include "PlaylistPrint.hxx"
 #include "update/UpdateGlue.hxx"
-#include "Client.hxx"
+#include "client/Client.hxx"
 #include "Volume.hxx"
 #include "output/OutputAll.hxx"
 #include "Partition.hxx"
diff --git a/src/command/PlaylistCommands.cxx b/src/command/PlaylistCommands.cxx
index 2f203678b..0441811c4 100644
--- a/src/command/PlaylistCommands.cxx
+++ b/src/command/PlaylistCommands.cxx
@@ -28,7 +28,7 @@
 #include "playlist/PlaylistQueue.hxx"
 #include "playlist/Print.hxx"
 #include "TimePrint.hxx"
-#include "Client.hxx"
+#include "client/Client.hxx"
 #include "protocol/ArgParser.hxx"
 #include "protocol/Result.hxx"
 #include "ls.hxx"
diff --git a/src/command/QueueCommands.cxx b/src/command/QueueCommands.cxx
index 7ffaa97ed..e884c71c3 100644
--- a/src/command/QueueCommands.cxx
+++ b/src/command/QueueCommands.cxx
@@ -25,8 +25,8 @@
 #include "DatabaseSelection.hxx"
 #include "Playlist.hxx"
 #include "PlaylistPrint.hxx"
-#include "ClientFile.hxx"
-#include "Client.hxx"
+#include "client/ClientFile.hxx"
+#include "client/Client.hxx"
 #include "Partition.hxx"
 #include "protocol/ArgParser.hxx"
 #include "protocol/Result.hxx"
diff --git a/src/command/TagCommands.cxx b/src/command/TagCommands.cxx
index d5544eac5..02e95af71 100644
--- a/src/command/TagCommands.cxx
+++ b/src/command/TagCommands.cxx
@@ -20,7 +20,7 @@
 #include "config.h"
 #include "TagCommands.hxx"
 #include "CommandError.hxx"
-#include "Client.hxx"
+#include "client/Client.hxx"
 #include "protocol/ArgParser.hxx"
 #include "protocol/Result.hxx"
 #include "tag/Tag.hxx"
diff --git a/src/decoder/DecoderPrint.cxx b/src/decoder/DecoderPrint.cxx
index 06ef1f05e..54b89c36c 100644
--- a/src/decoder/DecoderPrint.cxx
+++ b/src/decoder/DecoderPrint.cxx
@@ -21,7 +21,7 @@
 #include "DecoderPrint.hxx"
 #include "DecoderList.hxx"
 #include "DecoderPlugin.hxx"
-#include "Client.hxx"
+#include "client/Client.hxx"
 
 #include <functional>
 
diff --git a/src/ls.cxx b/src/ls.cxx
index c8061c5c1..7d8a3a447 100644
--- a/src/ls.cxx
+++ b/src/ls.cxx
@@ -21,7 +21,7 @@
 #include "ls.hxx"
 #include "util/StringUtil.hxx"
 #include "util/UriUtil.hxx"
-#include "Client.hxx"
+#include "client/Client.hxx"
 
 #include <assert.h>
 
diff --git a/src/output/OutputPrint.cxx b/src/output/OutputPrint.cxx
index ee4424df2..66826f140 100644
--- a/src/output/OutputPrint.cxx
+++ b/src/output/OutputPrint.cxx
@@ -26,7 +26,7 @@
 #include "OutputPrint.hxx"
 #include "OutputAll.hxx"
 #include "OutputInternal.hxx"
-#include "Client.hxx"
+#include "client/Client.hxx"
 
 void
 printAudioDevices(Client &client)
diff --git a/src/protocol/Result.cxx b/src/protocol/Result.cxx
index 11a73a9af..3cc5fc33e 100644
--- a/src/protocol/Result.cxx
+++ b/src/protocol/Result.cxx
@@ -19,7 +19,7 @@
 
 #include "config.h"
 #include "Result.hxx"
-#include "Client.hxx"
+#include "client/Client.hxx"
 
 #include <assert.h>
 
diff --git a/src/queue/QueuePrint.cxx b/src/queue/QueuePrint.cxx
index 1f3c8fd57..831ecafb9 100644
--- a/src/queue/QueuePrint.cxx
+++ b/src/queue/QueuePrint.cxx
@@ -22,7 +22,7 @@
 #include "Queue.hxx"
 #include "SongFilter.hxx"
 #include "SongPrint.hxx"
-#include "Client.hxx"
+#include "client/Client.hxx"
 
 /**
  * Send detailed information about a range of songs in the queue to a