diff --git a/src/switch_ivr_originate.c b/src/switch_ivr_originate.c
index dc281b5..b5bb3f9 100644
--- a/src/switch_ivr_originate.c
+++ b/src/switch_ivr_originate.c
@@ -325,8 +325,13 @@ static int check_per_channel_timeouts(originate_global_t *oglobals,
                                x++;
                        }
                        if (originate_status[i].per_channel_timelimit_sec && elapsed > originate_status[i].per_channel_timelimit_sec) {
-                               switch_channel_hangup(originate_status[i].peer_channel, SWITCH_CAUSE_ALLOTTED_TIMEOUT);
-                               x++;
+
+                               //Prevent leg_timeout if cancel_leg_timeout has been set after channel was answered.
+                               if( !switch_true( switch_channel_get_variable( originate_status[i].peer_channel, "cancel_leg_timeout" ) ) )
+                               {
+                                       switch_channel_hangup(originate_status[i].peer_channel, SWITCH_CAUSE_ALLOTTED_TIMEOUT);
+                                       x++;
+                               }
                        }
                }
        }
