diff --git a/experiment/meteo_france_SCM_study/visualization/study_visualization/study_visualizer.py b/experiment/meteo_france_SCM_study/visualization/study_visualization/study_visualizer.py
index fe6ab50ab00ab4f0a0f8dc01181c11bbff2b5be4..2abb47e70a174d4fb3ecfe5560c6b169b1844a51 100644
--- a/experiment/meteo_france_SCM_study/visualization/study_visualization/study_visualizer.py
+++ b/experiment/meteo_france_SCM_study/visualization/study_visualization/study_visualizer.py
@@ -14,7 +14,7 @@ from extreme_estimator.estimator.full_estimator.abstract_full_estimator import \
     FullEstimatorInASingleStepWithSmoothMargin
 from extreme_estimator.estimator.margin_estimator.abstract_margin_estimator import SmoothMarginEstimator
 from extreme_estimator.extreme_models.margin_model.param_function.param_function import ParamFunction
-from extreme_estimator.extreme_models.margin_model.smooth_margin_model import LinearAllParametersAllDimsMarginModel
+from extreme_estimator.extreme_models.margin_model.linear_margin_model import LinearAllParametersAllDimsMarginModel
 from extreme_estimator.extreme_models.max_stable_model.abstract_max_stable_model import CovarianceFunction
 from extreme_estimator.extreme_models.max_stable_model.max_stable_models import BrownResnick
 from extreme_estimator.margin_fits.abstract_params import AbstractParams
diff --git a/experiment/regression_margin/regression_margin.py b/experiment/regression_margin/regression_margin.py
index b38308a74f773eaf494ab73800f40e7fa14ef028..31a6548241d6abf470d14d50e969483ed07429f9 100644
--- a/experiment/regression_margin/regression_margin.py
+++ b/experiment/regression_margin/regression_margin.py
@@ -2,7 +2,7 @@ import numpy as np
 
 from extreme_estimator.estimator.full_estimator.abstract_full_estimator import FullEstimatorInASingleStepWithSmoothMargin
 from extreme_estimator.extreme_models.margin_model.margin_function.linear_margin_function import LinearMarginFunction
-from extreme_estimator.extreme_models.margin_model.smooth_margin_model import LinearAllParametersAllDimsMarginModel, \
+from extreme_estimator.extreme_models.margin_model.linear_margin_model import LinearAllParametersAllDimsMarginModel, \
     ConstantMarginModel
 from extreme_estimator.extreme_models.max_stable_model.max_stable_models import Smith
 from extreme_estimator.margin_fits.gev.gev_params import GevParams
diff --git a/experiment/simulation/lin_space2_simulation.py b/experiment/simulation/lin_space2_simulation.py
index b3ab8757d6c84fb7165e063f61a903d5746f383c..b25c00b877b776b1b4014cff1ac5fcc3fcce0128 100644
--- a/experiment/simulation/lin_space2_simulation.py
+++ b/experiment/simulation/lin_space2_simulation.py
@@ -2,7 +2,7 @@ from experiment.simulation.abstract_simulation import AbstractSimulation
 from extreme_estimator.estimator.full_estimator.full_estimator_for_simulation import FULL_ESTIMATORS_FOR_SIMULATION
 from extreme_estimator.estimator.margin_estimator.margin_estimator_for_simulation import \
     MARGIN_ESTIMATORS_FOR_SIMULATION
-from extreme_estimator.extreme_models.margin_model.smooth_margin_model import ConstantMarginModel
+from extreme_estimator.extreme_models.margin_model.linear_margin_model import ConstantMarginModel
 from extreme_estimator.extreme_models.max_stable_model.max_stable_models import Smith
 from extreme_estimator.margin_fits.gev.gev_params import GevParams
 from spatio_temporal_dataset.coordinates.spatial_coordinates.coordinates_1D import LinSpaceSpatialCoordinates
diff --git a/experiment/simulation/lin_space_simulation.py b/experiment/simulation/lin_space_simulation.py
index 96e3618c4198895bfe32323868bc1dc6dd8b93bf..b00ec2d7153d15652db51cfd5f39906fb460e00b 100644
--- a/experiment/simulation/lin_space_simulation.py
+++ b/experiment/simulation/lin_space_simulation.py
@@ -1,5 +1,5 @@
 from experiment.simulation.abstract_simulation import AbstractSimulation
-from extreme_estimator.extreme_models.margin_model.smooth_margin_model import ConstantMarginModel
+from extreme_estimator.extreme_models.margin_model.linear_margin_model import ConstantMarginModel
 from extreme_estimator.extreme_models.max_stable_model.max_stable_models import Smith
 from extreme_estimator.margin_fits.gev.gev_params import GevParams
 from spatio_temporal_dataset.coordinates.spatial_coordinates.coordinates_1D import LinSpaceSpatialCoordinates
diff --git a/extreme_estimator/estimator/full_estimator/abstract_full_estimator.py b/extreme_estimator/estimator/full_estimator/abstract_full_estimator.py
index 16652bcece59d58a8b5b599485c51e53e61e80d5..8ba3b479aeda79e59a24072a35c0874a194576fa 100644
--- a/extreme_estimator/estimator/full_estimator/abstract_full_estimator.py
+++ b/extreme_estimator/estimator/full_estimator/abstract_full_estimator.py
@@ -3,7 +3,7 @@ from extreme_estimator.estimator.margin_estimator.abstract_margin_estimator impo
 from extreme_estimator.estimator.max_stable_estimator.abstract_max_stable_estimator import MaxStableEstimator
 from extreme_estimator.extreme_models.margin_model.abstract_margin_model import AbstractMarginModel
 from extreme_estimator.extreme_models.margin_model.margin_function.linear_margin_function import LinearMarginFunction
-from extreme_estimator.extreme_models.margin_model.smooth_margin_model import LinearMarginModel
+from extreme_estimator.extreme_models.margin_model.linear_margin_model import LinearMarginModel
 from extreme_estimator.extreme_models.max_stable_model.abstract_max_stable_model import AbstractMaxStableModel
 from spatio_temporal_dataset.dataset.abstract_dataset import AbstractDataset
 
diff --git a/extreme_estimator/estimator/full_estimator/full_estimator_for_simulation.py b/extreme_estimator/estimator/full_estimator/full_estimator_for_simulation.py
index ef250526600057b2ac56bee17835a9fca00b407b..dd436b014d719da57a1d9ad354e32a429afa340b 100644
--- a/extreme_estimator/estimator/full_estimator/full_estimator_for_simulation.py
+++ b/extreme_estimator/estimator/full_estimator/full_estimator_for_simulation.py
@@ -1,6 +1,6 @@
 from extreme_estimator.estimator.full_estimator.abstract_full_estimator import \
     FullEstimatorInASingleStepWithSmoothMargin
-from extreme_estimator.extreme_models.margin_model.smooth_margin_model import LinearAllParametersAllDimsMarginModel, \
+from extreme_estimator.extreme_models.margin_model.linear_margin_model import LinearAllParametersAllDimsMarginModel, \
     ConstantMarginModel
 from extreme_estimator.extreme_models.max_stable_model.max_stable_models import Smith
 from spatio_temporal_dataset.dataset.abstract_dataset import AbstractDataset
diff --git a/extreme_estimator/estimator/margin_estimator/abstract_margin_estimator.py b/extreme_estimator/estimator/margin_estimator/abstract_margin_estimator.py
index 1340adfef21be73b90b6d88643ba7f4a43c3bc38..a1b8264be4239c92fd1e61666adbc27a1969cb19 100644
--- a/extreme_estimator/estimator/margin_estimator/abstract_margin_estimator.py
+++ b/extreme_estimator/estimator/margin_estimator/abstract_margin_estimator.py
@@ -3,7 +3,7 @@ from abc import ABC
 from extreme_estimator.estimator.abstract_estimator import AbstractEstimator
 from extreme_estimator.extreme_models.margin_model.margin_function.abstract_margin_function import \
     AbstractMarginFunction
-from extreme_estimator.extreme_models.margin_model.smooth_margin_model import LinearMarginModel, \
+from extreme_estimator.extreme_models.margin_model.linear_margin_model import LinearMarginModel, \
     LinearAllParametersAllDimsMarginModel
 from spatio_temporal_dataset.dataset.abstract_dataset import AbstractDataset
 
diff --git a/extreme_estimator/estimator/margin_estimator/margin_estimator_for_simulation.py b/extreme_estimator/estimator/margin_estimator/margin_estimator_for_simulation.py
index 1bd0802658bf787d6feaeb8e358def511e186575..3ce73ecb68e4469bc223da6db7a98efc41dd901f 100644
--- a/extreme_estimator/estimator/margin_estimator/margin_estimator_for_simulation.py
+++ b/extreme_estimator/estimator/margin_estimator/margin_estimator_for_simulation.py
@@ -1,5 +1,5 @@
 from extreme_estimator.estimator.margin_estimator.abstract_margin_estimator import SmoothMarginEstimator
-from extreme_estimator.extreme_models.margin_model.smooth_margin_model import LinearAllParametersAllDimsMarginModel, \
+from extreme_estimator.extreme_models.margin_model.linear_margin_model import LinearAllParametersAllDimsMarginModel, \
     ConstantMarginModel
 from spatio_temporal_dataset.dataset.abstract_dataset import AbstractDataset
 
diff --git a/extreme_estimator/extreme_models/margin_model/linear_margin_model.py b/extreme_estimator/extreme_models/margin_model/linear_margin_model.py
new file mode 100644
index 0000000000000000000000000000000000000000..1e77a4ea42be0516f77e79603284081dadf3f30c
--- /dev/null
+++ b/extreme_estimator/extreme_models/margin_model/linear_margin_model.py
@@ -0,0 +1,127 @@
+import numpy as np
+import pandas as pd
+
+from extreme_estimator.extreme_models.result_from_fit import ResultFromFit
+from extreme_estimator.extreme_models.margin_model.abstract_margin_model import AbstractMarginModel
+from extreme_estimator.extreme_models.margin_model.margin_function.linear_margin_function import LinearMarginFunction
+from extreme_estimator.extreme_models.margin_model.param_function.linear_coef import LinearCoef
+from extreme_estimator.extreme_models.utils import safe_run_r_estimator, r, get_coord, \
+    get_margin_formula
+from extreme_estimator.margin_fits.gev.gev_params import GevParams
+
+
+class LinearMarginModel(AbstractMarginModel):
+
+    def load_margin_functions(self, gev_param_name_to_linear_dims=None):
+        assert gev_param_name_to_linear_dims is not None, 'LinearMarginModel cannot be used for sampling/fitting \n' \
+                                                          'load_margin_functions needs to be implemented in child class'
+        # Load sample coef
+        self.default_params_sample = self.default_param_name_and_dim_to_coef()
+        linear_coef_sample = self.gev_param_name_to_linear_coef(param_name_and_dim_to_coef=self.params_sample)
+        self.margin_function_sample = LinearMarginFunction(coordinates=self.coordinates,
+                                                           gev_param_name_to_linear_coef=linear_coef_sample,
+                                                           gev_param_name_to_linear_dims=gev_param_name_to_linear_dims)
+
+        # Load start fit coef
+        self.default_params_start_fit = self.default_param_name_and_dim_to_coef()
+        linear_coef_start_fit = self.gev_param_name_to_linear_coef(param_name_and_dim_to_coef=self.params_start_fit)
+        self.margin_function_start_fit = LinearMarginFunction(coordinates=self.coordinates,
+                                                              gev_param_name_to_linear_coef=linear_coef_start_fit,
+                                                              gev_param_name_to_linear_dims=gev_param_name_to_linear_dims)
+
+    @staticmethod
+    def default_param_name_and_dim_to_coef() -> dict:
+        default_intercept = 1
+        default_slope = 0.01
+        gev_param_name_and_dim_to_coef = {}
+        for gev_param_name in GevParams.PARAM_NAMES:
+            gev_param_name_and_dim_to_coef[(gev_param_name, 0)] = default_intercept
+            for dim in [1, 2, 3]:
+                gev_param_name_and_dim_to_coef[(gev_param_name, dim)] = default_slope
+        return gev_param_name_and_dim_to_coef
+
+    @staticmethod
+    def gev_param_name_to_linear_coef(param_name_and_dim_to_coef):
+        gev_param_name_to_linear_coef = {}
+        for gev_param_name in GevParams.PARAM_NAMES:
+            dim_to_coef = {dim: param_name_and_dim_to_coef[(gev_param_name, dim)] for dim in [0, 1, 2, 3]}
+            linear_coef = LinearCoef(gev_param_name=gev_param_name, dim_to_coef=dim_to_coef)
+            gev_param_name_to_linear_coef[gev_param_name] = linear_coef
+        return gev_param_name_to_linear_coef
+
+    @classmethod
+    def from_coef_list(cls, coordinates, gev_param_name_to_coef_list):
+        params = {}
+        for gev_param_name in GevParams.PARAM_NAMES:
+            for dim, coef in enumerate(gev_param_name_to_coef_list[gev_param_name]):
+                params[(gev_param_name, dim)] = coef
+        return cls(coordinates, params_sample=params, params_start_fit=params)
+
+    def fitmargin_from_maxima_gev(self, maxima_gev: np.ndarray, df_coordinates_spat: pd.DataFrame,
+                                  df_coordinates_temp: pd.DataFrame) -> ResultFromFit:
+        # The reshaping on the line below is only valid if we have a single observation per spatio-temporal point
+        if maxima_gev.shape[1] == 1:
+            maxima_gev = maxima_gev.reshape([len(df_coordinates_temp), len(df_coordinates_spat)])
+        data = np.transpose(maxima_gev)
+
+        fit_params = get_margin_formula(self.margin_function_start_fit.form_dict)
+
+        # Covariables
+        covariables = get_coord(df_coordinates=df_coordinates_spat)
+        fit_params['temp.cov'] = get_coord(df_coordinates=df_coordinates_temp)
+
+        # Start parameters
+        coef_dict = self.margin_function_start_fit.coef_dict
+        fit_params['start'] = r.list(**coef_dict)
+
+        return safe_run_r_estimator(function=r.fitspatgev, use_start=self.use_start_value, data=data,
+                                    covariables=covariables, **fit_params)
+
+
+class ConstantMarginModel(LinearMarginModel):
+
+    def load_margin_functions(self, gev_param_name_to_linear_dims=None):
+        super().load_margin_functions({})
+
+
+class LinearShapeDim1MarginModel(LinearMarginModel):
+
+    def load_margin_functions(self, margin_function_class: type = None, gev_param_name_to_linear_dims=None):
+        super().load_margin_functions({GevParams.SHAPE: [1]})
+
+
+class LinearScaleDim1MarginModel(LinearMarginModel):
+
+    def load_margin_functions(self, margin_function_class: type = None, gev_param_name_to_linear_dims=None):
+        super().load_margin_functions({GevParams.SCALE: [1]})
+
+
+class LinearShapeDim1and2MarginModel(LinearMarginModel):
+
+    def load_margin_functions(self, margin_function_class: type = None, gev_param_name_to_linear_dims=None):
+        super().load_margin_functions({GevParams.SHAPE: [1, 2]})
+
+
+class LinearAllParametersDim1MarginModel(LinearMarginModel):
+
+    def load_margin_functions(self, margin_function_class: type = None, gev_param_name_to_linear_dims=None):
+        super().load_margin_functions({GevParams.SHAPE: [1],
+                                       GevParams.LOC: [1],
+                                       GevParams.SCALE: [1]})
+
+
+class LinearMarginModelExample(LinearMarginModel):
+
+    def load_margin_functions(self, margin_function_class: type = None, gev_param_name_to_linear_dims=None):
+        super().load_margin_functions({GevParams.SHAPE: [1],
+                                       GevParams.LOC: [2],
+                                       GevParams.SCALE: [1]})
+
+
+class LinearAllParametersAllDimsMarginModel(LinearMarginModel):
+
+    def load_margin_functions(self, margin_function_class: type = None, gev_param_name_to_linear_dims=None):
+        all_dims = list(range(1, self.coordinates.nb_coordinates + 1))
+        super().load_margin_functions({GevParams.SHAPE: all_dims.copy(),
+                                       GevParams.LOC: all_dims.copy(),
+                                       GevParams.SCALE: all_dims.copy()})
diff --git a/test/test_extreme_estimator/test_extreme_models/test_margin_model.py b/test/test_extreme_estimator/test_extreme_models/test_margin_model.py
index 886aa4e4b84ebca5640928f6a73a2df9352378a4..552a4b2419dcfc3b44ef4940f6a946f27748893d 100644
--- a/test/test_extreme_estimator/test_extreme_models/test_margin_model.py
+++ b/test/test_extreme_estimator/test_extreme_models/test_margin_model.py
@@ -5,7 +5,7 @@ from extreme_estimator.extreme_models.margin_model.margin_function.abstract_marg
     AbstractMarginFunction
 from extreme_estimator.extreme_models.margin_model.margin_function.linear_margin_function import LinearMarginFunction
 from extreme_estimator.margin_fits.gev.gev_params import GevParams
-from extreme_estimator.extreme_models.margin_model.smooth_margin_model import LinearShapeDim1MarginModel, \
+from extreme_estimator.extreme_models.margin_model.linear_margin_model import LinearShapeDim1MarginModel, \
     LinearAllParametersAllDimsMarginModel
 from spatio_temporal_dataset.coordinates.spatial_coordinates.coordinates_2D import LinSpaceSpatial2DCoordinates
 from spatio_temporal_dataset.coordinates.spatial_coordinates.generated_spatial_coordinates import \
diff --git a/test/test_spatio_temporal_dataset/test_slicer.py b/test/test_spatio_temporal_dataset/test_slicer.py
index 6551bee311dbaf5280218a6066df5b3bc75642e3..5a99be0a7a32173c96258bd70f1c2bcec8d601bf 100644
--- a/test/test_spatio_temporal_dataset/test_slicer.py
+++ b/test/test_spatio_temporal_dataset/test_slicer.py
@@ -2,7 +2,7 @@ from typing import List
 
 import unittest
 
-from extreme_estimator.extreme_models.margin_model.smooth_margin_model import ConstantMarginModel
+from extreme_estimator.extreme_models.margin_model.linear_margin_model import ConstantMarginModel
 from extreme_estimator.extreme_models.max_stable_model.max_stable_models import Smith
 from spatio_temporal_dataset.dataset.abstract_dataset import AbstractDataset
 from spatio_temporal_dataset.dataset.simulation_dataset import FullSimulatedDataset
diff --git a/test/test_unitary/test_fitmaxstab/test_fitmaxstab_with_margin.py b/test/test_unitary/test_fitmaxstab/test_fitmaxstab_with_margin.py
index 0598d4e2a28f2653ec7a036a9db2c40ed6a073b6..45ccd46226c9035991b598a70535c6a16b8333fc 100644
--- a/test/test_unitary/test_fitmaxstab/test_fitmaxstab_with_margin.py
+++ b/test/test_unitary/test_fitmaxstab/test_fitmaxstab_with_margin.py
@@ -2,7 +2,7 @@ import unittest
 
 from extreme_estimator.estimator.full_estimator.abstract_full_estimator import \
     FullEstimatorInASingleStepWithSmoothMargin
-from extreme_estimator.extreme_models.margin_model.smooth_margin_model import ConstantMarginModel, \
+from extreme_estimator.extreme_models.margin_model.linear_margin_model import ConstantMarginModel, \
     LinearMarginModelExample
 from extreme_estimator.extreme_models.max_stable_model.abstract_max_stable_model import CovarianceFunction
 from extreme_estimator.extreme_models.max_stable_model.max_stable_models import Schlather
diff --git a/test/test_unitary/test_rmaxstab/test_rmaxstab_with_margin.py b/test/test_unitary/test_rmaxstab/test_rmaxstab_with_margin.py
index 0f485e949e363bdd88c02ecb38e1ea760bb76993..c4825bf651d34cde0052b14d6d49e415a7f25732 100644
--- a/test/test_unitary/test_rmaxstab/test_rmaxstab_with_margin.py
+++ b/test/test_unitary/test_rmaxstab/test_rmaxstab_with_margin.py
@@ -2,7 +2,7 @@ import unittest
 
 import numpy as np
 
-from extreme_estimator.extreme_models.margin_model.smooth_margin_model import ConstantMarginModel, \
+from extreme_estimator.extreme_models.margin_model.linear_margin_model import ConstantMarginModel, \
     LinearAllParametersAllDimsMarginModel
 from extreme_estimator.extreme_models.utils import r
 from extreme_estimator.margin_fits.gev.gev_params import GevParams
diff --git a/test/test_utils.py b/test/test_utils.py
index 39d098ebd69121e8a926c4ec2969b63305ef8e2c..ca1f800be4b9b9ad8a770a817355f83881ec0480 100644
--- a/test/test_utils.py
+++ b/test/test_utils.py
@@ -7,7 +7,7 @@ from experiment.meteo_france_SCM_study.crocus.crocus_variables import CrocusSweV
 from extreme_estimator.estimator.full_estimator.abstract_full_estimator import SmoothMarginalsThenUnitaryMsp, \
     FullEstimatorInASingleStepWithSmoothMargin
 from extreme_estimator.estimator.max_stable_estimator.abstract_max_stable_estimator import MaxStableEstimator
-from extreme_estimator.extreme_models.margin_model.smooth_margin_model import LinearAllParametersAllDimsMarginModel, \
+from extreme_estimator.extreme_models.margin_model.linear_margin_model import LinearAllParametersAllDimsMarginModel, \
     ConstantMarginModel
 from extreme_estimator.extreme_models.max_stable_model.abstract_max_stable_model import \
     AbstractMaxStableModelWithCovarianceFunction, CovarianceFunction