diff --git a/NEWS b/NEWS
index 5ff831097..46963f308 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,6 @@
 ver 0.17.3 (2012/??/??)
-
+* output:
+  - shout: fix memory leak in error handler
 
 ver 0.17.2 (2012/09/30)
 * protocol:
diff --git a/src/output/shout_output_plugin.c b/src/output/shout_output_plugin.c
index d6805f542..bebc5e5da 100644
--- a/src/output/shout_output_plugin.c
+++ b/src/output/shout_output_plugin.c
@@ -439,8 +439,13 @@ my_shout_open_device(struct audio_output *ao, struct audio_format *audio_format,
 
 	sd->buf.len = 0;
 
-	if (!encoder_open(sd->encoder, audio_format, error) ||
-	    !write_page(sd, error)) {
+	if (!encoder_open(sd->encoder, audio_format, error)) {
+		shout_close(sd->shout_conn);
+		return false;
+	}
+
+	if (!write_page(sd, error)) {
+		encoder_close(sd->encoder);
 		shout_close(sd->shout_conn);
 		return false;
 	}