diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c
index 37f8aa96f5b06e8aabed583ebdeb812362ee2088..39cdf6af3fab6c1a696df8ab21433b58a53ddb26 100644
--- a/apps/app_voicemail.c
+++ b/apps/app_voicemail.c
@@ -11204,7 +11204,6 @@ static int play_message_by_id_helper(struct ast_channel *chan,
 	/* Found the msg, so play it back */
 
 	make_file(vms->fn, sizeof(vms->fn), vms->curdir, vms->curmsg);
-	make_file(vms->fn, sizeof(vms->fn), vms->curdir, vms->curmsg);
 
 #ifdef IMAP_STORAGE
 	/*IMAP storage stores any prepended message from a forward
@@ -11214,6 +11213,8 @@ static int play_message_by_id_helper(struct ast_channel *chan,
 		wait_file(chan, vms, vms->introfn);
 	}
 #endif
+	RETRIEVE(vms->curdir,vms->curmsg,vmu->mailbox, vmu->context);
+
 	if ((wait_file(chan, vms, vms->fn)) < 0) {
 		ast_log(AST_LOG_WARNING, "Playback of message %s failed\n", vms->fn);
 	} else {
@@ -11225,7 +11226,7 @@ static int play_message_by_id_helper(struct ast_channel *chan,
 		ast_mutex_unlock(&vms->lock);
 #endif
 	}
-
+	DISPOSE(vms->curdir, vms->curmsg);
 	return 0;
 }