Fairing mass is retreived from the module mass on the actual module now rather than the part (which will give supply a total module mass over all attached modules).
Fairing mass is retreived from the module mass on the actual module now rather than the part (which will give supply a total module mass over all attached modules).

--- a/KerbalEngineer/VesselSimulator/PartSim.cs
+++ b/KerbalEngineer/VesselSimulator/PartSim.cs
@@ -119,7 +119,6 @@
             partSim.isFuelLine = partSim.part.HasModule<CModuleFuelLine>();
             partSim.isFuelTank = partSim.part is FuelTank;
             partSim.isSepratron = partSim.IsSepratron();
-            partSim.isFairing = partSim.IsFairing(partSim.part);
             partSim.inverseStage = partSim.part.inverseStage;
             //MonoBehaviour.print("inverseStage = " + inverseStage);
 
@@ -145,13 +144,13 @@
             else
             {
                 partSim.realMass = partSim.part.mass;
-                if (log != null) log.buf.AppendLine("Using part.mass of " + partSim.part.mass);
-            }
-
-            if (partSim.isFairing)
-            {
-                partSim.fairingMass = partSim.part.GetModuleMass((float)partSim.realMass);
-            }
+                if (log != null)
+                {
+                    log.buf.AppendLine("Using part.mass" + partSim.part.mass);
+                }
+            }
+
+            partSim.fairingMass = partSim.part.GetModule<ModuleProceduralFairing>()?.GetModuleMass(partSim.part.mass) ?? 0.0f;
 
             for (int i = 0; i < partSim.part.Resources.Count; i++)
             {
@@ -417,9 +416,9 @@
                 mass += resources.GetResourceMass(resources.Types[i]);
             }
 
-            if (isFairing && currentStage > inverseStage)
-            {
-                mass += fairingMass;
+            if (fairingMass > 0.0 && currentStage <= inverseStage)
+            {
+                mass -= fairingMass;
             }
 
             return mass;
@@ -780,11 +779,6 @@
             return thePart.GetProtoModuleDecoupler()?.IsStageEnabled ?? false;
         }
 
-        private bool IsFairing(Part thePart)
-        {
-            return thePart.HasModule<ModuleProceduralFairing>();
-        }
-
         private bool IsSepratron()
         {
             if (!part.ActivatesEvenIfDisconnected)

 Binary files a/Output/KerbalEngineer/KerbalEngineer.dll and b/Output/KerbalEngineer/KerbalEngineer.dll differ