diff --git a/src/Model/Results/ResultsAdisTS.py b/src/Model/Results/ResultsAdisTS.py
new file mode 100644
index 0000000000000000000000000000000000000000..79b1b4e05c9b473aecefe6dda0ba94c7a94bd5fe
--- /dev/null
+++ b/src/Model/Results/ResultsAdisTS.py
@@ -0,0 +1,77 @@
+# Results.py -- Pamhyr
+# Copyright (C) 2023-2024  INRAE
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+import logging
+import numpy as np
+import os, glob
+
+from copy import deepcopy
+from datetime import datetime
+
+from Model.Results.River.River import River
+
+logger = logging.getLogger()
+
+
+class Results(object):
+    def __init__(self, study=None, solver=None,
+                 repertory="", name="0"):
+        self._study = study
+        self._solver = solver
+        self._repertory = repertory
+        self._name = name
+
+        self._river = River(self._study)
+
+        self._meta_data = {
+            # Keep results creation date
+            "creation_date": datetime.now(),
+        }
+
+        repertory_results = os.path.join(repertory, "resultats")
+        self._pollutants_list = [el.split("/")[-1][0:-4] for el in glob.glob(repertory_results + "/*.bin")]
+
+        print("*********files names resultats from Results Object: ", self._pollutants_list)
+
+    @property
+    def date(self):
+        date = self._meta_data["creation_date"]
+        return f"{date.isoformat(sep=' ')}"
+
+    @property
+    def river(self):
+        return self._river
+
+    @property
+    def study(self):
+        return self._study
+
+    @property
+    def pollutants_list(self):
+        return self._pollutants_list
+
+    def set(self, key, value):
+        self._meta_data[key] = value
+
+    def get(self, key):
+        return self._meta_data[key]
+
+    def reload(self):
+        return self._solver.results(
+            self._study,
+            self._repertory,
+            qlog=None,
+        )
diff --git a/src/Solver/AdisTS.py b/src/Solver/AdisTS.py
index bea442b1343e137a6fb3388c1f31ce215362f0cf..2c9865b08994575e8f05a9434be92da645ef2a4f 100644
--- a/src/Solver/AdisTS.py
+++ b/src/Solver/AdisTS.py
@@ -33,7 +33,7 @@ from tools import (
 
 from Solver.CommandLine import CommandLineSolver
 
-from Model.Results.Results import Results
+from Model.Results.ResultsAdisTS import Results
 from Model.Results.River.River import River, Reach, Profile
 
 from Checker.Adists import (
diff --git a/src/View/Results/TableAdisTS.py b/src/View/Results/TableAdisTS.py
new file mode 100644
index 0000000000000000000000000000000000000000..31821911369f8d45facdbfd2a2c16290e6637333
--- /dev/null
+++ b/src/View/Results/TableAdisTS.py
@@ -0,0 +1,131 @@
+# Table.py -- Pamhyr
+# Copyright (C) 2023-2024  INRAE
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+# -*- coding: utf-8 -*-
+
+import logging
+import traceback
+
+from tools import timer, trace
+
+from PyQt5.QtGui import (
+    QKeySequence, QColor
+)
+from PyQt5.QtCore import (
+    Qt, QAbstractTableModel, QModelIndex,
+    QVariant, pyqtSlot, QCoreApplication,
+)
+from PyQt5.QtWidgets import (
+    QMessageBox, QUndoCommand, QUndoStack,
+    QStyledItemDelegate, QLineEdit, QAbstractItemView,
+    QComboBox,
+)
+
+from View.Tools.PamhyrTable import PamhyrTableModel
+from View.Results.translate import *
+
+logger = logging.getLogger()
+
+_translate = QCoreApplication.translate
+
+
+class TableModel(PamhyrTableModel):
+    def _setup_lst(self):
+        _river = self._data.river
+        print("//////////////////opt_data: ", self._opt_data)
+        print("data: ", self._data)
+        print("river: ", _river)
+        print("reaches: ", _river.reachs)
+        if self._opt_data == "reach":
+            self._lst = _river.reachs
+            print("optreach: ", self._lst)
+        elif self._opt_data == "profile":
+            self._lst = _river.reach(0).profiles
+        elif self._opt_data == "raw_data":
+            self._lst = _river.reach(0).profiles
+        elif self._opt_data == "pollutants":
+            tmp_list = self._data.pollutants_list.copy()
+            tmp_list.remove("total_sediment")
+            print(type(tmp_list))
+            tmp_list.insert(len(tmp_list), "total_sediment")
+            self._lst = tmp_list
+            print("=====table pollutants: ", self._lst)
+
+    def __init__(self, **kwargs):
+        self._timestamp = 0.0
+        super(TableModel, self).__init__(**kwargs)
+
+    def data(self, index, role=Qt.DisplayRole):
+        if role != Qt.ItemDataRole.DisplayRole:
+            return QVariant()
+
+        row = index.row()
+        column = index.column()
+
+        if self._opt_data == "reach":
+            if self._headers[column] == "name":
+                v = self._lst[row].name
+                return str(v)
+        elif self._opt_data == "pollutants":
+            if self._headers[column] == "name":
+                v = self._lst[row]
+                return str(v)
+        elif self._opt_data == "profile":
+            if self._headers[column] == "name":
+                v = self._lst[row].name
+                return str(v)
+            elif self._headers[column] == "kp":
+                v = self._lst[row].kp
+                return f"{v:.4f}"
+        elif self._opt_data == "raw_data":
+            p = self._lst[row]
+            if self._headers[column] == "name":
+                if p.name == "":
+                    return f"{p.kp:.4f}"
+                return f"{p.name}"
+            elif self._headers[column] == "water_elevation":
+                v = self._lst[row].get_ts_key(self._timestamp, "Z")
+                return f"{v:.4f}"
+            elif self._headers[column] == "discharge":
+                v = self._lst[row].get_ts_key(self._timestamp, "Q")
+                return f"{v:.4f}"
+            elif self._headers[column] == "speed":
+                q = self._lst[row].get_ts_key(self._timestamp, "Q")
+                z = self._lst[row].get_ts_key(self._timestamp, "Q")
+
+                v = self._lst[row].geometry.speed(q, z)
+                return f"{v:.4f}"
+
+        return QVariant()
+
+    def update(self, reach):
+        _river = self._data.river
+
+        if self._opt_data == "reach":
+            self._lst = _river.reachs
+        elif self._opt_data == "profile" or self._opt_data == "raw_data":
+            self._lst = _river.reach(reach).profiles
+
+        self.layoutChanged.emit()
+
+    @property
+    def timestamp(self):
+        return self._timestamp
+
+    @timestamp.setter
+    def timestamp(self, timestamp):
+        self._timestamp = timestamp
+        self.layoutChanged.emit()
diff --git a/src/View/Results/WindowAdisTS.py b/src/View/Results/WindowAdisTS.py
index 628068092fb0ee0ade950801863bbbb6734e023b..1d72585dd51b61ac08335b307b6d6cc2d0c2609e 100644
--- a/src/View/Results/WindowAdisTS.py
+++ b/src/View/Results/WindowAdisTS.py
@@ -58,7 +58,7 @@ from View.Results.CustomPlot.CustomPlotValuesSelectionDialog import (
     CustomPlotValuesSelectionDialog,
 )
 
-from View.Results.Table import TableModel
+from View.Results.TableAdisTS import TableModel
 from View.Results.translate import ResultsTranslate
 from View.Stricklers.Window import StricklersWindow
 
@@ -124,8 +124,9 @@ class ResultsWindowAdisTS(PamhyrWindow):
         print("setup table adists results")
         print("results study name: ", self._results.study.name)
         print("results study river: ", self._results.study.river)
+        print("*********files names resultats from Results Window: ", self._results.pollutants_list)
         self._table = {}
-        for t in ["reach", "profile"]:#, "raw_data"]:
+        for t in ["reach", "profile", "pollutants"]:#, "raw_data"]:
             print("t: ", t)
             table = self.find(QTableView, f"tableView_{t}")
             self._table[t] = TableModel(
diff --git a/src/View/Results/translate.py b/src/View/Results/translate.py
index e59fb789eb91742a3a47ecbf7ca8ed9d37206654..12264c621945bc6ca0fa27c3c054c2eb9aa86925 100644
--- a/src/View/Results/translate.py
+++ b/src/View/Results/translate.py
@@ -45,7 +45,7 @@ class ResultsTranslate(MainTranslate):
         )
 
         self._sub_dict["table_headers_reach"] = {
-            "name": _translate("Results", "Reach name"),
+            "name": _translate("Results", "Pollutant name"),
         }
 
         self._sub_dict["table_headers_profile"] = {
@@ -53,6 +53,10 @@ class ResultsTranslate(MainTranslate):
             "kp": self._dict["unit_kp"],
         }
 
+        self._sub_dict["table_headers_pollutants"] = {
+            "name": _translate("Results", "Reach name"),
+        }
+
         self._sub_dict["table_headers_raw_data"] = {
             "name": _translate("Results", "Profile"),
             "water_elevation": self._dict["unit_water_elevation"],
diff --git a/src/View/ui/ResultsAdisTS.ui b/src/View/ui/ResultsAdisTS.ui
index c7c319a0bd6fe066d6ba46bcf777cb628e277905..6d08656a95c6bd53acfa4983dcbada3b9eb52e0e 100644
--- a/src/View/ui/ResultsAdisTS.ui
+++ b/src/View/ui/ResultsAdisTS.ui
@@ -54,6 +54,7 @@
          </item>
         </layout>
        </widget>
+       <widget class="QTableView" name="tableView_pollutants"/>
       </widget>
       <widget class="QWidget" name="layoutWidget">
        <layout class="QGridLayout" name="gridLayout_2">
@@ -164,38 +165,6 @@
             </item>
            </layout>
           </widget>
-          <widget class="QWidget" name="tab">
-           <attribute name="title">
-            <string>Water elevation</string>
-           </attribute>
-           <layout class="QGridLayout" name="gridLayout">
-            <item row="0" column="0">
-             <layout class="QVBoxLayout" name="verticalLayout_4">
-              <item>
-               <widget class="QSplitter" name="splitter_2">
-                <property name="orientation">
-                 <enum>Qt::Vertical</enum>
-                </property>
-                <widget class="QSplitter" name="splitter">
-                 <property name="orientation">
-                  <enum>Qt::Horizontal</enum>
-                 </property>
-                 <widget class="QWidget" name="verticalLayoutWidget">
-                  <layout class="QVBoxLayout" name="verticalLayout"/>
-                 </widget>
-                 <widget class="QWidget" name="verticalLayoutWidget_2">
-                  <layout class="QVBoxLayout" name="verticalLayout_2"/>
-                 </widget>
-                </widget>
-                <widget class="QWidget" name="verticalLayoutWidget_3">
-                 <layout class="QVBoxLayout" name="verticalLayout_3"/>
-                </widget>
-               </widget>
-              </item>
-             </layout>
-            </item>
-           </layout>
-          </widget>
           <widget class="QWidget" name="tab_2">
            <attribute name="title">
             <string>Hydrograph</string>