There is one thing that I always wanted to change about them: make them represented internally by a number. When we set a flag, we increment its value by one, unset -- decrement it by one. A flag is considered set if its value is > 0. Why? For example, a player may be made flying through a flag set directly into class definition, a powerup or A_ChangeFlag(). When we only ever set a flag there are no problems. However, when we are about to unset it, there is a possibility of clash, so if a class was already flying, it could inadvertently lose this ability even if we didn't actually wanted to do that. We could write some logic to prevent such a case, for example, by remembering if the class was already flying and excluding unsetting the flag later, however, it requires quite some effort. Where do we remember it? In an user variable? Well, we gotta add it then to all actors. ACS? Requires usage of ACS, something I'd rather to avoid unless it's the only way, and can't really remember an arbitrary amount of actors. Also, what if an additional instance of the flying ability is run on the same actor? When the first expires, it will unset the flag because it wasn't present at the time of application, thus all subsequent will malfunction. Etc, etc, there are many other issues. Using a counter instead of a boolean should solve all of this nicely. It could be also used to achieve special effects like "immunity" to a flag by directly setting its counter to a negative value, or always enabled by setting it to a positive; for example, a monster completely immune to the "frightened" state no matter what. And, I suppose custom flags are planned, so modders can desing their own flags like "stunned" and some enemies like bosses immune to stuns.