diff --git a/src/Solver/ASolver.py b/src/Solver/ASolver.py
index b15f6c89475f43cd24310899e3f184e3e0b1393b..310e2772ed31564487ff5ccaaf6456fa4ad208b5 100644
--- a/src/Solver/ASolver.py
+++ b/src/Solver/ASolver.py
@@ -47,9 +47,8 @@ class AbstractSolver(object):
     def default_parameters(cls):
         lst = [
             ("all_init_time", "00:00:00:00"),
-            ("all_final_time", "01:00:00:00"),
+            ("all_final_time", "999:99:00:00"),
             ("all_timestep", "300.0"),
-            ("all_timestep_min", "1.0"),
         ]
 
         return lst
diff --git a/src/Solver/Mage.py b/src/Solver/Mage.py
index 82c33b024370ec3baa8f39ca133bdf40fb91c997..e038495f95e18e3c5c4f8ec6ba7c02b996b1db3e 100644
--- a/src/Solver/Mage.py
+++ b/src/Solver/Mage.py
@@ -1,8 +1,8 @@
 # -*- coding: utf-8 -*-
 
-from Solver.GenericSolver import GenericSolver
+from Solver.ASolver import AbstractSolver
 
-class Mage(GenericSolver):
+class Mage(AbstractSolver):
     def __init__(self, name):
         super(Mage, self).__init__(name)
 
@@ -17,9 +17,14 @@ class Mage(GenericSolver):
         lst = super(Mage, cls).default_parameters()
 
         lst += [
+            ("mage_min_timestep", "1.0"),
             ("mage_timestep_tra", "3600"),
             ("mage_timestep_bin", "0"),
+            # ("mage_timestep_melissa", "0"),
             ("mage_implication", "0.70"),
+            ("mage_continuity_discretization", "S"),
+            ("mage_qsj_discretization", "B"),
+            ("mage_stop_criterion_iterations", "R"),
             ("mage_iter_type", "0"),
             ("mage_smooth_coef", "0"),
             ("mage_cfl_max", "-1."),
@@ -29,16 +34,16 @@ class Mage(GenericSolver):
             ("mage_precision_reduction_factor_Z", "1"),
             ("mage_precision_reduction_factor_Q", "1"),
             ("mage_niter_max_precision", "99"),
-            ("mage_error_bound_mesh_elevation", "-1"),
-            ("mage_maximun_froude_number", "2"),
-            ("mage_volume_report_monitoring_yn", "y"),
-            ("mage_divergence_relative_error", "0.001"),
-            ("mage_minimal_reach_volume_error", "1000"),
+            ("mage_niter_before_switch", "99"),
+            ("mage_max_froude", "1.5"),
+            ("mage_diffluence_node_height_balance", "-1"),
+            ("mage_compute_reach_volume_balance", "y"),
+            ("mage_max_reach_volume_balance", "0.001"),
+            ("mage_min_reach_volume_to_check", "1000.0"),
         ]
 
         return lst
 
-
 class Mage7(Mage):
     def __init__(self, name):
         super(Mage7, self).__init__(name)
diff --git a/src/View/MainWindow.py b/src/View/MainWindow.py
index 2c1cb1c2e80c2e5c9130217332bc3c6a084825f7..3f0b5adc3b0dc07d28eb8c7370fdfaca442b90fc 100644
--- a/src/View/MainWindow.py
+++ b/src/View/MainWindow.py
@@ -28,6 +28,7 @@ from View.InitialConditions.Window import InitialConditionsWindow
 from View.Stricklers.Window import StricklersWindow
 from View.Sections.Window import SectionsWindow
 from View.SolverParameters.Window import SolverParametersWindow
+from View.RunSolver.Window import SelectSolverWindow
 
 from Model.Study import Study
 
@@ -46,12 +47,15 @@ other_model_action = [
 ]
 
 define_model_action = [
+    # Toolbar
     "action_toolBar_network", "action_toolBar_geometry",
     "action_toolBar_mesh", "action_toolBar_run_meshing_tool",
     "action_toolBar_boundary_cond", "action_toolBar_lateral_contrib",
     "action_toolBar_spills", "action_toolBar_sections",
     "action_toolBar_stricklers", "action_toolBar_building",
     "action_toolBar_initial_cond",
+    # Menu
+    "action_run_solver",
 ]
 
 action = (
@@ -112,6 +116,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
             "action_menu_open": self.open_model,
             "action_menu_save": self.save_study,
             "action_menu_save_as": self.save_as_study,
+            "action_run_solver": self.run_solver,
             ## Help
             "action_menu_about": self.open_about,
             # ToolBar action
@@ -332,43 +337,49 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
                              "into river network window to work on it")
 
     def open_boundary_cond(self):
-        self.bound = BoundaryConditionWindow(study = self.model, parent = self)
-        self.bound.show()
+        bound = BoundaryConditionWindow(study = self.model, parent = self)
+        bound.show()
 
     def open_lateral_contrib(self):
-        self.lateral = LateralContributionWindow(study = self.model, parent = self)
-        self.lateral.show()
+        lateral = LateralContributionWindow(study = self.model, parent = self)
+        lateral.show()
 
     def open_stricklers(self):
-        self.strick = StricklersWindow(
+        strick = StricklersWindow(
             study = self.model,
             config = self.conf,
             parent = self
         )
-        self.strick.show()
+        strick.show()
 
     def open_sections(self):
-        self.sections = SectionsWindow(
+        sections = SectionsWindow(
             study = self.model,
             parent = self
         )
-        self.sections.show()
+        sections.show()
 
     def open_initial_conditions(self):
         if self.model.river.has_current_reach():
-            self.initial = InitialConditionsWindow(
+            initial = InitialConditionsWindow(
                 study = self.model,
                 parent = self
             )
-            self.initial.show()
+            initial.show()
 
     def open_solver_parameters(self):
-        self.params = SolverParametersWindow(
+        params = SolverParametersWindow(
             study = self.model,
             parent = self
         )
-        self.params.show()
+        params.show()
 
+    def run_solver(self):
+        run = SelectSolverWindow(
+            study = self.model,
+            parent = self
+        )
+        run.show()
 
     # TODO: Delete me !
     ###############
diff --git a/src/View/SolverParameters/translate.py b/src/View/SolverParameters/translate.py
index 1e7896d8d40c3f137c42ab90e96e1796f26cdb12..6085dbfb57b7ae89964d883f1805641da1dc90ca 100644
--- a/src/View/SolverParameters/translate.py
+++ b/src/View/SolverParameters/translate.py
@@ -39,23 +39,28 @@ 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_timestep_min": _translate("SolverParameters", "Minimum timestep (second)"),
-        "mage_implication": _translate("SolverParameters", "Implicitation parameter"),
+        # Mage specific parameters
+        "mage_min_timestep": _translate("SolverParameters", "Minimum timestep (second)"),
         "mage_timestep_tra": _translate("SolverParameters", "Time step of writing on .TRA"),
         "mage_timestep_bin": _translate("SolverParameters", "Time step of writing on .BIN"),
+        "mage_implication": _translate("SolverParameters", "Implicitation parameter"),
+        "mage_continuity_discretization": _translate("SolverParameters", "Continuity discretization type (S/L)"),
+        "mage_qsj_discretization": _translate("SolverParameters", "QSJ discretization (A/B)"),
+        "mage_stop_criterion_iterations": _translate("SolverParameters", "Stop criterion iterations (G/A/R)"),
         "mage_iter_type": _translate("SolverParameters", "Iteration type"),
         "mage_smooth_coef": _translate("SolverParameters", "Smoothing coefficient"),
         "mage_cfl_max": _translate("SolverParameters", "Maximun accepted number of CFL"),
         "mage_min_height": _translate("SolverParameters", "Minimum water height (meter)"),
         "mage_max_niter": _translate("SolverParameters", "Maximun number of iterations (< 100)"),
         "mage_timestep_reduction_factor": _translate("SolverParameters", "Timestep reduction factor"),
-        "mage_niter_max_precision": _translate("SolverParameters", "Number of iteration at maximum precision"),
         "mage_precision_reduction_factor_Z": _translate("SolverParameters", "Reduction precision factor of Z"),
         "mage_precision_reduction_factor_Q": _translate("SolverParameters", "Reduction precision factor of Q"),
         "mage_precision_reduction_factor_r": _translate("SolverParameters", "Reduction precision factor of residue"),
-        "mage_error_bound_mesh_elevation": _translate("SolverParameters", "Error bound for mesh elevation"),
-        "mage_maximun_froude_number": _translate("SolverParameters", "Maximum accepted Froude number"),
-        "mage_volume_report_monitoring_yn": _translate("SolverParameters", "Volume report monitoring (Y/N)"),
-        "mage_divergence_relative_error": _translate("SolverParameters", "Divergence weir for relative error in volume"),
-        "mage_minimal_reach_volume_error": _translate("SolverParameters", "Minimum reach volume for error consideration"),
+        "mage_niter_max_precision": _translate("SolverParameters", "Number of iteration at maximum precision"),
+        "mage_niter_before_switch": _translate("SolverParameters", "Number of iteration before switch"),
+        "mage_max_froude": _translate("SolverParameters", "Maximum accepted Froude number"),
+        "mage_diffluence_node_height_balance": _translate("SolverParameters", "Diffluence node height balance"),
+        "mage_compute_reach_volume_balance": _translate("SolverParameters", "Compute reach volume balance (Y/N)"),
+        "mage_max_reach_volume_balance": _translate("SolverParameters", "Maximum reach volume balance"),
+        "mage_min_reach_volume_to_check": _translate("SolverParameters", "Minimum reach volume to check"),
     }