diff --git a/CHANGES b/CHANGES
index f7e118765f750b1882d78832db923b124b92f6b5..f79cd846956d2c86bc9a3210a8b2dc4dfc42b118 100644
--- a/CHANGES
+++ b/CHANGES
@@ -113,6 +113,17 @@ Core:
  * libedit is no longer available as an embedded library and must be provided
    by the system.
 
+------------------------------------------------------------------------------
+--- Functionality changes from Asterisk 15.5.0 to Asterisk 15.6.0 ------------
+------------------------------------------------------------------------------
+
+res_pjsip
+------------------
+ * A new option 'suppress_q850_reason_headers' has been added to the endpoint
+   object. Some devices can't accept multiple Reason headers and get confused
+   when both 'SIP' and 'Q.850' Reason headers are received.  This option allows
+   the 'Q.850' Reason header to be suppressed.  The default value is 'no'.
+
 ------------------------------------------------------------------------------
 --- Functionality changes from Asterisk 15.4.0 to Asterisk 15.5.0 ------------
 ------------------------------------------------------------------------------
diff --git a/configs/samples/pjsip.conf.sample b/configs/samples/pjsip.conf.sample
index 5ec7a632707136e3cdec4debd6ba211ab7089daa..c2e2918ae61a753f5e52d5e6bea7574b0e78216d 100644
--- a/configs/samples/pjsip.conf.sample
+++ b/configs/samples/pjsip.conf.sample
@@ -830,6 +830,13 @@
                            ; This option must also be enabled in the system
                            ; section.
                            ; (default: no)
+suppress_q850_reason_headers =
+                           ; Suppress Q.850 Reason headers for this endpoint.
+                           ; Some devices can't accept multiple Reason headers
+                           ; and get confused when both 'SIP' and 'Q.850' Reason
+                           ; headers are received.  This option allows the
+                           ; 'Q.850' Reason header to be suppressed.
+                           ; (default: no)
 
 ;==========================AUTH SECTION OPTIONS=========================
 ;[auth]
diff --git a/contrib/ast-db-manage/config/versions/19b00bc19b7b_add_suppress_q850_reason_headers_to_.py b/contrib/ast-db-manage/config/versions/19b00bc19b7b_add_suppress_q850_reason_headers_to_.py
new file mode 100644
index 0000000000000000000000000000000000000000..bf58ad3d6b7aa5d723852f66e725fc17131d0e8d
--- /dev/null
+++ b/contrib/ast-db-manage/config/versions/19b00bc19b7b_add_suppress_q850_reason_headers_to_.py
@@ -0,0 +1,27 @@
+"""add suppress_q850_reason_headers to endpoint
+
+Revision ID: 19b00bc19b7b
+Revises: 0be05c3a8225
+Create Date: 2018-07-06 06:30:32.196669
+
+"""
+
+# revision identifiers, used by Alembic.
+revision = '19b00bc19b7b'
+down_revision = '0be05c3a8225'
+
+from alembic import op
+import sqlalchemy as sa
+from sqlalchemy.dialects.postgresql import ENUM
+
+YESNO_NAME = 'yesno_values'
+YESNO_VALUES = ['yes', 'no']
+
+def upgrade():
+    yesno_values = ENUM(*YESNO_VALUES, name=YESNO_NAME, create_type=False)
+    op.add_column('ps_endpoints', sa.Column('suppress_q850_reason_header', yesno_values))
+
+def downgrade():
+    if op.get_context().bind.dialect.name == 'mssql':
+        op.drop_constraint('ck_ps_endpoints_suppress_q850_reason_header_yesno_values','ps_endpoints')
+    op.drop_column('ps_endpoints', 'suppress_q850_reason_header')
diff --git a/include/asterisk/res_pjsip.h b/include/asterisk/res_pjsip.h
index b94269a32673e24194c5880922eba4882fd7fd0c..849f08735319d94cd31f5d9ae79de88cc9ea95e4 100644
--- a/include/asterisk/res_pjsip.h
+++ b/include/asterisk/res_pjsip.h
@@ -813,6 +813,8 @@ struct ast_sip_endpoint {
 	unsigned int refer_blind_progress;
 	/*! Whether to notifies dialog-info 'early' on INUSE && RINGING state */
 	unsigned int notify_early_inuse_ringing;
+	/*! Suppress Q.850 Reason headers on this endpoint */
+	unsigned int suppress_q850_reason_headers;
 };
 
 /*! URI parameter for symmetric transport */
diff --git a/res/res_pjsip.c b/res/res_pjsip.c
index 300c0deb73b78f2ff7b3acbe75b78322cab58ebf..507267a1f7c6b545db08e20119da247b3ecfc971 100644
--- a/res/res_pjsip.c
+++ b/res/res_pjsip.c
@@ -1110,6 +1110,14 @@
 						</para></note>
 					</description>
 				</configOption>
+				<configOption name="suppress_q850_reason_headers" default="no">
+					<synopsis>Suppress Q.850 Reason headers for this endpoint</synopsis>
+					<description><para>
+						Some devices can't accept multiple Reason headers and get confused
+						when both 'SIP' and 'Q.850' Reason headers are received.  This
+						option allows the 'Q.850' Reason header to be suppressed.</para>
+					</description>
+				</configOption>
 			</configObject>
 			<configObject name="auth">
 				<synopsis>Authentication type</synopsis>
diff --git a/res/res_pjsip/pjsip_configuration.c b/res/res_pjsip/pjsip_configuration.c
index f44ceb0c325b86adee4afd8670b3058c5bde1949..f4a9ecbe0c0e97a6849cb60887d4ba8011821f1f 100644
--- a/res/res_pjsip/pjsip_configuration.c
+++ b/res/res_pjsip/pjsip_configuration.c
@@ -1904,6 +1904,7 @@ int ast_res_pjsip_initialize_configuration(void)
 	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "incoming_mwi_mailbox", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, incoming_mwi_mailbox));
 	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "follow_early_media_fork", "yes", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, media.rtp.follow_early_media_fork));
 	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "accept_multiple_sdp_answers", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, media.rtp.accept_multiple_sdp_answers));
+	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "suppress_q850_reason_headers", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, suppress_q850_reason_headers));
 
 	if (ast_sip_initialize_sorcery_transport()) {
 		ast_log(LOG_ERROR, "Failed to register SIP transport support with sorcery\n");
diff --git a/res/res_pjsip_rfc3326.c b/res/res_pjsip_rfc3326.c
index 76b0d08b0ef32d4de10dfe8b51e675c76558f9f7..293c3dbe84db37c7bb5a12789e8a76a6c1ea93b7 100644
--- a/res/res_pjsip_rfc3326.c
+++ b/res/res_pjsip_rfc3326.c
@@ -98,8 +98,15 @@ static void rfc3326_add_reason_header(struct ast_sip_session *session, struct pj
 		ast_sip_add_header(tdata, "Reason", "SIP;cause=200;text=\"Call completed elsewhere\"");
 	}
 
-	snprintf(buf, sizeof(buf), "Q.850;cause=%i", ast_channel_hangupcause(session->channel) & 0x7f);
-	ast_sip_add_header(tdata, "Reason", buf);
+	if (session->endpoint && session->endpoint->suppress_q850_reason_headers) {
+		ast_debug(1, "A Q.850 '%s'(%i) Reason header was suppresed for endpoint '%s'\n",
+			ast_cause2str((ast_channel_hangupcause(session->channel) & 0x7f)),
+			(ast_channel_hangupcause(session->channel) & 0x7f),
+			ast_sorcery_object_get_id(session->endpoint));
+	} else {
+		snprintf(buf, sizeof(buf), "Q.850;cause=%i", ast_channel_hangupcause(session->channel) & 0x7f);
+		ast_sip_add_header(tdata, "Reason", buf);
+	}
 }
 
 static void rfc3326_outgoing_request(struct ast_sip_session *session, struct pjsip_tx_data *tdata)