diff --git a/doc/mpd.conf.5 b/doc/mpd.conf.5
index 5a77d4944..9263b0865 100644
--- a/doc/mpd.conf.5
+++ b/doc/mpd.conf.5
@@ -382,8 +382,12 @@ for encoding.
 .TP
 .B encoding <encoding>
 This specifies which output encoding to use.  Should be either "ogg"
-or "mp3".  The default is "ogg".
+or "mp3",  "mp3" is needed for shoutcast streaming. The default is "ogg".
 .TP
+.B protocol <protocol>
+This specifies the protocol that wil be used to connect to the
+icecast/shoutcast server. The options are "shoutcast", "icecast1" and
+"icecast2". The default is "icecast2".
 .B user <username>
 This specifies the username to use when logging in to the icecast server.  The
 default is "source".
diff --git a/doc/mpdconf.example b/doc/mpdconf.example
index 995bba3aa..a3dd6048f 100644
--- a/doc/mpdconf.example
+++ b/doc/mpdconf.example
@@ -121,6 +121,7 @@ error_file                      "~/.mpd/mpd.error"
 #        quality                 "5.0"
 #        bitrate                 "128"
 #        format                  "44100:16:1"
+#        protocol                "icecast2"
 #        user                    "source"                # optional
 #        description             "My Stream Description" # optional
 #        genre                   "jazz"                  # optional
diff --git a/src/audioOutputs/audioOutput_shout.c b/src/audioOutputs/audioOutput_shout.c
index 54f2c4ff1..ae31b07ea 100644
--- a/src/audioOutputs/audioOutput_shout.c
+++ b/src/audioOutputs/audioOutput_shout.c
@@ -104,6 +104,7 @@ static void *my_shout_init_driver(struct audio_output *audio_output,
 	char *mount;
 	char *passwd;
 	const char *encoding;
+	unsigned protocol;
 	const char *user;
 	char *name;
 	BlockParam *block_param;
@@ -208,6 +209,29 @@ static void *my_shout_init_driver(struct audio_output *audio_output,
 		FATAL("couldn't find shout encoder plugin for \"%s\" "
 		      "at line %i\n", encoding, block_param->line);
 
+	check_block_param("protocol");
+
+	block_param = getBlockParam(param, "protocol");
+	if (block_param) {
+		if (0 == strcmp(block_param->value, "shoutcast") &&
+		    0 != strcmp(encoding, "mp3"))
+			FATAL("you cannot stream \"%s\" to shoutcast, use mp3\n",
+			      encoding);
+		else if (0 == strcmp(block_param->value, "shoutcast"))
+			protocol = SHOUT_PROTOCOL_ICY;
+		else if (0 == strcmp(block_param->value, "icecast1"))
+			protocol = SHOUT_PROTOCOL_XAUDIOCAST;
+		else if (0 == strcmp(block_param->value, "icecast2"))
+			protocol = SHOUT_PROTOCOL_HTTP;
+		else
+			FATAL("shout protocol \"%s\" is not \"shoutcast\" or "
+			      "\"icecast1\"or "
+			      "\"icecast2\", line %i\n", block_param->value,
+			      block_param->line);
+	} else {
+		protocol = SHOUT_PROTOCOL_HTTP;
+	}
+
 	if (shout_set_host(sd->shout_conn, host) != SHOUTERR_SUCCESS ||
 	    shout_set_port(sd->shout_conn, port) != SHOUTERR_SUCCESS ||
 	    shout_set_password(sd->shout_conn, passwd) != SHOUTERR_SUCCESS ||
@@ -218,8 +242,7 @@ static void *my_shout_init_driver(struct audio_output *audio_output,
 	    shout_set_nonblocking(sd->shout_conn, 1) != SHOUTERR_SUCCESS ||
 	    shout_set_format(sd->shout_conn, sd->encoder->shout_format)
 	    != SHOUTERR_SUCCESS ||
-	    shout_set_protocol(sd->shout_conn, SHOUT_PROTOCOL_HTTP)
-	    != SHOUTERR_SUCCESS ||
+	    shout_set_protocol(sd->shout_conn, protocol) != SHOUTERR_SUCCESS ||
 	    shout_set_agent(sd->shout_conn, "MPD") != SHOUTERR_SUCCESS) {
 		FATAL("error configuring shout defined at line %i: %s\n",
 		      param->line, shout_get_error(sd->shout_conn));