diff --git a/doc/CHANGES-staging/res_pjsip_session_codecs.md b/doc/CHANGES-staging/res_pjsip_session_codecs.md
new file mode 100644
index 0000000000000000000000000000000000000000..847eb41b3283c2dd06cbebf77a7ca7103ac03392
--- /dev/null
+++ b/doc/CHANGES-staging/res_pjsip_session_codecs.md
@@ -0,0 +1,8 @@
+Subject: res_pjsip_session
+
+When placing an outgoing call to a PJSIP endpoint the intent
+of any requested formats will now be respected. If only an audio
+format is requested (such as ulaw) but the underlying endpoint
+does not support the format the resulting SDP will still only
+contain an audio stream, and not any additional streams such as
+video.
diff --git a/res/res_pjsip_session.c b/res/res_pjsip_session.c
index ebd05166b9bcbfb3331e1c71e433b1cbddbee5b3..9cc62ce5752b9dc3d5b995f964a85e2ff08abc15 100644
--- a/res/res_pjsip_session.c
+++ b/res/res_pjsip_session.c
@@ -2717,16 +2717,6 @@ struct ast_sip_session *ast_sip_session_create_outgoing(struct ast_sip_endpoint
 			}
 
 			ast_format_cap_get_compatible(req_cap, endpoint->media.codecs, joint_cap);
-			if (!ast_format_cap_count(joint_cap)) {
-				ao2_ref(joint_cap, -1);
-				continue;
-			}
-
-			clone_stream = ast_stream_clone(req_stream, NULL);
-			if (!clone_stream) {
-				ao2_ref(joint_cap, -1);
-				continue;
-			}
 
 			if (ast_stream_get_type(req_stream) == AST_MEDIA_TYPE_AUDIO) {
 				/*
@@ -2738,6 +2728,17 @@ struct ast_sip_session *ast_sip_session_create_outgoing(struct ast_sip_endpoint
 					endpoint->media.codecs, AST_MEDIA_TYPE_AUDIO);
 			}
 
+			if (!ast_format_cap_count(joint_cap)) {
+				ao2_ref(joint_cap, -1);
+				continue;
+			}
+
+			clone_stream = ast_stream_clone(req_stream, NULL);
+			if (!clone_stream) {
+				ao2_ref(joint_cap, -1);
+				continue;
+			}
+
 			ast_stream_set_formats(clone_stream, joint_cap);
 			ao2_ref(joint_cap, -1);