diff --git a/e2e/calc-all-examples.e2e-spec.ts b/e2e/calc-all-examples.e2e-spec.ts
index 31a63bbabd460eb3642394a59963e16ac00ee999..7f6fbc861bc4964c8be5bb0630e853113643238d 100644
--- a/e2e/calc-all-examples.e2e-spec.ts
+++ b/e2e/calc-all-examples.e2e-spec.ts
@@ -6,7 +6,7 @@ import { browser, by, element } from "protractor";
 /**
  * Calculate all modules of all examples
  */
-describe("ngHyd − calculate all modules of all examples −", async () => {
+describe("ngHyd − example sessions −", async () => {
 
   let listPage: ListPage;
   let calcPage: CalculatorPage;
diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts
index 1edff79f83ad3391330cd1fa6f4453999dd5a94b..2639f2077eac7d2b9d11d01ad144ae54d469a062 100644
--- a/e2e/calculator.po.ts
+++ b/e2e/calculator.po.ts
@@ -125,6 +125,8 @@ export class CalculatorPage {
       ||
       await element(by.css("fixedvar-results results-chart > chart-results-container")).isPresent()
       ||
+      await element(by.css("section-results fixed-results > .fixed-results-container")).isPresent()
+      ||
       await element(by.css("remous-results #main-chart")).isPresent()
       ||
       await element(by.css("pab-results pab-results-table")).isPresent()
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 6e9d00408e7ba62eef4f6dd13067a99dd84bfcb1..2fb9161a8d7d5fd97aa930b629aaa308dd7ba520 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -72,6 +72,7 @@ import { SectionCanvasComponent } from "./components/section-canvas/section-canv
 import { RemousResultsComponent } from "./components/remous-results/remous-results.component";
 import { ResultsChartComponent } from "./components/results-chart/results-chart.component";
 import { PabResultsComponent } from "./components/pab-results/pab-results.component";
+import { VerificateurResultsComponent } from "./components/verificateur-results/verificateur-results.component";
 import { PabResultsTableComponent } from "./components/pab-results/pab-results-table.component";
 import { ChartTypeSelectComponent } from "./components/results-chart/chart-type.component";
 import { LogComponent } from "./components/log/log.component";
@@ -215,6 +216,7 @@ const appRoutes: Routes = [
     NgParamInputComponent,
     PabProfileChartComponent,
     PabResultsComponent,
+    VerificateurResultsComponent,
     PabResultsTableComponent,
     PabTableComponent,
     VariableResultsSelectorComponent,
diff --git a/src/app/components/calculator-results/calculator-results.component.html b/src/app/components/calculator-results/calculator-results.component.html
index e15f90423460d877543169dc7b5081eb4446e809..319b3eab39c1483dc3b8c646ce2e2c7e040d63be 100644
--- a/src/app/components/calculator-results/calculator-results.component.html
+++ b/src/app/components/calculator-results/calculator-results.component.html
@@ -1,8 +1,9 @@
 <div>
-    <section-results></section-results>
-    <remous-results></remous-results>
-    <pab-results></pab-results>
-    <macrorugo-compound-results></macrorugo-compound-results>
-    <jet-results></jet-results>
-    <fixedvar-results></fixedvar-results>
+    <section-results [hidden]="! isSP"></section-results>
+    <remous-results [hidden]="! isRemous"></remous-results>
+    <pab-results [hidden]="! isPAB"></pab-results>
+    <verificateur-results [hidden]="! isVerificateur"></verificateur-results>
+    <macrorugo-compound-results [hidden]="! isMRC"></macrorugo-compound-results>
+    <jet-results [hidden]="! isJet"></jet-results>
+    <fixedvar-results [hidden]="! showGenericResults"></fixedvar-results>
 </div>
diff --git a/src/app/components/calculator-results/calculator-results.component.ts b/src/app/components/calculator-results/calculator-results.component.ts
index 133296818a2482eb22bfc51a1d02da28a7601fa9..09df29e7e62c915bb3094b2de1d5c0932c39d192 100644
--- a/src/app/components/calculator-results/calculator-results.component.ts
+++ b/src/app/components/calculator-results/calculator-results.component.ts
@@ -8,6 +8,9 @@ import { MacrorugoCompoundResultsComponent } from "../macrorugo-compound-results
 import { FormulaireDefinition } from "../../formulaire/definition/form-definition";
 import { JetResultsComponent } from "../jet-results/jet-results.component";
 import { GenericCalculatorComponent } from "../generic-calculator/calculator.component";
+import { VerificateurResultsComponent } from "../verificateur-results/verificateur-results.component";
+
+import { CalculatorType } from 'jalhyd';
 
 @Component({
     selector: "calc-results",
@@ -41,6 +44,12 @@ export class CalculatorResultsComponent implements AfterViewChecked {
     @ViewChild(PabResultsComponent, { static: true })
     private pabResultsComponent: PabResultsComponent;
 
+    /**
+     * composant d'affichage des résultats des vérificateurs de critères de franchissement
+     */
+    @ViewChild(VerificateurResultsComponent, { static: true })
+    private verificateurResultsComponent: VerificateurResultsComponent;
+
     /**
      * composant d'affichage des résultats des passes à macrorugosités complexes
      */
@@ -63,45 +72,75 @@ export class CalculatorResultsComponent implements AfterViewChecked {
         @Inject(forwardRef(() => GenericCalculatorComponent)) private calculatorComponent: GenericCalculatorComponent
     ) { }
 
+    // @TODO this system is sh*tty !
     public set formulaire(f: FormulaireDefinition) {
         this._formulaire = f;
         if (this._formulaire === undefined) {
             this.fixedVarResultsComponent.results = undefined;
-            this.sectionResultsComponent.results = undefined;
-            this.remousResultsComponent.results = undefined;
-            this.pabResultsComponent.results = undefined;
-            this.mrcResultsComponent.results = undefined;
             this.jetResultsComponent.results = undefined;
+            this.mrcResultsComponent.results = undefined;
+            this.pabResultsComponent.results = undefined;
+            this.remousResultsComponent.results = undefined;
+            this.sectionResultsComponent.results = undefined;
+            this.verificateurResultsComponent.results = undefined;
         } else {
-            this.sectionResultsComponent.results = f.results;
-            this.remousResultsComponent.results = f.results;
-            this.pabResultsComponent.results = f.results;
-            this.mrcResultsComponent.results = f.results;
-            // FixedVar and Jet are mutually incompatible (the 2nd extend the 1st)
-            if (this.isJet) {
-                this.jetResultsComponent.results = f.results;
-                this.fixedVarResultsComponent.results = undefined;
-            } else {
-                this.fixedVarResultsComponent.results = f.results;
-                this.jetResultsComponent.results = undefined;
-            }
+            if (this.showGenericResults) this.fixedVarResultsComponent.results = f.results;
+            if (this.isJet) this.jetResultsComponent.results = f.results;
+            if (this.isMRC) this.mrcResultsComponent.results = f.results;
+            if (this.isPAB) this.pabResultsComponent.results = f.results;
+            if (this.isRemous) this.remousResultsComponent.results = f.results;
+            if (this.isSP) this.sectionResultsComponent.results = f.results;
+            if (this.isVerificateur) this.verificateurResultsComponent.results = f.results;
         }
     }
 
     public updateView() {
-        this.fixedVarResultsComponent.updateView();
-        this.sectionResultsComponent.updateView();
-        this.remousResultsComponent.updateView();
-        this.pabResultsComponent.updateView();
-        this.mrcResultsComponent.updateView();
-        this.jetResultsComponent.updateView();
+        if (this.showGenericResults) this.fixedVarResultsComponent.updateView();
+        if (this.isJet) this.jetResultsComponent.updateView();
+        if (this.isMRC) this.mrcResultsComponent.updateView();
+        if (this.isPAB) this.pabResultsComponent.updateView();
+        if (this.isRemous) this.remousResultsComponent.updateView();
+        if (this.isSP) this.sectionResultsComponent.updateView();
+        if (this.isVerificateur) this.verificateurResultsComponent.updateView();
     }
 
     public ngAfterViewChecked() {
         this.afterViewChecked.emit();
     }
 
-    public get isJet() {
+    /** Should we show the default FixedVarResultsComponent ? */
+    public get showGenericResults(): boolean {
+        return (
+            ! this.isJet
+            && ! this.isMRC
+            && ! this.isPAB
+            && ! this.isRemous
+            && ! this.isSP
+            && ! this.isVerificateur
+        )
+    }
+
+    public get isJet(): boolean {
         return this.calculatorComponent.isJet;
     }
+
+    public get isMRC(): boolean {
+        return this.calculatorComponent.isMRC;
+    }
+
+    public get isPAB(): boolean {
+        return this.calculatorComponent.isPAB;
+    }
+
+    public get isRemous(): boolean {
+        return this.calculatorComponent.is(CalculatorType.CourbeRemous);
+    }
+
+    public get isSP(): boolean {
+        return this.calculatorComponent.is(CalculatorType.SectionParametree);
+    }
+
+    public get isVerificateur(): boolean {
+        return this.calculatorComponent.is(CalculatorType.Verificateur);
+    }
 }
diff --git a/src/app/components/fixedvar-results/results.component.ts b/src/app/components/fixedvar-results/results.component.ts
index e1829e929bf3b587e1d41e3859b592e12931034a..550cff912523cb20d45f9f8b4e1270a72abc2c5b 100644
--- a/src/app/components/fixedvar-results/results.component.ts
+++ b/src/app/components/fixedvar-results/results.component.ts
@@ -15,10 +15,6 @@ export class ResultsComponentDirective {
     /** max number of decimals for auto-adjusting charts axis graduations */
     public static CHARTS_AXIS_PRECISION = 10;
 
-    public constructor() {
-        const sf = <Screenfull>screenfull;
-    }
-
     /** tracks the fullscreen state */
     public get isFullscreen() {
         const sf = <Screenfull>screenfull;
diff --git a/src/app/components/jet-results/jet-results.component.ts b/src/app/components/jet-results/jet-results.component.ts
index 50d8a1a1df5782adedfe615da6cd47490d1ebdd3..28ecd927c82025e52b4fcaf2434321d33b12dbed 100644
--- a/src/app/components/jet-results/jet-results.component.ts
+++ b/src/app/components/jet-results/jet-results.component.ts
@@ -46,8 +46,7 @@ export class JetResultsComponent extends FixedVarResultsComponent {
     protected updateResults() {
         const superUpdated = super.updateResults();
 
-        let trajectoryChartUpdated: boolean;
-        trajectoryChartUpdated = this.jetTrajectoryChartComponent !== undefined;
+        let trajectoryChartUpdated = this.jetTrajectoryChartComponent !== undefined;
 
         if (trajectoryChartUpdated) {
             // draw chart whether params are variating or not,
diff --git a/src/app/components/pab-results/pab-results.component.ts b/src/app/components/pab-results/pab-results.component.ts
index fe282c196d568946b38992b4ee82ab2d97d5e6d1..79551c24dc0ff2267f69f7a762ec763b23038ab1 100644
--- a/src/app/components/pab-results/pab-results.component.ts
+++ b/src/app/components/pab-results/pab-results.component.ts
@@ -66,7 +66,7 @@ export class PabResultsComponent implements DoCheck {
 
     /**
      * update results table and chart when the variable index changed (event sent by
-     * PabVariableResultsSelectorComponent); variable index is already set in
+     * VariableResultsSelectorComponent); variable index is already set in
      * pabResults at this time
      */
     public variableIndexChanged() {
diff --git a/src/app/components/remous-results/remous-results.component.ts b/src/app/components/remous-results/remous-results.component.ts
index 1e2f8d7b3a53006a9fcac2fbe0ce2b47308faa8e..db14a54ceea12f5b03ac76e54b617cb3c10e8114 100644
--- a/src/app/components/remous-results/remous-results.component.ts
+++ b/src/app/components/remous-results/remous-results.component.ts
@@ -141,11 +141,6 @@ export class RemousResultsComponent extends ResultsComponentDirective implements
         return this._tableHeaders;
     }
 
-    public getResultClass(i: number) {
-        // tslint:disable-next-line:no-bitwise
-        return "result_id_" + String(i & 1);
-    }
-
     public get hasResults(): boolean {
         return this._remousResults !== undefined && this._remousResults.hasResults;
     }
diff --git a/src/app/components/section-results/section-results.component.html b/src/app/components/section-results/section-results.component.html
index 04625e227ea5500494aa68bd6cb751036bd43063..7911644b140405c606fc05710576ebee9d6d1a4d 100644
--- a/src/app/components/section-results/section-results.component.html
+++ b/src/app/components/section-results/section-results.component.html
@@ -1,4 +1,5 @@
 <div class="section-results-container" #sectionResults *ngIf="hasResults" fxLayout="row wrap" fxLayoutAlign="center center">
+
     <div fxFlex="1 1 100%">
         <div class="section-results-buttons">
             <button mat-icon-button (click)="exportAsImage(sectionResults)" [title]="uitextExportImageTitle">
@@ -18,3 +19,21 @@
         </div>
     </div>
 </div>
+
+<div class="container">
+    <!-- journal -->
+    <log></log>
+
+    <results-chart *ngIf="showVarResults"></results-chart>
+    <!--<results-chart [hidden]="! showVarResultsChart"></results-chart>-->
+
+    <div>
+        <!-- table des résultats fixés -->
+        <fixed-results [results]=fixedResults></fixed-results>
+
+        <!-- table des résultats variés -->
+        <div *ngIf="showVarResults">
+            <var-results [results]=varResults></var-results>
+        </div>
+    </div>
+</div>
diff --git a/src/app/components/section-results/section-results.component.ts b/src/app/components/section-results/section-results.component.ts
index 130f45e7fd1453246ee8684820806e49dd814b4e..ea10156d3edb37c321ccaf3f598c7e9523c74cb5 100644
--- a/src/app/components/section-results/section-results.component.ts
+++ b/src/app/components/section-results/section-results.component.ts
@@ -5,9 +5,9 @@ import { ResultElement } from "jalhyd";
 import { SectionCanvasComponent } from "../section-canvas/section-canvas.component";
 import { SectionResults } from "../../results/section-results";
 import { CalculatorResults } from "../../results/calculator-results";
-import { ResultsComponentDirective } from "../fixedvar-results/results.component";
 import { I18nService } from "../../services/internationalisation.service";
 import { AppComponent } from "../../app.component";
+import { FixedVarResultsComponent } from '../fixedvar-results/fixedvar-results.component';
 
 @Component({
     selector: "section-results",
@@ -16,7 +16,7 @@ import { AppComponent } from "../../app.component";
         "./section-results.component.scss"
     ]
 })
-export class SectionResultsComponent extends ResultsComponentDirective implements DoCheck {
+export class SectionResultsComponent extends FixedVarResultsComponent implements DoCheck {
 
     constructor(
         private intlService: I18nService,
@@ -26,6 +26,7 @@ export class SectionResultsComponent extends ResultsComponentDirective implement
     }
 
     public set results(rs: CalculatorResults[]) {
+        super.results = rs;
         this._resultElement = undefined;
         this._results = undefined;
         if (rs) {
@@ -68,28 +69,17 @@ export class SectionResultsComponent extends ResultsComponentDirective implement
      */
     private _resultElement: ResultElement;
 
-    private _doUpdate = false;
-
     @ViewChild(SectionCanvasComponent)
-    private _sectionCanvas: SectionCanvasComponent;
+    private _sectionCanvasComponent: SectionCanvasComponent;
 
     public updateView() {
-        if (this._sectionCanvas) {
-            this._sectionCanvas.reset();
+        if (this._sectionCanvasComponent) {
+            this._sectionCanvasComponent.reset();
         }
-
         if (this._results) {
             this._doUpdate = this._results.hasResults;
         }
-    }
-
-    /**
-     * appelé pour gérer les changements non détectés par Angular
-     */
-    public ngDoCheck() {
-        if (this._doUpdate) {
-            this._doUpdate = !this.updateResults();
-        }
+        super.updateView();
     }
 
     private isSectionLevel(s: string) {
@@ -101,17 +91,18 @@ export class SectionResultsComponent extends ResultsComponentDirective implement
         return false;
     }
 
-    private updateResults() {
-        if (this._results && this._sectionCanvas) {
+    protected updateResults() {
+        const superUpdated = super.updateResults();
 
+        if (this._results && this._sectionCanvasComponent !== undefined) {
             this._resultElement = new ResultElement();
 
             // compute canvas optimal size the first time
-            if (this._sectionCanvas.originalSize === undefined) {
+            if (this._sectionCanvasComponent.originalSize === undefined) {
                 const container = this.element.nativeElement.querySelector(".section-results-container");
                 const size = Math.min(container.offsetWidth, container.offsetHeight);
-                this._sectionCanvas.originalSize = size - 17; // 417 - 17 = 400
-                this._sectionCanvas.size = this._sectionCanvas.originalSize;
+                this._sectionCanvasComponent.originalSize = size - 17; // 417 - 17 = 400
+                this._sectionCanvasComponent.size = this._sectionCanvasComponent.originalSize;
             }
 
             // traduction des symboles des variables calculées
@@ -123,30 +114,25 @@ export class SectionResultsComponent extends ResultsComponentDirective implement
                     this._resultElement.addExtraResult(lbl, er);
 
                     if (this.isSectionLevel(k)) {
-                        this._sectionCanvas.addLevel(er, k + " = " + this.formattedValue(er), SectionResultsComponent.labelColors[k]);
+                        this._sectionCanvasComponent.addLevel(er, k + " = " + this.formattedValue(er), SectionResultsComponent.labelColors[k]);
                     }
                 }
             }
 
             // ajout du tirant d'eau saisi
             const valY = this._results.result.sourceNub.getParameter("Y").singleValue;
-            this._sectionCanvas.addLevel(valY, "Y = " + this.formattedValue(valY), SectionResultsComponent.labelColors["Y"]);
+            this._sectionCanvasComponent.addLevel(valY, "Y = " + this.formattedValue(valY), SectionResultsComponent.labelColors["Y"]);
 
             // wait just a little to draw, in case this._sectionCanvas.size was changed above (1st run)
             setTimeout(() => {
                 if (this._results && this._results.section) {
-                    this._sectionCanvas.section = this._results.section;
+                    this._sectionCanvasComponent.section = this._results.section;
                 }
             }, 100);
-
-            return true;
         }
-        return false;
-    }
 
-    public getResultClass(i: number) {
-        // tslint:disable-next-line:no-bitwise
-        return "result_id_" + String(i & 1);
+        let canvasUpdated = (! this.hasResults || this._sectionCanvasComponent !== undefined);
+        return superUpdated && canvasUpdated;
     }
 
     public exportAsImage(element: HTMLDivElement) {
@@ -155,10 +141,10 @@ export class SectionResultsComponent extends ResultsComponentDirective implement
 
     /** redraw canvas on fullscreen state change (scale drawing) */
     public fullscreenChange(isFullscreen: boolean) {
-        this._sectionCanvas.size = this.getContainerSize(! isFullscreen);
-        this.previousContainerSize = this._sectionCanvas.size;
+        this._sectionCanvasComponent.size = this.getContainerSize(! isFullscreen);
+        this.previousContainerSize = this._sectionCanvasComponent.size;
         setTimeout(() => {
-            this._sectionCanvas.draw();
+            this._sectionCanvasComponent.draw();
         }, 100);
     }
 
@@ -173,7 +159,7 @@ export class SectionResultsComponent extends ResultsComponentDirective implement
         // when going back from fullscreen mode, container size tends to be
         // too high for whatever reason; use originalSize on this purpose
         if (useOriginalSize) {
-            size = Math.min(size, this._sectionCanvas.originalSize);
+            size = Math.min(size, this._sectionCanvasComponent.originalSize);
         }
         return size;
     }
diff --git a/src/app/components/verificateur-results/verificateur-results.component.html b/src/app/components/verificateur-results/verificateur-results.component.html
new file mode 100644
index 0000000000000000000000000000000000000000..dbe866617be9e420673623c0abbf5c9024192533
--- /dev/null
+++ b/src/app/components/verificateur-results/verificateur-results.component.html
@@ -0,0 +1,8 @@
+<div class="container">
+    <log #generalLog [logTitle]="uitextGeneralLogTitle">log général</log>
+
+    <variable-results-selector [results]="verificateurResults" (indexChange)="variableIndexChanged()">
+    </variable-results-selector>
+
+    <log #iterationLog></log>
+</div>
diff --git a/src/app/components/verificateur-results/verificateur-results.component.scss b/src/app/components/verificateur-results/verificateur-results.component.scss
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/app/components/verificateur-results/verificateur-results.component.ts b/src/app/components/verificateur-results/verificateur-results.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8a00642ccd38ef4b33c1b0981c8109dd8fc7e0ea
--- /dev/null
+++ b/src/app/components/verificateur-results/verificateur-results.component.ts
@@ -0,0 +1,161 @@
+import { Component, ViewChild, DoCheck } from "@angular/core";
+
+import { cLog } from "jalhyd";
+
+import { LogComponent } from "../log/log.component";
+import { CalculatorResults } from "../../results/calculator-results";
+import { VariableResultsSelectorComponent } from "../variable-results-selector/variable-results-selector.component";
+import { I18nService } from "../../services/internationalisation.service";
+import { VerificateurResults } from "../../results/verificateur-results";
+import { ResultsComponentDirective } from '../fixedvar-results/results.component';
+
+@Component({
+    selector: "verificateur-results",
+    templateUrl: "./verificateur-results.component.html",
+    styleUrls: [
+        "./verificateur-results.component.scss"
+    ]
+})
+export class VerificateurResultsComponent extends ResultsComponentDirective implements DoCheck {
+
+    /** résultats non mis en forme */
+    private _verificateurResults: VerificateurResults;
+
+    /** true si les résultats doiventt être remis à jour */
+    private _doUpdate = false;
+
+    @ViewChild(VariableResultsSelectorComponent)
+    private variableResultsSelectorComponent: VariableResultsSelectorComponent;
+
+    @ViewChild("generalLog")
+    private generalLogComponent: LogComponent;
+
+    @ViewChild("iterationLog")
+    private iterationLogComponent: LogComponent;
+
+    constructor(
+        private i18nService: I18nService,
+    ) {
+        super();
+    }
+
+    public set results(rs: CalculatorResults[]) {
+        this._verificateurResults = undefined;
+        if (rs.length > 0 && rs[0] instanceof VerificateurResults) {
+            this._verificateurResults = rs[0] as VerificateurResults;
+        }
+        this.updateView();
+    }
+
+    /**
+     * update iteration log when the variable index changed (event sent by
+     * VariableResultsSelectorComponent); variable index is already set in
+     * verificateurResults at this time
+     */
+    public variableIndexChanged() {
+        this.updateView();
+    }
+
+    public updateView() {
+        if (this.iterationLogComponent) {
+            this.iterationLogComponent.log = undefined;
+        }
+        if (this.generalLogComponent) {
+            this.generalLogComponent.log = undefined;
+        }
+        if (this.variableResultsSelectorComponent) {
+            this.variableResultsSelectorComponent.results = undefined;
+        }
+        // set _doUpdate flag so that results are rebuilt on the next Angular display cycle
+        this._doUpdate = false;
+        if (this._verificateurResults !== undefined) {
+            this._doUpdate = this._doUpdate || this._verificateurResults.hasResults || this._verificateurResults.hasLog;
+        }
+    }
+
+    public ngDoCheck() {
+        if (this._doUpdate) {
+            this._doUpdate = !this.updateResults();
+        }
+    }
+
+    /*
+     * Retourne les messages à afficher dans le composant de log global, au dessus
+     * du sélecteur d'itération : messages globaux du Verificateur
+     */
+    private get globalLog(): cLog {
+        const l = new cLog();
+        if (this._verificateurResults && this._verificateurResults.result && this._verificateurResults.result.hasGlobalLog()) {
+            l.addLog(this._verificateurResults.result.globalLog);
+        }
+        return l;
+    }
+
+    /**
+     * Retourne les messages à afficher dans le composant de log "du bas" : logs de l'itération
+     * en cours (messages non-globaux du Vérificateur et eds Espèce), que le résultat varie ou non
+     */
+    private get iterationLog(): cLog {
+        const l = new cLog();
+        if (this._verificateurResults) {
+            // = 0 lorsque rien ne varie
+            const vi = this._verificateurResults.variableIndex;
+            // log du Verificateur pour l'itération en cours
+            if (
+                this._verificateurResults.result
+                && this._verificateurResults.result.hasResultElements()
+                && this._verificateurResults.result.resultElements[vi]
+                && this._verificateurResults.result.resultElements[vi].hasLog()
+            ) {
+                l.addLog(this._verificateurResults.result.resultElements[vi].log);
+            }
+            // logs des Espece pour l'itération en cours
+            for (const er of this._verificateurResults.especeResults) {
+                if (er && er.hasResultElements() && er.resultElements[vi].hasLog()) {
+                    l.addLog(er.resultElements[vi].log);
+                }
+            }
+        }
+        return l;
+    }
+
+    /**
+     * met à jour l'affichage des résultats
+     * @returns true si les résultats ont pu être mis à jour
+     */
+    private updateResults() {
+        let selectorUpdated: boolean;
+
+        // results or not, there might be a log
+        const logUpdated = (this.iterationLogComponent !== undefined || this.generalLogComponent !== undefined); // gne ?
+        if (logUpdated) {
+            // order of logs is important !
+            this.iterationLogComponent.log = this.iterationLog;
+            this.generalLogComponent.log = this.globalLog;
+        }
+
+        if (this.hasResults) {
+            selectorUpdated = this.variableResultsSelectorComponent !== undefined;
+            if (selectorUpdated) {
+                this.variableResultsSelectorComponent.results = this._verificateurResults;
+            }
+        } else {
+            selectorUpdated = true;
+        }
+
+        return logUpdated && selectorUpdated;
+    }
+
+    public get verificateurResults() {
+        return this._verificateurResults;
+    }
+
+    public get hasResults(): boolean {
+        return this._verificateurResults && this._verificateurResults.hasResults;
+    }
+
+    public get uitextGeneralLogTitle(): string {
+        return this.i18nService.localizeText("INFO_TITREJOURNAL_GLOBAL");
+    }
+
+}
diff --git a/src/app/formulaire/definition/form-pab.ts b/src/app/formulaire/definition/form-pab.ts
index 723d0713a7e11c498e08e312533d0cb2bdd0f6b5..08bd3f1ab8a0626385ce4a4503d27cb9460e5296 100644
--- a/src/app/formulaire/definition/form-pab.ts
+++ b/src/app/formulaire/definition/form-pab.ts
@@ -82,7 +82,7 @@ export class FormulairePab extends FormulaireDefinition {
         return this._pabResults;
     }
 
-    public resetResults() {
+    public resetResults() { // @TODO why not resetFormResults() only ?
         this._pabResults.reset();
     }
 
diff --git a/src/app/formulaire/definition/form-verificateur.ts b/src/app/formulaire/definition/form-verificateur.ts
index a55e3357ef58420fb6873d8cc94751c94b267f73..2a46caf52b9c543a4a40bd7d23cdbd3004053f9a 100644
--- a/src/app/formulaire/definition/form-verificateur.ts
+++ b/src/app/formulaire/definition/form-verificateur.ts
@@ -1,13 +1,72 @@
-import { IObservable, Nub, Verificateur } from "jalhyd";
+import { IObservable, Nub, Verificateur, Result } from "jalhyd";
 
 import { SelectFieldCustom } from "../elements/select-field-custom";
 import { FormulaireFixedVar } from "./form-fixedvar";
+import { VerificateurResults } from "../../results/verificateur-results";
+import { CalculatorResults } from "../../results/calculator-results";
 
 /**
  * Formulaire pour les Vérificateurs
  */
 export class FormulaireVerificateur extends FormulaireFixedVar {
 
+    protected _verificateurResults: VerificateurResults;
+
+    constructor() {
+        super();
+        this._verificateurResults = new VerificateurResults();
+    }
+
+    public get verificateurNub(): Verificateur {
+        return this.currentNub as Verificateur;
+    }
+
+    public get verificateurResults() {
+        return this._verificateurResults;
+    }
+
+    protected compute() {
+        this.runNubCalc(this.currentNub);
+        // reset variable index to avoid trying to access an index > 0 when nothing varies
+        const mrcr = this.verificateurResults;
+        mrcr.variableIndex = 0;
+
+        this.reaffectResultComponents();
+    }
+
+    protected reaffectResultComponents() {
+        const ver: Verificateur = (this.currentNub as Verificateur);
+        // const varParams: NgParameter[] = this.getVariatedParameters();
+
+        // résultat de calcul de la passe à macrorugo complexe
+        const vr = this.verificateurResults;
+        // vr.calculatedParameter = computedParam;
+        vr.result = ver.result;
+        /* if (varParams) {
+            vr.variatedParameters = varParams;
+        } */
+        vr.variatedParameters = [];
+
+        // résultat de chaque Espece
+        const er: Result[] = [];
+        for (const sp of ver.species) {
+            er.push(sp.result);
+        }
+        vr.especeResults = er;
+    }
+
+    public resetFormResults() {
+        this._verificateurResults.reset();
+    }
+
+    public get results(): CalculatorResults[] {
+        return [ this._verificateurResults ];
+    }
+
+    public get hasResults(): boolean {
+        return this._verificateurResults.hasResults;
+    }
+
     // interface Observer
 
     public update(sender: IObservable, data: any) {
diff --git a/src/app/results/param-calc-results.ts b/src/app/results/param-calc-results.ts
index 62cd26f84b8ca682534471461b54e08fe38f259d..6a24188484a22305e7e9ba15c2be440f351d13a0 100644
--- a/src/app/results/param-calc-results.ts
+++ b/src/app/results/param-calc-results.ts
@@ -20,7 +20,7 @@ export abstract class CalculatedParamResults extends CalculatorResults {
     /** custom variables order for results tables  */
     public variablesOrder: string[] = [];
 
-    protected reset() {
+    public reset() {
         this._calculatedParam = undefined;
         this.calculatedParameterHeader = undefined;
         this.result = undefined;
diff --git a/src/app/results/verificateur-results.ts b/src/app/results/verificateur-results.ts
new file mode 100644
index 0000000000000000000000000000000000000000..04f686404246413a3bbf44dcdf59b5dba6cc7f57
--- /dev/null
+++ b/src/app/results/verificateur-results.ts
@@ -0,0 +1,14 @@
+import { MultiDimensionResults } from "./multidimension-results";
+
+import { Result } from 'jalhyd';
+
+export class VerificateurResults extends MultiDimensionResults {
+
+    /** résultats des modules Espece */
+    public especeResults: Result[];
+
+    public reset() {
+        super.reset();
+        this.especeResults = [];
+    }
+}