I think that AutoButton just uses TokenMod commands behind the scenes to make its changes, so really I think it would be a matter of making CombatMaster become an observer of TokenMod changes. (I have no idea about how ApplyDamage works, but if it does NOT use TokenMod, then just as David said, it would have to expose its own Observer function.) CombatMaster has 5 handlers that deal with graphics, but TokenMod only exposes one "event". It would be up to the observer to determine what had been changed. If I were to do that, I would start with something like this, just above the registerEventHandlers function (so, inserting this at line 4544): tmObserver = (o, p) => { const propCheck = prop => o.get(prop) === p.prop; let propObj = { 'statusmarkers': handleStatusMarkerChange, 'top': handleGraphicMovement, 'left': handleGraphicMovement, 'layer': handleGraphicMovement, [`${state[combatState].config.concentration.woundBar}_value`]: handleConstitutionSave }; Object.keys(propObj).forEach(k => { if (propCheck(k)) propObj[k](o,p); }); }, And then CombatMaster would need to actually register with TokenMod, which would happen within the registerEventHandlers() function. After all of the Roll20 registrations (starting on(... ), you would need: if (typeof (TokenMod) === 'object') TokenMod.ObserveTokenChange(tmObserver); That *should* do it, but I don't use CombatMaster and wouldn't know how to go about testing it to confirm. Concentration has two event listeners for token changes... one for statusmarkers and one for a bar value. It only registers the bar-value change function with TokenMod... not the statusmarkers handler. Since it is actively registering with TokenMod, I figure Oosh knew what he was doing, there, and it doesn't need the other changed. But if it does (that is, if changing the value of the script-referenced bar should trigger some behavior), then it might need to have a function like tmObserver(), above, so that it can determine what changed on the token and farm the work out to the appropriate handler. All of the above is untested, btw. It's just where I would start.