diff --git a/Code/AirSeaFluxCode.py b/Code/AirSeaFluxCode.py
index 74f80e6cbe918f75faebbd3d45bee11389974996..b0839adf6d13ae6947ee830d538a57c21eadf49d 100644
--- a/Code/AirSeaFluxCode.py
+++ b/Code/AirSeaFluxCode.py
@@ -10,7 +10,7 @@ from cs_wl_subs import *
 
 class S88:
     def _wind_iterate(self, ind):
-        if self.gust[0] in [1, 2, 3]:
+        if self.gust[0] in range(1, 5):
             self.wind[ind] = np.sqrt(np.power(np.copy(self.spd[ind]), 2) +
                                      np.power(get_gust(self.gust[1],
                                                        self.theta[ind],
@@ -19,16 +19,14 @@ class S88:
                                                        self.gust[2],
                                                        self.grav[ind]), 2))
             # ratio of gusty to horizontal wind
-            self.GustFact[ind] = self.wind[ind]/self.spd[ind]
-            # remove effect of gustiness following Fairall et al. (2003)
-            self.u10n[ind] = self.spd[ind]-self.usr[ind]/kappa/np.sqrt(
-                self.GustFact[ind])*(np.log(self.h_in[0, ind]/self.ref10) -
-                                     self.psim[ind])
-            if self.gust[0] == 2:
-                self.GustFact[ind] = 1
+            self.GustFact = apply_GF(self.gust, self.spd, self.wind, "u")
+            self.u10n[ind] = self.spd[ind]-self.usr[ind]/kappa / \
+                self.GustFact[ind]*(np.log(self.h_in[0, ind]/self.ref10) -
+                                    self.psim[ind])
+            if self.gust[0] == 3:
                 # option to not remove GustFact
                 self.u10n[ind] = self.wind[ind]-self.usr[ind]/kappa*(
-                     np.log(self.h_in[0, ind]/self.ref10)-self.psim[ind])
+                    np.log(self.h_in[0, ind]/self.ref10)-self.psim[ind])
         else:
             # initalisation of wind
             self.wind[ind] = np.copy(self.spd[ind])
@@ -330,15 +328,10 @@ class S88:
             # usr is divided by (GustFact)^0.5 (here applied to sensible and
             # latent as well as tau)
             # GustFact should be 1 if gust is OFF or gust[0]=2
-            self.tau = self.rho*np.power(self.usr, 2)/self.GustFact
-            if self.gust[0] == 3:
-                self.sensible = self.rho*self.cp*self.usr*self.tsr
-                self.latent = self.rho*self.lv*self.usr*self.qsr
-            else:
-                self.sensible = self.rho*self.cp*self.usr / \
-                    np.sqrt(self.GustFact)*self.tsr
-                self.latent = self.rho*self.lv*self.usr / \
-                    np.sqrt(self.GustFact)*self.qsr
+            self.GustFact = apply_GF(self.gust, self.spd, self.wind, "TSF")
+            self.tau = self.rho*np.power(self.usr, 2)/self.GustFact[0]
+            self.sensible = self.rho*self.cp*(self.usr/self.GustFact[1])*self.tsr
+            self.latent = self.rho*self.lv*(self.usr/self.GustFact[2])*self.qsr
 
             # Set the new variables (for comparison against "old")
             new = np.array([np.copy(getattr(self, i)) for i in new_vars])
@@ -395,9 +388,10 @@ class S88:
         self._get_humidity()  # Get the Relative humidity
         self._flag(out=out)  # Get flags
 
+        self.GustFact = apply_GF(self.gust, self.spd, self.wind, "u")
         # remove effect of gustiness following Fairall et al. (2003)
         # usr is divided by (GustFact)^0.5
-        self.uref = self.spd-self.usr/kappa/np.sqrt(self.GustFact) * \
+        self.uref = self.spd-self.usr/kappa/self.GustFact * \
             (np.log(self.h_in[0]/self.h_out[0])-self.psim +
              psim_calc(self.h_out[0]/self.monob, self.meth))
         # include lapse rate adjustment as theta is well-mixed
@@ -501,8 +495,7 @@ class S88:
             gust = [0, 0, 0]
 
         assert np.size(gust) == 3, "gust input must be a 3x1 array"
-        assert gust[0] in [
-            0, 1, 2, 3], "gust at position 0 must be 0, 1, 2 or 3"
+        assert gust[0] in range(6), "gust at position 0 must be 0 to 5"
         self.gust = gust
 
     def _class_flag(self):
diff --git a/Code/flux_subs.py b/Code/flux_subs.py
index 171a9c8f7d3ffd4cfa489ffb7322612c9c572450..b24aa88361242f4246e51ec8391ff86c0ed54e7f 100755
--- a/Code/flux_subs.py
+++ b/Code/flux_subs.py
@@ -593,6 +593,64 @@ def get_gust(beta, Ta, usr, tsrv, zi, grav):
 # ---------------------------------------------------------------------
 
 
+def apply_GF(gust, spd, wind, step):
+    """
+    Apply gustiness factor according if gustiness ON.
+
+    There are different ways to remove the effect of gustiness according to
+    the user's choice.
+
+    Parameters
+    ----------
+    gust : int
+        option on how to apply gustiness
+        0: gustiness is switched OFF
+        1: gustiness is switched ON following Fairall et al.
+        2: gustiness is switched ON and GF is removed from TSFs u10n, uref
+        3: gustiness is switched ON and GF=1
+        4: gustiness is switched ON following Zeng et al. 1998 or
+           Brodeau et al. 2006 for ECMWF
+        5: gustiness is switched ON following C35 matlab code
+    spd : float
+        wind speed                      [ms^{-1}]
+    wind : float
+        wind speed including gust       [ms^{-1}]
+    step : str
+        step during AirSeaFluxCode the GF is applied: "u", "TSF"
+
+    Returns
+    -------
+    GustFact : float
+        gustiness factor.
+
+    """
+    # 1. following C35 documentation, 2. use GF to TSF, u10n uzout,
+    # 3. GF=1, 4. UA,  5. C35 code 6. ecmwf aerobulk)
+    # ratio of gusty to horizontal wind; gustiness factor
+    if step in ["u"]:
+        GustFact = wind*0+1
+        if gust[0] in [1, 2]:
+            GustFact = np.sqrt(wind/spd)
+        elif gust[0] == 5:
+            # as in C35 matlab code
+            GustFact = wind/spd
+    elif step == "TSF":
+        # remove effect of gustiness  from TSFs
+        # here it is a 3xspd.shape array
+        GustFact = np.empty([3, spd.shape[0]], dtype=float)*np.nan
+        GustFact[0, :] = wind/spd
+        GustFact[1:3, :] = wind*0+1
+        # following Fairall et al. (2003)
+        if gust[0] == 2:
+            # usr is divided by (GustFact)^0.5 (here applied to sensible and
+            # latent as well as tau)
+            GustFact[1:3, :] = np.sqrt(wind/spd)
+        elif gust[0] == 3:
+            GustFact[0, :] = wind*0+1
+    return GustFact
+# ---------------------------------------------------------------------
+
+
 def get_strs(hin, monob, wind, zo, zot, zoq, dt, dq, cd, ct, cq, meth):
     """
     Calculate star wind speed, temperature and specific humidity.