diff --git a/spec/nubtest.ts b/spec/nubtest.ts
index 6a0f699a22f75998a4adac1021c8cc47ab6b29fb..2044b7db0baecbd9c22699a97f75fb4653fcd499 100644
--- a/spec/nubtest.ts
+++ b/spec/nubtest.ts
@@ -40,7 +40,7 @@ export class NubTest extends Nub {
 
     public Equation(): Result {
         // C = A+B
-        return new Result(this.prms.A.v + this.prms.B.v);
+        return new Result(this.prms.A.v + this.prms.B.v, this);
     }
 
     protected setParametersCalculability() {
diff --git a/spec/structure/structure_test.ts b/spec/structure/structure_test.ts
index 33f2462ce25b964c396a5c3d4adf3fec90eef971..d574a9fa1a561fbd6f4b4f96e8318ab198b7bf57 100644
--- a/spec/structure/structure_test.ts
+++ b/spec/structure/structure_test.ts
@@ -36,7 +36,7 @@ class StructureTest extends Structure {
         Structure.CheckEquation(sVarCalc);
         const data = this.getResultData();
 
-        return new Result(this.prms.Z1.v - this.prms.Z2.v - this.prms.ZDV.v, data);
+        return new Result(this.prms.Z1.v - this.prms.Z2.v - this.prms.ZDV.v, this, data);
     }
 
     /**
diff --git a/src/cond_distri.ts b/src/cond_distri.ts
index 1b97c1bd95c9caa878d5899abd7b0ff0edd82068..0fd13ae6246ee81a03a667ed9a66592ac9cca5a4 100644
--- a/src/cond_distri.ts
+++ b/src/cond_distri.ts
@@ -98,7 +98,7 @@ export class ConduiteDistrib extends Nub {
                 throw new Error("ConduiteDistrib.Equation() : invalid parameter name " + sVarCalc);
         }
 
-        return new Result(v);
+        return new Result(v, this);
     }
 
     /**
diff --git a/src/lechaptcalmon.ts b/src/lechaptcalmon.ts
index a00363fce1eda374cd487a1f7de8ac0761d9b1d9..fba3f127b0f97962f14da3e43a7ab0bf0ad14467 100644
--- a/src/lechaptcalmon.ts
+++ b/src/lechaptcalmon.ts
@@ -121,7 +121,7 @@ export class LechaptCalmon extends Nub {
                 throw new Error("LechaptCalmon.Equation() : invalid variable name " + sVarCalc);
         }
 
-        return new Result(v);
+        return new Result(v, this);
     }
 
     /**
diff --git a/src/macrorugo/macrorugo.ts b/src/macrorugo/macrorugo.ts
index 97fa19e024cd59836f0c66d86e58606b26b08b95..f2cdd0252ca2adf5fd1aaeb51e73618fde6ce0a3 100644
--- a/src/macrorugo/macrorugo.ts
+++ b/src/macrorugo/macrorugo.ts
@@ -120,7 +120,7 @@ export class MacroRugo extends Nub {
 
     public Equation(sVarCalc: string): Result {
         const Q = uniroot(this.resolveQ, this, 0, 1E7) * this.prms.B.v;
-        return new Result(Q);
+        return new Result(Q, this);
     }
 
     /**
diff --git a/src/nub.ts b/src/nub.ts
index b0be7702436c7b0147bd8570f74bf079609e2715..26dbc8a8a1aa09b44a5b98bf11d20422013a3a28 100644
--- a/src/nub.ts
+++ b/src/nub.ts
@@ -326,7 +326,8 @@ export abstract class Nub extends ComputeNode implements IObservable {
             const nbValues = variatedValues.valuesIterator.count();
             progressStep = remainingProgress / nbValues;
 
-            const res = new Result();
+            const res = new Result(undefined, this);
+
             variatedValues.initValuesIterator(false);
             while (variatedValues.hasNext) {
                 variatedValues.next();
diff --git a/src/pab/pab_chute.ts b/src/pab/pab_chute.ts
index 37f8b21f744bbd019801bc73ac0a7e5ac6af9ab8..55275db5bc08764d3f1bba838a6af74d7ee92d4a 100644
--- a/src/pab/pab_chute.ts
+++ b/src/pab/pab_chute.ts
@@ -75,7 +75,7 @@ export class PabChute extends Nub {
                 throw new Error("PabChute.Equation() : invalid variable name " + sVarCalc);
         }
 
-        return new Result(v);
+        return new Result(v, this);
     }
 
     /**
diff --git a/src/pab/pab_dimension.ts b/src/pab/pab_dimension.ts
index 355f806a57e944256353b2e02c78f16f924c6eb2..036aa49875e794b08002ad1a6ba552ef0d31ecfa 100644
--- a/src/pab/pab_dimension.ts
+++ b/src/pab/pab_dimension.ts
@@ -86,7 +86,7 @@ export class PabDimension extends Nub {
                 throw new Error("PabDimension.Equation() : invalid variable name " + sVarCalc);
         }
 
-        return new Result(v);
+        return new Result(v, this);
     }
 
     /**
diff --git a/src/pab/pab_nombre.ts b/src/pab/pab_nombre.ts
index 1318dc1b064d74ec52498ad76b127af721a69c6d..f843c767cc257f15750298d33b49277e903acb25 100644
--- a/src/pab/pab_nombre.ts
+++ b/src/pab/pab_nombre.ts
@@ -77,7 +77,7 @@ export class PabNombre extends Nub {
                 throw new Error("PabNombre.Equation() : invalid variable name " + sVarCalc);
         }
 
-        const r = new Result(v);
+        const r = new Result(v, this);
         r.extraResults.DHR = DHR;
 
         return r;
diff --git a/src/pab/pab_puissance.ts b/src/pab/pab_puissance.ts
index e02dbc953cf1558d961cd98c99f9719cad3363bb..cc5c9afae9b69383a1efdeb014b0578ed051dad0 100644
--- a/src/pab/pab_puissance.ts
+++ b/src/pab/pab_puissance.ts
@@ -76,7 +76,7 @@ export class PabPuissance extends Nub {
                 throw new Error("PabPuissance.Equation() : invalid variable name " + sVarCalc);
         }
 
-        return new Result(v);
+        return new Result(v, this);
     }
 
     /**
diff --git a/src/regime_uniforme.ts b/src/regime_uniforme.ts
index d4d003a914ae54b929baf8eda3ee6bdfe339021c..a2003e2ef5a4ed572d04816c282026f7435d644c 100644
--- a/src/regime_uniforme.ts
+++ b/src/regime_uniforme.ts
@@ -42,7 +42,7 @@ export class RegimeUniforme extends Nub {
      */
     private Calc_Qn(): Result {
         if (this.Sn.prms.If.v <= 0) {
-            return new Result(0);
+            return new Result(0, this);
         }
 
         const rR: Result = this.Sn.Calc("R", this.Sn.prms.Y.v);
@@ -56,7 +56,7 @@ export class RegimeUniforme extends Nub {
         }
 
         const v = this.Sn.prms.Ks.v * Math.pow(rR.vCalc, 2 / 3) * rS.vCalc * Math.sqrt(this.Sn.prms.If.v);
-        return new Result(v);
+        return new Result(v, this);
     }
 
 }
diff --git a/src/remous.ts b/src/remous.ts
index 8221977d6fba21ae077ba0e9c6a837d90e0eecc4..2276f0f5c88e12b885f3438c15689f66fe1c6532 100644
--- a/src/remous.ts
+++ b/src/remous.ts
@@ -133,7 +133,7 @@ export class CourbeRemous extends Nub {
         // "tRes": { [key: number]: number }
         // }
         Result {
-        const res = new Result();
+        const res = new Result(undefined, this);
 
         // let Yc: number = this.Sn.Calc("Yc");
         const rYC = this.Sn.Calc("Yc");
@@ -511,7 +511,7 @@ export class CourbeRemous extends Nub {
             }
 
             const res: number = rHS.vCalc - rJ.vCalc / 2 * this.Dx;
-            return new Result(res);
+            return new Result(res, this);
         }
 
         throw new Error("CourbeRemous.Equation() : parameter " + sVarCalc + " not allowed");
@@ -621,7 +621,7 @@ export class CourbeRemous extends Nub {
         }
 
         const v = - (this.prmSect.If.v - rJ.vCalc) / (1 - Math.pow(rFR.vCalc, 2));
-        return new Result(v);
+        return new Result(v, this);
     }
 
     /**
@@ -631,7 +631,7 @@ export class CourbeRemous extends Nub {
      */
     private Calc_Y_EulerExplicite(Y: number): Result {
         if (!this.Sn.HautCritique.ok) {
-            return new Result(new Message(MessageCode.WARNING_REMOUS_ARRET_CRITIQUE));
+            return new Result(new Message(MessageCode.WARNING_REMOUS_ARRET_CRITIQUE), this);
         }
 
         // L'appel à Calc('J') avec Y en paramètre réinitialise toutes les données dépendantes de la ligne d'eau
@@ -644,7 +644,7 @@ export class CourbeRemous extends Nub {
         // let Y2 = Y + this.Dx * this.Calc_dYdX(Y);
         const Y2 = Y + this.Dx * rDXDY.vCalc;
 
-        return new Result(Y2);
+        return new Result(Y2, this);
     }
 
     /**
@@ -654,7 +654,7 @@ export class CourbeRemous extends Nub {
      */
     private Calc_Y_RK4(Y: number): Result {
         if (!this.Sn.HautCritique.ok) {
-            return new Result(new Message(MessageCode.WARNING_REMOUS_ARRET_CRITIQUE));
+            return new Result(new Message(MessageCode.WARNING_REMOUS_ARRET_CRITIQUE), this);
         }
 
         // L'appel à Calc('J') avec Y en paramètre réinitialise toutes les données dépendantes de la ligne d'eau
@@ -670,7 +670,7 @@ export class CourbeRemous extends Nub {
         const hc = this.Sn.HautCritique.vCalc;
 
         if (XOR(rDx > 0, !(Y + rDx / 2 * k1 < hc))) {
-            return new Result(new Message(MessageCode.WARNING_REMOUS_ARRET_CRITIQUE));
+            return new Result(new Message(MessageCode.WARNING_REMOUS_ARRET_CRITIQUE), this);
         }
 
         // let k2 = this.Calc_dYdX(Y + Dx / 2 * k1);
@@ -681,7 +681,7 @@ export class CourbeRemous extends Nub {
         const k2 = rDXDY2.vCalc;
 
         if (XOR(rDx > 0, !(Y + rDx / 2 * k2 < hc))) {
-            return new Result(new Message(MessageCode.WARNING_REMOUS_ARRET_CRITIQUE));
+            return new Result(new Message(MessageCode.WARNING_REMOUS_ARRET_CRITIQUE), this);
         }
 
         // let k3 = this.Calc_dYdX(Y + Dx / 2 * k2);
@@ -692,7 +692,7 @@ export class CourbeRemous extends Nub {
         const k3 = rDXDY3.vCalc;
 
         if (XOR(rDx > 0, !(Y + rDx / 2 * k3 < hc))) {
-            return new Result(new Message(MessageCode.WARNING_REMOUS_ARRET_CRITIQUE));
+            return new Result(new Message(MessageCode.WARNING_REMOUS_ARRET_CRITIQUE), this);
         }
 
         // let k4 = this.Calc_dYdX(Y + Dx * k3);
@@ -707,10 +707,10 @@ export class CourbeRemous extends Nub {
 
         // if ($this ->rDx > 0 xor !($Yout < $this ->oSect ->rHautCritique)) { return false; }
         if (XOR(rDx > 0, !(Yout < hc))) {
-            const res = new Result(new Message(MessageCode.WARNING_REMOUS_ARRET_CRITIQUE));
+            const res = new Result(new Message(MessageCode.WARNING_REMOUS_ARRET_CRITIQUE), this);
         }
 
-        return new Result(Yout);
+        return new Result(Yout, this);
     }
 
     /**
@@ -720,7 +720,7 @@ export class CourbeRemous extends Nub {
      */
     private Calc_Y_Trapez(Y: number): Result {
         if (!this.Sn.HautCritique.ok) {
-            return new Result(new Message(MessageCode.WARNING_REMOUS_ARRET_CRITIQUE));
+            return new Result(new Message(MessageCode.WARNING_REMOUS_ARRET_CRITIQUE), this);
         }
 
         const dicho = new Dichotomie(this, "Y", this._debugDicho, "Hs");
@@ -747,7 +747,7 @@ export class CourbeRemous extends Nub {
             return r;
         }
 
-        // return new Result(Y2);
+        // return new Result(Y2, this);
         return r;
     }
 
@@ -777,7 +777,7 @@ export class CourbeRemous extends Nub {
         }
 
         if (!res.ok || XOR(this.Dx > 0, !(res.vCalc < this.Sn.HautCritique.vCalc))) {
-            return new Result(new Message(MessageCode.WARNING_REMOUS_ARRET_CRITIQUE));
+            return new Result(new Message(MessageCode.WARNING_REMOUS_ARRET_CRITIQUE), this);
         }
 
         return res;
diff --git a/src/structure/parallel_structure.ts b/src/structure/parallel_structure.ts
index f2c3eedfbbbf7ce1580628dba5b8d96be06ee522..64295d2c39404e775c332f9b84286a81cb959ae2 100644
--- a/src/structure/parallel_structure.ts
+++ b/src/structure/parallel_structure.ts
@@ -213,7 +213,7 @@ export class ParallelStructure extends Nub {
                 );
             }
         }
-        const calcRes: Result = new Result(0);
+        const calcRes: Result = new Result(0, this);
         let qTot: number = 0;
         for (let i = 0; i < this._structures.length; i++) {
             if (i !== iExcept) {
diff --git a/src/structure/structure.ts b/src/structure/structure.ts
index f811fbef59de152f20d685f9a73c014ea0891b9a..dd72feb87b33924e714be3b167714802e0902b73 100644
--- a/src/structure/structure.ts
+++ b/src/structure/structure.ts
@@ -184,21 +184,21 @@ export abstract class Structure extends Nub {
                             ENUM_StructureFlowRegime: StructureFlowRegime.NULL };
         if (sVarCalc === "Q") {
             if (this.prms.h1.v <= 0 || this.prms.Z1.v === this.prms.Z2.v || this.prms.W.v <= 0) {
-                return new Result(0, flagsNull);
+                return new Result(0, this, flagsNull);
             }
         } else if (this.prms.Q.v === 0) {
             // Débit nul <=> tirant d'eau amont = tirant d'eau aval ou tout autre paramètre nul
             switch (sVarCalc) {
                 case "Z1":
-                    return new Result(this.prms.Z2.v, flagsNull);
+                    return new Result(this.prms.Z2.v, this, flagsNull);
                 case "Z2":
-                    return new Result(this.prms.Z1.v, flagsNull);
+                    return new Result(this.prms.Z1.v, this, flagsNull);
                 default:
                     // Est-ce toujours vrai ? Nécessitera peut-être d'étendre la méthode
-                    return new Result(0, flagsNull);
+                    return new Result(0, this, flagsNull);
             }
         } else if (this.prms.W.v === 0 && sVarCalc === "Z1") {
-            return new Result(Infinity, flagsNull); // Si la vanne est fermée la cote amont est infinie
+            return new Result(Infinity, this, flagsNull); // Si la vanne est fermée la cote amont est infinie
         }
 
         // Gestion du cas d'écoulement impossible Z1 > Z2 et Q <= 0
@@ -216,7 +216,7 @@ export abstract class Structure extends Nub {
                     default:
                         rPrm = 0;
                 }
-                const res: Result = new Result(new Message(MessageCode.ERROR_STRUCTURE_Q_TROP_ELEVE), flagsNull);
+                const res: Result = new Result(new Message(MessageCode.ERROR_STRUCTURE_Q_TROP_ELEVE), this, flagsNull);
                 res.vCalc = rPrm;
 
                 // "Les cotes et le débit ne sont pas cohérents => fermeture de l'ouvrage
diff --git a/src/structure/structure_cem88d.ts b/src/structure/structure_cem88d.ts
index 23c3a824dced5615a6a20d7fb63a67e506dffc57..94079c526d81621763b27967b214ebca251dd4be 100644
--- a/src/structure/structure_cem88d.ts
+++ b/src/structure/structure_cem88d.ts
@@ -64,7 +64,7 @@ export class StructureWeirCem88d extends RectangularStructure {
             "StructureWeirCem88d.Equation(h1=" + this.prms.h1.v + ",h2="
             + this.prms.h2.v + ",W=" + this.prms.W.v + ") => Q=" + v);
 
-        return new Result(v, data);
+        return new Result(v, this, data);
     }
 }
 
diff --git a/src/structure/structure_cem88v.ts b/src/structure/structure_cem88v.ts
index a16139b1add29f298e4376ed3f2cbad0bc8f0d9a..886ee53dbe5bdf8b58f4e8622f0912756d276af6 100644
--- a/src/structure/structure_cem88v.ts
+++ b/src/structure/structure_cem88v.ts
@@ -66,7 +66,7 @@ export class StructureWeirCem88v extends RectangularStructure {
             "StructureWeirCem88v.Equation(h1=" + this.prms.h1.v
             + ",h2=" + this.prms.h2.v + ",W=" + this.prms.W.v + ") => Q=" + v);
 
-        return new Result(v, data);
+        return new Result(v, this, data);
     }
 
     /**
diff --git a/src/structure/structure_cunge80.ts b/src/structure/structure_cunge80.ts
index 90397455ff2ceac447d845649a03bd9697317071..7da977193f6df78202d3d744dcc2ad841c7c8635 100644
--- a/src/structure/structure_cunge80.ts
+++ b/src/structure/structure_cunge80.ts
@@ -52,7 +52,7 @@ export class StructureCunge80 extends RectangularStructure {
                 }
         }
 
-        return new Result(v, data);
+        return new Result(v, this, data);
     }
 
     protected getFlowRegime() {
diff --git a/src/structure/structure_kivi.ts b/src/structure/structure_kivi.ts
index 797f184f8bf7de0e3554ba51ea7164501e68681a..06de167a2ff5877aaeab5e533b76ead933316fc6 100644
--- a/src/structure/structure_kivi.ts
+++ b/src/structure/structure_kivi.ts
@@ -22,7 +22,7 @@ export class StructureKivi extends Structure {
 
     public Equation(sVarCalc: string): Result {
         Structure.CheckEquation(sVarCalc);
-        const res: Result = new Result(0, this.getResultData());
+        const res: Result = new Result(0, this, this.getResultData());
 
         // p : pelle
         let p: number = this.prms.ZDV.v - this.prms.ZRAM.v;
diff --git a/src/structure/structure_orifice_submerged.ts b/src/structure/structure_orifice_submerged.ts
index 3350831d1ce05a352267bacee58666c7cbdbe6c9..67ec3d61e4723bea80341a4c0b8efaa443ac3c06 100644
--- a/src/structure/structure_orifice_submerged.ts
+++ b/src/structure/structure_orifice_submerged.ts
@@ -32,7 +32,7 @@ export class StructureOrificeSubmerged extends Structure {
 
         const v = this.prms.Cd.v * this.prms.S.v * Structure.R2G * Math.sqrt(this.prms.Z1.v - this.prms.Z2.v);
 
-        return new Result(v, data);
+        return new Result(v, this, data);
     }
 
     public calcA(): number {
diff --git a/src/structure/structure_rectangular_orifice_free.ts b/src/structure/structure_rectangular_orifice_free.ts
index 9bb18b97b252ae3eb663cf9f4dd6627c39cffb1d..5b89e0a2c9b51e812676f443487ce58adb75dd58 100644
--- a/src/structure/structure_rectangular_orifice_free.ts
+++ b/src/structure/structure_rectangular_orifice_free.ts
@@ -26,7 +26,7 @@ export class StructureRectangularOrificeFree extends RectangularStructure {
         const v = this.prms.Cd.v * Math.min(this.prms.W.v, this.prms.h1.v) * this.prms.L.v
             * Structure.R2G * Math.sqrt(this.prms.h1.v);
 
-        return new Result(v, data);
+        return new Result(v, this, data);
     }
 
     protected getFlowRegime() {
diff --git a/src/structure/structure_rectangular_orifice_submerged.ts b/src/structure/structure_rectangular_orifice_submerged.ts
index fe775d2de10becea247a29803573427d8e0e77f6..bb71b307d9cedf55ddbc52402dd21c98f858efa8 100644
--- a/src/structure/structure_rectangular_orifice_submerged.ts
+++ b/src/structure/structure_rectangular_orifice_submerged.ts
@@ -29,7 +29,7 @@ export class StructureRectangularOrificeSubmerged extends RectangularStructure {
         const v = this.prms.Cd.v * Math.min(this.prms.W.v, this.prms.h1.v) * this.prms.L.v
             * Structure.R2G * Math.sqrt(this.prms.h1.v - this.prms.h2.v);
 
-        return new Result(v, data);
+        return new Result(v, this, data);
     }
 
     protected getFlowRegime() {
diff --git a/src/structure/structure_triangular_trunc_weir_free.ts b/src/structure/structure_triangular_trunc_weir_free.ts
index c3a6a21f3f8f136fc8d7898f2626c74e6153666c..85fc1704d7d12bf2fb02b6dc9aafd5bed3b2f67b 100644
--- a/src/structure/structure_triangular_trunc_weir_free.ts
+++ b/src/structure/structure_triangular_trunc_weir_free.ts
@@ -36,7 +36,7 @@ export class StructureTriangularTruncWeirFree extends Structure {
             v = v * (Math.pow(this.prms.h1.v, 2.5) - Math.pow(this.prms.Z1.v - this.prms.ZT.v, 2.5));
         }
 
-        return new Result(v, data);
+        return new Result(v, this, data);
     }
 
     /**
diff --git a/src/structure/structure_triangular_weir_free.ts b/src/structure/structure_triangular_weir_free.ts
index beb63a2b7c9236e0357da08f1f0d0b2aa0c2d49a..fe1b429b8ff25b6f82584166cc14c9bcb0f48b12 100644
--- a/src/structure/structure_triangular_weir_free.ts
+++ b/src/structure/structure_triangular_weir_free.ts
@@ -32,7 +32,7 @@ export class StructureTriangularWeirFree extends Structure {
         const v = this.prms.Cd.v * this.getTanFromDegrees(this.prms.alpha2.v)
             * Math.pow(this.prms.h1.v, 2.5);
 
-        return new Result(v, data);
+        return new Result(v, this, data);
     }
 
     /**
diff --git a/src/structure/structure_weir_free.ts b/src/structure/structure_weir_free.ts
index 444dc37259efab1ba4d2a4305cc5b7273ce756f0..4346adbbb50c59be9fa41f13c33934b5fd46f88b 100644
--- a/src/structure/structure_weir_free.ts
+++ b/src/structure/structure_weir_free.ts
@@ -19,7 +19,7 @@ export class StructureWeirFree extends RectangularStructure {
 
         const v = this.prms.Cd.v * this.prms.L.v * Structure.R2G * Math.pow(this.prms.h1.v, 1.5);
 
-        return new Result(v, data);
+        return new Result(v, this, data);
     }
 
     protected getFlowRegime() {
diff --git a/src/structure/structure_weir_submerged_larinier.ts b/src/structure/structure_weir_submerged_larinier.ts
index f3468ac4fbeff4041c132ac789d61c267ce11b98..afb6ec391bd47ac305b63f230575dd30644af7ac 100644
--- a/src/structure/structure_weir_submerged_larinier.ts
+++ b/src/structure/structure_weir_submerged_larinier.ts
@@ -22,7 +22,7 @@ export class StructureWeirSubmergedLarinier extends RectangularStructure {
         const v = this.prms.Cd.v * this.prms.L.v * Structure.R2G
             * this.prms.h1.v * Math.sqrt(this.prms.h1.v - this.prms.h2.v);
 
-        return new Result(v, data);
+        return new Result(v, this, data);
     }
 
     protected getFlowRegime() {
diff --git a/src/util/result.ts b/src/util/result.ts
index e4054ee1c799d450266962f05430624a3eeb0f42..aeff109304d67eac6063f03dda210abbf0ef3630 100644
--- a/src/util/result.ts
+++ b/src/util/result.ts
@@ -1,4 +1,5 @@
 import { JalhydObject } from "../jalhyd_object";
+import { Nub } from "../nub";
 import { ParamFamily } from "../param/param-definition";
 import {
     INamedIterableValues,
@@ -17,12 +18,15 @@ import { ResultElement } from "./resultelement";
 // tslint:disable-next-line:max-classes-per-file
 export class Result extends JalhydObject implements INamedIterableValues {
 
-    /** nom de la variable/paramètre calculé */
+    /** nom de la variable/paramètre calculé (= symbol) */
     public name: string;
 
     /** "parameters" family, for linked parameters */
     public family: ParamFamily;
 
+    /** Nub that produced this result */
+    private _sourceNub: Nub;
+
     /**
      * Messages (erreurs, infos, ...)
      */
@@ -35,7 +39,7 @@ export class Result extends JalhydObject implements INamedIterableValues {
      */
     private _iterator: INumberIterator;
 
-    constructor(v?: number | Message | ResultElement, d?: any) {
+    constructor(v?: number | Message | ResultElement, sourceNub?: Nub, extraResults?: any) {
         super();
         this._globalLog = new cLog();
         this._resultElements = [];
@@ -44,9 +48,9 @@ export class Result extends JalhydObject implements INamedIterableValues {
         } else if (v instanceof ResultElement) {
             this._resultElements.push(v);
         }
-
-        if (d !== undefined) {
-            this.resultElement.extraResults = d;
+        this._sourceNub = sourceNub;
+        if (extraResults !== undefined) { // for setter
+            this.resultElement.extraResults = extraResults;
         }
     }
 
@@ -93,6 +97,10 @@ export class Result extends JalhydObject implements INamedIterableValues {
         return this._resultElements.length > 0;
     }
 
+    public get sourceNub(): Nub {
+        return this._sourceNub;
+    }
+
     /**
      * @return le résultat de calcul du 1er ResultElement
      */
@@ -138,7 +146,7 @@ export class Result extends JalhydObject implements INamedIterableValues {
         if (i < 0 || i >= this._resultElements.length) {
             throw new Error("Result.extractResult index outside [0;" + (this._resultElements.length - 1) + "]");
         }
-        return new Result(this._resultElements[i]);
+        return new Result(this._resultElements[i], this._sourceNub);
     }
 
     /**