PPP on_up and on_down script skips

I need an auto replace of a dynamicly added simple queue with an editable one.
A purpose of this script is to set total-max-limit instead of separate speed limits.

On up
:local InterfaceName [/interface pppoe-server get $interface name]
:local QueueId [/queue simple find target="$InterfaceName"]
:local MaxLimit [:pick [/queue simple get $QueueId max-limit] 0 [find [/queue simple get $QueueId max-limit] "/"]]
/queue simple remove $QueueId
/queue simple add target="$InterfaceName" name="$InterfaceName" total-max-limit="$MaxLimit" total-queue="user-default" parent="bw-limit"
:log warn "$InterfaceName queue added"

On down
:local QueueId [/queue simple find name="<pppoe-$user>"]
/queue simple remove $QueueId
:log warn "<pppoe-$user> queue removed"

This is working when I disconnect one user at a time. But when I disconnect multiple users at once this script skips almost everyone except last disconnected users.

Why?

Is there no script queue or something like that?

Is this an expected behavior?
Any thoughts?