diff --git a/spec/iterator/named_iterable_value.spec.ts b/spec/iterator/named_iterable_value.spec.ts
index 42926eb2d7d5ac0cf1122c61a0c724cce037dd16..8770e8d0788f0138ee554e2eb243932100b1165d 100644
--- a/spec/iterator/named_iterable_value.spec.ts
+++ b/spec/iterator/named_iterable_value.spec.ts
@@ -9,7 +9,7 @@ import { ExtraResults, ParamDefinition, ParamDomainValue, Result, ResultElement
 // import { describe, expect, it, xdescribe, xit } from "../mock_jasmine";
 
 function testParamDefinitionValues(vals: number[]): ParamDefinition {
-    const p: ParamDefinition = new ParamDefinition("aa", ParamDomainValue.ANY);
+    const p: ParamDefinition = new ParamDefinition(null, "aa", ParamDomainValue.ANY);
 
     p.paramValues.setValues(vals);
 
@@ -61,7 +61,7 @@ describe("INamedIterableValues  : ", () => {
     describe("ParamDefinition  : ", () => {
         it("test 1", () => {
             const name = "aa";
-            const p: ParamDefinition = new ParamDefinition(name, ParamDomainValue.ANY);
+            const p: ParamDefinition = new ParamDefinition(null, name, ParamDomainValue.ANY);
             expect(p.name).toEqual(name);
         });
 
diff --git a/spec/nubtest.ts b/spec/nubtest.ts
index 710e3526b5b170efe7c10bc27bbe3c7ebe54f61f..8f48e5001cfe59081ebaafdf76c0b3de69d39bdc 100644
--- a/spec/nubtest.ts
+++ b/spec/nubtest.ts
@@ -10,9 +10,9 @@ export class NubTestParams extends ParamsEquation {
 
     constructor() {
         super();
-        this._A = new ParamDefinition("A", ParamDomainValue.POS_NULL, 1);
-        this._B = new ParamDefinition("B", ParamDomainValue.POS_NULL, 2);
-        this._C = new ParamDefinition("C", ParamDomainValue.POS_NULL, 3);
+        this._A = new ParamDefinition(this, "A", ParamDomainValue.POS_NULL, 1);
+        this._B = new ParamDefinition(this, "B", ParamDomainValue.POS_NULL, 2);
+        this._C = new ParamDefinition(this, "C", ParamDomainValue.POS_NULL, 3);
 
         this.addParamDefinition(this._A);
         this.addParamDefinition(this._B);
diff --git a/spec/param.spec.ts b/spec/param.spec.ts
index d91f39200020f1a9d6b5e5a374b96481ab8c95b2..1dabaea3a0d2530556554a4ea7f985f9ce11d63a 100644
--- a/spec/param.spec.ts
+++ b/spec/param.spec.ts
@@ -63,76 +63,76 @@ describe("Class ParamDefinition : ", () => {
 
     describe("Domaine de définition : POS : ", () => {
         it("test 1", () => {
-            let p = new ParamDefinition("a", ParamDomainValue.POS, 1e-8);
-            p = new ParamDefinition("a", ParamDomainValue.POS, 10);
+            let p = new ParamDefinition(null, "a", ParamDomainValue.POS, 1e-8);
+            p = new ParamDefinition(null, "a", ParamDomainValue.POS, 10);
         });
 
         it("test 2", () => {
             shouldFail(() => {
-                const p = new ParamDefinition("a", ParamDomainValue.POS, 0);
+                const p = new ParamDefinition(null, "a", ParamDomainValue.POS, 0);
             }, MessageCode.ERROR_PARAMDEF_VALUE_POS);
         });
 
         it("test 3", () => {
             shouldFail(() => {
-                const p = new ParamDefinition("a", ParamDomainValue.POS, -1);
+                const p = new ParamDefinition(null, "a", ParamDomainValue.POS, -1);
             }, MessageCode.ERROR_PARAMDEF_VALUE_POS);
         });
     });
 
     describe("Domaine de définition : POS_NULL : ", () => {
         it("test 1", () => {
-            let p = new ParamDefinition("a", ParamDomainValue.POS_NULL, 0);
-            p = new ParamDefinition("a", ParamDomainValue.POS_NULL, 10);
+            let p = new ParamDefinition(null, "a", ParamDomainValue.POS_NULL, 0);
+            p = new ParamDefinition(null, "a", ParamDomainValue.POS_NULL, 10);
         });
 
         it("test 2", () => {
             shouldFail(() => {
-                const p = new ParamDefinition("a", ParamDomainValue.POS_NULL, -1);
+                const p = new ParamDefinition(null, "a", ParamDomainValue.POS_NULL, -1);
             }, MessageCode.ERROR_PARAMDEF_VALUE_POSNULL);
         });
     });
 
     describe("Domaine de définition : NOT_NULL : ", () => {
         it("test 1", () => {
-            let p = new ParamDefinition("a", ParamDomainValue.NOT_NULL, -1);
-            p = new ParamDefinition("a", ParamDomainValue.NOT_NULL, 1);
+            let p = new ParamDefinition(null, "a", ParamDomainValue.NOT_NULL, -1);
+            p = new ParamDefinition(null, "a", ParamDomainValue.NOT_NULL, 1);
         });
 
         it("test 2", () => {
             shouldFail(() => {
-                const p = new ParamDefinition("a", ParamDomainValue.NOT_NULL, 0);
+                const p = new ParamDefinition(null, "a", ParamDomainValue.NOT_NULL, 0);
             }, MessageCode.ERROR_PARAMDEF_VALUE_NULL);
         });
     });
 
     describe("Domaine de définition : ANY : ", () => {
         it("test 1", () => {
-            let p = new ParamDefinition("a", ParamDomainValue.ANY, -1);
-            p = new ParamDefinition("a", ParamDomainValue.ANY, 0);
-            p = new ParamDefinition("a", ParamDomainValue.ANY, 1);
+            let p = new ParamDefinition(null, "a", ParamDomainValue.ANY, -1);
+            p = new ParamDefinition(null, "a", ParamDomainValue.ANY, 0);
+            p = new ParamDefinition(null, "a", ParamDomainValue.ANY, 1);
         });
     });
 
     describe("Domaine de définition : INTERVAL : ", () => {
         it("test 1", () => {
             const d = new ParamDomain(ParamDomainValue.INTERVAL, 0, 10);
-            let p = new ParamDefinition("a", d, 0);
-            p = new ParamDefinition("a", d, 1);
-            p = new ParamDefinition("a", d, 10);
+            let p = new ParamDefinition(null, "a", d, 0);
+            p = new ParamDefinition(null, "a", d, 1);
+            p = new ParamDefinition(null, "a", d, 10);
         });
 
         it("test 2", () => {
             shouldFail(() => {
                 const d = new ParamDomain(ParamDomainValue.INTERVAL, 0, 10);
-                const p = new ParamDefinition("a", d, -1e-8);
+                const p = new ParamDefinition(null, "a", d, -1e-8);
             }, MessageCode.ERROR_PARAMDEF_VALUE_INTERVAL);
         });
 
         it("test 3", () => {
             shouldFail(() => {
                 const d = new ParamDomain(ParamDomainValue.INTERVAL, 0, 10);
-                const p = new ParamDefinition("a", d, 10 + 1e-8);
+                const p = new ParamDefinition(null, "a", d, 10 + 1e-8);
             }, MessageCode.ERROR_PARAMDEF_VALUE_INTERVAL);
         });
     });
diff --git a/src/compute-node.ts b/src/compute-node.ts
index 51515e93658a63dee25afb39877c7bfed2676c4d..0d9b8a8a682e66b300a0ca4a0db635b83b0f275a 100644
--- a/src/compute-node.ts
+++ b/src/compute-node.ts
@@ -44,6 +44,10 @@ export abstract class ComputeNode extends JalhydObject implements IDebug {
         this._debug = new Debug(dbg);
         this._prms = prms;
         this.debug("PARAMS", prms);
+
+        // important for Param uid
+        this._prms.parent = this;
+
         if (!this._prms.calculabilityDefined) {
             this._prms.resetParametersCalculability();
         }
diff --git a/src/cond_distri.ts b/src/cond_distri.ts
index f1ab56df89c5e2ceb141be483d761821514c7878..6ad742b7fd67e9680f2b87baca753fa39e131dc2 100644
--- a/src/cond_distri.ts
+++ b/src/cond_distri.ts
@@ -27,11 +27,11 @@ export class ConduiteDistribParams extends ParamsEquation {
 
     constructor(rQ: number, rD: number, rJ: number, rLg: number, rNu: number) {
         super();
-        this.Q = new ParamDefinition("Q", ParamDomainValue.POS, rQ);
-        this.D = new ParamDefinition("D", ParamDomainValue.POS, rD);
-        this.J = new ParamDefinition("J", ParamDomainValue.POS, rJ);
-        this.Lg = new ParamDefinition("Lg", ParamDomainValue.POS, rLg);
-        this.Nu = new ParamDefinition("Nu", ParamDomainValue.POS, rNu);
+        this.Q = new ParamDefinition(this, "Q", ParamDomainValue.POS, rQ);
+        this.D = new ParamDefinition(this, "D", ParamDomainValue.POS, rD);
+        this.J = new ParamDefinition(this, "J", ParamDomainValue.POS, rJ);
+        this.Lg = new ParamDefinition(this, "Lg", ParamDomainValue.POS, rLg);
+        this.Nu = new ParamDefinition(this, "Nu", ParamDomainValue.POS, rNu);
 
         this.addParamDefinition(this.Q);
         this.addParamDefinition(this.D);
diff --git a/src/jalhyd_object.ts b/src/jalhyd_object.ts
index 5c9fe62a53779af0d4e61fbc61b99f82eb4d77d3..90dbd86995fcdc5c709f737de867b06ea93d0fec 100644
--- a/src/jalhyd_object.ts
+++ b/src/jalhyd_object.ts
@@ -1,5 +1,5 @@
 export interface IJalhydObject {
-    readonly uid: number;
+    readonly uid: string;
 }
 
 export interface INamedObject extends IJalhydObject {
@@ -8,8 +8,8 @@ export interface INamedObject extends IJalhydObject {
 
 export abstract class JalhydObject implements IJalhydObject {
 
-    public get uid(): number {
-        return this._uid;
+    public get uid(): string {
+        return String(this._uid);
     }
 
     public static get nextUID(): number {
diff --git a/src/lechaptcalmon.ts b/src/lechaptcalmon.ts
index 6e2c1122f40ed50da3941a919ae91b82927a109c..e003c54b6c2484ffde65134146e05234b73a24ad 100644
--- a/src/lechaptcalmon.ts
+++ b/src/lechaptcalmon.ts
@@ -31,13 +31,13 @@ export class LechaptCalmonParams extends ParamsEquation {
 
     constructor(rQ: number, rD: number, rJ: number, rLg: number, rL: number, rM: number, rN: number) {
         super();
-        this._Q = new ParamDefinition("Q", ParamDomainValue.POS, rQ);
-        this._D = new ParamDefinition("D", ParamDomainValue.POS, rD);
-        this._J = new ParamDefinition("J", ParamDomainValue.POS, rJ);
-        this._Lg = new ParamDefinition("Lg", ParamDomainValue.POS, rLg);
-        this._L = new ParamDefinition("L", ParamDomainValue.POS, rL);
-        this._M = new ParamDefinition("M", ParamDomainValue.POS, rM);
-        this._N = new ParamDefinition("N", ParamDomainValue.POS, rN);
+        this._Q = new ParamDefinition(this, "Q", ParamDomainValue.POS, rQ);
+        this._D = new ParamDefinition(this, "D", ParamDomainValue.POS, rD);
+        this._J = new ParamDefinition(this, "J", ParamDomainValue.POS, rJ);
+        this._Lg = new ParamDefinition(this, "Lg", ParamDomainValue.POS, rLg);
+        this._L = new ParamDefinition(this, "L", ParamDomainValue.POS, rL);
+        this._M = new ParamDefinition(this, "M", ParamDomainValue.POS, rM);
+        this._N = new ParamDefinition(this, "N", ParamDomainValue.POS, rN);
 
         this.addParamDefinition(this._Q);
         this.addParamDefinition(this._D);
diff --git a/src/nub.ts b/src/nub.ts
index 11f98edc119bba4af403930e02625fe4c7b3253c..957f4271ea58c83801b6739bccf0647ce8cf3579 100644
--- a/src/nub.ts
+++ b/src/nub.ts
@@ -1,4 +1,4 @@
-import { ParamDefinition, ParamsEquation } from ".";
+import { ParamDefinition } from ".";
 import { ComputeNode } from "./compute-node";
 import { Dichotomie } from "./dichotomie";
 import { INamedIterableValues, INumberIterator, IterableValues } from "./param/param-value-iterator";
@@ -30,7 +30,6 @@ export abstract class Nub extends ComputeNode implements IReferencedNub {
         return this._props;
     }
 
-    // originally in SessionNub
     public set properties(props: Props | {}) {
         const params = props instanceof Props ? props : new Props(props);
         this._props = params.clone();
diff --git a/src/pab/pab_dimension.ts b/src/pab/pab_dimension.ts
index fe7594a48811d920992f6c6a256850f2ef2c59b2..40631cceebeb70cd92899d58d055d556b6eb9862 100644
--- a/src/pab/pab_dimension.ts
+++ b/src/pab/pab_dimension.ts
@@ -21,10 +21,10 @@ export class PabDimensionParams extends ParamsEquation {
 
     constructor(rL: number, rW: number, rY: number, rV?: number) {
         super();
-        this._L = new ParamDefinition("L", ParamDomainValue.POS, rL);
-        this._W = new ParamDefinition("W", ParamDomainValue.POS, rW);
-        this._Y = new ParamDefinition("Y", ParamDomainValue.POS, rY);
-        this._V = new ParamDefinition("V", ParamDomainValue.POS, rV);
+        this._L = new ParamDefinition(this, "L", ParamDomainValue.POS, rL);
+        this._W = new ParamDefinition(this, "W", ParamDomainValue.POS, rW);
+        this._Y = new ParamDefinition(this, "Y", ParamDomainValue.POS, rY);
+        this._V = new ParamDefinition(this, "V", ParamDomainValue.POS, rV);
 
         this.addParamDefinition(this._L);
         this.addParamDefinition(this._W);
diff --git a/src/pab/pab_puissance.ts b/src/pab/pab_puissance.ts
index 9f4fd19c058870c545c5978934ed2dbd4ab3e52c..5a397b63625f88c3085f3ab69fe5c03fafd914bc 100644
--- a/src/pab/pab_puissance.ts
+++ b/src/pab/pab_puissance.ts
@@ -21,10 +21,10 @@ export class PabPuissanceParams extends ParamsEquation {
 
     constructor(rDH: number, rQ: number, rV: number, rPV?: number) {
         super();
-        this._DH = new ParamDefinition("DH", ParamDomainValue.POS, rDH);
-        this._Q = new ParamDefinition("Q", ParamDomainValue.POS, rQ);
-        this._V = new ParamDefinition("V", ParamDomainValue.POS, rV);
-        this._PV = new ParamDefinition("PV", ParamDomainValue.POS, rPV);
+        this._DH = new ParamDefinition(this, "DH", ParamDomainValue.POS, rDH);
+        this._Q = new ParamDefinition(this, "Q", ParamDomainValue.POS, rQ);
+        this._V = new ParamDefinition(this, "V", ParamDomainValue.POS, rV);
+        this._PV = new ParamDefinition(this, "PV", ParamDomainValue.POS, rPV);
 
         this.addParamDefinition(this._DH);
         this.addParamDefinition(this._Q);
diff --git a/src/param/param-definition.ts b/src/param/param-definition.ts
index d38c0be764ae7780508980140596116da8b9d852..3db288f443e4e0561afae8d85761a6a1b7e99558 100644
--- a/src/param/param-definition.ts
+++ b/src/param/param-definition.ts
@@ -9,6 +9,7 @@ import { ParamDomain, ParamDomainValue } from "./param-domain";
 import { INamedIterableValues, INumberIterator } from "./param-value-iterator";
 import { ParamValueMode } from "./param-value-mode";
 import { ParamValues } from "./param-values";
+import { ParamsEquation } from "./params-equation";
 
 /**
  * Calculabilité du paramètre
@@ -27,11 +28,13 @@ export enum ParamCalculability {
 /**
  * Paramètre avec symbole, domaine de définition, calculabilité
  */
-export class ParamDefinition extends JalhydObject implements INubReference, INamedIterableValues, IObservable {
+export class ParamDefinition implements INubReference, INamedIterableValues, IObservable {
 
     /** symbole */
     private _symbol: string;
 
+    private _parent: any;
+
     /** domaine de définition */
     private _domain: ParamDomain;
 
@@ -44,8 +47,8 @@ export class ParamDefinition extends JalhydObject implements INubReference, INam
     /** implémentation par délégation de IObservable */
     private _observable: Observable;
 
-    constructor(symb: string, d: ParamDomain | ParamDomainValue, val?: number) {
-        super();
+    constructor(parent: ParamsEquation | JalhydObject, symb: string, d: ParamDomain | ParamDomainValue, val?: number) {
+        this._parent = parent;
         this._symbol = symb;
         this._observable = new Observable();
         this._paramValues = new ParamValues();
@@ -61,6 +64,27 @@ export class ParamDefinition extends JalhydObject implements INubReference, INam
         this.checkValue(val);
     }
 
+    /**
+     * identifiant unique de la forme
+     *   (uid du JalhydObject (en général un Nub) + "_" + symbole du paramètre)
+     * ex: 123_Q
+     */
+    get uid(): string {
+        let parentUid: string = null;
+        if (this._parent instanceof JalhydObject) {
+            parentUid = String(this._parent.uid);
+        } else if (this._parent instanceof ParamsEquation) {
+            // uid du ComputeNode utilisant le ParamsEquation
+            parentUid = String(this._parent.nubUid);
+        } else {
+            // @TODO generate ?
+            // parentUid = "ORPHAN";
+            console.log("DIE", this._parent, this);
+            throw new Error("ParamDefinition.uid : parameter has no parent !");
+        }
+        return parentUid + "::" + this._symbol;
+    }
+
     get symbol(): string {
         return this._symbol;
     }
@@ -412,7 +436,7 @@ export class ParamDefinition extends JalhydObject implements INubReference, INam
     }
 
     public clone(): ParamDefinition {
-        const res = new ParamDefinition(this.symbol, this.getDomain().clone(), this.uncheckedValue);
+        const res = new ParamDefinition(this._parent, this._symbol, this.getDomain().clone(), this.uncheckedValue);
         res._calc = this._calc;
         return res;
     }
@@ -469,9 +493,8 @@ export class ParamDefinition extends JalhydObject implements INubReference, INam
      * @param seenUids liste des uids déjà vérifiés
      * @param o objet à tester (son uid est il déjà dans la liste ?)
      */
-    private checkReferenceCircularity(o: any, seenUids: number[]) {
+    private checkReferenceCircularity(o: any, seenUids: string[]) {
         if ("uid" in o) {
-            // if (o.uid in seenUids)
             if (seenUids.indexOf(o.uid) !== -1) {
                 throw new Error(`références circulaires détectées (uids : ${seenUids})`);
             }
diff --git a/src/param/param-value-iterator.ts b/src/param/param-value-iterator.ts
index 827da34765b500cee76282f84b71f2b03d426e9d..8d59ecd5b551534e7da32df28101f885db4dfe22 100644
--- a/src/param/param-value-iterator.ts
+++ b/src/param/param-value-iterator.ts
@@ -174,7 +174,6 @@ export class ParamValueIterator implements INumberIterator {
 
             // liste
             case 2:
-                const i = this._index;
                 if (this.hasNext) {
                     this._current = this._param.valueList[this._index++];
                     return {
diff --git a/src/param/params-equation.ts b/src/param/params-equation.ts
index ff7d1e6d98cb526c7aba7e9cbe4ff8639b1f4b9f..9d348acf8bb598e96ef73f00588a4d62493e0536 100644
--- a/src/param/params-equation.ts
+++ b/src/param/params-equation.ts
@@ -1,5 +1,6 @@
 import { MapIterator } from "../util/iterator";
 
+import { ComputeNode } from "../compute-node";
 import { ParamDefinition } from "./param-definition";
 
 export interface IParamDefinitionIterator extends IterableIterator<ParamDefinition> {
@@ -83,14 +84,26 @@ export class ParamsEquationArrayIterator implements IParamDefinitionIterator {
  */
 // tslint:disable-next-line:max-classes-per-file
 export abstract class ParamsEquation implements Iterable<ParamDefinition> {
+
+    /** pointeur vers la calculette qui utilise ces paramètres */
+    public parent: ComputeNode;
+
     protected _paramMap: { [key: string]: ParamDefinition } = {};
 
     private _calculabilityDefined: boolean;
 
-    public constructor() {
+    public constructor(parent?: ComputeNode) {
+        this.parent = parent;
         this._calculabilityDefined = false;
     }
 
+    get nubUid() {
+        if (! this.parent) {
+            throw new Error("ParamsEquation.nubUid : equation has no parent Nub !");
+        }
+        return this.parent.uid;
+    }
+
     get calculabilityDefined(): boolean {
         return this._calculabilityDefined;
     }
diff --git a/src/remous.ts b/src/remous.ts
index b0b3e52dd6b2f23d139f91e3f6d6b86c288daf69..a054238016a820d5159a78197f20138e7497429d 100644
--- a/src/remous.ts
+++ b/src/remous.ts
@@ -56,10 +56,10 @@ export class CourbeRemousParams extends ParamsEquation {
     constructor(s: acSection, rYamont: number, rYAval: number, rLong: number, rDx: number, meth: MethodeResolution) {
         super();
         this._section = s;
-        this._Yamont = new ParamDefinition("Yamont", ParamDomainValue.POS, rYamont);
-        this._Yaval = new ParamDefinition("Yaval", ParamDomainValue.POS, rYAval);
-        this._Long = new ParamDefinition("Long", ParamDomainValue.POS, rLong);
-        this._Dx = new ParamDefinition("Dx", ParamDomainValue.POS, rDx);
+        this._Yamont = new ParamDefinition(this, "Yamont", ParamDomainValue.POS, rYamont);
+        this._Yaval = new ParamDefinition(this, "Yaval", ParamDomainValue.POS, rYAval);
+        this._Long = new ParamDefinition(this, "Long", ParamDomainValue.POS, rLong);
+        this._Dx = new ParamDefinition(this, "Dx", ParamDomainValue.POS, rDx);
         this._methodeResolution = meth;
 
         this.addParamDefinition(this._Yamont);
diff --git a/src/section/section_circulaire.ts b/src/section/section_circulaire.ts
index f165d3d535c14948c827048a8a7c40f2f8a53cfb..9547a52e06e261e6d504511fe601a8afa5398e6d 100644
--- a/src/section/section_circulaire.ts
+++ b/src/section/section_circulaire.ts
@@ -9,7 +9,7 @@ export class ParamsSectionCirc extends ParamsSection {
 
         constructor(rD: number, rY: number, rKs: number, rQ: number, rIf: number, rPrec: number, rYB: number) {
                 super(rY, undefined, rKs, rQ, rIf, rPrec, rYB);
-                this._D = new ParamDefinition("D", ParamDomainValue.POS, rD);
+                this._D = new ParamDefinition(this, "D", ParamDomainValue.POS, rD);
 
                 this.addParamDefinition(this._D);
         }
diff --git a/src/section/section_nub.ts b/src/section/section_nub.ts
index 478b00495ee18edd4c70803eb6b3152e43f10d0e..660b5a1b800d493f01b32dfa28caa355a405f89e 100644
--- a/src/section/section_nub.ts
+++ b/src/section/section_nub.ts
@@ -208,7 +208,7 @@ export class SectionParametree extends Nub {
                 throw new Error(`SectionParametree.createSectionVar() : symbole ${symbol} non pris en charge`);
         }
 
-        const res = new ParamDefinition(symbol, dom);
+        const res = new ParamDefinition(this, symbol, dom);
         res.calculability = ParamCalculability.EQUATION;
         return res;
     }
diff --git a/src/section/section_puissance.ts b/src/section/section_puissance.ts
index 1e1a285b7f0c2eb1269b4216fb0dafebe61e56ec..1ee1d152d25f081155bff2cc7f03d8395d77e0f8 100644
--- a/src/section/section_puissance.ts
+++ b/src/section/section_puissance.ts
@@ -13,7 +13,7 @@ export class ParamsSectionPuiss extends ParamsSection {
                     rIf: number, rPrec: number, rYB: number) {
 
                 super(rY, rLargeurBerge, rKs, rQ, rIf, rPrec, rYB);
-                this._k = new ParamDefinition("k", new ParamDomain(ParamDomainValue.INTERVAL, 0, 1), rk);
+                this._k = new ParamDefinition(this, "k", new ParamDomain(ParamDomainValue.INTERVAL, 0, 1), rk);
 
                 this.addParamDefinition(this._k);
         }
diff --git a/src/section/section_trapez.ts b/src/section/section_trapez.ts
index 8da343f23d4b57cd897f43c3688ddec3137e2c7a..9def6096ee3d2dbb45a1dd245c4df5606983e665 100644
--- a/src/section/section_trapez.ts
+++ b/src/section/section_trapez.ts
@@ -11,8 +11,8 @@ export class ParamsSectionTrapez extends ParamsSection {
                     rQ: number, rIf: number, rPrec: number, rYB: number) {
 
                 super(rY, undefined, rKs, rQ, rIf, rPrec, rYB);
-                this._LargeurFond = new ParamDefinition("LargeurFond", ParamDomainValue.POS_NULL, rLargeurFond);
-                this._Fruit = new ParamDefinition("Fruit", ParamDomainValue.POS_NULL, rFruit);
+                this._LargeurFond = new ParamDefinition(this, "LargeurFond", ParamDomainValue.POS_NULL, rLargeurFond);
+                this._Fruit = new ParamDefinition(this, "Fruit", ParamDomainValue.POS_NULL, rFruit);
 
                 this.addParamDefinition(this._LargeurFond);
                 this.addParamDefinition(this._Fruit);
diff --git a/src/section/section_type.ts b/src/section/section_type.ts
index e954ad9fffbc55356d92dc2151a1ca7afb290c33..a1f4dff69488a52fe326f858e7cc3fcc627e1485 100644
--- a/src/section/section_type.ts
+++ b/src/section/section_type.ts
@@ -22,16 +22,15 @@ export abstract class cParamsCanal extends ParamsEquation {
 
         constructor(rKs: number, rQ: number, rIf: number, rPrec: number, rYB: number) {
                 super();
-                this._Ks = new ParamDefinition("Ks", ParamDomainValue.POS, rKs);
-                this._Q = new ParamDefinition("Q", ParamDomainValue.POS_NULL, rQ);
-                this._If = new ParamDefinition("If", ParamDomainValue.ANY, rIf);
-                this._Prec = new ParamDefinition("Prec", ParamDomainValue.POS, rPrec);
+                this._Ks = new ParamDefinition(this, "Ks", ParamDomainValue.POS, rKs);
+                this._Q = new ParamDefinition(this, "Q", ParamDomainValue.POS_NULL, rQ);
+                this._If = new ParamDefinition(this, "If", ParamDomainValue.ANY, rIf);
+                this._Prec = new ParamDefinition(this, "Prec", ParamDomainValue.POS, rPrec);
                 this._iPrec = new ParamDefinition(
-                    "iPrec",
-                    ParamDomainValue.ANY,
+                    this, "iPrec", ParamDomainValue.ANY,
                     Math.round(-Math.log(rPrec) / Math.log(10))
                 );
-                this._YB = new ParamDefinition("YB", ParamDomainValue.POS, rYB);
+                this._YB = new ParamDefinition(this, "YB", ParamDomainValue.POS, rYB);
 
                 this.addParamDefinition(this._Ks);
                 this.addParamDefinition(this._Q);
@@ -97,8 +96,10 @@ export abstract class ParamsSection extends cParamsCanal {
                     rPrec: number,
                     rYB: number) {
                 super(rKs, rQ, rIf, rPrec, rYB);
-                this._Y = new ParamDefinition("Y", ParamDomainValue.POS_NULL, rY);
-                this._LargeurBerge = new ParamDefinition("LargeurBerge", ParamDomainValue.POS_NULL, rLargeurBerge);
+                this._Y = new ParamDefinition(this, "Y", ParamDomainValue.POS_NULL, rY);
+                this._LargeurBerge = new ParamDefinition(
+                    this, "LargeurBerge", ParamDomainValue.POS_NULL, rLargeurBerge
+                );
 
                 this.addParamDefinition(this._Y);
                 this.addParamDefinition(this._LargeurBerge);
diff --git a/src/structure/cloisons_params.ts b/src/structure/cloisons_params.ts
index ca7d27323ee4e530d0aef1e4816c191a541c063c..da09e5c2cfae578ce6ce72f7febc435e9b9292ba 100644
--- a/src/structure/cloisons_params.ts
+++ b/src/structure/cloisons_params.ts
@@ -29,13 +29,13 @@ export class CloisonsParams extends ParallelStructureParams {
      */
     constructor(rQ: number, rZ1: number, rLB: number, rBB: number, rPB: number, rDH: number) {
         super(rQ, rZ1, rZ1 - rDH);
-        this.LB = new ParamDefinition("LB", ParamDomainValue.POS, rLB);
+        this.LB = new ParamDefinition(this, "LB", ParamDomainValue.POS, rLB);
         this.addParamDefinition(this.LB);
-        this.BB = new ParamDefinition("BB", ParamDomainValue.POS, rBB);
+        this.BB = new ParamDefinition(this, "BB", ParamDomainValue.POS, rBB);
         this.addParamDefinition(this.BB);
-        this.PB = new ParamDefinition("PB", ParamDomainValue.POS, rPB);
+        this.PB = new ParamDefinition(this, "PB", ParamDomainValue.POS, rPB);
         this.addParamDefinition(this.PB);
-        this.DH = new ParamDefinition("DH", ParamDomainValue.POS, rDH);
+        this.DH = new ParamDefinition(this, "DH", ParamDomainValue.POS, rDH);
         this.addParamDefinition(this.DH);
     }
 }
diff --git a/src/structure/dever_params.ts b/src/structure/dever_params.ts
index 02bad78a7edb5257425ce8807e2ae0a83db797ea..05d6a07f38748933284667a3b97dc03a131dd0f5 100644
--- a/src/structure/dever_params.ts
+++ b/src/structure/dever_params.ts
@@ -21,9 +21,9 @@ export class DeverParams extends ParallelStructureParams {
      */
     constructor(rQ: number, rZ1: number, rBR: number, rZR: number) {
         super(rQ, rZ1, - Infinity);
-        this.BR = new ParamDefinition("BR", ParamDomainValue.ANY, rBR);
+        this.BR = new ParamDefinition(this, "BR", ParamDomainValue.ANY, rBR);
         this.addParamDefinition(this.BR);
-        this.ZR = new ParamDefinition("ZR", ParamDomainValue.ANY, rZR);
+        this.ZR = new ParamDefinition(this, "ZR", ParamDomainValue.ANY, rZR);
         this.addParamDefinition(this.ZR);
     }
 }
diff --git a/src/structure/parallel_structure_params.ts b/src/structure/parallel_structure_params.ts
index 40426c827c01707f1bd35ada4052c4eb130ef2fb..6bcfd33e7e65936a92a0089eb9b6ea461690e0d5 100644
--- a/src/structure/parallel_structure_params.ts
+++ b/src/structure/parallel_structure_params.ts
@@ -23,11 +23,11 @@ export class ParallelStructureParams extends ParamsEquation {
      */
     constructor(rQ: number, rZ1: number, rZ2: number) {
         super();
-        this.Q = new ParamDefinition("Q", ParamDomainValue.ANY, rQ);
+        this.Q = new ParamDefinition(this, "Q", ParamDomainValue.ANY, rQ);
         this.addParamDefinition(this.Q);
-        this.Z1 = new ParamDefinition("Z1", ParamDomainValue.ANY, rZ1);
+        this.Z1 = new ParamDefinition(this, "Z1", ParamDomainValue.ANY, rZ1);
         this.addParamDefinition(this.Z1);
-        this.Z2 = new ParamDefinition("Z2", ParamDomainValue.ANY, rZ2);
+        this.Z2 = new ParamDefinition(this, "Z2", ParamDomainValue.ANY, rZ2);
         this.addParamDefinition(this.Z2);
     }
 }
diff --git a/src/structure/rectangular_structure_params.ts b/src/structure/rectangular_structure_params.ts
index 0f157d445e65601c36c4a716f011eeaa273dc272..1ffab8094b4975e9faaeb271ba4a98fcbebb5390 100644
--- a/src/structure/rectangular_structure_params.ts
+++ b/src/structure/rectangular_structure_params.ts
@@ -25,9 +25,9 @@ export class RectangularStructureParams extends StructureParams {
      */
     constructor(rQ: number, rZDV: number, rZ1: number, rZ2: number, rL: number, rCd: number, rW: number = Infinity) {
         super(rQ, rZDV, rZ1, rZ2, rW);
-        this.L = new ParamDefinition("L", ParamDomainValue.POS, rL);
+        this.L = new ParamDefinition(this, "L", ParamDomainValue.POS, rL);
         this.addParamDefinition(this.L);
-        this.Cd = new ParamDefinition("Cd", ParamDomainValue.POS, rCd);
+        this.Cd = new ParamDefinition(this, "Cd", ParamDomainValue.POS, rCd);
         this.addParamDefinition(this.Cd);
     }
 }
diff --git a/src/structure/structure_kivi_params.ts b/src/structure/structure_kivi_params.ts
index 4e8a4869dc176745e4d3745b9bf7b5c22f001c03..a690bd61ab73d6c8cc405d000d1f3daa59edabf9 100644
--- a/src/structure/structure_kivi_params.ts
+++ b/src/structure/structure_kivi_params.ts
@@ -30,13 +30,13 @@ export class StructureKiviParams extends StructureParams {
         rZRAM: number
     ) {
         super(rQ, rZDV, rZ1, rZ2, Infinity);
-        this.L = new ParamDefinition("L", ParamDomainValue.POS_NULL, rL);
+        this.L = new ParamDefinition(this, "L", ParamDomainValue.POS_NULL, rL);
         this.addParamDefinition(this.L);
-        this.alpha = new ParamDefinition("alpha", ParamDomainValue.POS, rAlpha);
+        this.alpha = new ParamDefinition(this, "alpha", ParamDomainValue.POS, rAlpha);
         this.addParamDefinition(this.alpha);
-        this.beta = new ParamDefinition("beta", ParamDomainValue.POS_NULL, rBeta);
+        this.beta = new ParamDefinition(this, "beta", ParamDomainValue.POS_NULL, rBeta);
         this.addParamDefinition(this.beta);
-        this.ZRAM = new ParamDefinition("ZRAM", ParamDomainValue.ANY, rZRAM);
+        this.ZRAM = new ParamDefinition(this, "ZRAM", ParamDomainValue.ANY, rZRAM);
         this.addParamDefinition(this.ZRAM);
     }
 }
diff --git a/src/structure/structure_orifice_submerged_params.ts b/src/structure/structure_orifice_submerged_params.ts
index a8f861726f24904096264fcd4d27d97d8b87279d..5db236bfd59b3a4f822bc93ec032adc443e0b853 100644
--- a/src/structure/structure_orifice_submerged_params.ts
+++ b/src/structure/structure_orifice_submerged_params.ts
@@ -24,9 +24,9 @@ export class StructureOrificeSubmergedParams extends StructureParams {
      */
     constructor(rQ: number, rZ1: number, rZ2: number, rCd: number, rS: number) {
         super(rQ, -Infinity, rZ1, rZ2);
-        this.S = new ParamDefinition("S", ParamDomainValue.POS_NULL, rS);
+        this.S = new ParamDefinition(this, "S", ParamDomainValue.POS_NULL, rS);
         this.addParamDefinition(this.S);
-        this.Cd = new ParamDefinition("Cd", ParamDomainValue.POS_NULL, rCd);
+        this.Cd = new ParamDefinition(this, "Cd", ParamDomainValue.POS_NULL, rCd);
         this.addParamDefinition(this.Cd);
     }
 
diff --git a/src/structure/structure_params.ts b/src/structure/structure_params.ts
index 8740525ea3d4334f39b65c0c2c7f3f0ca25f8edf..cadac28a0fef579f55cac4bb1cd3e29a4dac2bb1 100644
--- a/src/structure/structure_params.ts
+++ b/src/structure/structure_params.ts
@@ -40,21 +40,21 @@ export class StructureParams extends ParamsEquation {
      */
     constructor(rQ: number, rZDV: number, rZ1: number, rZ2: number, rW: number = Infinity) {
         super();
-        this.Q = new ParamDefinition("Q", ParamDomainValue.ANY, rQ);
+        this.Q = new ParamDefinition(this, "Q", ParamDomainValue.ANY, rQ);
         this.addParamDefinition(this.Q);
-        this.ZDV = new ParamDefinition("ZDV", ParamDomainValue.ANY, rZDV);
+        this.ZDV = new ParamDefinition(this, "ZDV", ParamDomainValue.ANY, rZDV);
         this.addParamDefinition(this.ZDV);
-        this.Z1 = new ParamDefinition("Z1", ParamDomainValue.ANY, rZ1);
+        this.Z1 = new ParamDefinition(this, "Z1", ParamDomainValue.ANY, rZ1);
         this.addParamDefinition(this.Z1);
-        this.Z2 = new ParamDefinition("Z2", ParamDomainValue.ANY, rZ2);
+        this.Z2 = new ParamDefinition(this, "Z2", ParamDomainValue.ANY, rZ2);
         this.addParamDefinition(this.Z2);
-        this.h1 = new ParamDefinition("h1", ParamDomainValue.POS_NULL,
+        this.h1 = new ParamDefinition(this, "h1", ParamDomainValue.POS_NULL,
             Math.max(0, this.Z1.v - this.ZDV.v));
         this.addParamDefinition(this.h1);
-        this.h2 = new ParamDefinition("h2", ParamDomainValue.POS_NULL,
+        this.h2 = new ParamDefinition(this, "h2", ParamDomainValue.POS_NULL,
             Math.max(0, this.Z2.v - this.ZDV.v));
         this.addParamDefinition(this.h2);
-        this.W = new ParamDefinition("W", ParamDomainValue.POS_NULL, rW);
+        this.W = new ParamDefinition(this, "W", ParamDomainValue.POS_NULL, rW);
         this.addParamDefinition(this.W);
     }
 
diff --git a/src/structure/structure_triangular_trunc_weir_free_params.ts b/src/structure/structure_triangular_trunc_weir_free_params.ts
index 7b3687b97e08529329e649b02d5ccf0b36c80193..6226c35e0601a77c434efa529b8286df76ff1b9a 100644
--- a/src/structure/structure_triangular_trunc_weir_free_params.ts
+++ b/src/structure/structure_triangular_trunc_weir_free_params.ts
@@ -31,11 +31,11 @@ export class TriangularTruncStructureParams extends StructureParams {
         rBT: number, rZT: number, rCd: number, rW: number = Infinity
     ) {
         super(rQ, rZDV, rZ1, - Infinity, rW);
-        this.BT = new ParamDefinition("BT", ParamDomainValue.POS, rBT);
+        this.BT = new ParamDefinition(this, "BT", ParamDomainValue.POS, rBT);
         this.addParamDefinition(this.BT);
-        this.ZT = new ParamDefinition("ZT", ParamDomainValue.POS, rZT);
+        this.ZT = new ParamDefinition(this, "ZT", ParamDomainValue.POS, rZT);
         this.addParamDefinition(this.ZT);
-        this.Cd = new ParamDefinition("Cd", ParamDomainValue.POS, rCd);
+        this.Cd = new ParamDefinition(this, "Cd", ParamDomainValue.POS, rCd);
         this.addParamDefinition(this.Cd);
     }
 }
diff --git a/src/structure/structure_triangular_weir_free_params.ts b/src/structure/structure_triangular_weir_free_params.ts
index 7cfe3544665cc5baf041d100f783d13cf3563dfe..7c4253ec2624e3d5a9ca3cc17a29a5b39af04ec3 100644
--- a/src/structure/structure_triangular_weir_free_params.ts
+++ b/src/structure/structure_triangular_weir_free_params.ts
@@ -27,9 +27,9 @@ export class TriangularStructureParams extends StructureParams {
         rAlpha2: number, rCd: number, rW: number = Infinity
     ) {
         super(rQ, rZDV, rZ1, - Infinity, rW);
-        this.alpha2 = new ParamDefinition("alpha2", ParamDomainValue.POS, rAlpha2);
+        this.alpha2 = new ParamDefinition(this, "alpha2", ParamDomainValue.POS, rAlpha2);
         this.addParamDefinition(this.alpha2);
-        this.Cd = new ParamDefinition("Cd", ParamDomainValue.POS, rCd);
+        this.Cd = new ParamDefinition(this, "Cd", ParamDomainValue.POS, rCd);
         this.addParamDefinition(this.Cd);
     }
 }