diff --git a/src/engine/mbEnums.java b/src/engine/mbEnums.java
index 8ee88b95..e3b7a6fd 100644
--- a/src/engine/mbEnums.java
+++ b/src/engine/mbEnums.java
@@ -3154,5 +3154,10 @@ public class mbEnums {
         Always
     }
 
+    public enum ModificationType {
+        ADD,
+        MULTIPLY
+    }
+
 }
 
diff --git a/src/engine/wpakpowers/Behaviours.java b/src/engine/wpakpowers/Behaviours.java
index 323124b1..4136f8bc 100644
--- a/src/engine/wpakpowers/Behaviours.java
+++ b/src/engine/wpakpowers/Behaviours.java
@@ -32,12 +32,12 @@ public class Behaviours {
     public static Object Standard(AbstractCharacter caster, Power power, Integer rank, AbstractWorldObject target,
                                   PowerAction powerAction, Effect effect, ModifierEntry modifierEntry) {
 
-        return WpakPowerManager.applyCurveToValue(modifierEntry.compoundCurveType, modifierEntry.max, rank);
+        return WpakPowerManager.getModifiedValue(modifierEntry, rank);
     }
 
     public static Object FPSubTypeAttr(AbstractCharacter caster, Power power, Integer rank, AbstractWorldObject target,
                                        PowerAction powerAction, Effect effect, ModifierEntry modifierEntry) {
-        return WpakPowerManager.applyCurveToValue(modifierEntry.compoundCurveType, modifierEntry.min, rank);
+        return WpakPowerManager.getModifiedValue(modifierEntry, rank);
     }
 
     public static Object SubTypeSourceType(AbstractCharacter caster, Power power, Integer rank, AbstractWorldObject target,
@@ -59,7 +59,7 @@ public class Behaviours {
     public static Object FPSubTypeDmg(AbstractCharacter caster, Power power, Integer rank, AbstractWorldObject target,
                                       PowerAction powerAction, Effect effect, ModifierEntry modifierEntry) {
         String key = modifierEntry.arg1;
-        float value = WpakPowerManager.applyCurveToValue(modifierEntry.compoundCurveType, modifierEntry.max, rank);
+        float value = WpakPowerManager.getModifiedValue(modifierEntry, rank);
         return new Pair<>(key,value);
     }
 
diff --git a/src/engine/wpakpowers/WpakPowerManager.java b/src/engine/wpakpowers/WpakPowerManager.java
index 13ba9356..fcf57b3d 100644
--- a/src/engine/wpakpowers/WpakPowerManager.java
+++ b/src/engine/wpakpowers/WpakPowerManager.java
@@ -418,19 +418,30 @@ public class WpakPowerManager {
         return false;
     }
 
-    public static float applyCurveToValue(mbEnums.CompoundCurveType curve, float value, int rank) {
+    public static float getModifiedValue(ModifierEntry modifierEntry, int rank) {
 
         float scaledValue;
+        mbEnums.ModificationType modificationType = mbEnums.ModificationType.ADD;
 
         // Method scales by either integer or float values driven by the curve type
 
-        if (EnumSet.of(mbEnums.CompoundCurveType.DefaultFlat, mbEnums.CompoundCurveType.DefaultSlope,
-                mbEnums.CompoundCurveType.DefaultSlopeDown).contains(curve))
-            scaledValue = value + (curve.getValue() * rank);
-        else
-            scaledValue = value * (1 + (curve.getValue() * rank));
+        if (EnumSet.of(mbEnums.ModType.Health, mbEnums.ModType.Mana,
+                mbEnums.ModType.Stamina).contains(modifierEntry.type))
+            if (modifierEntry.percentage == 0)
+                modificationType = mbEnums.ModificationType.MULTIPLY;
 
-        scaledValue = scaledValue * 0.01f;
+        if (modifierEntry.percentage != 0f) { //Stat Percent Modifiers
+            if (modificationType.equals(mbEnums.ModificationType.ADD))
+                scaledValue = modifierEntry.percentage + (modifierEntry.compoundCurveType.getValue() * rank);
+            else
+                scaledValue = modifierEntry.percentage * (1 + (modifierEntry.compoundCurveType.getValue() * rank));
+            scaledValue = scaledValue * 0.01f;
+        } else { //Stat Modifiers
+            if (modificationType.equals(mbEnums.ModificationType.ADD))
+                scaledValue = modifierEntry.min + (modifierEntry.compoundCurveType.getValue() * rank);
+            else
+                scaledValue = modifierEntry.min * (1 + (modifierEntry.compoundCurveType.getValue() * rank));
+        }
 
         return scaledValue;
     }