diff --git a/aerodynamicsOptimization/mainOptimization.m b/aerodynamicsOptimization/mainOptimization.m
index ad493fb45b2c5176bdb19f43a263f2ca61bd277a..ecb35c11e10c237529f3f03fd07d3ad6e033f9e3 100644
--- a/aerodynamicsOptimization/mainOptimization.m
+++ b/aerodynamicsOptimization/mainOptimization.m
@@ -1,7 +1,7 @@
 function mainOptimization(rocket, wind, environment, settings, options)
 arguments
     rocket      Rocket      = Rocket.empty
-    wind        WindCustom  = WindCustom.empty
+    wind        Wind  = Wind.empty
     environment Environment = Environment.empty
     settings    Settings    = Settings.empty
     
@@ -53,7 +53,7 @@ if ~contains(path, dissilePath), addpath(genpath(dissilePath)); end
 mission = Mission(true);
 if isempty(rocket), rocket  = Rocket(mission); end
 if isempty(environment), environment  = Environment(mission, rocket.motor); end
-if isempty(wind), wind  = WindCustom(mission); end
+if isempty(wind), wind  = Wind(mission); end
 if isempty(settings), settings = Settings('ode', 'optimization'); end
 
 Settings.read(settings, options, 'optimization');
@@ -141,7 +141,7 @@ vars.mach = 0.1:0.2:0.9;
 vars.alpha = [-20 -15 -10 -5 -2.5 -1 -0.1 0 0.1 1 2.5 5 10 15 20];
 vars.beta = [-20 -15 -10 -5 -2.5 -1 -0.1 0 0.1 1 2.5 5 10 15 20];
 vars.alt = environment.z0 + (0:1000:4000);
-vars.xcg = rocket.xCg;
+vars.xcg = rocket.xcg;
 vars.hprot = [];
 % vars.hprot = rocket.airbrakes.height;
 
diff --git a/aerodynamicsOptimization/src/OptimizationGA.m b/aerodynamicsOptimization/src/OptimizationGA.m
index 69a43fd8b6f69ae33892ad4ed7974d9cc32381ff..9e7a828e9a1d65d36e9576e06762c86649c49cdf 100644
--- a/aerodynamicsOptimization/src/OptimizationGA.m
+++ b/aerodynamicsOptimization/src/OptimizationGA.m
@@ -4,7 +4,7 @@ arguments
     input       struct
     rocket      Rocket
     environment Environment
-    wind        WindCustom
+    wind        Wind
     settings    Settings
     wrapper     DataWrapper
 end
@@ -49,7 +49,7 @@ input.fltcon.NALPHA = length(input.fltcon.ALPHA);   % [-] Number of alphas
 input.fltcon.NMACH = length(input.fltcon.MACH); 
 
 %%% aerodynmics coefficient - full
-input.refq.XCG = rocket.xCg([1, length(rocket.xCg)]);
+input.refq.XCG = rocket.xcg([1, length(rocket.xcg)]);
 % state.xcgTime = state.xcgTime([1, end]);                         
 input.flagXCP = false;
 [coeff] = dissileMatcom(input);                       
@@ -67,7 +67,6 @@ azCase = (360)*pi/180;
 
 wind.magnitudeParameters = ones(2,2).*magCase;
 wind.azimuthParameters = ones(2,2).*azCase;
-wind.updateAll();
 
 apogee1 = quickApogeeOnly(rocket, environment, wind, settings, wrapper);
 
@@ -76,7 +75,6 @@ azCase = (180)*pi/180;
 
 wind.magnitudeParameters = ones(2,2).*magCase;
 wind.azimuthParameters = ones(2,2).*azCase;
-wind.updateAll();
 
 apogee2 = quickApogeeOnly(rocket, environment, wind, settings, wrapper);
 
@@ -86,7 +84,6 @@ azCase = (360)*pi/180;
 
 wind.magnitudeParameters = ones(2,2).*magCase;
 wind.azimuthParameters = ones(2,2).*azCase;
-wind.updateAll();
 
 apogee3 = quickApogeeOnly(rocket, environment, wind, settings, wrapper);
 
@@ -95,7 +92,6 @@ azCase = (180)*pi/180;
 
 wind.magnitudeParameters = ones(2,2).*magCase;
 wind.azimuthParameters = ones(2,2).*azCase;
-wind.updateAll();
 
 apogee4 = quickApogeeOnly(rocket, environment, wind, settings, wrapper);
 
diff --git a/aerodynamicsOptimization/src/XCPcheck.m b/aerodynamicsOptimization/src/XCPcheck.m
index a07bb62d0928025bab0a7db7778fb016cb9eaca7..da16982b84ce406067fb6657bbfe1809982cd197 100644
--- a/aerodynamicsOptimization/src/XCPcheck.m
+++ b/aerodynamicsOptimization/src/XCPcheck.m
@@ -106,7 +106,7 @@ nCases = length(launchpad.indexAlpha);
 
 %%% both lateral and longitudinal XCP involved
 % the launchpad dynamics is used to write the aerodynamics states
-xcg = rocket.xCg;
+xcg = rocket.xcg;
 
 %%% aerodynamics coefficient @launchpad exit only
                                 
diff --git a/apogeeAnalysis/mainApogeeAnalysis.m b/apogeeAnalysis/mainApogeeAnalysis.m
index 8cd0d05214ab6c6b10d1064c34b9a6fed5bdba54..8fba160540d416378816865940e8c33984cdfbda 100644
--- a/apogeeAnalysis/mainApogeeAnalysis.m
+++ b/apogeeAnalysis/mainApogeeAnalysis.m
@@ -46,20 +46,18 @@ end
 
 %% PREPARE DATA FOR SIMULATION
 % Winds
-winds = [WindCustom(); WindCustom()];
+winds = [Wind(); Wind()];
 winds(1).altitudes = settings.cases(1).wind.altitudes;
 winds(1).magnitudeDistribution = "u";
 winds(1).azimuthDistribution   = "u";
 winds(1).magnitudeParameters   = settings.cases(1).wind.magVec * ones(2, 1);
 winds(1).azimuthParameters     = settings.cases(1).wind.azVec * ones(2, 1);
-winds(1).updateAll;
 
 winds(2).altitudes = settings.cases(2).wind.altitudes;
 winds(2).magnitudeDistribution = "u";
 winds(2).azimuthDistribution   = "u";
 winds(2).magnitudeParameters   = settings.cases(2).wind.magVec * ones(2, 1);
 winds(2).azimuthParameters     = settings.cases(2).wind.azVec * ones(2, 1);
-winds(2).updateAll;
 
 % Environments
 environments = [Environment(mission, rocket.motor); Environment(mission, rocket.motor)];
@@ -70,7 +68,7 @@ environments(2).omega = settings.cases(2).omega;
 environments(2).phi   = settings.cases(2).phi;
 
 % Airbrakes
-airbrakes = [Airbrakes(mission, rocket.motor); Airbrakes(mission, rocket.motor)];
+airbrakes = [Airbrakes(mission); Airbrakes(mission)];
 airbrakes(1).enabled   = settings.cases(1).airbrakes.enabled;
 airbrakes(1).extension = settings.cases(1).airbrakes.extension;
 airbrakes(1).deltaTime = settings.cases(1).airbrakes.deltaTime;
@@ -80,7 +78,7 @@ airbrakes(2).extension = settings.cases(2).airbrakes.extension;
 airbrakes(2).deltaTime = settings.cases(2).airbrakes.deltaTime;
 
 %% MOTORS SELECTION
-if settings.analysis.isEngineCut && ~(rocket.motor.isHRE)
+if settings.analysis.isEngineCut && rocket.motor.type ~= MotorType.Hybrid
     msg="The Engine Cut Analysis can be used for HRE motors only";
     error(msg)
 end
@@ -105,8 +103,8 @@ if isempty(settings.selection.motorName)
     for i=1:size(motors, 1)
         if (motors(i).Itot > settings.selection.totalImpulseRange(1) && motors(i).Itot < settings.selection.totalImpulseRange(2) ...
                 &&  any(strcmp(motors(i).producer, settings.selection.producer)) ...
-                && ( (rocket.motor.isHRE == false) || (motors(i).ODfus == rocket.diameter) ) ...
-                && ( (rocket.motor.isHRE == false) || ((settings.selection.transient == 2) || ...
+                && ( (rocket.motor.type ~= MotorType.Hybrid) || (motors(i).ODfus == rocket.diameter) ) ...
+                && ( (rocket.motor.type ~= MotorType.Hybrid) || ((settings.selection.transient == 2) || ...
                 (settings.selection.transient == motors(i).transientFlag))))
             selectedMotors(j) = motors(i);
             j = j + 1;
diff --git a/apogeeAnalysis/src/engineCutApogee.m b/apogeeAnalysis/src/engineCutApogee.m
index cbb5dc74c9857aeb00a0754b4778363f8da62f4b..41c240004abe5b91026f7174ba775a0d3966f9ed 100644
--- a/apogeeAnalysis/src/engineCutApogee.m
+++ b/apogeeAnalysis/src/engineCutApogee.m
@@ -5,7 +5,7 @@ arguments
     mission                     Mission
     selectedMotors      (:, 1)  struct
     environments        (2, 1)  Environment
-    winds               (2, 1)  WindCustom
+    winds               (2, 1)  Wind
     airbrakes           (2, 1)  Airbrakes
 end
 %
@@ -63,7 +63,6 @@ for i = 1:2 % highest and lowest apogee cases
 
         for l = 1:nCutOffTime
             rocket.motor.cutoffTime = timeEngineCutVect(l);
-            rocket.updateAll;
             rocket.coefficients.state.xcgTime = linspace(0, rocket.motor.cutoffTime, ...
                 length(rocket.coefficients.state.xcgTime));
             % Apogee
diff --git a/apogeeAnalysis/src/plotApogeeAnalysis.m b/apogeeAnalysis/src/plotApogeeAnalysis.m
index f0bf990acddc297e981c58451245bc446a183bad..be61a38653337b1dfcdb6ae54867f8432d9e1669 100644
--- a/apogeeAnalysis/src/plotApogeeAnalysis.m
+++ b/apogeeAnalysis/src/plotApogeeAnalysis.m
@@ -120,12 +120,12 @@ for i = 1:2
         % green rectangle below the target line
         if delta(1) > 0
             rectangle('Position', [xGridMin minApo (xGridMax-xGridMin) delta(1)], ...
-                'FaceColor', [0 1 0 0.1], 'Linestyle', 'none');
+                'FaceColor', [0 1 0 0.1], 'Linestyle', 'none', 'FaceAlpha', 0.3);
         end
     else
         % green rectangle over the target line
         rectangle('Position', [xGridMin settings.plots.targetApogee (xGridMax-xGridMin) delta(2)], ...
-            'FaceColor', [0 1 0 0.1], 'Linestyle', 'none');
+            'FaceColor', [0 1 0 0.1], 'Linestyle', 'none', 'FaceAlpha', 0.3);
     end
 
     plotApogee.XLim = [xGridMin-margin, xGridMax+margin];
diff --git a/apogeeAnalysis/src/standardApogee.m b/apogeeAnalysis/src/standardApogee.m
index fb089e62681fe8e232c13e101691a61b64dc033b..efd81950458311a7127d7267796682437cd3cf34 100644
--- a/apogeeAnalysis/src/standardApogee.m
+++ b/apogeeAnalysis/src/standardApogee.m
@@ -5,7 +5,7 @@ arguments
     mission                     Mission
     selectedMotors      (:, 1)  struct 
     environments        (2, 1)  Environment
-    winds               (2, 1)  WindCustom
+    winds               (2, 1)  Wind
     airbrakes           (2, 1)  Airbrakes
 end
 %
@@ -48,8 +48,8 @@ for i = 1:2 % highest and lowest apogee cases
     
     for k = 1:nMotors
         tempMotor.name = selectedMotors(k).MotorName;
+        rocket.mass = []; % Disables any ovverrides
         rocket.motor = tempMotor;
-        rocket.updateAll;
         rocket.coefficients.state.xcgTime = linspace(0, tempMotor.cutoffTime, ...
             length(rocket.coefficients.state.xcgTime));
         rocket.motor.thrust = rocket.motor.thrust * ...
diff --git a/autoMatricesProtub/mainAutoMatProtub.m b/autoMatricesProtub/mainAutoMatProtub.m
index ad85f77314cd2613799be1050520bcfbee2865a7..5dcd6e0dbefdf3ef3a38dc9fae84e8d6fdc714af 100644
--- a/autoMatricesProtub/mainAutoMatProtub.m
+++ b/autoMatricesProtub/mainAutoMatProtub.m
@@ -29,15 +29,14 @@ autoMatSettings.vars.hprot = rocket.airbrakes.height;
 autoMatSettings.varsHighAOA.hprot = [];
 
 % overriding xcg number if the motor is solid
-if ~rocket.motor.isHRE && autoMatSettings.vars.Nxcg ~= 2
+if rocket.motor.type == MotorType.Solid && autoMatSettings.vars.Nxcg ~= 2
     warning('Overwriting xCg to 2 for solid rocket motors.')
     autoMatSettings.vars.Nxcg = 2;
 end
 
 %% CHOICE OF NUMBER OF XCG
 timeXcgTotal = rocket.motor.time;
-xcgTotal = rocket.xCg;
-nXcg = autoMatSettings.vars.Nxcg;
+xcgTotal = rocket.xcg;
 
 if nXcg == 1
     chosenXcg = xcgTotal(1);
@@ -76,7 +75,7 @@ end
 
 tic
 %% COMPUTE HIGH AOA AERODYNAMIC COEFFICIENTS
-autoMatSettings.varsHighAOA.xcg = rocket.xCg(end);
+autoMatSettings.varsHighAOA.xcg = rocket.xcg(end);
 if length(autoMatSettings.varsHighAOA.alpha) > 20 || ...
         length(autoMatSettings.varsHighAOA.mach) > 20
     error("automatrices with Dissile and alpha/mach" + ...
diff --git a/caAnalysis/mainCaAnalysis.m b/caAnalysis/mainCaAnalysis.m
index 7b6421cf2ade32d0b0ce096edc11ef3863ece2b1..cabaf9845796c321e99c69f6f1499f5215444894 100644
--- a/caAnalysis/mainCaAnalysis.m
+++ b/caAnalysis/mainCaAnalysis.m
@@ -1,7 +1,7 @@
 function [dHdCA] = mainCaAnalysis(rocket, wind, environment, cfdData)
 arguments
     rocket          = [] % Rocket      = Rocket.empty
-    wind            = [] % WindCustom  = WindCustom.empty
+    wind            = [] % Wind  = Wind.empty
     environment     = [] % Environment = Environment.empty
     cfdData         (2, :)  double = []
 end
@@ -22,7 +22,7 @@ if isDissileMissing, addpath(genpath(dissilePath)); end
 mission = Mission(true);
 if isempty(rocket), rocket  = Rocket(mission); end
 if isempty(environment), environment  = Environment(mission, rocket.motor); end
-if isempty(wind), wind  = WindCustom(mission); end
+if isempty(wind), wind  = Wind(mission); end
 
 settings = Settings('ode');
 settings.addprop('simulator');
diff --git a/caAnalysis/src/initCaAnalysis.m b/caAnalysis/src/initCaAnalysis.m
index 33a3e6cb2205f40807ea02db3114ad6761a7411d..b61d5bf9f678fc3a73579489f595325969f2edf0 100644
--- a/caAnalysis/src/initCaAnalysis.m
+++ b/caAnalysis/src/initCaAnalysis.m
@@ -1,7 +1,7 @@
 function [defaultCa, modCa] = initCaAnalysis(rocket, wind, settings, cfd)
 arguments
     rocket      Rocket
-    wind        WindCustom
+    wind        Wind
     settings    Settings
     cfd         (2, :)  double  = []
 end
@@ -52,5 +52,4 @@ wind.magnitudeParameters = [0; 0];
 
 wind.azimuthDistribution = 'u';
 wind.azimuthParameters = [0; 0];
-wind.updateAll();
 end
\ No newline at end of file
diff --git a/common b/common
index 7589b2690bf66066247dd1236f27eb2ee7c52cbd..bc61b5b9265bde0f30dfc53db0bf5820e3c69b04 160000
--- a/common
+++ b/common
@@ -1 +1 @@
-Subproject commit 7589b2690bf66066247dd1236f27eb2ee7c52cbd
+Subproject commit bc61b5b9265bde0f30dfc53db0bf5820e3c69b04
diff --git a/sensitivityAnalysis/mainSensitivity.m b/sensitivityAnalysis/mainSensitivity.m
index eee5d0ba90afb7ba8d1f657be75940fdb55affe0..56ac7b8a3304468c95c98759afba48d32ca87a90 100644
--- a/sensitivityAnalysis/mainSensitivity.m
+++ b/sensitivityAnalysis/mainSensitivity.m
@@ -2,7 +2,7 @@ function [postProcess, parameters] = ...
     mainSensitivity(rocket, wind, environment, settings, plots)
 arguments
     rocket          = []    % Rocket      = Rocket.empty
-    wind            = []    % WindCustom  = WindCustom.empty
+    wind            = []    % Wind  = Wind.empty
     environment     = []    % Environment = Environment.empty
     settings        = []    % Settings = Settings.empty
 
@@ -47,7 +47,7 @@ if isDissileMissing, addpath(genpath(dissilePath)); end
 mission = Mission(true);
 if isempty(rocket), rocket  = Rocket(mission); end
 if isempty(environment), environment  = Environment(mission, rocket.motor); end
-if isempty(wind), wind  = WindCustom(mission); end
+if isempty(wind), wind  = Wind(mission); end
 if isempty(settings), settings = Settings('ode', 'sensitivity'); end
 
 Settings.read(settings, plots, 'sensitivity', 'plots');
diff --git a/sensitivityAnalysis/sensitivityConfig.m b/sensitivityAnalysis/sensitivityConfig.m
index a7d713ff31213c3bc239acd9d1ff83e7010cc772..7653b39f4939cadaad4678a8d377226a639ab065 100644
--- a/sensitivityAnalysis/sensitivityConfig.m
+++ b/sensitivityAnalysis/sensitivityConfig.m
@@ -13,7 +13,7 @@
 % SPDX-License-Identifier: GPL-3.0-or-later
 
 %% SIMULATION PARAMETERS
-sensitivity.n = 2000;                                                     % Number of cases
+sensitivity.n = 100;                                                     % Number of cases
 sensitivity.type = 4;
 % Simulation type: 
 %   1-apogee only    
diff --git a/sensitivityAnalysis/src/sensitivityStochRun.m b/sensitivityAnalysis/src/sensitivityStochRun.m
index e4ecac839e8658fa481493db9ccc689b9269daea..b8921df049fc11386ebaa28c61c26c3757974998 100644
--- a/sensitivityAnalysis/src/sensitivityStochRun.m
+++ b/sensitivityAnalysis/src/sensitivityStochRun.m
@@ -1,9 +1,9 @@
 function [ascent, descentPara, descentBall, stability] = ...
-    sensitivityStochRun(rocketRef, envRef, wind, parameters, settings, wrapper)
+    sensitivityStochRun(rocketRef, envRef, windRef, parameters, settings, wrapper)
 arguments
     rocketRef       Rocket
     envRef          Environment
-    wind            WindCustom {mustBeA(wind, {'WindCustom', 'WindMatlab'})}
+    windRef            Wind {mustBeA(windRef, {'Wind', 'WindMatlab'})}
     parameters      struct
     settings        Settings
     wrapper         DataWrapper
@@ -97,17 +97,18 @@ if ballFlag
 end
 
 if stabFlag
-    stability = stdStability(rocketRef, envRef, wind, settings, wrapper);
+    stability = stdStability(rocketRef, envRef, windRef, settings, wrapper);
     wrapper.reset();
     stability(1, n) = stability;
 end
 
 parfor i = 1:n
     ascentSol = [];
-    rocket = copy(rocketRef);
-    env = copy(envRef);
+    rocket = rocketRef;
+    env = envRef;
+    wind = windRef;
     uncertanty = struct();
-    updateData(rocket, env, wind, parameters, i);
+    [rocket, env, wind] = updateData(rocket, env, wind, parameters, i);
 
     if ascentFlag
         [ascentSol, ascent(i)] = stdAscent(rocket, env, wind, settings, wrapper);
diff --git a/sensitivityAnalysis/src/stochParameters/initParameter.m b/sensitivityAnalysis/src/stochParameters/initParameter.m
index 1d9db0add415adba11358e2d106ba17337477bc3..621446fb3e12731b73adb9389d498ff5e31e0441 100644
--- a/sensitivityAnalysis/src/stochParameters/initParameter.m
+++ b/sensitivityAnalysis/src/stochParameters/initParameter.m
@@ -55,28 +55,28 @@ for i = 1:length(parameters)
             parameters(i).value = rocket.inertia(3, :);
             parameters(i).udm = 'kg*m^4';
         case 'drogueSurface'
-            parameters(i).value = rocket.parachutes(1, 1).surface;
+            parameters(i).value = rocket.parachutes{1, 1}.surface;
             parameters(i).udm = 'm2';
         case 'drogueMass'
-            parameters(i).value = rocket.parachutes(1, 1).mass;
+            parameters(i).value = rocket.parachutes{1, 1}.mass;
             parameters(i).udm = 'kg';
         case 'drogueCl'
-            parameters(i).value = rocket.parachutes(1, 1).cl;
+            parameters(i).value = rocket.parachutes{1, 1}.cl;
             parameters(i).udm = '-';
         case 'drogueCd'
-            parameters(i).value = rocket.parachutes(1, 1).cd;
+            parameters(i).value = rocket.parachutes{1, 1}.cd;
             parameters(i).udm = '-';
         case 'mainSurface'
-            parameters(i).value = rocket.parachutes(2, 1).surface;
+            parameters(i).value = rocket.parachutes{2, 1}.surface;
             parameters(i).udm = 'm2';
         case 'mainMass'
-            parameters(i).value = rocket.parachutes(2, 1).mass;
+            parameters(i).value = rocket.parachutes{2, 1}.mass;
             parameters(i).udm = 'kg';
         case 'mainCl'
-            parameters(i).value = rocket.parachutes(2, 1).cl;
+            parameters(i).value = rocket.parachutes{2, 1}.cl;
             parameters(i).udm = '-';
         case 'mainCd'
-            parameters(i).value = rocket.parachutes(2, 1).cd;
+            parameters(i).value = rocket.parachutes{2, 1}.cd;
             parameters(i).udm = '-';
             % rocket geometry --- available with the stability run only
         case 'rocketDiameter'
@@ -86,7 +86,7 @@ for i = 1:length(parameters)
             parameters(i).value = rocket.lengthCenter;
             parameters(i).udm = 'm';
         case 'centerOfMass'
-            parameters(i).value = rocket.xCg;
+            parameters(i).value = rocket.xcg;
             parameters(i).udm = 'm';
         case 'finsRootChord'
             parameters(i).value = rocket.rear.finsRootChord;
diff --git a/sensitivityAnalysis/src/stochParameters/updateData.m b/sensitivityAnalysis/src/stochParameters/updateData.m
index e6e858eb13715fbac02489e0843c42070f490253..7035709c6cd3cb746be3049e2f5196842a26979a 100644
--- a/sensitivityAnalysis/src/stochParameters/updateData.m
+++ b/sensitivityAnalysis/src/stochParameters/updateData.m
@@ -1,8 +1,8 @@
-function updateData(rocket, env, wind, parameters, k)
+function [rocket, env, wind] = updateData(rocket, env, wind, parameters, k)
 arguments
     rocket      Rocket
     env         Environment
-    wind        WindCustom
+    wind        Wind
     parameters  struct
     k           double
 end
@@ -36,6 +36,8 @@ end
 coefficients = {'CA','CYB','CY0','CNA','CN0','Cl','Clp', ...
     'Cma','Cm0','Cmad','Cmq','Cnb','Cn0','Cnr','Cnp'};
 
+wind = wind.updateAll();
+
 for i = 1:length(parameters)
     value = applyModFactor(parameters(i), k);
 
@@ -62,28 +64,28 @@ for i = 1:length(parameters)
         case 'Izz'
             rocket.inertia(3, :) = value;
         case 'drogueSurface'
-            rocket.parachutes(1, 1).surface = value;
+            rocket.parachutes{1, 1}.surface = value;
         case 'drogueMass'
-            rocket.parachutes(1, 1).mass = value;
+            rocket.parachutes{1, 1}.mass = value;
         case 'drogueCl'
-            rocket.parachutes(1, 1).cl = value;
+            rocket.parachutes{1, 1}.cl = value;
         case 'drogueCd'
-            rocket.parachutes(1, 1).cd = value;
+            rocket.parachutes{1, 1}.cd = value;
         case 'mainSurface'
-            rocket.parachutes(2, 1).surface = value;
+            rocket.parachutes{2, 1}.surface = value;
         case 'mainMass'
-            rocket.parachutes(2, 1).mass = value;
+            rocket.parachutes{2, 1}.mass = value;
         case 'mainCl'
-            rocket.parachutes(2, 1).cl = value;
+            rocket.parachutes{2, 1}.cl = value;
         case 'mainCd'
-            rocket.parachutes(2, 1).cd = value;
+            rocket.parachutes{2, 1}.cd = value;
             % rocket geometry --- available with the stability run only
         case 'rocketDiameter'
             rocket.diameter = value;
         case 'rocketLCenter'
             rocket.lengthCenter = value;
         case 'centerOfMass'
-            rocket.xCg = value;
+            rocket.xcg = value;
         case 'finsRootChord'
             rocket.rear.finsRootChord = value;
         case 'finsFreeChord'
@@ -102,9 +104,5 @@ for i = 1:length(parameters)
             error(strcat('Parameter: <', parameters(i).name ,'> not known'));
     end
 end
-
-rocket.updateAll();
-env.updateAllExcetpG0();
-wind.updateAll();
 end
 
diff --git a/simulator/mainSimulator.m b/simulator/mainSimulator.m
index 3d374e55561452492398a40e83144f12e2c8140e..b9ec897857d6eae5de45f3019d59db52b87435f9 100644
--- a/simulator/mainSimulator.m
+++ b/simulator/mainSimulator.m
@@ -1,7 +1,7 @@
 function [ascent, descent] = mainSimulator(rocket, wind, environment, settings, options)
 arguments
     rocket      = []    % Rocket      = Rocket.empty
-    wind        = []    % WindCustom  = WindCustom.empty
+    wind        = []    % Wind  = Wind.empty
     environment = []    % Environment = Environment.empty
     settings    = []    % Settings    = Settings.empty
     
@@ -45,13 +45,13 @@ if isCommonMissing, addpath(genpath(commonPath)); end
 mission = Mission(true);
 if isempty(rocket), rocket  = Rocket(mission); end
 if isempty(environment), environment  = Environment(mission, rocket.motor); end
-if isempty(wind), wind  = WindCustom(mission); end
+if isempty(wind), wind  = Wind(mission); end
 if isempty(settings), settings = Settings('ode', 'simulator'); end
 
 Settings.read(settings, options, 'simulator');
 
 %% CHECKS
-if settings.simulator.ballistic && rocket.parachutes(end, 1).finalAltitude ~= 0
+if settings.simulator.ballistic && rocket.parachutes{end, 1}.finalAltitude ~= 0
     error('The landing will be not achived, check the final altitude of the last parachute in config.m')
 end
 if settings.simulator.ballistic && settings.simulator.parafoil
diff --git a/simulator/src/stdPlots.m b/simulator/src/stdPlots.m
index df42c8dea503f84f02c8f7adb85918f6a682b674..6ef6d6868cfa354bcec857b3c1d35345176a06b9 100644
--- a/simulator/src/stdPlots.m
+++ b/simulator/src/stdPlots.m
@@ -182,7 +182,7 @@ if ~settings.simulator.ballistic
             plots(iPlot) = plot3(xM, yM, zM, 'o',...
                'MarkerSize', 10, 'MarkerFaceColor', colorMarker(:, iMarker) , 'MarkerEdgeColor', 'none');
             
-            labels(iPlot) = strcat("Stage: ", num2str(j), " ", rocket.parachutes(i,j).name  ," opening");
+            labels(iPlot) = strcat("Stage: ", num2str(j), " ", rocket.parachutes{i,j}.name  ," opening");
             iPlot = iPlot + 1;  
             iMarker = iMarker + 1;  
         end
@@ -301,7 +301,7 @@ if ~settings.simulator.ballistic
             subplot(3, 1, 3);
             plots(iPlot) = plot(tDescent, vzDescent);
 
-            legends(iPlot) = strcat( "Stage ", num2str(j), ": ", rocket.parachutes(i, j).name , " trajectory" );
+            legends(iPlot) = strcat( "Stage ", num2str(j), ": ", rocket.parachutes{i, j}.name , " trajectory" );
             iPlot = iPlot + 1;
         end
     end
@@ -470,7 +470,7 @@ if ~settings.simulator.ballistic
             subplot(1, 3, 3); 
             plots(iPlot) = plot(yDescent, zDescent); 
             
-            legends(iPlot) = strcat( "Stage ", num2str(j), ": ", rocket.parachutes(i, j).name , " trajectory" ); 
+            legends(iPlot) = strcat( "Stage ", num2str(j), ": ", rocket.parachutes{i, j}.name , " trajectory" ); 
             iPlot = iPlot + 1; 
         end
      end 
diff --git a/stabilityAnalysis/mainStabilityAnalysis.m b/stabilityAnalysis/mainStabilityAnalysis.m
index 28208bb1299ae3d8e63dafe8aa8491b0edd0eee7..b4ae30af6a95f30fadbbf521c5563478ce473d63 100644
--- a/stabilityAnalysis/mainStabilityAnalysis.m
+++ b/stabilityAnalysis/mainStabilityAnalysis.m
@@ -44,13 +44,13 @@ addpath(genpath(dissilePath));
 mission = Mission(true);
 if isempty(rocket), rocket  = Rocket(mission); end
 if isempty(environment), environment  = Environment(mission, rocket.motor); end
-if isempty(wind), wind  = WindCustom(mission); end
+if isempty(wind), wind  = Wind(mission); end
 if isempty(settings), settings = Settings('stabilityAnalysis', 'ode'); end
     
 % Settings.read(settings, options, 'stability');
 
 settings.stability.dissile.alt = environment.z0;
-settings.stability.dissile.xcg = rocket.xCg(1);
+settings.stability.dissile.xcg = rocket.xcg(1);
 
 %% LAUNCHPAD DYNAMICS
 % states to compute the exit pad velocity
@@ -73,7 +73,7 @@ solution = ode113(@ballistic, [0, 10], Y0, options, ...
 vExit = solution.y(4, end);
 machExit = vExit/a;
 settings.stability.dissile.fltcon.MACH = machExit;               % Mach @launchpad
-settings.stability.dissile.refq.XCG = interpLinear(rocket.motor.time, rocket.xCg, solution.x(end));
+settings.stability.dissile.refq.XCG = interpLinear(rocket.motor.time, rocket.xcg, solution.x(end));
 
 settings.stability.dissile.fltcon.ALT = environment.z0;             % Altitude @launchpad
 
diff --git a/stabilityAnalysis/src/computeStability.m b/stabilityAnalysis/src/computeStability.m
index bdf24a9e879a436a71078195fbefdd201a7bb97f..976090cd5e6d73017c7d1c569c8c9467f9b0b8e5 100644
--- a/stabilityAnalysis/src/computeStability.m
+++ b/stabilityAnalysis/src/computeStability.m
@@ -115,6 +115,10 @@ for i = 1:nCall
     azVec = windMesh(2, ind);
     nInd = length(ind);
 
+    % Set uniform wind distribution
+    wind.magnitudeDistribution = 'u';
+    wind.azimuthDistribution = 'u';
+
     %%% Launchpad exit flight condition
     for j = 1:nInd
         index = (nFC * (i-1)) + j;
diff --git a/utils/rocketpyData/exportRocketpy.m b/utils/rocketpyData/exportRocketpy.m
index 14af13de3f524454412c7a65f845983c5286ecfb..9c56cb1517973a111ac02b336c9ce3b87078aaf6 100644
--- a/utils/rocketpyData/exportRocketpy.m
+++ b/utils/rocketpyData/exportRocketpy.m
@@ -35,34 +35,34 @@ CA_3 = squeeze(cat(3, rocket.coefficients.total(1, alpha0, 1:iOpen, beta0, 1, 3,
     rocket.coefficients.total(1, alpha0, iOpen+1:end, beta0, 1, 1, 1)));
 
 %% bays details
-total_center_of_mass = rocket.xCg(end);
+total_center_of_mass = rocket.xcg(end);
 rocket_mass = rocket.massNoMotor;
 rocket_center_of_mass = rocket.xCgNoMotor;
 booster_mass = rocket.stagesMass(1);
 payload_mass = rocket.stagesMass(2);
-booster_center_of_mass = ((rocket.parafoil.noseLength + rocket.xCg(end))*rocket.mass(end) ...
-    - rocket.parafoil.xCg*rocket.parafoil.mass)/rocket.stagesMass(1) - rocket.parafoil.length;
-payload_center_of_mass = rocket.parafoil.xCg;
+booster_center_of_mass = ((rocket.parafoil.noseLength + rocket.xcg(end))*rocket.mass(end) ...
+    - rocket.parafoil.xcg*rocket.parafoil.mass)/rocket.stagesMass(1) - rocket.parafoil.length;
+payload_center_of_mass = rocket.parafoil.xcg;
 
 % parafoil
 mPld = rocket.parafoil.mass;
 lPld = rocket.parafoil.length;
-xcgPld = rocket.parafoil.xCg;
+xcgPld = rocket.parafoil.xcg;
 
 % recovery
 mRcs = rocket.recovery.mass;
 lRcs = rocket.recovery.length;
-xcgRcs = rocket.recovery.xCg;
+xcgRcs = rocket.recovery.xcg;
 
 % electronics
 mElc = rocket.electronics.mass;
 lElc = rocket.electronics.length;
-xcgElc = rocket.electronics.xCg;
+xcgElc = rocket.electronics.xcg;
 
 % airbrakes
 mArb = rocket.airbrakes.mass;
 lArb = rocket.airbrakes.length;
-xcgArb = rocket.airbrakes.xCg;
+xcgArb = rocket.airbrakes.xcg;
 
 % motor
 propMass = rocket.motor.propellantMass;
@@ -70,7 +70,7 @@ usedPropMass = propMass - propMass(end);
 time = rocket.motor.time;
 propMassDot = diff(usedPropMass)./diff(time);
 propMassDot(end + 1) = propMassDot(end);
-propCG = (rocket.xCg.*(usedPropMass + total_center_of_mass) - total_center_of_mass*total_center_of_mass)./usedPropMass;
+propCG = (rocket.xcg.*(usedPropMass + total_center_of_mass) - total_center_of_mass*total_center_of_mass)./usedPropMass;
 propCG(end) = propCG(end - 1);
 propCG = propCG - rocket.absolutePositions("motor");
 burn_time = time(end);
@@ -78,15 +78,15 @@ thrust = rocket.motor.thrust;
 
 motor_dry_mass = rocket.motor.structureMass;
 lMot = rocket.motor.length;
-xcgMotWet = rocket.motor.xCg;
+xcgMotWet = rocket.motor.xcg;
 motor_center_of_dry_mass = 1/rocket.motor.structureMass *...
-    (rocket.motor.xCg(1) * (rocket.motor.structureMass + rocket.motor.propellantMass(1)) - ...
+    (rocket.motor.xcg(1) * (rocket.motor.structureMass + rocket.motor.propellantMass(1)) - ...
     rocket.motor.propellantMass(1) * propCG(1));
 
 % rear (fins + fincan + boat, it overlaps with motor)
 mRear = rocket.rear.mass;
 lRear = rocket.rear.length;
-xcgRear = rocket.rear.xCg;
+xcgRear = rocket.rear.xcg;
 
 %% inertia details
 % inertia without motor
@@ -96,9 +96,9 @@ rocket_I_33 = rocket.inertiaNoMotor(1);
 
 % propellant inertia
 prop_I_11 = (rocket.inertia(2, :) - rocket.inertia(2, end)) - ...
-    usedPropMass .* (rocket.xCg - (rocket.absolutePositions("motor") + propCG)).^2;
+    usedPropMass .* (rocket.xcg - (rocket.absolutePositions("motor") + propCG)).^2;
 prop_I_22 = (rocket.inertia(3, :) - rocket.inertia(3, end)) - ...
-    usedPropMass .* (rocket.xCg - (rocket.absolutePositions("motor") + propCG)).^2;
+    usedPropMass .* (rocket.xcg - (rocket.absolutePositions("motor") + propCG)).^2;
 prop_I_33 = (rocket.inertia(1, :) - rocket.inertia(1, end));
 
 % motor inertia
@@ -114,10 +114,10 @@ motor_I_33_dry = motor_I_33(1) - prop_I_33(1);
 
 % booster inertia
 deltaDistance = rocket.absolutePositions("parafoil") + rocket.parafoil.length;
-booster_I_11 = rocket.inertia(2, end) + rocket.mass(end) * (rocket.xCg(end) - deltaDistance - booster_center_of_mass)^2 - ...
-    (rocket.parafoil.inertia(2, end) + rocket.parafoil.mass * (rocket.parafoil.length - rocket.parafoil.xCg + booster_center_of_mass)^2);
-booster_I_22 = rocket.inertia(3, end) + rocket.mass(end) * (rocket.xCg(end) - deltaDistance - booster_center_of_mass)^2 - ...
-    (rocket.parafoil.inertia(3, end) + rocket.parafoil.mass * (rocket.parafoil.length - rocket.parafoil.xCg + booster_center_of_mass)^2);
+booster_I_11 = rocket.inertia(2, end) + rocket.mass(end) * (rocket.xcg(end) - deltaDistance - booster_center_of_mass)^2 - ...
+    (rocket.parafoil.inertia(2, end) + rocket.parafoil.mass * (rocket.parafoil.length - rocket.parafoil.xcg + booster_center_of_mass)^2);
+booster_I_22 = rocket.inertia(3, end) + rocket.mass(end) * (rocket.xcg(end) - deltaDistance - booster_center_of_mass)^2 - ...
+    (rocket.parafoil.inertia(3, end) + rocket.parafoil.mass * (rocket.parafoil.length - rocket.parafoil.xcg + booster_center_of_mass)^2);
 booster_I_33 = rocket.inertia(1, end)  - rocket.parafoil.inertia(1, end); 
 
 % parafoil inertia
@@ -146,16 +146,16 @@ fins_position = rocket.lengthCenter - rocket.rear.finsAxialDistance - root_chord
 boat_position = rocket.lengthCenter;
 
 %% parachutes
-booster_drogue_cd_s = rocket.parachutes(1, 1).surface * rocket.parachutes(1, 1).cd;
-booster_drogue_opening_delay = rocket.parachutes(1,1).openingTime;
+booster_drogue_cd_s = rocket.parachutes{1, 1}.surface * rocket.parachutes{1, 1}.cd;
+booster_drogue_opening_delay = rocket.parachutes{1,1}.openingTime;
 
-booster_main_cd_s = rocket.parachutes(2, 1).surface * rocket.parachutes(2, 1).cd;
-booster_main_opening_delay = rocket.parachutes(2,1).openingTime;
-booster_main_opening_altitude = rocket.parachutes(1, 1).finalAltitude + environment.z0;
+booster_main_cd_s = rocket.parachutes{2, 1}.surface * rocket.parachutes{2, 1}.cd;
+booster_main_opening_delay = rocket.parachutes{2,1}.openingTime;
+booster_main_opening_altitude = rocket.parachutes{1, 1}.finalAltitude + environment.z0;
 
-payload_drogue_cd_s = rocket.parachutes(1, 2).surface * rocket.parachutes(1, 2).cd;
-payload_drogue_opening_delay = rocket.parachutes(1, 2).openingTime;
-parafoil_opening_altitude = rocket.parachutes(1, 2).finalAltitude + environment.z0;
+payload_drogue_cd_s = rocket.parachutes{1, 2}.surface * rocket.parachutes{1, 2}.cd;
+payload_drogue_opening_delay = rocket.parachutes{1, 2}.openingTime;
+parafoil_opening_altitude = rocket.parachutes{1, 2}.finalAltitude + environment.z0;
 
 %% launchpad and environment details
 latitude = environment.lat0;