diff --git a/src/Model/InitialConditions/InitialConditions.py b/src/Model/InitialConditions/InitialConditions.py
index e450a94f60890efef707fc8d8c4f98b6c4b64471..f598ade0785698129d46ad3701eb9c67842f116b 100644
--- a/src/Model/InitialConditions/InitialConditions.py
+++ b/src/Model/InitialConditions/InitialConditions.py
@@ -2,6 +2,7 @@
 
 from copy import copy
 from tools import trace, timer
+from functools import reduce
 
 class Data(object):
     def __init__(self, reach = None, status = None):
@@ -117,6 +118,10 @@ class InitialConditions(object):
     def data(self):
         return self._data.copy()
 
+    @data.setter
+    def data(self, data):
+        self._data = data
+
     def get(self, index):
         return self._data[index]
 
@@ -175,3 +180,40 @@ class InitialConditions(object):
 
     def get_flow(self):
         return self._data_get("flow")
+
+    def _sort_by_z_and_kp(self, profiles):
+        profiles.sort(
+            reverse = False,
+            key = lambda p: p.kp
+        )
+
+        first_z = profiles[0].z()
+        last_z = profiles[-1].z()
+
+        if first_z > last_z:
+            profiles.sort(
+                reverse = True,
+                key = lambda p: p.kp
+            )
+
+    def generate_growing_constante_draft(self, draft:int):
+        self._data = []
+
+        profiles = self._reach.reach.profiles
+        self._sort_by_z_and_kp(profiles)
+
+        prev = None
+        for profile in profiles:
+            new = Data(reach = self._reach, status = self._status)
+            new["kp"] = profile.kp
+
+            if prev is None:
+                new["elevation"] = profile.z_min() + draft
+            else:
+                new["elevation"] = max(
+                    profile.z_min() + draft,
+                    prev["elevation"]
+                )
+
+            self._data.append(new)
+            prev = new
diff --git a/src/View/InitialConditions/PlotDKP.py b/src/View/InitialConditions/PlotDKP.py
index 60fd433528bf894274bcd1312e7cba9fb16b5bf7..247605b3a143e280845d2984dd2f47911e64352f 100644
--- a/src/View/InitialConditions/PlotDKP.py
+++ b/src/View/InitialConditions/PlotDKP.py
@@ -25,9 +25,6 @@ class PlotDKP(APlot):
         if self.data is None:
             return
 
-        if len(self.data) == 0:
-            return
-
         self.canvas.axes.set_ylabel(
             _translate("MainWindow_reach", "Draft (m)"),
             color='green', fontsize=11
@@ -49,13 +46,14 @@ class PlotDKP(APlot):
             color='grey', lw=1.
         )
 
-        kp = self.data.get_kp()
-        elevation = self.data.get_elevation()
+        if len(self.data) != 0:
+            kp = self.data.get_kp()
+            elevation = self.data.get_elevation()
 
-        self.line_kp_elevation = self.canvas.axes.plot(
-            kp, elevation,
-            color='b', marker='+', lw=1.
-        )
+            self.line_kp_elevation = self.canvas.axes.plot(
+                kp, elevation,
+                color='b', marker='+', lw=1.
+            )
 
         self.canvas.figure.tight_layout()
         self.canvas.figure.canvas.draw_idle()
diff --git a/src/View/InitialConditions/PlotFlow.py b/src/View/InitialConditions/PlotFlow.py
index 16f29eb4aef51b62f85c7379432ca8d58f1fd72d..dad90e49e1ad133fdc5f16cabeb2c13f1e288747 100644
--- a/src/View/InitialConditions/PlotFlow.py
+++ b/src/View/InitialConditions/PlotFlow.py
@@ -25,9 +25,6 @@ class PlotFlow(APlot):
         if self.data is None:
             return
 
-        if len(self.data) == 0:
-            return
-
         self.canvas.axes.set_ylabel(
             _translate("MainWindow_reach", "Flow (m^3/s)"),
             color='green', fontsize=11
@@ -43,13 +40,14 @@ class PlotFlow(APlot):
             left = min(kp), right = max(kp)
         )
 
-        kp = self.data.get_kp()
-        flow = self.data.get_flow()
+        if len(self.data) != 0:
+            kp = self.data.get_kp()
+            flow = self.data.get_flow()
 
-        self.line_kp_zmin = self.canvas.axes.plot(
-            kp, flow,
-            color='r', lw=1.
-        )
+            self.line_kp_zmin = self.canvas.axes.plot(
+                kp, flow,
+                color='r', lw=1.
+            )
 
         self.canvas.figure.tight_layout()
         self.canvas.figure.canvas.draw_idle()
diff --git a/src/View/InitialConditions/Table.py b/src/View/InitialConditions/Table.py
index d969ee514c759b47ffc0ffe7f48a8c4b9b474a74..13eb52181869a72dbc5cfd0532c0958f57be59c7 100644
--- a/src/View/InitialConditions/Table.py
+++ b/src/View/InitialConditions/Table.py
@@ -18,7 +18,7 @@ from PyQt5.QtWidgets import (
 from View.InitialConditions.UndoCommand import (
     SetCommand, AddCommand, DelCommand,
     SortCommand, MoveCommand, PasteCommand,
-    DuplicateCommand,
+    DuplicateCommand, GenerateCommand,
 )
 
 from View.InitialConditions.translate import *
@@ -173,7 +173,7 @@ class TableModel(QAbstractTableModel):
 
         self.beginMoveRows(parent, row - 1, row - 1, parent, target)
 
-        self._undo_stack.push(
+        self._undo.push(
             MoveCommand(
                 self._ics, "up", row
             )
@@ -190,7 +190,7 @@ class TableModel(QAbstractTableModel):
 
         self.beginMoveRows(parent, row + 1, row + 1, parent, target)
 
-        self._undo_stack.push(
+        self._undo.push(
             MoveCommand(
                 self._ics, "down", row
             )
@@ -206,3 +206,11 @@ class TableModel(QAbstractTableModel):
     def redo(self):
         self._undo.redo()
         self.layoutChanged.emit()
+
+    def generate(self, generator, param):
+        self._undo.push(
+            GenerateCommand(
+                self._ics, generator, param
+            )
+        )
+        self.layoutChanged.emit()
diff --git a/src/View/InitialConditions/UndoCommand.py b/src/View/InitialConditions/UndoCommand.py
index 0daeb4b0be7a8436b6e39e4693be9df29482ebef..df4f96b8a984aa41507d8393fa2b42d91397a9f2 100644
--- a/src/View/InitialConditions/UndoCommand.py
+++ b/src/View/InitialConditions/UndoCommand.py
@@ -146,3 +146,19 @@ class DuplicateCommand(QUndoCommand):
     def redo(self):
         for ic in self._ics:
             self._ics.insert(self._rows[0], ic)
+
+class GenerateCommand(QUndoCommand):
+    def __init__(self, ics, generator, param):
+        QUndoCommand.__init__(self)
+
+        self._ics = ics
+        self._param = param
+        self._copy = self._ics.data
+        self._generator = generator
+
+    def undo(self):
+        self._ics.data = self._copy
+
+    def redo(self):
+        #if self._generator == "growing":
+        self._ics.generate_growing_constante_draft(self._param)
diff --git a/src/View/InitialConditions/Window.py b/src/View/InitialConditions/Window.py
index 91d2c975b85fac75397f8f2ca146aa65c4ca66da..7a8fdd022ccffdb0d26a3ba5f3deba3ca1c0e3a3 100644
--- a/src/View/InitialConditions/Window.py
+++ b/src/View/InitialConditions/Window.py
@@ -126,6 +126,10 @@ class InitialConditionsWindow(ASubMainWindow, ListedSubWindow):
         self.find(QAction, "action_del").triggered.connect(self.delete)
         self.find(QAction, "action_sort").triggered.connect(self.sort)
 
+        self.find(QPushButton, "pushButton_generate_1").clicked.connect(
+            self.generate_growing_constante_draft
+        )
+
         self.undo_sc.activated.connect(self.undo)
         self.redo_sc.activated.connect(self.redo)
         self.copy_sc.activated.connect(self.copy)
@@ -201,3 +205,7 @@ class InitialConditionsWindow(ASubMainWindow, ListedSubWindow):
     def redo(self):
         self._table.redo()
         self._update_plot()
+
+    def generate_growing_constante_draft(self):
+        self._table.generate("growing", 1)
+        self._update_plot()
diff --git a/src/View/Plot/MplCanvas.py b/src/View/Plot/MplCanvas.py
index a78da19c6f411d0c98743a477b3c4b9491fbf4af..5b3fc4a8ff5a8eafb273fe81a765fdc78505136c 100644
--- a/src/View/Plot/MplCanvas.py
+++ b/src/View/Plot/MplCanvas.py
@@ -4,7 +4,11 @@ from matplotlib.figure import Figure
 
 class MplCanvas(FigureCanvasQTAgg):
     def __init__(self, width=5, height=4, dpi=100):
-        fig = Figure(figsize=(width, height), dpi=dpi)
+        fig = Figure(
+            figsize=(width, height),
+            dpi=dpi,
+            layout='tight',
+        )
         super(MplCanvas, self).__init__(fig)
 
         self.axes = fig.add_subplot(111)