diff --git a/src/app/app.component.ts b/src/app/app.component.ts
index 4df3529cb012465ec1d7850dabf5b962cd8f4b83..938ba9907363bad1d3a2c1e3bbe92e009bb51d74 100644
--- a/src/app/app.component.ts
+++ b/src/app/app.component.ts
@@ -2,9 +2,10 @@ import { Component, ApplicationRef, OnInit, OnDestroy } from '@angular/core';
 //import { MdDialog } from '@angular/material';
 import { Router } from '@angular/router';
 
+import { Observer } from "jalhyd";
+
 import { environment } from '../environments/environment';
 import { InternationalisationService, Language, LanguageCode } from './services/internationalisation/internationalisation.service';
-import { Observer } from './services/observer';
 import { ErrorService } from './services/error/error.service';
 // import { AlertDialog } from './components/alert-dialog/alert-dialog.component';
 import { FormulaireService } from './services/formulaire/formulaire.service';
diff --git a/src/app/components/app-setup/app-setup.component.ts b/src/app/components/app-setup/app-setup.component.ts
index 0c267b4ec1fda6eb5f53c561d05c12c58d2d1b93..b8a07cf7cd0f662b2558eb158aaed7da8ff2ef4d 100644
--- a/src/app/components/app-setup/app-setup.component.ts
+++ b/src/app/components/app-setup/app-setup.component.ts
@@ -1,11 +1,10 @@
 import { Component, ViewChild } from "@angular/core";
 
-import { BaseParam, ParamDomainValue } from "jalhyd";
+import { BaseParam, ParamDomainValue, Observer } from "jalhyd";
 
 import { ApplicationSetupService } from '../../services/app-setup/app-setup.service';
 import { InternationalisationService, Language, LanguageCode } from '../../services/internationalisation/internationalisation.service';
 import { NgBaseParam, BaseParamInputComponent } from "../base-param-input/base-param-input.component";
-import { Observer } from "../../services/observer";
 import { BaseComponent } from "../base/base.component";
 
 @Component({
diff --git a/src/app/components/base-param-input/base-param-input.component.ts b/src/app/components/base-param-input/base-param-input.component.ts
index f37d01bbb474ac5d264b9c0c66ddbcd562262107..bb60d971a867d3d9ca25a61b9cde615589e8a312 100644
--- a/src/app/components/base-param-input/base-param-input.component.ts
+++ b/src/app/components/base-param-input/base-param-input.component.ts
@@ -3,10 +3,9 @@
 import { Component, Input, forwardRef, OnInit, DoCheck, ChangeDetectorRef } from "@angular/core";
 import { ControlValueAccessor, NG_VALUE_ACCESSOR, NG_VALIDATORS, FormControl } from "@angular/forms";
 
-import { BaseParam, NumericalString, Message, ParamDomain, ParamDomainValue } from "jalhyd";
+import { BaseParam, NumericalString, Message, ParamDomain, ParamDomainValue, Observable } from "jalhyd";
 
 import { InternationalisationService, LanguageCode } from "../../services/internationalisation/internationalisation.service";
-import { Observable } from "../../services/observer";
 import { GenericInputComponent } from "../generic-input/generic-input.component";
 
 export class NgBaseParam extends Observable {
diff --git a/src/app/components/generic-calculator/calculator.component.ts b/src/app/components/generic-calculator/calculator.component.ts
index 340afd5aee22c430246f41b18defa4075ddb18ba..60d4ea1b4beb85ec0ee5e9583ae4ead1db631663 100644
--- a/src/app/components/generic-calculator/calculator.component.ts
+++ b/src/app/components/generic-calculator/calculator.component.ts
@@ -1,12 +1,13 @@
 import { Component, OnInit, DoCheck, OnDestroy, ViewChild, ViewChildren, QueryList } from "@angular/core";
 import { ActivatedRoute } from '@angular/router';
 
+import { Observer } from "jalhyd";
+
 import { FormulaireService } from "../../services/formulaire/formulaire.service";
 import { InternationalisationService } from "../../services/internationalisation/internationalisation.service";
 import { FieldSet } from "../../formulaire/fieldset";
 import { FormulaireDefinition } from "../../formulaire/definition/form-definition";
 import { CalculatorResultsComponent } from "../../components/calculator-results/calculator-results.component";
-import { Observer } from "../../services/observer";
 import { Subscription } from "rxjs/Subscription";
 import { FieldSetComponent } from "../field-set/field-set.component";
 import { BaseComponent } from "../base/base.component";
diff --git a/src/app/components/ngparam-input/ngparam-input.component.ts b/src/app/components/ngparam-input/ngparam-input.component.ts
index 10e33c675ffb82d1998d72433a773198ffd5c76e..abce24cdfbdc44650ae0a0e7f389f8115023d526 100644
--- a/src/app/components/ngparam-input/ngparam-input.component.ts
+++ b/src/app/components/ngparam-input/ngparam-input.component.ts
@@ -3,12 +3,11 @@
 import { Component, Input, forwardRef, OnInit, DoCheck, ChangeDetectorRef } from "@angular/core";
 import { ControlValueAccessor, NG_VALUE_ACCESSOR, NG_VALIDATORS, FormControl } from "@angular/forms";
 
-import { NumericalString, Message } from "jalhyd";
+import { NumericalString, Message, Observer } from "jalhyd";
 
 import { InternationalisationService } from "../../services/internationalisation/internationalisation.service";
 import { NgParameter } from "../../formulaire/ngparam";
 import { GenericInputComponent } from "../generic-input/generic-input.component";
-import { Observer } from "../../services/observer";
 
 @Component({
     selector: "ngparam-input",
diff --git a/src/app/components/results-graph/graph-type.component.ts b/src/app/components/results-graph/graph-type.component.ts
index e3b3c033325a2ab4c787a75c84b82bb1b1329254..1dcece55e702522aca3f584ccd11f44ce9668ae7 100644
--- a/src/app/components/results-graph/graph-type.component.ts
+++ b/src/app/components/results-graph/graph-type.component.ts
@@ -1,8 +1,9 @@
 import { Component } from '@angular/core';
 
+import { Observable, IObservable, Observer } from "jalhyd";
+
 import { GenericSelectComponent } from '../generic-select/generic-select.component';
 import { GraphType } from "../../results/var-results";
-import { Observable, IObservable, Observer } from '../../services/observer';
 
 @Component({
     selector: "graph-type",
diff --git a/src/app/components/results-graph/results-graph.component.ts b/src/app/components/results-graph/results-graph.component.ts
index 1d47ecfbc2be1d0879fef57d0d024a0bf98382c2..9744b769ff67512526085d6b23c5b62ca7831c53 100644
--- a/src/app/components/results-graph/results-graph.component.ts
+++ b/src/app/components/results-graph/results-graph.component.ts
@@ -1,8 +1,9 @@
 import { Component, ViewChild, AfterContentInit } from '@angular/core';
 
+import { Observer } from "jalhyd";
+
 import { VarResults, GraphType } from "../../results/var-results";
 import { GraphTypeSelectComponent } from './graph-type.component';
-import { Observer } from '../../services/observer';
 
 @Component({
     selector: 'results-graph',
diff --git a/src/app/formulaire/definition/concrete/form-lechapt-calmon.ts b/src/app/formulaire/definition/concrete/form-lechapt-calmon.ts
index 692684181fc0e609a2fe23cd0b7b3443d4c0022c..3e2af2552626e2044df1628fea0f53ffd5eaac81 100644
--- a/src/app/formulaire/definition/concrete/form-lechapt-calmon.ts
+++ b/src/app/formulaire/definition/concrete/form-lechapt-calmon.ts
@@ -1,4 +1,4 @@
-import { CalculatorType, ComputeNodeType } from "jalhyd";
+import { CalculatorType, ComputeNodeType, Observer } from "jalhyd";
 
 import { FormResultFixedVar } from "../form-result-fixedvar";
 import { FormDefFixedVar } from "../form-def-fixedvar";
@@ -6,7 +6,6 @@ import { FormComputeLechaptCalmon } from "../form-compute-lechapt-calmon";
 import { FormulaireDefinition } from "../form-definition";
 import { CalculatorResults } from "../../../results/calculator-results";
 import { FormDefParamToCalculate } from "../form-def-paramcalc";
-import { Observer } from "../../../services/observer";
 import { SelectField } from "../../select-field";
 
 export class FormulaireLechaptCalmon extends FormulaireDefinition implements Observer {
diff --git a/src/app/formulaire/definition/form-def-section.ts b/src/app/formulaire/definition/form-def-section.ts
index b5a845f0ea28e624de3265a90c43b5e0d56c8fd2..519e1f48201edbffe4ae41fd040bcd92758dc597 100644
--- a/src/app/formulaire/definition/form-def-section.ts
+++ b/src/app/formulaire/definition/form-def-section.ts
@@ -1,11 +1,11 @@
 import {
     ComputeNodeType, ParamsSectionTrapez, cSnTrapez, ParamsSectionRectang, cSnRectang,
-    ParamsSectionCirc, cSnCirc, ParamsSectionPuiss, cSnPuiss, acSection, ParamsEquation
+    ParamsSectionCirc, cSnCirc, ParamsSectionPuiss, cSnPuiss, acSection, ParamsEquation,
+    Observer
 } from "jalhyd";
 
 import { SelectField } from "../select-field";
 import { Field } from "../field";
-import { IObservable, Observer } from "../../services/observer";
 import { NgParameter, ParamRadioConfig } from "../ngparam";
 import { FormulaireDefinition } from "./form-definition";
 import { FieldSet } from "../fieldset";
diff --git a/src/app/formulaire/fieldset.ts b/src/app/formulaire/fieldset.ts
index 60885ad864db1fbc8c4a3c68d1951f4b39e0d4bd..76a23bd47cb704717a2cbe7d76bd5e718aea5cdf 100644
--- a/src/app/formulaire/fieldset.ts
+++ b/src/app/formulaire/fieldset.ts
@@ -1,4 +1,4 @@
-import { CalculatorType, ComputeNodeType, ParamDefinition, LoiDebit, StructureType, Props, SessionNub, StructureProperties } from "jalhyd";
+import { CalculatorType, ComputeNodeType, ParamDefinition, LoiDebit, StructureType, Props, SessionNub, StructureProperties, Observer } from "jalhyd";
 
 import { FormulaireElement } from "./formulaire-element";
 import { Dependency } from "./dependency/dependency";
@@ -10,7 +10,6 @@ import { NgParameter, ParamRadioConfig } from "./ngparam";
 import { ServiceFactory } from "../services/service-factory";
 import { ParamService } from "../services/param/param.service";
 import { FormulaireDefinition } from "./definition/form-definition";
-import { Observer } from "../services/observer";
 import { StringMap } from "../stringmap";
 import { FieldsetContainer } from "./fieldset-container";
 import { FormulaireNode } from "./formulaire-node";
diff --git a/src/app/formulaire/formulaire-node.ts b/src/app/formulaire/formulaire-node.ts
index 7957b5e0416b6246dda21310c2d462111f47cdfc..b323f214b94ed098738c494791062863fe4e4727 100644
--- a/src/app/formulaire/formulaire-node.ts
+++ b/src/app/formulaire/formulaire-node.ts
@@ -1,6 +1,4 @@
-import { JalhydObject } from "jalhyd"
-
-import { IObservable, Observer, Observable } from "../services/observer";
+import { JalhydObject, IObservable, Observer, Observable } from "jalhyd"
 
 /**
  * représentation sous forme d'arbre du formulaire et de ses éléments
diff --git a/src/app/formulaire/select-field.ts b/src/app/formulaire/select-field.ts
index cf136910af11bf5e9b16ca1c6ad3742ca8c4fcfd..f6e4bfb7d7aba7e9d17a1f07674c322f19e91483 100644
--- a/src/app/formulaire/select-field.ts
+++ b/src/app/formulaire/select-field.ts
@@ -6,7 +6,6 @@ import { Dependency } from "./dependency/dependency";
 import { DependencyConditionType } from "./dependency/dependency-condition";
 import { ValueDependencyCondition } from "./dependency/value-dependency-condition";
 import { StringMap } from "../stringmap";
-import { IObservable, Observable, Observer } from "../services/observer";
 import { FormulaireNode } from "./formulaire-node";
 
 export class SelectField extends Field {
diff --git a/src/app/services/error/error.service.ts b/src/app/services/error/error.service.ts
index 2625cc74f2c50b861d330594f395aaba64a36974..128ce234fcef7622d0c34702ec65938531463762 100644
--- a/src/app/services/error/error.service.ts
+++ b/src/app/services/error/error.service.ts
@@ -1,5 +1,6 @@
 import { Injectable } from '@angular/core';
-import { Observable } from '../observer';
+
+import { Observable } from "jalhyd";
 
 @Injectable()
 export class ErrorService extends Observable {
diff --git a/src/app/services/formulaire/formulaire.service.ts b/src/app/services/formulaire/formulaire.service.ts
index 2aac9462ee12ac7bcc6367dcdb5bac68df7a5aff..3283971c47661d127a07f30f9a95c0ed61233b47 100644
--- a/src/app/services/formulaire/formulaire.service.ts
+++ b/src/app/services/formulaire/formulaire.service.ts
@@ -4,7 +4,7 @@ import { Observable as rxObservable } from "rxjs/Observable";
 import "rxjs/add/operator/toPromise";
 import { decode } from "he";
 
-import { CalculatorType, EnumEx } from "jalhyd";
+import { CalculatorType, EnumEx, Observable } from "jalhyd";
 
 import { ServiceFactory } from "../service-factory";
 import { HttpService } from "../../services/http/http.service";
@@ -15,7 +15,6 @@ import { InputField } from "../../formulaire/input-field";
 import { SelectField } from "../../formulaire/select-field";
 import { CheckField } from "../../formulaire/check-field";
 import { StringMap } from "../../stringmap";
-import { Observable } from "../observer";
 import { FormulaireConduiteDistributrice } from "../../formulaire/definition/concrete/form-cond-distri";
 import { FormulaireLechaptCalmon } from "../../formulaire/definition/concrete/form-lechapt-calmon";
 import { FormulaireSectionParametree } from "../../formulaire/definition/concrete/form-section-parametree";
diff --git a/src/app/services/internationalisation/internationalisation.service.ts b/src/app/services/internationalisation/internationalisation.service.ts
index 28edb2f145a31aa5810944d0ab5ea7545a41202f..4b91abba1cf1dd332fac8427d9139a539d1ae61f 100644
--- a/src/app/services/internationalisation/internationalisation.service.ts
+++ b/src/app/services/internationalisation/internationalisation.service.ts
@@ -1,10 +1,9 @@
 import { Injectable } from '@angular/core';
 import { Response } from '@angular/http';
 
-import { Message, MessageCode } from "jalhyd";
+import { Message, MessageCode, Observable } from "jalhyd";
 
 import { HttpService } from "../http/http.service";
-import { Observable } from "../observer";
 import { StringMap } from "../../stringmap";
 
 /*
diff --git a/src/app/services/observer.ts b/src/app/services/observer.ts
deleted file mode 100644
index b7ecdb17cb2843bf61eb680f1f6c65152b9fae7f..0000000000000000000000000000000000000000
--- a/src/app/services/observer.ts
+++ /dev/null
@@ -1,53 +0,0 @@
-export interface Observer {
-    update(sender: any, data: any): void;
-}
-
-export interface IObservable {
-    /**
-     * ajoute un observateur à la liste
-     */
-    addObserver(o: Observer);
-
-    /**
-     * supprime un observateur de la liste
-     */
-    removeObserver(o: Observer);
-
-    /**
-     * notifie un événement aux observateurs
-     */
-    notifyObservers(data: any, sender?: any);
-}
-
-export class Observable implements IObservable {
-    private _observers: Observer[];
-
-    constructor() {
-        this._observers = [];
-    }
-
-    /**
-     * ajoute un observateur à la liste
-     */
-    public addObserver(o: Observer) {
-        if (this._observers.indexOf(o) == -1)
-            this._observers.push(o);
-    }
-
-    /**
-     * supprime un observateur de la liste
-     */
-    public removeObserver(o: Observer) {
-        this._observers = this._observers.filter(a => a !== o);
-    }
-
-    /**
-     * notifie un événement aux observateurs
-     */
-    public notifyObservers(data: any, sender?: any) {
-        if (sender == undefined)
-            sender = this;
-        for (let o of this._observers)
-            o.update(sender, data);
-    }
-}