diff --git a/channels/chan_pjsip.c b/channels/chan_pjsip.c
index 843ef61b4834bef841cc73905be96e7360b2ac45..5383c93cc53474d8224cda86bba642046f9b5071 100644
--- a/channels/chan_pjsip.c
+++ b/channels/chan_pjsip.c
@@ -2174,7 +2174,16 @@ static void transfer_refer(struct ast_sip_session *session, const char *target)
 				chan_name, target, replaces);
 	}
 
-	snprintf(referto, sizeof(referto), "<sip:%s@%s%s>", target, session->endpoint->fromdomain, replaces);
+	if (PJSIP_URI_SCHEME_IS_SIP(session->request_uri))
+		snprintf(referto, sizeof(referto), "<sip:%s@%s%s>", target, session->endpoint->fromdomain, replaces);
+	else if (PJSIP_URI_SCHEME_IS_SIPS(session->request_uri))
+		snprintf(referto, sizeof(referto), "<sips:%s@%s%s>", target, session->endpoint->fromdomain, replaces);
+	else if (PJSIP_URI_SCHEME_IS_TEL(session->request_uri))
+		snprintf(referto, sizeof(referto), "<tel:%s@%s%s>", target, session->endpoint->fromdomain, replaces);
+	else {
+		ast_log(LOG_ERROR, "Unsupported URI for Refer-To header. Refer will not be sent!\n");
+		goto failure;
+	}
 	ast_debug(1, "Refer-To: %s\n", referto);
 
 	if (pjsip_xfer_initiate(sub, pj_cstr(&tmp, referto), &packet) != PJ_SUCCESS) {
@@ -2202,7 +2211,16 @@ static void transfer_refer(struct ast_sip_session *session, const char *target)
 	if (!ast_strlen_zero(ref_by_val)) {
 		ast_sip_add_header(packet, "Referred-By", ref_by_val);
 	} else {
-		snprintf(local_info, sizeof(local_info), "%s@%s", session->endpoint->contact_user, session->endpoint->fromdomain);
+		if (PJSIP_URI_SCHEME_IS_SIP(session->request_uri))
+			snprintf(local_info, sizeof(local_info), "<sip:%s@%s>", session->endpoint->contact_user, session->endpoint->fromdomain);
+		else if (PJSIP_URI_SCHEME_IS_SIPS(session->request_uri))
+			snprintf(local_info, sizeof(local_info), "<sips:%s@%s>", session->endpoint->contact_user, session->endpoint->fromdomain);
+		else if (PJSIP_URI_SCHEME_IS_TEL(session->request_uri))
+			snprintf(local_info, sizeof(local_info), "<tel:%s@%s>", session->endpoint->contact_user, session->endpoint->fromdomain);
+		else {
+			ast_log(LOG_ERROR, "Unsupported URI for Referred-By header. Refer will not be sent!\n");
+			goto failure;
+		}
 		ast_sip_add_header(packet, "Referred-By", local_info);
 	}