diff --git a/src/module/actor/actor.ts b/src/module/actor/actor.ts
index 0ad31fb8..270fee10 100644
--- a/src/module/actor/actor.ts
+++ b/src/module/actor/actor.ts
@@ -90,4 +90,27 @@ export class DS4Actor extends Actor<DS4ActorDataType, DS4ItemDataType, DS4Item>
             .map((itemData) => itemData.armorValue)
             .reduce((a, b) => a + b, 0);
     }
+
+    /**
+     * Handle how changes to a Token attribute bar are applied to the Actor.
+     * This only differs from the base implementation by also allowing negative values.
+     * @override
+     */
+    async modifyTokenAttribute(attribute: string, value: number, isDelta = false, isBar = true): Promise<DS4Actor> {
+        const current = getProperty(this.data.data, attribute);
+
+        // Determine the updates to make to the actor data
+        let updates: Record<string, number>;
+        if (isBar) {
+            if (isDelta) value = Math.min(Number(current.value) + value, current.max);
+            updates = { [`data.${attribute}.value`]: value };
+        } else {
+            if (isDelta) value = Number(current) + value;
+            updates = { [`data.${attribute}`]: value };
+        }
+
+        // Call a hook to handle token resource bar updates
+        const allowed = Hooks.call("modifyTokenAttribute", { attribute, value, isDelta, isBar }, updates);
+        return allowed !== false ? this.update(updates) : this;
+    }
 }