diff --git a/src/Model/LateralContribution/LateralContribution.py b/src/Model/LateralContribution/LateralContribution.py
index b6e16998343c62d14d18a3a45c2ca9afc6b24211..22d4ca2ffe7a0b11aabb24ca3f696767af52f26d 100644
--- a/src/Model/LateralContribution/LateralContribution.py
+++ b/src/Model/LateralContribution/LateralContribution.py
@@ -2,14 +2,24 @@
 
 from tools import trace, timer, old_pamhyr_date_to_timestamp
 
+from Model.DB import SQLSubModel
 from Model.Except import NotImplementedMethodeError
 
-class LateralContribution(object):
-    def __init__(self, name:str = "", status = None):
+class LateralContribution(SQLSubModel):
+    _sub_classes = []
+    _id_cnt = 0
+
+    def __init__(self, id:int = -1, name:str = "", status = None):
         super(LateralContribution, self).__init__()
 
         self._status = status
 
+        if id == -1:
+            self.id = type(self)._id_cnt
+        else:
+            self.id = id
+
+
         self._name = name
         self._type = ""
         self._edge = None
@@ -19,6 +29,132 @@ class LateralContribution(object):
         self._header = []
         self._types = [float, float]
 
+        type(self)._id_cnt = max(type(self)._id_cnt + 1, self.id)
+
+    @classmethod
+    def _sql_create(cls, execute):
+        execute("""
+          CREATE TABLE lateral_contribution(
+            id INTEGER NOT NULL PRIMARY KEY,
+            name TEXT NOT NULL,
+            type TEXT NOT NULL,
+            tab TEXT NOT NULL,
+            edge INTEGER,
+            begin_kp REAL NOT NULL,
+            end_kp REAL NOT NULL,
+            FOREIGN KEY(edge) REFERENCES river_reach(id)
+          )
+        """)
+
+        execute("""
+          CREATE TABLE lateral_contribution_data(
+            id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+            ind INTEGER NOT NULL,
+            data0 TEXT NOT NULL,
+            data1 TEXT NOT NULL,
+            lc INTEGER,
+            FOREIGN KEY(lc) REFERENCES lateral_contribution(id)
+          )
+        """)
+
+        return cls._create_submodel(execute)
+
+    @classmethod
+    def _sql_update(cls, execute, version):
+        return True
+
+    @classmethod
+    def _get_ctor_from_type(cls, t):
+        from Model.LateralContribution.LateralContributionTypes import (
+            NotDefined, LateralContrib, Rain, Evaporation
+        )
+
+        res = NotDefined
+        if t == "LC":
+            res = LateralContrib
+        elif t == "RA":
+            res = Rain
+        elif t == "EV":
+            res = Evaporation
+        return res
+
+    @classmethod
+    def _sql_load(cls, execute, data = None):
+        new = []
+        tab = data["tab"]
+
+        table = execute(
+            "SELECT id, name, type, edge, begin_kp, end_kp " +
+            f"FROM lateral_contribution WHERE tab = '{tab}'"
+        )
+
+        for row in table:
+            t = row[2]
+            ctor = cls._get_ctor_from_type(t)
+            lc = ctor(
+                id = row[0],
+                name = row[1],
+                status = data['status']
+            )
+            lc.edge = next(filter(lambda e: e.id == row[3], data["edges"]))
+            lc._begin_kp = row[4]
+            lc._end_kp = row[5]
+
+            values = execute(
+                "SELECT ind, data0, data1 FROM lateral_contribution_data " +
+                f"WHERE lc = '{lc.id}'"
+            )
+            # Create dummy data list
+            for _ in values:
+                lc.add(0)
+            # Write data
+            for v in values:
+                ind = v[0]
+                data0 = lc._types[0](v[1])
+                data1 = lc._types[1](v[2])
+                # Replace data at pos ind
+                lc._data[ind] = (data0, data1)
+
+            new.append(lc)
+
+        return new
+
+    def _sql_save(self, execute, data = None):
+        tab = data["tab"]
+
+        execute(f"DELETE FROM lateral_contribution WHERE id = {self.id}")
+        execute(f"DELETE FROM lateral_contribution_data WHERE lc = {self.id}")
+
+        edge = -1
+        if self._edge is not None:
+            edge = self._edge.id
+
+        sql = (
+            "INSERT INTO " +
+            "lateral_contribution(id, name, type, tab, edge, begin_kp, end_kp) "+
+            "VALUES (" +
+            f"{self.id}, '{self._sql_format(self._name)}', " +
+            f"'{self._sql_format(self._type)}', '{tab}', {edge}, " +
+            f"{self._begin_kp}, {self._end_kp}" +
+            ")"
+        )
+        execute(sql)
+
+        ind = 0
+        for d in self._data:
+            data0 = self._sql_format(str(d[0]))
+            data1 = self._sql_format(str(d[1]))
+
+            sql = (
+                "INSERT INTO " +
+                "lateral_contribution_data(ind, data0, data1, lc) "+
+                f"VALUES ({ind}, '{data0}', {data1}, {self.id})"
+            )
+            execute(sql)
+            ind += 1
+
+        return True
+
     def __len__(self):
         return len(self._data)
 
diff --git a/src/Model/LateralContribution/LateralContributionList.py b/src/Model/LateralContribution/LateralContributionList.py
index c14d6f634664b6b79b2eff7be3de7d76882165d7..810a3188ad3dfb5b16b5754ee9d36d6116e2bc65 100644
--- a/src/Model/LateralContribution/LateralContributionList.py
+++ b/src/Model/LateralContribution/LateralContributionList.py
@@ -3,13 +3,19 @@
 from copy import copy
 from tools import trace, timer
 
+from Model.DB import SQLSubModel
 from Model.Except import NotImplementedMethodeError
 
+from Model.LateralContribution.LateralContribution import LateralContribution
 from Model.LateralContribution.LateralContributionTypes import (
     NotDefined, LateralContrib, Rain, Evaporation,
 )
 
-class LateralContributionList(object):
+class LateralContributionList(SQLSubModel):
+    _sub_classes = [
+        LateralContribution,
+    ]
+
     def __init__(self, status = None):
         super(LateralContributionList, self).__init__()
 
@@ -21,6 +27,40 @@ class LateralContributionList(object):
             "suspenssion" : []
         }
 
+    @classmethod
+    def _sql_create(cls, execute):
+        return cls._create_submodel(execute)
+
+    @classmethod
+    def _sql_update(cls, execute, version):
+        return True
+
+    @classmethod
+    def _sql_load(cls, execute, data = None):
+        new = cls(status = data['status'])
+
+        if data is None:
+            data = {}
+
+        for tab in new._tabs:
+            data["tab"] = tab
+            new._tabs[tab] = LateralContribution._sql_load(
+                execute, data
+            )
+
+        return new
+
+    def _sql_save(self, execute, data = None):
+        if data is None:
+            data = {}
+
+        for tab in self._tabs:
+            data["tab"] = tab
+            for lc in self._tabs[tab]:
+                lc._sql_save(execute, data = data)
+
+        return True
+
     def len(self, lst):
         return len(self._tabs[lst])
 
diff --git a/src/Model/LateralContribution/LateralContributionTypes.py b/src/Model/LateralContribution/LateralContributionTypes.py
index 7a3a854812fc0c7a4933692c8fe8f1e544af040c..69d9946ca3745f4bf3b86629dfd22f00f10c7576 100644
--- a/src/Model/LateralContribution/LateralContributionTypes.py
+++ b/src/Model/LateralContribution/LateralContributionTypes.py
@@ -6,8 +6,8 @@ from Model.LateralContribution.LateralContribution import LateralContribution
 
 
 class NotDefined(LateralContribution):
-    def __init__(self, name:str = "", status=None):
-        super(NotDefined, self).__init__(name=name, status=status)
+    def __init__(self, id:int = -1, name:str = "", status=None):
+        super(NotDefined, self).__init__(id=id, name=name, status=status)
 
         self._type = "ND"
         self._header = ["x", "y"]
@@ -17,8 +17,8 @@ class NotDefined(LateralContribution):
         return 0.0
 
 class LateralContrib(LateralContribution):
-    def __init__(self, name:str = "", status=None):
-        super(LateralContrib, self).__init__(name=name, status=status)
+    def __init__(self, id:int = -1, name:str = "", status=None):
+        super(LateralContrib, self).__init__(id=id, name=name, status=status)
 
         self._type = "LC"
         self._header = ["time", "discharge"]
@@ -29,8 +29,8 @@ class LateralContrib(LateralContribution):
         return ["liquid"]
 
 class Rain(LateralContribution):
-    def __init__(self, name:str = "", status=None):
-        super(Rain, self).__init__(name=name, status=status)
+    def __init__(self, id:int = -1, name:str = "", status=None):
+        super(Rain, self).__init__(id=id, name=name, status=status)
 
         self._type = "RA"
         self._header = ["time", "discharge"]
@@ -41,8 +41,8 @@ class Rain(LateralContribution):
         return ["liquid"]
 
 class Evaporation(LateralContribution):
-    def __init__(self, name:str = "", status=None):
-        super(Evaporation, self).__init__(name=name, status=status)
+    def __init__(self, id:int = -1, name:str = "", status=None):
+        super(Evaporation, self).__init__(id=id, name=name, status=status)
 
         self._type = "EV"
         self._header = ["time", "discharge"]
diff --git a/src/Model/River.py b/src/Model/River.py
index 5316f8922409f3356098428325248081a1e12c46..452773c345eea49453094aea93f55b47f84f9a67 100644
--- a/src/Model/River.py
+++ b/src/Model/River.py
@@ -172,7 +172,7 @@ class River(Graph, SQLSubModel):
         RiverNode,
         RiverReach,
         BoundaryConditionList,
-        # LateralContributionList,
+        LateralContributionList,
         # InitialConditionsDict,
         # StricklersList,
         # SolverParametersList,
@@ -223,12 +223,17 @@ class River(Graph, SQLSubModel):
             execute,
             data
         )
+        new._lateral_contribution = LateralContributionList._sql_load(
+            execute,
+            data
+        )
 
         return new
 
     def _sql_save(self, execute, data = None):
         objs = (self._nodes + self._edges)
         objs.append(self._boundary_condition)
+        objs.append(self._lateral_contribution)
 
         self._save_submodel(execute, objs, data)
         return True