diff --git a/main/pbx.c b/main/pbx.c
index 9a279a62743a94e16e3cac39a71710c026f6e4fc..0cefc204833e901ca27eb24cc3dbd7ddf1d837a1 100644
--- a/main/pbx.c
+++ b/main/pbx.c
@@ -7032,9 +7032,13 @@ static int pbx_builtin_waitexten(struct ast_channel *chan, void *data)
 	if (!res) {
 		if (ast_exists_extension(chan, chan->context, chan->exten, chan->priority + 1, chan->cid.cid_num)) {
 			ast_verb(3, "Timeout on %s, continuing...\n", chan->name);
+		} else if (chan->_softhangup == AST_SOFTHANGUP_TIMEOUT) {
+			if (option_verbose > 2)
+				ast_verbose(VERBOSE_PREFIX_3 "Call timeout on %s, checking for 'T'\n", chan->name);
+			res = -1;
 		} else if (ast_exists_extension(chan, chan->context, "t", 1, chan->cid.cid_num)) {
 			ast_verb(3, "Timeout on %s, going to 't'\n", chan->name);
-			set_ext_pri(chan, "t", 0); /* XXX is the 0 correct ? */
+			set_ext_pri(chan, "t", 0); /* 0 will become 1, next time through the loop */
 		} else {
 			ast_log(LOG_WARNING, "Timeout but no rule 't' in context '%s'\n", chan->context);
 			res = -1;