diff --git a/res/res_pjsip_diversion.c b/res/res_pjsip_diversion.c
index a9ffdf4937096d2dbf9a40c8bef733a4f6468a31..246d74e128dae9eda176d27d678ccd4febde8f20 100644
--- a/res/res_pjsip_diversion.c
+++ b/res/res_pjsip_diversion.c
@@ -326,8 +326,7 @@ static void add_diversion_header(pjsip_tx_data *tdata, struct ast_party_redirect
 
 	hdr = pjsip_from_hdr_create(tdata->pool);
 	hdr->type = PJSIP_H_OTHER;
-	pj_strdup(tdata->pool, &hdr->name, &diversion_name);
-	hdr->sname = hdr->name;
+	hdr->sname = hdr->name = diversion_name;
 
 	name_addr = pjsip_uri_clone(tdata->pool, base);
 	uri = pjsip_uri_get_uri(name_addr->uri);
@@ -414,6 +413,9 @@ static int load_module(void)
 {
 	CHECK_PJSIP_SESSION_MODULE_LOADED();
 
+	/* Because we are passing static memory to pjsip, we need to make sure it
+	 * stays valid while we potentially have active sessions */
+	ast_module_shutdown_ref(ast_module_info->self);
 	ast_sip_session_register_supplement(&diversion_supplement);
 	return AST_MODULE_LOAD_SUCCESS;
 }