diff --git a/src/engine/util/Pair.java b/src/engine/util/Pair.java
index d984d868..d9b2b1ca 100644
--- a/src/engine/util/Pair.java
+++ b/src/engine/util/Pair.java
@@ -9,8 +9,8 @@
 package engine.util;
 
 public class Pair<A, B> {
-    public final A first;
-    public final B second;
+    public A first;
+    public B second;
 
     public Pair(A first, B second) {
         this.first = first;
diff --git a/src/engine/wpakpowers/Behaviours.java b/src/engine/wpakpowers/Behaviours.java
index a5cb2cb7..ce6c2db2 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.getModifiedValue(modifierEntry, rank);
+        return WpakPowerManager.getModifiedValue(modifierEntry, rank).first;
     }
 
     public static Object FPSubTypeAttr(AbstractCharacter caster, Power power, Integer rank, AbstractWorldObject target,
                                        PowerAction powerAction, Effect effect, ModifierEntry modifierEntry) {
-        return WpakPowerManager.getModifiedValue(modifierEntry, rank);
+        return WpakPowerManager.getModifiedValue(modifierEntry, rank).first;
     }
 
     public static Object SubTypeSourceType(AbstractCharacter caster, Power power, Integer rank, AbstractWorldObject target,
@@ -59,8 +59,8 @@ 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.getModifiedValue(modifierEntry, rank);
-        return new Pair<>(key,value);
+        float modifierValue = WpakPowerManager.getModifiedValue(modifierEntry, rank).first;
+        return new Pair<>(key, modifierValue);
     }
 
     public static Object DD(AbstractCharacter caster, Power power, Integer rank, AbstractWorldObject target,
diff --git a/src/engine/wpakpowers/WpakPowerManager.java b/src/engine/wpakpowers/WpakPowerManager.java
index 66264fcc..64729eed 100644
--- a/src/engine/wpakpowers/WpakPowerManager.java
+++ b/src/engine/wpakpowers/WpakPowerManager.java
@@ -28,6 +28,7 @@ import engine.net.client.msg.UpdateStateMsg;
 import engine.objects.*;
 import engine.server.MBServerStatics;
 import engine.util.Hasher;
+import engine.util.Pair;
 import engine.wpak.EffectsParser;
 import engine.wpak.PowerActionParser;
 import engine.wpak.PowersParser;
@@ -417,31 +418,25 @@ public class WpakPowerManager {
         return false;
     }
 
-    public static float getModifiedValue(ModifierEntry modifierEntry, int rank) {
+    public static Pair<Float, Float> getModifiedValue(ModifierEntry modifierEntry, int rank) {
 
-        mbEnums.ModificationType modificationType;
+        Pair<Float, Float> outData = new Pair<>(0f, 0f);
 
         // Only a subset of these ModTypes used for percents
         // are multiplicative.  Everything else is additive.
 
-        modificationType = modifierEntry.compoundCurveType.name().contains("SIVL") ?
-                mbEnums.ModificationType.MULTIPLY : mbEnums.ModificationType.ADD;
+        if (modifierEntry.percentage != 0f) {
+            outData.first = modifierEntry.percentage + (modifierEntry.compoundCurveType.getValue() * rank);
+            outData.first = outData.first * 0.01f;
+            return outData;
+        }
 
-        return modifierEntry.percentage != 0f
-                ? calculatePercentageValue(modifierEntry, rank, modificationType)
-                : calculateFlatValue(modifierEntry, rank, modificationType);
-    }
+        // As there is a min/max we return both as a pai in linear moder
 
-    private static float calculatePercentageValue(ModifierEntry modifierEntry, int rank, mbEnums.ModificationType modificationType) {
-        float scaledValue = modificationType.equals(mbEnums.ModificationType.ADD)
-                ? modifierEntry.percentage + (modifierEntry.compoundCurveType.getValue() * rank)
-                : modifierEntry.percentage * (1 + (modifierEntry.compoundCurveType.getValue() * rank));
-        return scaledValue * 0.01f;
+        outData.first = modifierEntry.min + (modifierEntry.compoundCurveType.getValue() * rank);
+        outData.second = modifierEntry.max + (modifierEntry.compoundCurveType.getValue() * rank);
+        return outData;
     }
 
-    private static float calculateFlatValue(ModifierEntry modifierEntry, int rank, mbEnums.ModificationType modificationType) {
-        return modificationType.equals(mbEnums.ModificationType.ADD)
-                ? modifierEntry.min + (modifierEntry.compoundCurveType.getValue() * rank)
-                : modifierEntry.min * (1 + (modifierEntry.compoundCurveType.getValue() * rank));
-    }
+
 }