I mean, you're calling a function to update the statusmarkers, inside of an event callback that happens whenever a statusmarker changes. How would that not cause an infinite loop? on('change:graphic:statusmarkers', function(obj, prev) { .. updateAllTokens(charId, opts.marker, markerValue); //which changes the statusmarkers of a bunch of tokens...