diff --git a/src/nub_factory.ts b/src/nub_factory.ts
index 56a6a1287fde232880e405d22be2e21d9bf32455..e41e50dfe529c598eb9dce61c4cdeca7c3d2cf3f 100644
--- a/src/nub_factory.ts
+++ b/src/nub_factory.ts
@@ -86,6 +86,24 @@ export class NubFactory {
         }
     }
 
+    private deleteStructureNub(n: Nub) {
+        if (n instanceof Structure) {
+            for (const sn of this._session)
+                if (sn.nub instanceof ParallelStructure) {
+                    const psn = sn.nub as ParallelStructure;
+                    let i = 0;
+                    for (const st of psn.structures) {
+                        if (st.uid == n.uid) {
+                            psn.deleteStructure(i);
+                            return;
+                        }
+                        i++;
+                    }
+                }
+            throw new Error(`NubFactory.deleteStructureNub() : la structure (uid ${n.uid}) à supprimer n'a pas été trouvée`);
+        }
+    }
+
     /**
      * remplace un SessionNub par un nouveau
      * @param sn SessionNub à remplacer
@@ -107,6 +125,72 @@ export class NubFactory {
         return undefined;
     }
 
+    /**
+     *  recherche du nub ouvrages parallèles possédant l'ouvrage donné
+     */
+    private findParallelStructureWithNub(n: Nub) {
+        for (const s of this._session)
+            if (s.nub instanceof ParallelStructure) {
+                const res = s.nub as ParallelStructure;
+                if (res.hasStructure(n))
+                    return res;
+            }
+
+        return undefined;
+    }
+
+    /**
+     * déplace un SessionNub associé à un nub Structure d'une position vers le début de la liste de structures
+     * @param sn SessionNub à remplacer
+     * @param params propriété du nouveau SessionNub
+     */
+    public moveStructureNubUp(sn: SessionNub) {
+        const psn = this.findParallelStructureWithNub(sn.nub);
+
+        // déplacement
+        if (psn) {
+            let i = 0;
+            for (const n of this._session) {
+                if (n.uid == sn.uid && i > 0) {
+                    const n = this._session[i - 1];
+                    this._session[i - 1] = this._session[i];
+                    this._session[i] = n;
+                    psn.moveStructureUp(sn.nub as Structure);
+                    return;
+                }
+                i++;
+            }
+        }
+
+        throw new Error(`NubFactory.moveStructureNubUp() : la structure (uid ${sn.uid}) à déplacer n'a pas été trouvée`);
+    }
+
+    /**
+     * déplace un SessionNub associé à un nub Structure d'une position vers la fin de la liste de structures
+     * @param sn SessionNub à remplacer
+     * @param params propriété du nouveau SessionNub
+     */
+    public moveStructureNubDown(sn: SessionNub) {
+        const psn = this.findParallelStructureWithNub(sn.nub);
+
+        // déplacement
+        if (psn) {
+            let i = 0;
+            for (const n of this._session) {
+                if (n.uid == sn.uid && i < this._session.length - 1) {
+                    const n = this._session[i];
+                    this._session[i] = this._session[i + 1];
+                    this._session[i + 1] = n;
+                    psn.moveStructureDown(sn.nub as Structure);
+                    return;
+                }
+                i++;
+            }
+        }
+
+        throw new Error(`NubFactory.moveStructureNubDown() : la structure (uid ${sn.uid}) à déplacer n'a pas été trouvée`);
+    }
+
     /**
      * créé un Nub
      * @param calcType type de Nub
@@ -205,6 +289,19 @@ export class NubFactory {
         }
     }
 
+    public deleteSessionNub(sn: SessionNub) {
+        let i = 0;
+        for (const n of this._session) {
+            if (n.uid == sn.uid) {
+                this._session.splice(i, 1);
+                this.deleteStructureNub(sn.nub);
+                return;
+            }
+            i++;
+        }
+        throw new Error(`NubFactory.deleteSessionNub() : le SessionNub (uid ${sn.uid}) à supprimer n'a pas été trouvé`);
+    }
+
     private createSection(nt: ComputeNodeType): acSection {
         switch (nt) {
             case ComputeNodeType.None: // pour les paramètres communs, n'importe quelle section convient
diff --git a/src/structure/parallel_structure.ts b/src/structure/parallel_structure.ts
index d4dc9749f93e70512ae7b5b4500f012226feaa5b..42327a247dd37de76297e7d543afa1a41121256d 100644
--- a/src/structure/parallel_structure.ts
+++ b/src/structure/parallel_structure.ts
@@ -58,9 +58,13 @@ export class ParallelStructure extends Nub {
     /**
      * Ajout d'une structure en parallèle
      * @param structure La structure à rajouter
+     * @param after position après laquelle insérer la structure, à la fin sinon
      */
-    public addStructure(structure: Structure) {
-        this.structures.push(structure);
+    public addStructure(structure: Structure, after?: number) {
+        if (after !== undefined)
+            this.structures.splice(after + 1, 0, structure);
+        else
+            this.structures.push(structure);
     }
 
     /**
@@ -76,6 +80,48 @@ export class ParallelStructure extends Nub {
         }
     }
 
+    /**
+     * @return true si la structure donnée est dans la liste
+     */
+    public hasStructure(structure: Nub): boolean {
+        for (const s of this.structures)
+            if (s.uid == structure.uid)
+                return true;
+        return false;
+    }
+
+    /**
+     * déplace une structure d'une position vers le début de la liste
+     */
+    public moveStructureUp(structure: Structure) {
+        let i = 0;
+        for (const s of this.structures) {
+            if (s.uid == structure.uid && i > 0) {
+                const t = this.structures[i - 1];
+                this.structures[i - 1] = this.structures[i];
+                this.structures[i] = t;
+                return;
+            }
+            i++;
+        }
+    }
+
+    /**
+     * déplace une structure d'une position vers la fin de la liste
+     */
+    public moveStructureDown(structure: Structure) {
+        let i = 0;
+        for (const s of this.structures) {
+            if (s.uid == structure.uid && i < this.structures.length - 1) {
+                const t = this.structures[i];
+                this.structures[i] = this.structures[i + 1];
+                this.structures[i + 1] = t;
+                return;
+            }
+            i++;
+        }
+    }
+
     /**
      * Supprime une structure hydraulique
      * @param index numéro de la structure dans le tableau