diff --git a/src/main/java/com/wayoftime/bloodmagic/core/living/LivingUpgrade.java b/src/main/java/com/wayoftime/bloodmagic/core/living/LivingUpgrade.java
index 8b1a9582..49257d06 100644
--- a/src/main/java/com/wayoftime/bloodmagic/core/living/LivingUpgrade.java
+++ b/src/main/java/com/wayoftime/bloodmagic/core/living/LivingUpgrade.java
@@ -171,8 +171,18 @@ public class LivingUpgrade {
             JsonObject json = element.getAsJsonObject();
             ResourceLocation id = new ResourceLocation(json.getAsJsonPrimitive("id").getAsString());
             List<LivingUpgrade.Level> levels = context.deserialize(json.getAsJsonArray("levels"), new TypeToken<List<Level>>(){}.getType());
+            boolean negative = json.has("negative") && json.getAsJsonPrimitive("negative").getAsBoolean();
 
             LivingUpgrade upgrade = new LivingUpgrade(id, upgradeLevels -> upgradeLevels.addAll(levels));
+            if (negative)
+                upgrade.asDowngrade();
+
+            if (json.has("incompatibilities")) {
+                String[] incompatibilities = context.deserialize(json.getAsJsonArray("incompatibilities"), String[].class);
+                for (String incompat : incompatibilities)
+                    upgrade.addIncompatibility(new ResourceLocation(incompat));
+            }
+
             if (json.has("bonuses")) {
                 Map<String, Number[]> bonuses = context.deserialize(json.getAsJsonObject("bonuses"), new TypeToken<Map<String, Number[]>>(){}.getType());
                 bonuses.forEach((k, v) -> upgrade.withBonusSet(k, numbers -> Collections.addAll(numbers, v)));