public override void OnLoad(ConfigNode node)
        {
            KerbalismContractsMain.fieldVisibilityInitialized = false;
            KerbalismContractsMain.KerbalismInitialized       = false;

            bodyData.Clear();
            EvaluationContext.Clear();

            if (node.HasNode("BodyData"))
            {
                foreach (var body_node in node.GetNode("BodyData").GetNodes())
                {
                    var bd = new GlobalRadiationFieldStatus(body_node);
                    if (bd != null && bd.index >= 0)
                    {
                        bodyData.Add(bd.index, bd);
                    }
                }
            }

            RadiationFieldTracker.Load(node);
            ExperimentStateTracker.Load(node);
            EquipmentStates.Load(node);
            Imaging.ClearImagers();
        }
        internal static void Update(Vessel vessel, bool inner_belt, bool outer_belt, bool magnetosphere)
        {
            if (!Utils.IsVessel(vessel))
            {
                return;
            }

            if (!states.ContainsKey(vessel.id))
            {
                states.Add(vessel.id, new List <VesselRadiationFieldStatus>());
            }

            // also update the global radiation field status
            GlobalRadiationFieldStatus bd = KerbalismContracts.Instance.BodyData(vessel.mainBody);

            var statesForVessel = states[vessel.id];
            VesselRadiationFieldStatus state = statesForVessel.Find(s => s.bodyIndex == vessel.mainBody.flightGlobalsIndex);

            if (state == null)
            {
                statesForVessel.Add(new VesselRadiationFieldStatus(vessel.mainBody, inner_belt, outer_belt, magnetosphere));
            }
            else
            {
                if (state.inner_belt != inner_belt)
                {
                    state.inner_crossings++;
                    bd.inner_crossings++;
                }

                if (state.outer_belt != outer_belt)
                {
                    state.outer_crossings++;
                    bd.outer_crossings++;
                }

                if (state.magnetosphere != magnetosphere)
                {
                    state.magneto_crossings++;
                    bd.magneto_crossings++;
                }

                state.inner_belt    = inner_belt;
                state.outer_belt    = outer_belt;
                state.magnetosphere = magnetosphere;
            }

            for (int i = listeners.Count - 1; i >= 0; i--)
            {
                listeners[i](vessel, state);
            }
        }