diff --git a/src/engine/powers/poweractions/TransferStatPowerAction.java b/src/engine/powers/poweractions/TransferStatPowerAction.java
index 79cde713..9b59e6e4 100644
--- a/src/engine/powers/poweractions/TransferStatPowerAction.java
+++ b/src/engine/powers/poweractions/TransferStatPowerAction.java
@@ -44,17 +44,13 @@ public class TransferStatPowerAction extends AbstractPowerAction {
         this.powerAction = powerAction;
         this.effectID = powerAction.effects.get(0).effect_id;
 
-        int flags = powerAction.getInt("flags");
-        this.transferRampAdd = ((flags & 4096) != 0) ? true : false;
-        this.transferEfficiencyRampAdd = ((flags & 8192) != 0) ? true : false;
-        this.targetToCaster = ((flags & 16384) != 0) ? true : false;
+        //int flags = powerAction.getInt("flags");
+        this.transferRampAdd = powerAction.statTransfer.rampCurve != null;
+        this.transferEfficiencyRampAdd = powerAction.statTransfer.rampCurve != null;
+        this.targetToCaster = powerAction.statTransfer.isDrain;
         this.effect = effects.get(this.effectID);
         try {
-            String damageString = powerAction.getString("damageType");
-            // Damage type can sometimes be null in the DB.
-
-            if (damageString.isEmpty() == false)
-                this.damageType = mbEnums.DamageType.getDamageType(damageString);
+            this.damageType = powerAction.damageType;
         } catch (Exception e) {
             this.damageType = null;
         }
@@ -71,13 +67,13 @@ public class TransferStatPowerAction extends AbstractPowerAction {
 
     public float getTransferAmount(float trains) {
         //		if (this.transferRampAdd)
-        return this.powerAction.statTransfer.ramp + (this.transferRamp * trains);
+        return (float) (this.powerAction.statTransfer.ramp + (this.powerAction.statTransfer.rampCurve.getValue() * trains));
         //		else
         //			return this.transferAmount * (1 + (this.transferRamp * trains));
     }
 
     public float getTransferEfficiency(float trains) {
-        return this.transferEfficiency + (this.transferEfficiencyRamp * trains);
+        return (float) (this.powerAction.statTransfer.efficiency + (this.powerAction.statTransfer.efficiencyCurve.getValue() * trains));
     }
 
     public boolean targetToCaster() {
diff --git a/src/engine/wpak/PowerActionParser.java b/src/engine/wpak/PowerActionParser.java
index 5e61a777..8fa8e781 100644
--- a/src/engine/wpak/PowerActionParser.java
+++ b/src/engine/wpak/PowerActionParser.java
@@ -139,7 +139,7 @@ public class PowerActionParser {
                 statTransfer.efficiency = Float.parseFloat(headerIterator.next());
                 statTransfer.efficiencyCurve = mbEnums.CompoundCurveType.valueOf(headerIterator.next());
                 statTransfer.fromStatBool = Boolean.parseBoolean(headerIterator.next());
-                statTransfer.toStatBool = Boolean.parseBoolean(headerIterator.next());
+                statTransfer.isDrain = Boolean.parseBoolean(headerIterator.next());
                 powerAction.statTransfer = statTransfer;
                 break;
             case "TransferStatOT":
@@ -151,7 +151,7 @@ public class PowerActionParser {
                 statTransfer.efficiency = Float.parseFloat(headerIterator.next());
                 statTransfer.efficiencyCurve = mbEnums.CompoundCurveType.valueOf(headerIterator.next());
                 statTransfer.fromStatBool = Boolean.parseBoolean(headerIterator.next());
-                statTransfer.toStatBool = Boolean.parseBoolean(headerIterator.next());
+                statTransfer.isDrain = Boolean.parseBoolean(headerIterator.next());
                 statTransfer.transfer_action = headerIterator.next();
                 statTransfer.transfer_ticks = Integer.parseInt(headerIterator.next());
                 powerAction.statTransfer = statTransfer;
diff --git a/src/engine/wpak/data/StatTransfer.java b/src/engine/wpak/data/StatTransfer.java
index c0370d16..85a95235 100644
--- a/src/engine/wpak/data/StatTransfer.java
+++ b/src/engine/wpak/data/StatTransfer.java
@@ -18,7 +18,7 @@ public class StatTransfer {
     public float efficiency;
     public mbEnums.CompoundCurveType efficiencyCurve;
     public boolean fromStatBool;
-    public boolean toStatBool;
+    public boolean isDrain;
     public String transfer_action;
     public int transfer_ticks;
 }