diff --git a/spec/solveur/solveur.spec.ts b/spec/solveur/solveur.spec.ts
index 91f6ff1db0fb5194b070cbfa8844dcc10733bf4e..75360c757d58b4fc6cd317581904c497cb1c0e35 100644
--- a/spec/solveur/solveur.spec.ts
+++ b/spec/solveur/solveur.spec.ts
@@ -4,6 +4,7 @@ import { PabNombre } from "../../src/pab/pab_nombre";
 import { PabNombreParams } from "../../src/pab/pab_nombre_params";
 import { PabPuissance } from "../../src/pab/pab_puissance";
 import { PabPuissanceParams } from "../../src/pab/pab_puissance_params";
+import { Bief } from "../../src/remous/bief";
 import { Session } from "../../src/session";
 import { Solveur } from "../../src/solveur/solveur";
 import { SolveurParams } from "../../src/solveur/solveur_params";
@@ -223,4 +224,19 @@ describe("solveur multi-modules", () => {
         expect(s.result.sourceNub).toBe(s);
         expect(s.getChildren().length).toBe(0);
     });
+
+    it("test 11: bug jalhyd#159", () => {
+        // tslint:disable-next-line:max-line-length
+        const sess = `{"header":{"source":"jalhyd","format_version":"1.3","created":"2019-10-25T12:31:39.494Z"},"settings":{"precision":1e-7,"maxIterations":100,"displayPrecision":3},"documentation":"","session":[{"uid":"MHQxN3","props":{"calcType":"ParallelStructure"},"meta":{"title":"Ouvrages"},"children":[{"uid":"cW1pZD","props":{"calcType":"Structure","structureType":"SeuilRectangulaire","loiDebit":"WeirFree"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":393.99},{"symbol":"L","mode":"SINGLE","value":1.84},{"symbol":"CdWR","mode":"SINGLE","value":0.4}]}],"parameters":[{"symbol":"Q","mode":"SINGLE","value":1.143420537740305},{"symbol":"Z1","mode":"CALCUL"},{"symbol":"Z2","mode":"SINGLE","value":393.99}]},{"uid":"Mnk0Mj","props":{"regime":"Fluvial","calcType":"Bief"},"meta":{"title":"Bief"},"children":[{"uid":"ZWFod3","props":{"regime":"Fluvial","calcType":"Section","nodeType":"SectionRectangle"},"children":[],"parameters":[{"symbol":"Ks","mode":"SINGLE","value":40},{"symbol":"Q","mode":"LINK","targetNub":"MHQxN3","targetParam":"Q"},{"symbol":"YB","mode":"SINGLE","value":1},{"symbol":"Y","mode":"SINGLE","value":0.8},{"symbol":"LargeurBerge","mode":"SINGLE","value":2.3}]}],"parameters":[{"symbol":"Long","mode":"SINGLE","value":30},{"symbol":"Dx","mode":"SINGLE","value":1},{"symbol":"Z1","mode":"CALCUL"},{"symbol":"Z2","mode":"LINK","targetNub":"MHQxN3","targetParam":"Z1"},{"symbol":"ZF1","mode":"SINGLE","value":393.99},{"symbol":"ZF2","mode":"SINGLE","value":394.1}]},{"uid":"bmlreT","props":{"calcType":"ParallelStructure"},"meta":{"title":"Ouvrages 1"},"children":[{"uid":"cnN3Y2","props":{"calcType":"Structure","structureType":"SeuilRectangulaire","loiDebit":"WeirVillemonte"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":393.99},{"symbol":"L","mode":"SINGLE","value":2.8},{"symbol":"CdWR","mode":"SINGLE","value":0.4}]}],"parameters":[{"symbol":"Q","mode":"LINK","targetNub":"MHQxN3","targetParam":"Q"},{"symbol":"Z1","mode":"CALCUL"},{"symbol":"Z2","mode":"LINK","targetNub":"Mnk0Mj","targetParam":"Z1"}]},{"uid":"ZDM5OT","props":{"calcType":"Solveur","nubToCalculate":"bmlreT","searchedParameter":"MHQxN3/Q"},"meta":{"title":"Solveur"},"children":[],"parameters":[{"symbol":"Xinit","mode":"SINGLE","value":0.5},{"symbol":"Ytarget","mode":"SINGLE","value":394.66}]}]}`;
+        Session.getInstance().clear();
+        Session.getInstance().unserialise(sess);
+        const s = Session.getInstance().findNubByUid("ZDM5OT") as Solveur;
+        const ouvrages1 = Session.getInstance().findNubByUid("bmlreT") as ParallelStructure;
+        const bief = Session.getInstance().findNubByUid("Mnk0Mj") as Bief;
+        // searchable parameters
+        const spBief = Solveur.getDependingNubsSearchableParams(bief);
+        expect(spBief.length).toBe(5);
+        const spOuvrages1 = Solveur.getDependingNubsSearchableParams(ouvrages1);
+        expect(spOuvrages1.length).toBe(13);
+    });
 });
diff --git a/src/nub.ts b/src/nub.ts
index d13bdca1e0d0a31693c8ee32f7eb32232c9ca49c..7892c8ba6b8077d70275055fe64500662f3608c6 100644
--- a/src/nub.ts
+++ b/src/nub.ts
@@ -748,7 +748,9 @@ export abstract class Nub extends ComputeNode implements IObservable {
         for (const rn of requiredNubs) {
             requiredNubs = requiredNubs.concat(rn.getRequiredNubsDeep(visited));
         }
-        // @TODO deduplicate ?
+        requiredNubs = requiredNubs.filter(
+            (item, index) => requiredNubs.indexOf(item) === index // deduplicate
+        );
         return requiredNubs;
     }
 
diff --git a/src/solveur/solveur.ts b/src/solveur/solveur.ts
index baebd56663da90836766315ab718d1b14b028aac..c232ee15a72e9a5decb8db619dbcd0d4683be693 100644
--- a/src/solveur/solveur.ts
+++ b/src/solveur/solveur.ts
@@ -21,8 +21,8 @@ export class Solveur extends Nub implements Observer {
             const upstreamNubs = nub.getRequiredNubsDeep();
             for (const un of upstreamNubs) {
                 for (const p of un.parameterIterator) {
-                    // only non-varying parameters can be looked for
-                    if (p.valueMode === ParamValueMode.SINGLE) {
+                    // only visible, non-varying parameters can be looked for
+                    if (p.visible && p.valueMode === ParamValueMode.SINGLE) {
                         searchableParams.push(p);
                     }
                 }