diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c
index 7188991080..5e45ea9bae 100644
--- a/channels/chan_dahdi.c
+++ b/channels/chan_dahdi.c
@@ -2005,6 +2005,11 @@ static void my_handle_dtmfup(void *pvt, struct ast_channel *ast, enum analog_sub
 				}
 			}
 			p->faxhandled = 1;
+			if (p->dsp) {
+				p->dsp_features &= ~DSP_FEATURE_FAX_DETECT;
+				ast_dsp_set_features(p->dsp, p->dsp_features);
+				ast_debug(1, "Disabling FAX tone detection on %s after tone received\n", ast->name);
+			}
 			if (strcmp(ast->exten, "fax")) {
 				const char *target_context = S_OR(ast->macrocontext, ast->context);
 
@@ -6418,7 +6423,7 @@ static int dahdi_queryoption(struct ast_channel *chan, int option, void *data, i
 		break;
 	case AST_OPTION_FAX_DETECT:
 		cp = (char *) data;
-		*cp = (p->callprogress & CALLPROGRESS_FAX) ? 0 : 1;
+		*cp = (p->dsp_features & DSP_FEATURE_FAX_DETECT) ? 0 : 1;
 		ast_debug(1, "Reporting fax tone detection %sabled on %s\n", *cp ? "en" : "dis", chan->name);
 		break;
 	case AST_OPTION_CC_AGENT_TYPE:
@@ -6644,10 +6649,8 @@ static int dahdi_setoption(struct ast_channel *chan, int option, void *data, int
 		if (p->dsp) {
 			ast_debug(1, "%sabling fax tone detection on %s\n", *cp ? "En" : "Dis", chan->name);
 			if (*cp) {
-				p->callprogress |= CALLPROGRESS_FAX;
 				p->dsp_features |= DSP_FEATURE_FAX_DETECT;
 			} else {
-				p->callprogress &= ~CALLPROGRESS_FAX;
 				p->dsp_features &= ~DSP_FEATURE_FAX_DETECT;
 			}
 			ast_dsp_set_features(p->dsp, p->dsp_features);
@@ -7457,10 +7460,11 @@ static void dahdi_handle_dtmfup(struct ast_channel *ast, int idx, struct ast_fra
 				}
 			}
 			p->faxhandled = 1;
-			p->callprogress &= ~CALLPROGRESS_FAX;
-			p->dsp_features &= ~DSP_FEATURE_FAX_DETECT;
-			ast_dsp_set_features(p->dsp, p->dsp_features);
-			ast_debug(1, "Disabling FAX tone detection on %s after tone received\n", ast->name);
+			if (p->dsp) {
+				p->dsp_features &= ~DSP_FEATURE_FAX_DETECT;
+				ast_dsp_set_features(p->dsp, p->dsp_features);
+				ast_debug(1, "Disabling FAX tone detection on %s after tone received\n", ast->name);
+			}
 			if (strcmp(ast->exten, "fax")) {
 				const char *target_context = S_OR(ast->macrocontext, ast->context);