diff --git a/src/ao_null.c b/src/ao_null.c
index caed4a3fd61899768c87fe8996fcd3a5b7716930..62d6d2cadf106d8af1b983a32bbf2fd405759f4f 100644
--- a/src/ao_null.c
+++ b/src/ao_null.c
@@ -73,7 +73,7 @@ static ao_info_t *ao_null_get_driver_info(void)
 	return &ao_null_info;
 }
 
-static int ao_null_get_latency(void)
+static int ao_null_get_latency(ao_internal_t *state)
 {
 	return 0;
 }
diff --git a/src/ao_wav.c b/src/ao_wav.c
index fe0c022363ddd35c1202dfa4108f5ea41d5aa541..b4172f6fc015c59f156f6654c6e43c89720c8e12 100644
--- a/src/ao_wav.c
+++ b/src/ao_wav.c
@@ -300,7 +300,7 @@ ERR:
 	free(s);
 }
 
-static int ao_wav_get_latency(void)
+static int ao_wav_get_latency(ao_internal_t *state)
 {
 	return 0;
 }
diff --git a/src/audio_out.c b/src/audio_out.c
index b8922960c704cd452e00f42743374064551ca3f3..65597496d18aa623dd48f597abd1c8ae35b719be 100644
--- a/src/audio_out.c
+++ b/src/audio_out.c
@@ -161,8 +161,11 @@ void ao_shutdown(void)
 	}
 
 	/* free the standard drivers */
-	if (driver_head->next) free(driver_head->next);
-	if (driver_head->next) free(driver_head);
+	if (driver_head) {
+		if(driver_head->next)
+			free(driver_head->next);
+		free(driver_head);
+	}
 	
 	/* NULL out driver_head or ao_initialize won't work */
 	driver_head = NULL;
diff --git a/src/plugins/arts/ao_arts.c b/src/plugins/arts/ao_arts.c
index ff4b88c5521db444f12b57e3ddf962264a46e663..a96a4f4e35a899b84cfe26d44f22e914096d2f64 100644
--- a/src/plugins/arts/ao_arts.c
+++ b/src/plugins/arts/ao_arts.c
@@ -89,6 +89,7 @@ plugin_close(ao_internal_t * state)
 {
   arts_close_stream(((ao_arts_internal_t *)state)->stream);
   arts_free();
+  free(state);
 }
 
   void