diff --git a/main/channel.c b/main/channel.c
index ace4a41e5a337016368142d38f1419664ae81754..a1fc401d38f0038195247c31930fc59794b3df9b 100644
--- a/main/channel.c
+++ b/main/channel.c
@@ -3658,7 +3658,10 @@ static enum ast_bridge_result ast_generic_bridge(struct ast_channel *c0, struct
 		if (bridge_end.tv_sec) {
 			to = ast_tvdiff_ms(bridge_end, ast_tvnow());
 			if (to <= 0) {
-				res = AST_BRIDGE_COMPLETE;
+				if (config->timelimit)
+					res = AST_BRIDGE_RETRY;
+				else
+					res = AST_BRIDGE_COMPLETE;
 				break;
 			}
 		} else
@@ -3851,8 +3854,11 @@ enum ast_bridge_result ast_channel_bridge(struct ast_channel *c0, struct ast_cha
 			now = ast_tvnow();
 			to = ast_tvdiff_ms(nexteventts, now);
 			if (to <= 0) {
-				res = AST_BRIDGE_COMPLETE;
-				break;
+				if (!config->timelimit) {
+					res = AST_BRIDGE_COMPLETE;
+					break;
+				}
+				to = 0;
 			}
 		}