diff --git a/spec/pab/pab.spec.ts b/spec/pab/pab.spec.ts
index f16b5e14aa4653ac477fd61690eb1d94e67157e2..ff7bd1d40f92bbc475362616841409efe2f74a7e 100644
--- a/spec/pab/pab.spec.ts
+++ b/spec/pab/pab.spec.ts
@@ -49,34 +49,37 @@ function createModelCloisonTest(): Cloisons {
     return modelCloisons;
 }
 
-// Création de la cloison aval
-const downWall = new ParallelStructure(new ParallelStructureParams(0, 0, 0));
-const kiviPrms = new StructureKiviParams(
-    0,  // Q
-    73.95,        // ZDV
-    0,        // Z1
-    0,      // Z2
-    0.6,          // L
-    0.4,        // Cd pour un seuil rectangulaire
-    0,
-    73.435
-);
-downWall.addChild(new StructureKivi(kiviPrms));
+function createPabTest(): Pab {
+    // Création de la cloison aval
+    const downWall = new ParallelStructure(new ParallelStructureParams(0, 0, 0));
+    const kiviPrms = new StructureKiviParams(
+        0,  // Q
+        73.95,        // ZDV
+        0,        // Z1
+        0,      // Z2
+        0.6,          // L
+        0.4,        // Cd pour un seuil rectangulaire
+        0,
+        73.435
+    );
+    downWall.addChild(new StructureKivi(kiviPrms));
 
-// Création de la passe
-const pab: Pab = new Pab(
-    new PabParams(
-        0.773,
-        78.27,
-        74.86
-    ),
-    downWall,
-    dbg
-);
+    // Création de la passe
+    const p: Pab = new Pab(
+        new PabParams(
+            0.773,
+            78.27,
+            74.86
+        ),
+        downWall,
+        dbg
+    );
 
-// Ajout des cloisons
-pab.addCloisonsFromModel(createModelCloisonTest(), 15);
-pab.downWall = downWall;
+    // Ajout des cloisons
+    p.addCloisonsFromModel(createModelCloisonTest(), 15);
+    p.downWall = downWall;
+    return p;
+}
 
 function TestGeometry(b: Cloisons, ZRMB: number, ZRAM: number, ZDV: number) {
     it(`ZRMB should be equal to ${ZRMB}`, () => {
@@ -90,8 +93,50 @@ function TestGeometry(b: Cloisons, ZRMB: number, ZRAM: number, ZDV: number) {
     });
 }
 
+function checkPabResults(p: Pab, vCalc: number) {
+    p.CalcSerie();
+    // Résultat du calcul principal (Z1 ou Q)
+    expect(p.result.vCalc).toBeCloseTo(vCalc, 2);
+    // Résultat Ligne d'eau (Cote de l'eau, P/V, Tmoy dans les 14 bassins)
+    const tRef = [
+        [78.270, 150.032, 1.500, 0.230],
+        [78.040, 149.932, 1.501, 0.230],
+        [77.811, 149.932, 1.501, 0.230],
+        [77.581, 149.932, 1.501, 0.230],
+        [77.351, 149.181, 1.502, 0.229],
+        [77.122, 149.081, 1.503, 0.229],
+        [76.893, 148.982, 1.504, 0.229],
+        [76.664, 148.883, 1.505, 0.229],
+        [76.435, 148.036, 1.507, 0.228],
+        [76.207, 147.840, 1.509, 0.228],
+        [75.979, 146.900, 1.512, 0.227],
+        [75.752, 145.867, 1.516, 0.226],
+        [75.526, 144.744, 1.521, 0.225],
+        [75.301, 143.534, 1.527, 0.224]
+    ];
+    // Cote de l'eau dernier bassin à l'amont de la cloison aval
+    expect(p.downWall.result.vCalc).toBeCloseTo(75.077, 2);
+    expect(p.downWall.result.extraResults.DH).toBeCloseTo(0.217, 2);
+    for (let i = 0; i < 14; i++) {
+        // Cote de l'eau à l'amont de la cloison amont du bassin
+        expect(p.children[i].result.vCalc).toBeCloseTo(tRef[i][0], 2);
+        // Puissance volumique dissipée
+        expect(p.children[i].result.extraResults.PV).toBeCloseTo(tRef[i][1], 0);
+        // Tirant d'eau moyen
+        expect(p.children[i].result.extraResults.YMOY).toBeCloseTo(tRef[i][2], 2);
+        // Chute
+        expect(p.children[i].result.extraResults.DH).toBeCloseTo(tRef[i][3], 2);
+        // Débit
+        expect(p.children[i].result.extraResults.Q).toBeCloseTo(0.773, 2);
+    }
+}
+
 // Tests
+let pab: Pab = createPabTest();
 describe("Class Pab: ", () => {
+    beforeEach( () => {
+        pab = createPabTest();
+    });
     describe("Exemple Formation 2018-09 p.14", () => {
         let ZRMB = 76.54;
         let ZDV = 76.67;
@@ -104,15 +149,16 @@ describe("Class Pab: ", () => {
                     ZDV);
             });
             i++;
-            ZRMB -= pab.children[0].prms.DH.currentValue;
-            ZDV -= pab.children[0].prms.DH.currentValue;
+            ZRMB -= 0.23;
+            ZDV -= 0.23;
         }
         it("CalcSerie(Z1) should return 78.27", () => {
             pab.calculatedParam = pab.prms.Z1;
-            expect(pab.CalcSerie().vCalc).toBeCloseTo(78.27, 2);
+            checkPabResults(pab, 78.27);
         });
         it("Calc(Q) should return 0.773", () => {
-            expect(pab.Calc("Q").vCalc).toBeCloseTo(0.773, 2);
+            pab.calculatedParam = pab.prms.Q;
+            checkPabResults(pab, 0.773);
         });
     });
 });
diff --git a/src/pab/cloisons.ts b/src/pab/cloisons.ts
index dc3e4f9437230f3b371b487d9234d6fa0c6e9430..baf0d738d74e50dc33f574d73788ebe69d14f7c9 100644
--- a/src/pab/cloisons.ts
+++ b/src/pab/cloisons.ts
@@ -76,14 +76,15 @@ export class Cloisons extends ParallelStructure {
 
     public adjustChildParameters(child: Nub) {
         const prms = child.prms as StructureParams;
-        if (prms.ZDV.visible) {
+        if (this.prms.DH.calculability !== ParamCalculability.NONE && prms.ZDV.visible) {
+            // Dans le contexte hors PAB (DH.calculability !== ParamCalculability.NONE)
             // Pour les seuils (i.e. Structures avec cote de radier de seuil)
             // on remplace ZDV par h1 la charge sur le seuil
             prms.h1.visible = true;
             prms.ZDV.visible = false;
         }
         if (child.prms instanceof StructureKiviParams) {
-            // hide ZRAM for KIVI, in Cloisons context only
+            // hide ZRAM for KIVI, in Cloisons and PAB context only
             child.prms.ZRAM.visible = false;
         }
     }
@@ -101,20 +102,23 @@ export class Cloisons extends ParallelStructure {
     }
 
     private updatePrms() {
-        if (this.calculatedParam !== this.prms.DH) {
-            // Z2 is the variable to find if DH is the calculated param
-            this.prms.Z2.v = this.prms.Z1.v - this.prms.DH.v;
-        }
-        this.prms.ZRMB.v = this.prms.Z1.v - this.prms.PB.v - this.prms.DH.v;
-        this.prms.ZRAM.v = this.prms.ZRMB.v + this.prms.DH.v / 2;
-        for (const structure of this.structures) {
-            const prms = structure.prms;
-            if (prms.h1.visible) {
-                // MAJ de ZDV des seuils à partir de la charge
-                prms.ZDV.v = this.prms.Z1.v - prms.h1.v;
+        if (this.prms.DH.calculability !== ParamCalculability.NONE) {
+            // if NONE => PAB context. it doesn't need update of elevations
+            if (this.calculatedParam !== this.prms.DH) {
+                // Z2 is the variable to find if DH is the calculated param
+                this.prms.Z2.v = this.prms.Z1.v - this.prms.DH.v;
             }
-            if (structure.prms instanceof StructureKiviParams) {
-                structure.prms.ZRAM.v = this.prms.Z1.v - this.prms.PB.v;
+            this.prms.ZRMB.v = this.prms.Z1.v - this.prms.PB.v - this.prms.DH.v;
+            this.prms.ZRAM.v = this.prms.ZRMB.v + this.prms.DH.v / 2;
+            for (const structure of this.structures) {
+                const prms = structure.prms;
+                if (prms.h1.visible) {
+                    // MAJ de ZDV des seuils à partir de la charge
+                    prms.ZDV.v = this.prms.Z1.v - prms.h1.v;
+                }
+                if (structure.prms instanceof StructureKiviParams) {
+                    structure.prms.ZRAM.v = this.prms.Z1.v - this.prms.PB.v;
+                }
             }
         }
     }
diff --git a/src/pab/pab.ts b/src/pab/pab.ts
index 178e485cc391c516f4b306eaffc9a32bcdcc56dc..6f9a96c8e8bd96508d5a310d3dbc8640fab376b6 100644
--- a/src/pab/pab.ts
+++ b/src/pab/pab.ts
@@ -119,7 +119,12 @@ export class Pab extends Nub {
             const cl: Cloisons = this.children[i];
 
             // Calculation of upstream water elevation
+            cl.prms.PB.v = Z - cl.prms.ZRMB.v;
             Z = this.calcCloisonZ1(cl, Z);
+            // Add extraresults: mean depth in pool and discharge
+            cl.result.extraResults.YMOY = cl.prms.PB.v;
+            cl.result.extraResults.Q = cl.prms.Q.v;
+
             if (this.debug) {
                 console.log("Bassin n°" + i);
                 let s: string = "";
@@ -188,10 +193,18 @@ export class Pab extends Nub {
      */
     protected setParametersCalculability() {
         this.prms.Z1.calculability = ParamCalculability.EQUATION;
-        this.prms.Z2.calculability = ParamCalculability.DICHO;
+        this.prms.Z2.calculability = ParamCalculability.FREE;
         this.prms.Q.calculability = ParamCalculability.DICHO;
     }
 
+    /**
+     * Remove Calculability of DH for not updating Z2 during calculation
+     * @param child Cloison newly added to the PAB
+     */
+    protected adjustChildParameters(child: Cloisons) {
+        child.prms.DH.calculability = ParamCalculability.NONE;
+    }
+
     private calcCloisonZ1(cl: ParallelStructure, Z: number): number {
         // Initialisations for current cloison
         cl.prms.Z2.v = Z;
@@ -199,10 +212,10 @@ export class Pab extends Nub {
         // Calculation of upstream water elevation
         cl.Calc("Z1", Z + 0.1);
 
-        // TODO: Add extraresults: discharge, apron elevation upstream the wall, apron elevation at half basin
-        cl.result.extraResults.YMOY = cl.prms.Z2.v - cl.result.extraResults.ZRMB;
+        // Fall on this wall
+        cl.result.extraResults.DH = cl.result.vCalc - cl.prms.Z2.v;
 
-        // Update elevation and discharge for next basin
+        // Return Update elevation for next pool
         return cl.result.vCalc;
     }
 }