diff --git a/src/session_nub.ts b/src/session_nub.ts
index d1f320d1505063d53fcfcd41ea0d9d2c8aaa32cf..fb9a96d36282d79890ee6bb5170fb025673948f2 100644
--- a/src/session_nub.ts
+++ b/src/session_nub.ts
@@ -30,12 +30,28 @@ export class Props implements IObservable {
         return this._props[key];
     }
 
+    /**
+     * notification de changement de la valeur d'une propriété
+     * @param prop nom de la propriété modifiée
+     * @param val nouvelle valeur
+     * @param sender objet ayant changé la valeur
+     */
     private notifyPropChange(prop: string, val: any, sender: any) {
         this.notifyObservers({
             "action": "propertyChange",
             "name": prop,
             "value": val
-        }, sender)
+        }, sender);
+    }
+
+    /**
+     * notification de changement de la valeur de toutes les propriétés
+     * @param sender objet ayant changé les valeurs
+     */
+    private notifyPropsChange(sender: any) {
+        this.notifyObservers({
+            "action": "propertiesChange",
+        }, sender);
     }
 
     public setPropValue(key: string, val: any, sender?: any): boolean {
@@ -48,6 +64,49 @@ export class Props implements IObservable {
         return changed;
     }
 
+    /**
+     * compare 2 objets (clés et valeurs)
+     * @return true s'il existe une différence
+     */
+    private compareObjects(o1: { [key: string]: any }, o2: { [key: string]: any }) {
+        const oldKeys: string[] = Object.keys(o1).sort();
+        const newKeys: string[] = Object.keys(o2).sort();
+
+        // nombre de clés
+        let changed = oldKeys.length !== newKeys.length;
+        if (changed)
+            return true;
+
+        // nom des clés
+        for (const i in oldKeys)
+            if (oldKeys[i] !== newKeys[i])
+                return true;
+
+        // valeurs
+        for (const i in o1)
+            if (o1[i] != o2[i])
+                return true;
+
+        return false;
+    }
+
+    /**
+     * fixe la valeur de toutes les propriétés
+     * @param props nouvelles valeurs
+     * @param sender objet modificateur
+     */
+    public setProps(props: {}, sender?: any) {
+        if (props instanceof Props)
+            var p = props.props;
+        else
+            p = props;
+        const changed = this.compareObjects(this._props, p);
+        if (changed) {
+            this._props = p;
+            this.notifyPropsChange(sender);
+        }
+    }
+
     public get props() {
         return this._props;
     }