diff --git a/src/Model/River.py b/src/Model/River.py
index 3041c6c7c1f02356071321074293d855bb862087..91d765ba05f31cc1e779155fab7a5decd0af0693 100644
--- a/src/Model/River.py
+++ b/src/Model/River.py
@@ -16,6 +16,8 @@
 
 # -*- coding: utf-8 -*-
 
+from tools import flatten
+
 from Model.DB import SQLSubModel
 
 from Model.Network.Node import Node
@@ -382,3 +384,16 @@ class River(Graph, SQLSubModel):
 
     def set_current_reach(self, reach):
         self._current_reach = reach
+
+    def has_sediment(self):
+        has = len(self._sediment_layers) != 0
+        has &= any(
+            filter(
+                lambda p: p.sl != None,
+                flatten(
+                    map(lambda e: e.reach.profiles, self.edges())
+                )
+            )
+        )
+
+        return has
diff --git a/src/Model/SolverParameters/SolverParametersList.py b/src/Model/SolverParameters/SolverParametersList.py
index ce62ff7cdb15444e789b226e7b4581774e48fb39..18c455296442ecb9c58493caa7130fff558b6f20 100644
--- a/src/Model/SolverParameters/SolverParametersList.py
+++ b/src/Model/SolverParameters/SolverParametersList.py
@@ -167,6 +167,17 @@ class SolverParametersList(SQLSubModel):
     def get(self, index):
         return self._parameters[index]
 
+    def get_by_key(self, key):
+        try:
+            return next(
+                filter(
+                    lambda p: p["name"] == key,
+                    self._parameters
+                )
+            )["value"]
+        except:
+            return None
+
     def set(self, index, new):
         self._parameters[index] = new
         self._status.modified()
diff --git a/src/Solver/ASolver.py b/src/Solver/ASolver.py
index ea268999de48756001faaaedb0b7e42325459911..186abbbbd9c93a05ceaa748d1a119e130c854f31 100644
--- a/src/Solver/ASolver.py
+++ b/src/Solver/ASolver.py
@@ -86,6 +86,7 @@ class AbstractSolver(object):
             ("all_init_time", "000:00:00:00"),
             ("all_final_time", "999:99:00:00"),
             ("all_timestep", "300.0"),
+            ("all_command_line_arguments", ""),
         ]
 
         return lst
@@ -153,6 +154,17 @@ class AbstractSolver(object):
     def export(self, study, repertory, qlog = None):
         raise NotImplementedMethodeError(self, self.export)
 
+    def cmd_args(self, study):
+        """Return solver command line arguments list
+
+        Returns:
+            Command line arguments list
+        """
+        params = study.river.get_params(self.type)
+        args = params.get_by_key("all_command_line_arguments")
+
+        return args.split(" ")
+
     def input_param(self):
         """Return input command line parameter(s)
 
@@ -190,7 +202,7 @@ class AbstractSolver(object):
             )
         )
 
-    def _format_command(self, cmd, path = ""):
+    def _format_command(self, study, cmd, path = ""):
         """Format command line
 
         Args:
@@ -206,6 +218,7 @@ class AbstractSolver(object):
         cmd = cmd.replace("@path", path.replace(" ", "\ "))
         cmd = cmd.replace("@input", self.input_param())
         cmd = cmd.replace("@dir", self._process.workingDirectory())
+        cmd = cmd.replace("@args", " ".join(self.cmd_args(study)))
 
         logger.debug(f"! {cmd}")
 
@@ -233,13 +246,13 @@ class AbstractSolver(object):
         logger.info(f"! {exe} {args}")
         return exe, args
 
-    def run_input_data_fomater(self):
+    def run_input_data_fomater(self, study):
         if self._cmd_input == "":
-            self._run_next()
+            self._run_next(study)
             return True
 
         cmd = self._cmd_input
-        exe, args = self._format_command(cmd, self._path_input)
+        exe, args = self._format_command(study, cmd, self._path_input)
 
         if not os.path.exists(exe):
             error = f"[ERROR] Path {exe} do not exists"
@@ -252,13 +265,13 @@ class AbstractSolver(object):
 
         return True
 
-    def run_solver(self):
+    def run_solver(self, study):
         if self._cmd_solver == "":
-            self._run_next()
+            self._run_next(study)
             return True
 
         cmd = self._cmd_solver
-        exe, args = self._format_command(cmd, self._path_solver)
+        exe, args = self._format_command(study, cmd, self._path_solver)
 
         if not os.path.exists(exe):
             error = f"[ERROR] Path {exe} do not exists"
@@ -272,13 +285,13 @@ class AbstractSolver(object):
         self._status = STATUS.RUNNING
         return True
 
-    def run_output_data_fomater(self):
+    def run_output_data_fomater(self, study):
         if self._cmd_output == "":
-            self._run_next()
+            self._run_next(study)
             return True
 
         cmd = self._cmd_output
-        exe, args = self._format_command(cmd, self._path_output)
+        exe, args = self._format_command(study, cmd, self._path_output)
 
         if not os.path.exists(exe):
             error = f"[ERROR] Path {exe} do not exists"
@@ -297,29 +310,29 @@ class AbstractSolver(object):
             for x in s.split('\n'):
                 self._output.put(x)
 
-    def _run_next(self):
+    def _run_next(self, study):
         self._step += 1
         if self._step < len(self._runs):
-            res = self._runs[self._step]()
+            res = self._runs[self._step](study)
             if res is not True:
                 self._output.put(res)
         else:
             self._status = STATUS.STOPED
 
-    def _finished(self, exit_code, exit_status):
+    def _finished(self, study, exit_code, exit_status):
         if self._output is not None:
             self._output.put(exit_code)
 
-        self._run_next()
+        self._run_next(study)
 
-    def run(self, process = None, output_queue = None):
+    def run(self, study, process = None, output_queue = None):
         if process is not None:
             self._process = process
         if output_queue is not None:
             self._output = output_queue
 
         self._process.readyRead.connect(self._data_ready)
-        self._process.finished.connect(self._finished)
+        self._process.finished.connect(lambda c, s: self._finished(study, c, s))
 
         self._runs = [
             self.run_input_data_fomater,
@@ -328,7 +341,7 @@ class AbstractSolver(object):
         ]
         self._step = 0
         # Run first step
-        res = self._runs[0]()
+        res = self._runs[0](study)
         if res is not True:
             self._output.put(res)
 
@@ -340,14 +353,14 @@ class AbstractSolver(object):
         self._status = STATUS.STOPED
         return True
 
-    def start(self, process = None):
+    def start(self, study, process = None):
         if _signal:
             if self._status == STATUS.PAUSED:
                 os.kill(self._process.pid(), SIGCONT)
                 self._status = STATUS.RUNNING
                 return True
 
-        self.run(process)
+        self.run(study, process)
         return True
 
     def pause(self):
diff --git a/src/Solver/Mage.py b/src/Solver/Mage.py
index 77cc83d3c127d691ba4f8fe5308ce0ee3c6ad6c3..5e7909d731c2d711242bc89b3fdf8274f13006ed 100644
--- a/src/Solver/Mage.py
+++ b/src/Solver/Mage.py
@@ -97,6 +97,14 @@ class Mage(AbstractSolver):
     # Export #
     ##########
 
+    def cmd_args(self, study):
+        l = super(Mage, self).cmd_args(study)
+
+        l.append("-r")
+        l.append("-fp=1")
+
+        return l
+
     def input_param(self):
         return "0.REP"
 
@@ -440,6 +448,14 @@ class Mage8(Mage):
     # Export #
     ##########
 
+    def cmd_args(self, study):
+        l = super(Mage8, self).cmd_args(study)
+
+        if study.river.has_sediment():
+            l.append("-c=3")
+
+        return l
+
     @timer
     def _export_PAR(self, study, repertory, qlog = None):
         files = []
diff --git a/src/View/RunSolver/Window.py b/src/View/RunSolver/Window.py
index 872d72ef008dd30db05c20c7ae481c1ddf575f19..c307157af191b3b1d89ad1034098bd1e4b084f52 100644
--- a/src/View/RunSolver/Window.py
+++ b/src/View/RunSolver/Window.py
@@ -147,6 +147,7 @@ class SolverLogWindow(ASubMainWindow, ListedSubWindow):
 
         self._log(f" *** Run solver {self._solver.name}", color="blue")
         self._solver.run(
+            study,
             process = self._process,
             output_queue = self._output
         )
@@ -220,7 +221,7 @@ class SolverLogWindow(ASubMainWindow, ListedSubWindow):
 
         self._log(" *** Start", color="blue")
         self._results = None
-        self._solver.start(self._process)
+        self._solver.start(self._study, process = self._process)
 
         self.find(QAction, "action_start").setEnabled(False)
         if _signal:
diff --git a/src/View/SolverParameters/translate.py b/src/View/SolverParameters/translate.py
index 3d07e6b3efb2ffcae5d4c9aa98a8603838e5ef5e..2508629ea0ab0cfdeb70d639b7a1bb9174ab4715 100644
--- a/src/View/SolverParameters/translate.py
+++ b/src/View/SolverParameters/translate.py
@@ -55,6 +55,7 @@ def init():
         "all_init_time": _translate("SolverParameters", "Initial time (jj:hh:mm:ss)"),
         "all_final_time": _translate("SolverParameters", "Final time (jj:hh:mm:ss)"),
         "all_timestep": _translate("SolverParameters", "Timestep (second)"),
+        "all_command_line_arguments": _translate("SolverParameters", "Command line arguments"),
         # Mage specific parameters
         "mage_min_timestep": _translate("SolverParameters", "Minimum timestep (second)"),
         "mage_timestep_tra": _translate("SolverParameters", "Time step of writing on .TRA"),