diff --git a/extreme_estimator/R_fit/max_stable_fit/abstract_max_stable_model.py b/extreme_estimator/R_fit/max_stable_fit/abstract_max_stable_model.py
index 75a4c3cccb823ee14ffb1472277d3226fd6dfd65..bd2c3723d7275024f4039062afb38ca15d73941d 100644
--- a/extreme_estimator/R_fit/max_stable_fit/abstract_max_stable_model.py
+++ b/extreme_estimator/R_fit/max_stable_fit/abstract_max_stable_model.py
@@ -1,3 +1,4 @@
+import rpy2
 from enum import Enum
 
 from rpy2.robjects import ListVector
@@ -15,19 +16,20 @@ class AbstractMaxStableModel(object):
         self.user_params_sample = params_sample
         self.r = get_loaded_r()
 
-    def fitmaxstab(self, maxima: np.ndarray, coord: np.ndarray, ):
-        # todo: find how to specify a startign point, understand how is it set by default
-        # res = None
-        # tries = 5
-        # nb_tries = 0
-        # while res is None and nb_tries < tries:
-        #     try:
-        #         res = self.r.fitmaxstab(maxima, coord, **self.cov_mod_param)  # type: ListVector
-        #     except rpy2.rinterface.RRuntimeError:
-        #         pass
-        #     nb_tries += 1
-        #     print(nb_tries)
-        res = self.r.fitmaxstab(np.transpose(maxima), coord, **self.cov_mod_param)  # type: ListVector
+    def fitmaxstab(self, maxima: np.ndarray, coord: np.ndarray, fit_marge=False):
+        #  Specify the fit params
+        fit_params = {
+            'fit.marge': fit_marge,
+            'start': self.r.list(**self.params_start_fit),
+        }
+        # Run the fitmaxstab in R
+        # todo: find how to specify the optim function to use
+        try:
+            res = self.r.fitmaxstab(np.transpose(maxima), coord, **self.cov_mod_param, **fit_params)  # type: ListVector
+        except rpy2.rinterface.RRuntimeError as error:
+            raise Exception('Some R exception have been launched at RunTime: {}'.format(error.__repr__()))
+        # todo: maybe if the convergence was not successful I could try other starting point several times
+        # Retrieve the resulting fitted values
         fitted_values = res.rx2('fitted.values')
         fitted_values = {key: fitted_values.rx2(key)[0] for key in fitted_values.names}
         return fitted_values
@@ -36,7 +38,7 @@ class AbstractMaxStableModel(object):
         """
         Return an numpy of maxima. With rows being the stations and columns being the years of maxima
         """
-        maxima = np.array(self.r.rmaxstab(nb_obs, coord, **self.cov_mod_param, **self.params_sample))
+        maxima = np.array(self.r.rmaxstab(nb_obs, coord, *list(self.cov_mod_param.values()), **self.params_sample))
         return np.transpose(maxima)
 
     @property
@@ -53,6 +55,7 @@ class AbstractMaxStableModel(object):
 
     @staticmethod
     def merge_params(default_params, input_params):
+        assert default_params is not None, 'some default_params need to be specified'
         merged_params = default_params.copy()
         if input_params is not None:
             assert isinstance(default_params, dict) and isinstance(input_params, dict)
diff --git a/extreme_estimator/R_fit/max_stable_fit/max_stable_fit.R b/extreme_estimator/R_fit/max_stable_fit/max_stable_fit.R
index 287a186b83a731c2ff6b5aea44975952bc1b9dd9..5a3754e9a9cad8b83c1ba62256d693f83e04a789 100644
--- a/extreme_estimator/R_fit/max_stable_fit/max_stable_fit.R
+++ b/extreme_estimator/R_fit/max_stable_fit/max_stable_fit.R
@@ -10,22 +10,26 @@ if (call_main) {
     n.site = 2
     coord <- matrix(rnorm(2*n.site, sd = sqrt(.2)), ncol = 2)
 
-    print(coord)
     #  Generate the data
-    # data <- rmaxstab(n.obs, coord, "gauss", cov11 = 100, cov12 = 25, cov22 = 220)
+    data <- rmaxstab(n.obs, coord, "gauss", cov11 = 100, cov12 = 25, cov22 = 220)
     # data <- rmaxstab(n.obs, coord, "brown", range = 3, smooth = 0.5)
     # data <- rmaxstab(n.obs, coord, "whitmat", nugget = 0.0, range = 3, smooth = 0.5)
-    data <- rmaxstab(n.obs, coord, "cauchy", )
     #  Fit back the data
-    print(data)
+    # print(data)
     # res = fitmaxstab(data, coord, "gauss", fit.marge=FALSE, )
     # res = fitmaxstab(data, coord, "brown")
-    res = fitmaxstab(data, coord, "cauchy")
-    # res = fitmaxstab(data, coord, "gauss", start=list(0,0,0))
-    print(res)
-    print(class(res))
-    print(names(res))
+    # res = fitmaxstab(data, coord, "whitmat", start=)
+    namedlist = list(cov11 = 1.0, cov12 = 1.2, cov22 = 2.2)
+    res = fitmaxstab(data=data, coord=coord, cov.mod="gauss", start=namedlist)
+    # res = fitmaxstab(data, coord, "whitmat", par())
+    # print(res)
+    # print(class(res))
+    # print(names(res))
+    for (name in names(res)){
+        print(name)
+        print(res[name])
+    }
     print(res['fitted.values'])
-    print(res['convergence'])
+    # print(res['convergence'])
 
 }
diff --git a/extreme_estimator/R_fit/max_stable_fit/max_stable_models.py b/extreme_estimator/R_fit/max_stable_fit/max_stable_models.py
index 2c77573f200a818e725e7c56147c0cea4d04e3d9..683899cea586068a5175a8d416820c15a002c42d 100644
--- a/extreme_estimator/R_fit/max_stable_fit/max_stable_models.py
+++ b/extreme_estimator/R_fit/max_stable_fit/max_stable_models.py
@@ -9,12 +9,12 @@ class Smith(AbstractMaxStableModel):
     def __init__(self, params_start_fit=None, params_sample=None):
         super().__init__(params_start_fit=params_start_fit, params_sample=params_sample)
         self.cov_mod = 'gauss'
-        self.default_params_start_fit = {}
-        self.default_params_sample = {
-            'cov11': 100,
-            'cov12': 25,
-            'cov22': 220,
+        self.default_params_start_fit = {
+            'cov11': 1,
+            'cov12': 0,
+            'cov22': 1
         }
+        self.default_params_sample = self.default_params_start_fit.copy()
 
 
 class BrownResnick(AbstractMaxStableModel):
@@ -22,7 +22,10 @@ class BrownResnick(AbstractMaxStableModel):
     def __init__(self, params_start_fit=None, params_sample=None):
         super().__init__(params_start_fit=params_start_fit, params_sample=params_sample)
         self.cov_mod = 'brown'
-        self.default_params_start_fit = {}
+        self.default_params_start_fit = {
+            'range': 3,
+            'smooth': 0.5,
+        }
         self.default_params_sample = {
             'range': 3,
             'smooth': 0.5,
@@ -35,6 +38,7 @@ class Schlather(AbstractMaxStableModelWithCovarianceFunction):
         super().__init__(params_start_fit, params_sample, covariance_function)
         self.cov_mod = self.covariance_function.name
         self.default_params_sample.update({})
+        self.default_params_start_fit = self.default_params_sample.copy()
 
 
 class Geometric(AbstractMaxStableModelWithCovarianceFunction):
@@ -43,6 +47,7 @@ class Geometric(AbstractMaxStableModelWithCovarianceFunction):
         super().__init__(params_start_fit, params_sample, covariance_function)
         self.cov_mod = 'g' + self.covariance_function.name
         self.default_params_sample .update({'sigma2': 0.5})
+        self.default_params_start_fit = self.default_params_sample.copy()
 
 
 class ExtremalT(AbstractMaxStableModelWithCovarianceFunction):
@@ -51,6 +56,7 @@ class ExtremalT(AbstractMaxStableModelWithCovarianceFunction):
         super().__init__(params_start_fit, params_sample, covariance_function)
         self.cov_mod = 't' + self.covariance_function.name
         self.default_params_sample .update({'DoF': 2})
+        self.default_params_start_fit = self.default_params_sample.copy()
 
 
 class ISchlather(AbstractMaxStableModelWithCovarianceFunction):
@@ -59,3 +65,4 @@ class ISchlather(AbstractMaxStableModelWithCovarianceFunction):
         super().__init__(params_start_fit, params_sample, covariance_function)
         self.cov_mod = 'i' + self.covariance_function.name
         self.default_params_sample .update({'alpha': 0.5})
+        self.default_params_start_fit = self.default_params_sample.copy()
diff --git a/test/extreme_estimator/test_max_stable_fit.py b/test/extreme_estimator/test_max_stable_fit.py
index cca832bfa3e1454d063df35c13550882867cd5ca..662c39ddee633451a698bd3931440ab6fb9169bb 100644
--- a/test/extreme_estimator/test_max_stable_fit.py
+++ b/test/extreme_estimator/test_max_stable_fit.py
@@ -16,7 +16,6 @@ class TestMaxStableFit(unittest.TestCase):
         self.spatial_coord = CircleCoordinates.from_nb_points(nb_points=5, max_radius=1)
         self.max_stable_models = []
         for max_stable_class in self.MAX_STABLE_CLASSES:
-            print(max_stable_class)
             if issubclass(max_stable_class, AbstractMaxStableModelWithCovarianceFunction):
                 self.max_stable_models.extend([max_stable_class(covariance_function=covariance_function)
                                                for covariance_function in CovarianceFunction])
@@ -27,9 +26,11 @@ class TestMaxStableFit(unittest.TestCase):
         for max_stable_model in self.max_stable_models:
             dataset = SimulatedDataset.from_max_stable_sampling(nb_obs=10, max_stable_model=max_stable_model,
                                                                 spatial_coordinates=self.spatial_coord)
+            fitted_values = max_stable_model.fitmaxstab(maxima=dataset.maxima, coord=dataset.coord)
             if display:
-                print(dataset.head())
-            max_stable_model.fitmaxstab(maxima=dataset.maxima, coord=dataset.coord)
+                print(type(max_stable_model))
+                print(dataset.df_dataset.head())
+                print(fitted_values)
         self.assertTrue(True)