diff --git a/py_wake/deficit_models/deficit_model.py b/py_wake/deficit_models/deficit_model.py
index f1e93acbfbdfc30112179542993af3c2925964e6..3594d89fb30ab36a20e22ef25c61deeb1d5aaa9a 100644
--- a/py_wake/deficit_models/deficit_model.py
+++ b/py_wake/deficit_models/deficit_model.py
@@ -1,11 +1,16 @@
 from abc import ABC, abstractmethod
 import numpy as np
 from numpy import newaxis as na
+import inspect
 
 
 class DeficitModel(ABC):
     deficit_initalized = False
 
+    def __init__(self):
+        if not hasattr(self, 'args4deficit'):
+            self.args4deficit = set(inspect.getfullargspec(self.calc_deficit).args) - {'self'}
+
     def _calc_layout_terms(self, **_):
         """Calculate layout dependent terms, which is not updated during simulation"""
 
diff --git a/py_wake/deficit_models/gaussian.py b/py_wake/deficit_models/gaussian.py
index c35d5fbc67f368356eadc798c661724ad70b8089..0e8bf9bb42952331c80d89b83362db2ff6f44953 100644
--- a/py_wake/deficit_models/gaussian.py
+++ b/py_wake/deficit_models/gaussian.py
@@ -14,11 +14,11 @@ class BastankhahGaussianDeficit(ConvectionDeficitModel):
     A new analytical model for wind-turbine wakes.
     J. Renew. Energy. 2014;70:116-23.
     """
-    args4deficit = ['WS_ilk', 'WS_eff_ilk', 'dw_ijlk', 'cw_ijlk', 'D_src_il', 'ct_ilk']
 
     def __init__(self, k=0.0324555, use_effective_ws=False):
         self._k = k
         self.use_effective_ws = use_effective_ws
+        ConvectionDeficitModel.__init__(self)
 
     def k_ilk(self, **_):
         return np.reshape(self._k, (1, 1, 1))
diff --git a/py_wake/utils/tensorflow_surrogate_utils.py b/py_wake/utils/tensorflow_surrogate_utils.py
index 8efba343eeb54c2d2e86b0a00734f0fbaf1089b0..306b042781c4ccda77ed1ca13e10ce5300b75a73 100644
--- a/py_wake/utils/tensorflow_surrogate_utils.py
+++ b/py_wake/utils/tensorflow_surrogate_utils.py
@@ -41,13 +41,8 @@ class TensorflowSurrogate():
         path = Path(path)
         with open(path / 'extra_data.json') as fid:
             extra_data = json.load(fid)
-
-        self.input_channel_names = extra_data['input_channel_names']
-        self.output_channel_name = extra_data['output_channel_name']
-        self.wind_speed_cut_in = extra_data['wind_speed_cut_in']
-        self.wind_speed_cut_out = extra_data['wind_speed_cut_out']
-        if 'wohler_exponent' in extra_data:
-            self.wohler_exponent = extra_data['wohler_exponent']
+        for k, v in extra_data.items():
+            setattr(self, k, v)
 
         # Create the MinMaxScaler scaler objects.
         def json2scaler(d):
@@ -56,8 +51,8 @@ class TensorflowSurrogate():
                 setattr(scaler, k, v)
             return scaler
 
-        self.input_scaler = json2scaler(extra_data['input_scalers'][set_name])
-        self.output_scaler = json2scaler(extra_data['output_scalers'][set_name])
+        self.input_scaler = json2scaler(self.input_scalers[set_name])
+        self.output_scaler = json2scaler(self.output_scalers[set_name])
 
         self.model = tf.keras.models.load_model(path / f'model_set_{set_name}.h5')