diff --git a/main/dsp.c b/main/dsp.c
index 2f0e086df8bba14076e7d4b3344f14d99eacbe04..ffd891139d9c5f6057ba4013228469e8d3637d6c 100644
--- a/main/dsp.c
+++ b/main/dsp.c
@@ -1376,8 +1376,8 @@ struct ast_frame *ast_dsp_process(struct ast_channel *chan, struct ast_dsp *dsp,
 		}
 	}
 
-	if ((dsp->features & DSP_FEATURE_DIGIT_DETECT)) {
-		if ((dsp->digitmode & DSP_DIGITMODE_MF))
+	if (dsp->features & (DSP_FEATURE_DIGIT_DETECT | DSP_FEATURE_BUSY_DETECT)) {
+		if (dsp->digitmode & DSP_DIGITMODE_MF)
 			digit = mf_detect(dsp, &dsp->digit_state, shortdata, len, (dsp->digitmode & DSP_DIGITMODE_NOQUELCH) == 0, (dsp->digitmode & DSP_DIGITMODE_RELAXDTMF));
 		else
 			digit = dtmf_detect(dsp, &dsp->digit_state, shortdata, len, (dsp->digitmode & DSP_DIGITMODE_NOQUELCH) == 0, (dsp->digitmode & DSP_DIGITMODE_RELAXDTMF));
@@ -1389,15 +1389,18 @@ struct ast_frame *ast_dsp_process(struct ast_channel *chan, struct ast_dsp *dsp,
 			if (!dsp->dtmf_began) {
 				/* We have not reported DTMF_BEGIN for anything yet */
 
-				event = AST_FRAME_DTMF_BEGIN;
-				event_digit = dsp->digit_state.digits[0];
+				if (dsp->features & DSP_FEATURE_DIGIT_DETECT) {
+					event = AST_FRAME_DTMF_BEGIN;
+					event_digit = dsp->digit_state.digits[0];
+				}
 				dsp->dtmf_began = 1;
 
 			} else if (dsp->digit_state.current_digits > 1 || digit != dsp->digit_state.digits[0]) {
 				/* Digit changed. This means digit we have reported with DTMF_BEGIN ended */
-	
-				event = AST_FRAME_DTMF_END;
-				event_digit = dsp->digit_state.digits[0];
+				if (dsp->features & DSP_FEATURE_DIGIT_DETECT) {
+					event = AST_FRAME_DTMF_END;
+					event_digit = dsp->digit_state.digits[0];
+				}
 				memmove(dsp->digit_state.digits, dsp->digit_state.digits + 1, dsp->digit_state.current_digits);
 				dsp->digit_state.current_digits--;
 				dsp->dtmf_began = 0;
@@ -1406,6 +1409,7 @@ struct ast_frame *ast_dsp_process(struct ast_channel *chan, struct ast_dsp *dsp,
 					/* Reset Busy Detector as we have some confirmed activity */ 
 					memset(dsp->historicsilence, 0, sizeof(dsp->historicsilence));
 					memset(dsp->historicnoise, 0, sizeof(dsp->historicnoise));
+					ast_debug(1, "DTMF Detected - Reset busydetector\n");
 				}
 			}