--- /dev/null
+--- a/pjmedia/src/pjmedia/sdp_neg.c
++++ b/pjmedia/src/pjmedia/sdp_neg.c
+@@ -906,7 +906,7 @@ static pj_status_t process_m_answer( pj_
+ * after receiving remote answer.
+ */
+ static pj_status_t process_answer(pj_pool_t *pool,
+- pjmedia_sdp_session *offer,
++ pjmedia_sdp_session *local_offer,
+ pjmedia_sdp_session *answer,
+ pj_bool_t allow_asym,
+ pjmedia_sdp_session **p_active)
+@@ -914,10 +914,14 @@ static pj_status_t process_answer(pj_poo
+ unsigned omi = 0; /* Offer media index */
+ unsigned ami = 0; /* Answer media index */
+ pj_bool_t has_active = PJ_FALSE;
++ pjmedia_sdp_session *offer;
+ pj_status_t status;
+
+ /* Check arguments. */
+- PJ_ASSERT_RETURN(pool && offer && answer && p_active, PJ_EINVAL);
++ PJ_ASSERT_RETURN(pool && local_offer && answer && p_active, PJ_EINVAL);
++
++ /* Duplicate local offer SDP. */
++ offer = pjmedia_sdp_session_clone(pool, local_offer);
+
+ /* Check that media count match between offer and answer */
+ // Ticket #527, different media count is allowed for more interoperability,