private void FixEnginesFX(ModuleEngines engine)
        {
            // Why this is needed :
            // When engines OnStart is called, the module does this :
            // - It find the FX XXX on the part
            // - It duplicate the particule emitter of this FX into a new FX in the engine XXXGroups list, one for each thrusttransform
            // - It remove the particule emitter from the original FX on the part
            // - It copy back the new FX named prefix + XXX + index of transform to the part FX list
            // So when we call Onstart again, the init method can't find the emitters since they are removed from the base FX on the part
            // To fix this we need to manually re-link the engine XXXGroups with the FX that still are on the part, and call the setup method AutoPlaceFXGroup

            // Remove garbage FX on the part created by previous loads
            engine.part.fxGroups.FindAll(p =>
                                         (p.name.Contains(engine.fxGroupPrefix + "Flameout") ||
                                          p.name.Contains(engine.fxGroupPrefix + "Running") ||
                                          p.name.Contains(engine.fxGroupPrefix + "Power")) &&
                                         !p.isValid).Clear();

            // Reset the module FX groups
            engine.flameoutGroups.Clear();
            engine.powerGroups.Clear();
            engine.runningGroups.Clear();

            // Relink the part FX to the module FX list
            for (int i = 0; i < engine.thrustTransforms.Count; i++)
            {
                FXGroup flameoutFX = engine.part.fxGroups.Find(p => p.name == engine.fxGroupPrefix + "Flameout" + i && p.isValid);
                if (flameoutFX != null)
                {
                    engine.AutoPlaceFXGroup(flameoutFX, engine.thrustTransforms[i]);
                    engine.flameoutGroups.Add(flameoutFX);
                }

                FXGroup runningFX = engine.part.fxGroups.Find(p => p.name == engine.fxGroupPrefix + "Running" + i && p.isValid);
                if (runningFX != null)
                {
                    engine.AutoPlaceFXGroup(runningFX, engine.thrustTransforms[i]);
                    engine.runningGroups.Add(runningFX);
                }

                FXGroup powerFX = engine.part.fxGroups.Find(p => p.name == engine.fxGroupPrefix + "Power" + i && p.isValid);
                if (powerFX != null)
                {
                    engine.AutoPlaceFXGroup(powerFX, engine.thrustTransforms[i]);
                    engine.powerGroups.Add(powerFX);
                }
            }
        }