diff --git a/extreme_fit/estimator/margin_estimator/abstract_margin_estimator.py b/extreme_fit/estimator/margin_estimator/abstract_margin_estimator.py
index 47aa7b4f5e4978ea6fe65a1b1445f24ecde46e19..463778f8d86b253bf646d1b2d864c00801090171 100644
--- a/extreme_fit/estimator/margin_estimator/abstract_margin_estimator.py
+++ b/extreme_fit/estimator/margin_estimator/abstract_margin_estimator.py
@@ -7,6 +7,8 @@ from cached_property import cached_property
 
 from extreme_fit.estimator.abstract_estimator import AbstractEstimator
 from extreme_fit.estimator.utils import load_margin_function
+from extreme_fit.model.margin_model.linear_margin_model.abstract_temporal_linear_margin_model import \
+    AbstractTemporalLinearMarginModel
 from extreme_fit.model.margin_model.linear_margin_model.linear_margin_model import LinearMarginModel
 from extreme_fit.function.margin_function.linear_margin_function import LinearMarginFunction
 from extreme_fit.model.margin_model.utils import MarginFitMethod
@@ -103,15 +105,22 @@ class LinearMarginEstimator(AbstractMarginEstimator):
         return 2 * self.nllh(split=split)
 
     def aic(self, split=Split.all):
-        aic = 2 * self.margin_model.nb_params + 2 * self.nllh(split=split)
+        aic = 2 * self.nb_params + 2 * self.nllh(split=split)
         npt.assert_almost_equal(self.result_from_model_fit.aic, aic, decimal=0)
         return aic
 
     def n(self, split=Split.all):
         return len(self.dataset.maxima_gev(split=split))
 
+    @property
+    def nb_params(self):
+        nb_params = self.function_from_fit.nb_params
+        if isinstance(self.margin_model, AbstractTemporalLinearMarginModel) and self.margin_model.is_gumbel_model:
+            nb_params -= 1
+        return nb_params
+
     def bic(self, split=Split.all):
-        return np.log(self.n(split=split)) * self.margin_model.nb_params + 2 * self.nllh(split=split)
+        return np.log(self.n(split=split)) * self.nb_params + 2 * self.nllh(split=split)
 
 
 def compute_nllh(coordinate_values, maxima_values, function_from_fit, maximum_from_obs=True, assertion_for_inf=True):
diff --git a/extreme_fit/function/margin_function/abstract_margin_function.py b/extreme_fit/function/margin_function/abstract_margin_function.py
index 8f3a7b1432b8aec0886971f015a90da6668c5598..e3e70aa1e52efc1b8e2a8330b80bde9d574c9cdf 100644
--- a/extreme_fit/function/margin_function/abstract_margin_function.py
+++ b/extreme_fit/function/margin_function/abstract_margin_function.py
@@ -57,6 +57,10 @@ class AbstractMarginFunction(AbstractFunction):
         """Main method that maps each coordinate to its distribution parameters"""
         raise NotImplementedError
 
+    @property
+    def nb_params(self):
+        raise NotImplementedError
+
     @property
     def gev_value_name_to_serie(self) -> Dict[str, pd.Series]:
         # Load the gev_params
diff --git a/extreme_fit/function/margin_function/linear_margin_function.py b/extreme_fit/function/margin_function/linear_margin_function.py
index d387341f08ebb5ef2aff5d59bb464b427caa11c7..59065da1f82b8f9b590b4101f1a0e10eca84e106 100644
--- a/extreme_fit/function/margin_function/linear_margin_function.py
+++ b/extreme_fit/function/margin_function/linear_margin_function.py
@@ -49,6 +49,10 @@ class LinearMarginFunction(ParametricMarginFunction):
     def coefficient_name_to_dim(cls, coordinates: AbstractCoordinates) -> Dict[int, str]:
         return {v: k for k, v in cls.idx_to_coefficient_name(coordinates).items()}
 
+    @property
+    def nb_params(self):
+        return len(self.coef_dict)
+
     @property
     def coef_dict(self) -> Dict[str, float]:
         coef_dict = {}
diff --git a/extreme_fit/function/margin_function/polynomial_margin_function.py b/extreme_fit/function/margin_function/polynomial_margin_function.py
index e7814ed7f9625aae20f70c5bbc95f4c64bbe6d37..5863802adb2ffe850ba26d35f2eb9b5ddc4c4a07 100644
--- a/extreme_fit/function/margin_function/polynomial_margin_function.py
+++ b/extreme_fit/function/margin_function/polynomial_margin_function.py
@@ -31,6 +31,10 @@ class PolynomialMarginFunction(LinearMarginFunction):
     def get_params(self, coordinate: np.ndarray, is_transformed: bool = True) -> GevParams:
         return super().get_params(coordinate, is_transformed)
 
+    @property
+    def nb_params(self):
+        return sum([c.nb_params for c in self.param_name_to_coef.values()])
+
     @classmethod
     def from_coef_dict(cls, coordinates: AbstractCoordinates, param_name_to_dims: Dict[str, List[Tuple[int, int]]],
                        coef_dict: Dict[str, float], starting_point: Union[None, int] = None, log_scale=None):
diff --git a/extreme_fit/function/margin_function/spline_margin_function.py b/extreme_fit/function/margin_function/spline_margin_function.py
index 5ac8a21ea7e55b0792a05fdc1f1ed6099d64eca8..7b6755bd010f86f4dc15bbf0574c1d00a9f13570 100644
--- a/extreme_fit/function/margin_function/spline_margin_function.py
+++ b/extreme_fit/function/margin_function/spline_margin_function.py
@@ -39,6 +39,10 @@ class SplineMarginFunction(LinearMarginFunction):
     def get_params(self, coordinate: np.ndarray, is_transformed: bool = True) -> GevParams:
         return super().get_params(coordinate, is_transformed)
 
+    @property
+    def nb_params(self):
+        return sum([c.nb_params for c in self.param_name_to_coef.values()])
+
     @classmethod
     def from_coef_dict(cls, coordinates: AbstractCoordinates, param_name_to_dims: Dict[str, List[Tuple[int, int]]],
                        coef_dict: Dict[str, float], starting_point: Union[None, int] = None, log_scale=None):
diff --git a/extreme_fit/model/margin_model/linear_margin_model/abstract_temporal_linear_margin_model.py b/extreme_fit/model/margin_model/linear_margin_model/abstract_temporal_linear_margin_model.py
index 85506f5ba1a3261dc5bde34c0a225ffaf4838701..337073bfc9358ddc5ef924a4b84ced8db2418215 100644
--- a/extreme_fit/model/margin_model/linear_margin_model/abstract_temporal_linear_margin_model.py
+++ b/extreme_fit/model/margin_model/linear_margin_model/abstract_temporal_linear_margin_model.py
@@ -169,3 +169,7 @@ class AbstractTemporalLinearMarginModel(LinearMarginModel):
     @property
     def siglink(self):
         return r('identity')
+
+    @property
+    def is_gumbel_model(self):
+        return self.type_for_mle == "Gumbel"
\ No newline at end of file
diff --git a/extreme_fit/model/margin_model/linear_margin_model/linear_margin_model.py b/extreme_fit/model/margin_model/linear_margin_model/linear_margin_model.py
index a8f5af9974140904a9c0034dbc8a891d966464d0..90fb69633649cf6a39402a9ce67a4565141f640a 100644
--- a/extreme_fit/model/margin_model/linear_margin_model/linear_margin_model.py
+++ b/extreme_fit/model/margin_model/linear_margin_model/linear_margin_model.py
@@ -37,7 +37,7 @@ class LinearMarginModel(ParametricMarginModel):
 
     @property
     def nb_params(self):
-        return len(self.margin_function.coef_dict)
+        return self.margin_function.nb_params
 
     def param_name_to_linear_coef(self, param_name_and_dim_to_coef):
         param_name_to_linear_coef = {}
diff --git a/extreme_fit/model/margin_model/linear_margin_model/temporal_linear_margin_models.py b/extreme_fit/model/margin_model/linear_margin_model/temporal_linear_margin_models.py
index fde5b9c6e42f09d3bf1cc66e86daa438fe4d2c95..08e3cdffa851b91c69f9ce001de202954bd38751 100644
--- a/extreme_fit/model/margin_model/linear_margin_model/temporal_linear_margin_models.py
+++ b/extreme_fit/model/margin_model/linear_margin_model/temporal_linear_margin_models.py
@@ -126,11 +126,6 @@ class GumbelTemporalModel(StationaryTemporalModel):
         super().__init__(coordinates, params_user, starting_point, fit_method,
                          nb_iterations_for_bayesian_fit, params_initial_fit_bayesian, type_for_MLE="Gumbel")
 
-    @property
-    def nb_params(self):
-        return super().nb_params - 1
-
-
 class NonStationaryLocationGumbelModel(GumbelTemporalModel, NonStationaryLocationTemporalModel):
     pass
 
diff --git a/extreme_fit/model/margin_model/polynomial_margin_model/gumbel_altitudinal_models.py b/extreme_fit/model/margin_model/polynomial_margin_model/gumbel_altitudinal_models.py
index e95056a3b3cf408eb07f62c1b85fbaec5766741d..0b2753d6f3e41448cdd0264e797d49e1ed121ebf 100644
--- a/extreme_fit/model/margin_model/polynomial_margin_model/gumbel_altitudinal_models.py
+++ b/extreme_fit/model/margin_model/polynomial_margin_model/gumbel_altitudinal_models.py
@@ -24,11 +24,6 @@ class AbstractGumbelAltitudinalModel(AbstractAltitudinalModel):
         super().__init__(coordinates, params_user, starting_point, fit_method, nb_iterations_for_bayesian_fit,
                          params_initial_fit_bayesian, "Gumbel", params_class, max_degree)
 
-    @property
-    def nb_params(self):
-        return super().nb_params - 1
-
-
 class StationaryGumbelAltitudinal(AbstractGumbelAltitudinalModel, StationaryAltitudinal):
     pass
 
diff --git a/extreme_fit/model/margin_model/polynomial_margin_model/polynomial_margin_model.py b/extreme_fit/model/margin_model/polynomial_margin_model/polynomial_margin_model.py
index 7357cf84684eefa2d32828fd682e162f2bf3b68f..a456754866a569a2997c0adcfa5b8d62513777f8 100644
--- a/extreme_fit/model/margin_model/polynomial_margin_model/polynomial_margin_model.py
+++ b/extreme_fit/model/margin_model/polynomial_margin_model/polynomial_margin_model.py
@@ -23,10 +23,6 @@ class PolynomialMarginModel(AbstractTemporalLinearMarginModel):
                          params_initial_fit_bayesian, type_for_MLE, params_class, temporal_covariate_for_fit)
         self.max_degree = max_degree
 
-    @property
-    def nb_params(self):
-        return sum([c.nb_params for c in self.margin_function.param_name_to_coef.values()])
-
     @cached_property
     def margin_function(self) -> PolynomialMarginFunction:
         return super().margin_function
diff --git a/extreme_fit/model/margin_model/spline_margin_model/spline_margin_model.py b/extreme_fit/model/margin_model/spline_margin_model/spline_margin_model.py
index d13e746ee788b4f0de31126fc2e80d50532c14e2..15c439b62581f0c7931d5293182337f2f4060d06 100644
--- a/extreme_fit/model/margin_model/spline_margin_model/spline_margin_model.py
+++ b/extreme_fit/model/margin_model/spline_margin_model/spline_margin_model.py
@@ -23,10 +23,6 @@ class SplineMarginModel(AbstractTemporalLinearMarginModel):
                          params_initial_fit_bayesian, type_for_MLE, params_class, temporal_covariate_for_fit)
         self.max_degree = max_degree
 
-    @property
-    def nb_params(self):
-        return sum([c.nb_params for c in self.margin_function.param_name_to_coef.values()])
-
     @cached_property
     def margin_function(self) -> SplineMarginFunction:
         return super().margin_function