diff --git a/include/asterisk/res_pjsip_session.h b/include/asterisk/res_pjsip_session.h
index f6ee0f00b477f5ff0614b336dc6fc47cfc89c9e4..6c8cda632527189479559239daf7a33fd44b02c2 100644
--- a/include/asterisk/res_pjsip_session.h
+++ b/include/asterisk/res_pjsip_session.h
@@ -93,6 +93,8 @@ struct ast_sip_session_media {
 	unsigned int locally_held:1;
 	/*! \brief Does remote support rtcp_mux */
 	unsigned int remote_rtcp_mux:1;
+	/*! \brief Does remote support ice */
+	unsigned int remote_ice:1;
 	/*! \brief Media type of this session media */
 	enum ast_media_type type;
 	/*! \brief The write callback when writing frames */
diff --git a/res/res_pjsip_sdp_rtp.c b/res/res_pjsip_sdp_rtp.c
index 4f5a0b2744048b6db1b01bd14482b8163cd07dbc..03e50633ae7447d0a7712e4431efbf9415ad75b8 100644
--- a/res/res_pjsip_sdp_rtp.c
+++ b/res/res_pjsip_sdp_rtp.c
@@ -585,6 +585,10 @@ static void add_ice_to_stream(struct ast_sip_session *session, struct ast_sip_se
 		return;
 	}
 
+	if (!session_media->remote_ice) {
+		return;
+	}
+
 	if ((username = ice->get_ufrag(session_media->rtp))) {
 		attr = pjmedia_sdp_attr_create(pool, "ice-ufrag", pj_cstr(&stmp, username));
 		media->attr[media->attr_count++] = attr;
@@ -639,6 +643,33 @@ static void add_ice_to_stream(struct ast_sip_session *session, struct ast_sip_se
 	ao2_ref(candidates, -1);
 }
 
+/*! \brief Function which checks for ice attributes in an audio stream */
+static void check_ice_support(struct ast_sip_session *session, struct ast_sip_session_media *session_media,
+				   const struct pjmedia_sdp_media *remote_stream)
+{
+	struct ast_rtp_engine_ice *ice;
+	const pjmedia_sdp_attr *attr;
+	unsigned int attr_i;
+
+	if (!session->endpoint->media.rtp.ice_support || !(ice = ast_rtp_instance_get_ice(session_media->rtp))) {
+		session_media->remote_ice = 0;
+		return;
+	}
+
+	/* Find all of the candidates */
+	for (attr_i = 0; attr_i < remote_stream->attr_count; ++attr_i) {
+		attr = remote_stream->attr[attr_i];
+		if (!pj_strcmp2(&attr->name, "candidate")) {
+			session_media->remote_ice = 1;
+			break;
+		}
+	}
+
+	if (attr_i == remote_stream->attr_count) {
+		session_media->remote_ice = 0;
+	}
+}
+
 /*! \brief Function which processes ICE attributes in an audio stream */
 static void process_ice_attributes(struct ast_sip_session *session, struct ast_sip_session_media *session_media,
 				   const struct pjmedia_sdp_session *remote, const struct pjmedia_sdp_media *remote_stream)
@@ -1352,6 +1383,9 @@ static int negotiate_incoming_sdp_stream(struct ast_sip_session *session,
 		enable_rtcp(session, session_media, stream);
 	}
 
+	/* If ICE support is enabled find all the needed attributes */
+	check_ice_support(session, session_media, stream);
+
 	if (set_caps(session, session_media, session_media_transport, stream, 1, asterisk_stream)) {
 		return 0;
 	}
diff --git a/res/res_pjsip_session.c b/res/res_pjsip_session.c
index c89a7a33b3eff6e892ddb706b10f78adf10a38fa..1300850ed6836d3c595dbd2a9f21482e56d42936 100644
--- a/res/res_pjsip_session.c
+++ b/res/res_pjsip_session.c
@@ -444,6 +444,7 @@ struct ast_sip_session_media *ast_sip_session_media_state_add(struct ast_sip_ses
 		}
 
 		session_media->encryption = session->endpoint->media.rtp.encryption;
+		session_media->remote_ice = session->endpoint->media.rtp.ice_support;
 		session_media->keepalive_sched_id = -1;
 		session_media->timeout_sched_id = -1;
 		session_media->type = type;