diff --git a/INSTALL b/INSTALL
index 185798a76..4258d2999 100644
--- a/INSTALL
+++ b/INSTALL
@@ -196,9 +196,9 @@ Run
 
 $ mpd <config file>
 
-First default is ~/.mpdconf then ~/.mpd/mpd.conf then /etc/mpd.conf. If
-neither of these exist a mpd configuration file must be specified at
-runtime.
+First default is $XDG_CONFIG_HOME/mpd/mpd.conf then ~/.mpdconf then
+~/.mpd/mpd.conf then /etc/mpd.conf. If neither of these exist a mpd
+configuration file must be specified at runtime.
 
 A sample config file is included with the source of MPD, mpdconf.example.
 
diff --git a/doc/mpd.1 b/doc/mpd.1
index 49a3e1beb..ddeb2f50d 100644
--- a/doc/mpd.1
+++ b/doc/mpd.1
@@ -12,8 +12,8 @@ stores info about all available music, and this info can be easily searched and
 retrieved.  Player control, info retrieval, and playlist management can all be
 managed remotely.
 
-MPD searches for a config file in \fB~/.mpdconf\fP then \fB/etc/mpd.conf\fP or
-uses CONF_FILE.
+MPD searches for a config file in \fB$XDG_CONFIG_HOME/mpd/mpd.conf\fP then
+\fB~/.mpdconf\fP then \fB/etc/mpd.conf\fP or uses CONF_FILE.
 
 Read more about MPD at <\fBhttp://www.musicpd.org/\fP>.
 .SH OPTIONS
diff --git a/doc/mpd.conf.5 b/doc/mpd.conf.5
index 62f5565e1..d441c0d1b 100644
--- a/doc/mpd.conf.5
+++ b/doc/mpd.conf.5
@@ -3,8 +3,9 @@
 mpd.conf \- Music Player Daemon configuration file
 .SH DESCRIPTION
 \fBmpd.conf\fP is the configuration file for mpd(1).  If not specified on the
-command line, MPD first searches for it at \fB~/.mpdconf\fP then at
-\fB~/.mpd/mpd.conf\fP and then in \fB/etc/mpd.conf\fP.
+command line, MPD first searches for it at \fB$XDG_CONFIG_HOME/mpd/mpd.conf\fP
+then at \fB~/.mpdconf\fP then at \fB~/.mpd/mpd.conf\fP and then in
+\fB/etc/mpd.conf\fP.
 
 Lines beginning with a "#" character are comments.  All other non-empty lines
 specify parameters and their values.  These lines contain the parameter name
diff --git a/src/CommandLine.cxx b/src/CommandLine.cxx
index a62ea370e..89575a13f 100644
--- a/src/CommandLine.cxx
+++ b/src/CommandLine.cxx
@@ -54,6 +54,7 @@
 #else /* G_OS_WIN32 */
 #define USER_CONFIG_FILE_LOCATION1	".mpdconf"
 #define USER_CONFIG_FILE_LOCATION2	".mpd/mpd.conf"
+#define USER_CONFIG_FILE_LOCATION_XDG	"mpd/mpd.conf"
 #endif
 
 static GQuark
@@ -219,7 +220,12 @@ parse_cmdline(int argc, char **argv, struct options *options,
 				return ReadConfigFile(path, error_r);
 		}
 #else /* G_OS_WIN32 */
-		Path path = PathBuildChecked(Path::FromUTF8(g_get_home_dir()),
+		Path path = PathBuildChecked(Path::FromUTF8(g_get_user_config_dir()),
+					     USER_CONFIG_FILE_LOCATION_XDG);
+		if (!path.IsNull() && FileExists(path))
+			return ReadConfigFile(path, error_r);
+
+		path = PathBuildChecked(Path::FromUTF8(g_get_home_dir()),
 					     USER_CONFIG_FILE_LOCATION1);
 		if (!path.IsNull() && FileExists(path))
 			return ReadConfigFile(path, error_r);