As buffs can be buffed and can result in an infnite loop. One solution is to allow buffs to be provided only once from a buffing part. However, this gives rise to a problem with buff-able buffs: namely to apply the base buff or the buffed buff value to another buff-provider. So I suggest to have a switch in the buffprovider which determines which should be applied to another buff-provider. The difference is to apply before or after being buffed. In most cases it should be before.