diff --git a/src/Model/River.py b/src/Model/River.py
index a46661f492c02f9ad1966d23b676ff6a61e00e47..2ff98bd8cfb28ef9d4d6ca93c657ca71fb2caf7f 100644
--- a/src/Model/River.py
+++ b/src/Model/River.py
@@ -209,7 +209,7 @@ class River(Graph, SQLSubModel):
         self._initial_conditions = InitialConditionsDict(status=self._status)
         self._stricklers = StricklersList(status=self._status)
         self._parameters = {}
-        self._sediment_layers = SedimentLayerList()
+        self._sediment_layers = SedimentLayerList(status=self._status)
 
     @classmethod
     def _sql_create(cls, execute):
@@ -263,6 +263,12 @@ class River(Graph, SQLSubModel):
             data
         )
 
+        # Initial conditions
+        new._sediment_layers = SedimentLayerList._sql_load(
+            execute,
+            data
+        )
+
         # Parameters
         new._parameters = SolverParametersList._sql_load(
             execute,
diff --git a/src/Model/SedimentLayer/SedimentLayer.py b/src/Model/SedimentLayer/SedimentLayer.py
new file mode 100644
index 0000000000000000000000000000000000000000..47d84df5a94d1b72f782ed361ccf467535c179a8
--- /dev/null
+++ b/src/Model/SedimentLayer/SedimentLayer.py
@@ -0,0 +1,186 @@
+# -*- coding: utf-8 -*-
+
+from tools import trace, timer
+
+from Model.DB import SQLSubModel
+from Model.Except import NotImplementedMethodeError
+
+class Layer(SQLSubModel):
+    _sub_classes = []
+    _id_cnt = 0
+
+    def __init__(self,
+                 id:int = -1, name:str = "",
+                 type = "", height = 0,
+                 sl = None, status = None):
+        super(Layer, self).__init__()
+
+        self._status = status
+        self._sl = sl
+
+        self._name = name
+        self._type = type
+        self._height = height
+
+        if id == -1:
+            self.id = Layer._id_cnt
+        else:
+            self.id = id
+
+
+    @classmethod
+    def _sql_create(cls, execute):
+        execute("""
+          CREATE TABLE sedimentary_layer_layer(
+            id INTEGER NOT NULL PRIMARY KEY,
+            ind INTEGER NOT NULL,
+            name TEXT NOT NULL,
+            type TEXT NOT NULL,
+            height INTEGER NOT NULL,
+            sl INTEGER,
+            FOREIGN KEY(sl) REFERENCES sedimentary_layer(id)
+          )
+        """)
+
+        return cls._create_submodel(execute)
+
+    @classmethod
+    def _sql_update(cls, execute, version):
+        return True
+
+    @classmethod
+    def _sql_load(cls, execute, data = None):
+        new = []
+        sl = data["sl"]
+
+        table = execute(
+            "SELECT id, ind, name, type, height " +
+            "FROM sedimentary_layer_layer " +
+            f"WHERE sl = {sl.id}"
+        )
+
+        for _ in table:
+            new.append(None)
+
+        for row in table:
+            ind = row[1]
+
+            layer = cls(
+                id = row[0], name = row[2],
+                type = row[3], height = row[4],
+                sl = sl, status = data['status']
+            )
+
+            new[ind] = layer
+
+        return new
+
+    def _sql_save(self, execute, data = None):
+        ind = data["ind"]
+
+        sql = (
+            "INSERT INTO " +
+            "sedimentary_layer_layer(id, ind, name, type, height, sl) "+
+            "VALUES (" +
+            f"{self.id}, {ind}, '{self._sql_format(self._name)}', " +
+            f"'{self._sql_format(self._type)}', '{self._height}', {self._sl.id}" +
+            ")"
+        )
+        execute(sql)
+
+        return True
+
+
+class SedimentLayer(SQLSubModel):
+    _sub_classes = [Layer]
+    _id_cnt = 0
+
+    def __init__(self, id:int = -1,
+                 name:str = "", comment:str = "",
+                 status = None):
+        super(SedimentLayer, self).__init__()
+
+        self._status = status
+        self._name = name
+        self._comment = comment
+        self._layers = []
+
+        if id == -1:
+            self.id = SedimentLayer._id_cnt
+        else:
+            self.id = id
+
+    @property
+    def name(self):
+        return self._name
+
+    @name.setter
+    def name(self, name):
+        self._name = name
+
+    @property
+    def comment(self):
+        return self._comment
+
+    @comment.setter
+    def comment(self, comment):
+        self._comment = comment
+
+    @classmethod
+    def _sql_create(cls, execute):
+        execute("""
+          CREATE TABLE sedimentary_layer(
+            id INTEGER NOT NULL PRIMARY KEY,
+            name TEXT NOT NULL,
+            comment TEXT NOT NULL
+          )
+        """)
+
+        return cls._create_submodel(execute)
+
+    @classmethod
+    def _sql_update(cls, execute, version):
+        return True
+
+    @classmethod
+    def _sql_load(cls, execute, data = None):
+        new = []
+
+        table = execute(
+            "SELECT id, name, comment" +
+            "FROM sedimentary_layer "
+        )
+
+        for row in table:
+            sl = cls(
+                id = row[0],
+                name = row[1],
+                comment = row[2],
+                status = data['status']
+            )
+
+            data["sl"] = sl.id
+            sl._layers = Layer._sql_load(execute, data)
+
+            new.append(sl)
+
+        return new
+
+    def _sql_save(self, execute, data = None):
+        if data is None:
+            data = {}
+
+        sql = (
+            "INSERT INTO sedimentary_layer (id, name) "+
+            f"VALUES ({self.id}, '{self._sql_format(self._name)}')"
+        )
+        execute(sql)
+
+        ind = 0
+        for l in self._layers:
+            data["ind"] = ind
+            l._sql_save(execute, data)
+
+            ind += 1
+
+        return True
diff --git a/src/Model/SedimentLayer/SedimentLayerList.py b/src/Model/SedimentLayer/SedimentLayerList.py
new file mode 100644
index 0000000000000000000000000000000000000000..b360c7233c092258927e700595d37823aaf27f6f
--- /dev/null
+++ b/src/Model/SedimentLayer/SedimentLayerList.py
@@ -0,0 +1,93 @@
+# -*- coding: utf-8 -*-
+
+from tools import trace, timer
+
+from Model.DB import SQLSubModel
+from Model.Except import NotImplementedMethodeError
+from Model.SedimentLayer.SedimentLayer import SedimentLayer
+
+class SedimentLayerList(SQLSubModel):
+    _sub_classes = [SedimentLayer]
+
+    def __init__(self, status = None):
+        super(SedimentLayerList, self).__init__()
+
+        self._status = status
+        self._sl = []
+
+    def __len__(self):
+        return len(self._sl)
+
+    @classmethod
+    def _sql_create(cls, execute):
+        return cls._create_submodel(execute)
+
+    @classmethod
+    def _sql_update(cls, execute, version):
+        return cls._update_submodel(execute, version)
+
+    @classmethod
+    def _sql_load(cls, execute, data = None):
+        new = cls(status = data["status"])
+
+        new._sl = SedimentLayer._sql_load(execute, data)
+
+        return new
+
+    def _sql_save(self, execute, data = None):
+        ok = True
+
+        for sl in self._sl:
+            ok &= sl._sql_save(execute, data)
+
+        return ok
+
+    def get(self, index):
+        return self._sl[index]
+
+    def set(self, index, new):
+        self._sl[index] = new
+        self._status.modified()
+
+    def insert(self, index, new):
+        self._sl.insert(index, new)
+        self._status.modified()
+
+    def new(self, index):
+        n = SedimentLayer(status = self._status)
+        self.insert(index, n)
+        self._status.modified()
+        return n
+
+    def delete(self, els):
+        for el in els:
+            self._sl.remove(el)
+        self._status.modified()
+
+    def delete_i(self, indexes):
+        els = list(
+            map(
+                lambda x: x[1],
+                filter(
+                    lambda x: x[0] in indexes,
+                    enumerate(self._sl)
+                )
+            )
+        )
+        self.delete(els)
+
+    def move_up(self, index):
+        if index < len(self._sl):
+            next = index - 1
+
+            l = self._sl
+            l[index], l[next] = l[next], l[index]
+            self._status.modified()
+
+    def move_down(self, index):
+        if index >= 0:
+            prev = index + 1
+
+            l = self._sl
+            l[index], l[prev] = l[prev], l[index]
+            self._status.modified()
diff --git a/src/View/SedimentLayers/Table.py b/src/View/SedimentLayers/Table.py
index 7abbd869102b3683b621080da82024c9b77217f7..f375c3188bba6cf0100b327d38197c1f5a8b0fa4 100644
--- a/src/View/SedimentLayers/Table.py
+++ b/src/View/SedimentLayers/Table.py
@@ -51,7 +51,7 @@ class TableModel(QAbstractTableModel):
         if self._headers[column] == "name":
             return self._sl.get(row).name
         elif self._headers[column] == "comment":
-            return self._sl.get(row).name
+            return self._sl.get(row).comment
 
         return QVariant()
 
@@ -89,7 +89,7 @@ class TableModel(QAbstractTableModel):
 
         self._undo.push(
             AddCommand(
-                self._sl, row, self._data
+                self._sl, row
             )
         )
 
diff --git a/src/View/SedimentLayers/UndoCommand.py b/src/View/SedimentLayers/UndoCommand.py
index 84c4027b7e11da2d61955fc8d0072da2899104d1..f785743b4aa0b455a51bdb4228d0f961af3ee013 100644
--- a/src/View/SedimentLayers/UndoCommand.py
+++ b/src/View/SedimentLayers/UndoCommand.py
@@ -41,7 +41,7 @@ class SetCommentCommand(QUndoCommand):
         self._sediment_layers_list.get(self._index).comment = self._new
 
 class AddCommand(QUndoCommand):
-    def __init__(self, sediment_layers_list, index, reach):
+    def __init__(self, sediment_layers_list, index):
         QUndoCommand.__init__(self)
 
         self._sediment_layers_list = sediment_layers_list