diff --git a/formats/format_ogg_vorbis.c b/formats/format_ogg_vorbis.c
index d4212a169b43db4afa2263e5b868d5ea82b2e4f8..c0f8c197dfe76b1160538d3390aa65c77601b961 100644
--- a/formats/format_ogg_vorbis.c
+++ b/formats/format_ogg_vorbis.c
@@ -158,6 +158,7 @@ static int ogg_vorbis_rewrite(struct ast_filestream *s,
 
 	if (vorbis_encode_init_vbr(&tmp->vi, 1, DEFAULT_SAMPLE_RATE, 0.4)) {
 		ast_log(LOG_ERROR, "Unable to initialize Vorbis encoder!\n");
+		vorbis_info_clear(&tmp->vi);
 		return -1;
 	}
 
@@ -273,6 +274,13 @@ static void ogg_vorbis_close(struct ast_filestream *fs)
 		 * and write out the rest of the data */
 		vorbis_analysis_wrote(&s->vd, 0);
 		write_stream(s, fs->f);
+
+		/* Cleanup */
+		ogg_stream_clear(&s->os);
+		vorbis_block_clear(&s->vb);
+		vorbis_dsp_clear(&s->vd);
+		vorbis_comment_clear(&s->vc);
+		vorbis_info_clear(&s->vi);
 	} else {
 		/* clear OggVorbis_File handle */
 		ov_clear(&s->ov_f);