diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index a84adeb75e3a7b26007a1f4608e1bba4c021729f..d34d2718e3537a49aab4b5ae2b4a0ec8d39e07bf 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -671,7 +671,8 @@ static const struct sip_reasons {
 	{ AST_REDIRECTING_REASON_FOLLOW_ME, "follow-me" },
 	{ AST_REDIRECTING_REASON_OUT_OF_ORDER, "out-of-service" },
 	{ AST_REDIRECTING_REASON_AWAY, "away" },
-	{ AST_REDIRECTING_REASON_CALL_FWD_DTE, "unknown"}
+	{ AST_REDIRECTING_REASON_CALL_FWD_DTE, "unknown"},
+	{ AST_REDIRECTING_REASON_SEND_TO_VM, "send_to_vm"},
 };
 
 
@@ -24257,6 +24258,8 @@ static int handle_request_refer(struct sip_pvt *p, struct sip_request *req, int
 	int localtransfer = 0;
 	int attendedtransfer = 0;
 	int res = 0;
+	struct ast_party_redirecting redirecting;
+	struct ast_set_party_redirecting update_redirecting;
 
 	if (req->debug) {
 		ast_verbose("Call %s got a SIP call transfer from %s: (REFER)!\n",
@@ -24561,6 +24564,16 @@ static int handle_request_refer(struct sip_pvt *p, struct sip_request *req, int
 	}
 	ast_set_flag(&p->flags[0], SIP_DEFER_BYE_ON_TRANSFER);	/* Delay hangup */
 
+	/* When a call is transferred to voicemail from a Digium phone, there may be
+	 * a Diversion header present in the REFER with an appropriate reason parameter
+	 * set. We need to update the redirecting information appropriately.
+	 */
+	ast_party_redirecting_init(&redirecting);
+	memset(&update_redirecting, 0, sizeof(update_redirecting));
+	change_redirecting_information(p, req, &redirecting, &update_redirecting, FALSE);
+	ast_channel_update_redirecting(current.chan2, &redirecting, &update_redirecting);
+	ast_party_redirecting_free(&redirecting);
+
 	/* Do not hold the pvt lock during the indicate and async_goto. Those functions
 	 * lock channels which will invalidate locking order if the pvt lock is held.*/
 	/* For blind transfers, move the call to the new extensions. For attended transfers on multiple
diff --git a/include/asterisk/callerid.h b/include/asterisk/callerid.h
index c047632b999ba390f063bc86ad160e79225c3e4a..7c4905e13d1d039bf0194694e96446f0e8802ee8 100644
--- a/include/asterisk/callerid.h
+++ b/include/asterisk/callerid.h
@@ -400,6 +400,7 @@ enum AST_REDIRECTING_REASON {
 	AST_REDIRECTING_REASON_OUT_OF_ORDER,
 	AST_REDIRECTING_REASON_AWAY,
 	AST_REDIRECTING_REASON_CALL_FWD_DTE,           /* This is something defined in Q.931, and no I don't know what it means */
+	AST_REDIRECTING_REASON_SEND_TO_VM,
 };
 
 /*!
diff --git a/main/callerid.c b/main/callerid.c
index dc3a91093acebe8f4bc608e7d3af9457d11cad0d..37edd992ca70cb3640649ae2a80417133f75e50b 100644
--- a/main/callerid.c
+++ b/main/callerid.c
@@ -1203,6 +1203,7 @@ static const struct ast_value_translation redirecting_reason_types[] = {
 	{ AST_REDIRECTING_REASON_OUT_OF_ORDER,   "out_of_order", "Called DTE Out-Of-Order" },
 	{ AST_REDIRECTING_REASON_AWAY,           "away",         "Callee is Away" },
 	{ AST_REDIRECTING_REASON_CALL_FWD_DTE,   "cf_dte",       "Call Forwarding By The Called DTE" },
+	{ AST_REDIRECTING_REASON_SEND_TO_VM,     "send_to_vm",   "Call is being redirected to user's voicemail"},
 /* *INDENT-ON* */
 };