As discussed in some topics already the current stat system is very inefficient because: - causes high cpu usage due to a lot of applies/removes - causes increased bandwidth consumption due to a lot of unnecesary update objects sent - is hard to maintain because fixing problems with it requires extreme care as it's very easy to mess up a lot of already working things with minor (seemingly correct) changes Here's three possible alternatives to the apply/remove domination: 1. A static system where all the attributes are calculated based on their current state. Example: Instead of removing/adding sta*10 hp on apply/remove you would update it with the full formula: hp = (base_hp * base_pct_mods + base_flat_mods + sta * 10) * total_pct_mods + total_flat_mods All of the formulas could be added to one UpdateStats() function that would be called once after each add/remove aura/item. This would work fine instead of apply/remove on auras/items from what i can tell but there is a catch: Without apply/remove the way the stats are saved to the DB would need to be changed as now the full amount would need to be saved, and that leads us to another "problem", the changes from auras/items would not have to be applied as they are already set in the unitfields and there would need to be changes in AddAura and EquipItem to not apply the mods but just load the objects into storages. Due to these required changes a lot of dust will be kicked up and many things regarding auras/items will need to be rechecked. If this system is implemented, and made totally compatible with the already existing ones then it would mean a great speed increase with auras/items but also huge improvement for player save. Another benefit with this would be decreased bandwidth. Whenever SetUint32Value is called with a different value from the current the update object will be constructed. With the current system, even if nothing changes during an aura apply/remove it will still create an update object, causing high bandwidth usage while with this system the updates will only be sent if the recalculated values differ from the original ones. 2. A dynamic system where the attributes changed by a certain stat would be changed at the time the stat is changed. For example: We can add code to SetStat() to automatically apply the hp and other changes when the stat changes. The benefit of this would be a huge increase in speed for item/aura apply/remove because when you add auras that don't change stats you do not need to recalculate anything and no update objects are sent. This would also seem to be the cleaner solution by far. The same thing applies here ofcourse that dumping apply/remove would trigger a domino effect and many other systems would need to be rethought. 3. A hybrid of one of the previous and apply/remove. You would not call apply/remove for auras/items but only for save/load. The only benefit of doing this would be that the current systems would not need to be redone as much, but ofcourse the lag at player save and perhaps also some bugs with the current apply/remove will remain. This issue will need serious consideration in the future so I've posted my findings here so everyone can post his comments about the proposed solutions or suggest new ones.