diff --git a/.eslintrc.yml b/.eslintrc.yml
deleted file mode 100644
index 0b382039586ae1303994e343dfca336fe46b0bdd..0000000000000000000000000000000000000000
--- a/.eslintrc.yml
+++ /dev/null
@@ -1,188 +0,0 @@
-env:
-  browser: true
-  es6: true
-
-# See https://github.com/OCA/odoo-community.org/issues/37#issuecomment-470686449
-parserOptions:
-  ecmaVersion: 2022
-
-overrides:
-  - files:
-      - "**/*.esm.js"
-    parserOptions:
-      sourceType: module
-
-# Globals available in Odoo that shouldn't produce errorings
-globals:
-  _: readonly
-  $: readonly
-  fuzzy: readonly
-  jQuery: readonly
-  moment: readonly
-  odoo: readonly
-  openerp: readonly
-  owl: readonly
-  luxon: readonly
-
-# Styling is handled by Prettier, so we only need to enable AST rules;
-# see https://github.com/OCA/maintainer-quality-tools/pull/618#issuecomment-558576890
-rules:
-  accessor-pairs: warn
-  array-callback-return: warn
-  callback-return: warn
-  capitalized-comments:
-    - warn
-    - always
-    - ignoreConsecutiveComments: true
-      ignoreInlineComments: true
-  complexity:
-    - warn
-    - 15
-  constructor-super: warn
-  dot-notation: warn
-  eqeqeq: warn
-  global-require: warn
-  handle-callback-err: warn
-  id-blacklist: warn
-  id-match: warn
-  init-declarations: error
-  max-depth: warn
-  max-nested-callbacks: warn
-  max-statements-per-line: warn
-  no-alert: warn
-  no-array-constructor: warn
-  no-caller: warn
-  no-case-declarations: warn
-  no-class-assign: warn
-  no-cond-assign: error
-  no-const-assign: error
-  no-constant-condition: warn
-  no-control-regex: warn
-  no-debugger: error
-  no-delete-var: warn
-  no-div-regex: warn
-  no-dupe-args: error
-  no-dupe-class-members: error
-  no-dupe-keys: error
-  no-duplicate-case: error
-  no-duplicate-imports: error
-  no-else-return: warn
-  no-empty-character-class: warn
-  no-empty-function: error
-  no-empty-pattern: error
-  no-empty: warn
-  no-eq-null: error
-  no-eval: error
-  no-ex-assign: error
-  no-extend-native: warn
-  no-extra-bind: warn
-  no-extra-boolean-cast: warn
-  no-extra-label: warn
-  no-fallthrough: warn
-  no-func-assign: error
-  no-global-assign: error
-  no-implicit-coercion:
-    - warn
-    - allow: ["~"]
-  no-implicit-globals: warn
-  no-implied-eval: warn
-  no-inline-comments: warn
-  no-inner-declarations: warn
-  no-invalid-regexp: warn
-  no-irregular-whitespace: warn
-  no-iterator: warn
-  no-label-var: warn
-  no-labels: warn
-  no-lone-blocks: warn
-  no-lonely-if: error
-  no-mixed-requires: error
-  no-multi-str: warn
-  no-native-reassign: error
-  no-negated-condition: warn
-  no-negated-in-lhs: error
-  no-new-func: warn
-  no-new-object: warn
-  no-new-require: warn
-  no-new-symbol: warn
-  no-new-wrappers: warn
-  no-new: warn
-  no-obj-calls: warn
-  no-octal-escape: warn
-  no-octal: warn
-  no-param-reassign: warn
-  no-path-concat: warn
-  no-process-env: warn
-  no-process-exit: warn
-  no-proto: warn
-  no-prototype-builtins: warn
-  no-redeclare: warn
-  no-regex-spaces: warn
-  no-restricted-globals: warn
-  no-restricted-imports: warn
-  no-restricted-modules: warn
-  no-restricted-syntax: warn
-  no-return-assign: error
-  no-script-url: warn
-  no-self-assign: warn
-  no-self-compare: warn
-  no-sequences: warn
-  no-shadow-restricted-names: warn
-  no-shadow: warn
-  no-sparse-arrays: warn
-  no-sync: warn
-  no-this-before-super: warn
-  no-throw-literal: warn
-  no-undef-init: warn
-  no-undef: error
-  no-unmodified-loop-condition: warn
-  no-unneeded-ternary: error
-  no-unreachable: error
-  no-unsafe-finally: error
-  no-unused-expressions: error
-  no-unused-labels: error
-  no-unused-vars: error
-  no-use-before-define: error
-  no-useless-call: warn
-  no-useless-computed-key: warn
-  no-useless-concat: warn
-  no-useless-constructor: warn
-  no-useless-escape: warn
-  no-useless-rename: warn
-  no-void: warn
-  no-with: warn
-  operator-assignment: [error, always]
-  prefer-const: warn
-  radix: warn
-  require-yield: warn
-  sort-imports: warn
-  spaced-comment: [error, always]
-  strict: [error, function]
-  use-isnan: error
-  valid-jsdoc:
-    - warn
-    - prefer:
-        arg: param
-        argument: param
-        augments: extends
-        constructor: class
-        exception: throws
-        func: function
-        method: function
-        prop: property
-        return: returns
-        virtual: abstract
-        yield: yields
-      preferType:
-        array: Array
-        bool: Boolean
-        boolean: Boolean
-        number: Number
-        object: Object
-        str: String
-        string: String
-      requireParamDescription: false
-      requireReturn: false
-      requireReturnDescription: false
-      requireReturnType: false
-  valid-typeof: warn
-  yoda: warn
diff --git a/.gitignore b/.gitignore
index c9f42387ef7051b2a868a9361f4f3cb6d562d4ed..109270f27c2a80740fab3c0fbc084b9d938f964e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,6 +26,9 @@ var/
 *.eggs
 .copier-answers.yml
 
+# Windows installers
+*.msi
+
 # Debian packages
 *.deb
 
@@ -34,6 +37,7 @@ var/
 
 # MacOS packages
 *.dmg
+*.pkg
 
 # Installer logs
 pip-log.txt
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index f58f2c6608a042bb13f2c7559889e33bf3f46733..207e4c9037d15863a1efcc9bd98b6199792df472 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -5,7 +5,7 @@ exclude: |
   # Files and folders generated by bots, to avoid loops
   ^setup/|/static/description/index\.html$|
   # We don't want to mess with tool-generated files
-  .svg$|/tests/([^/]+/)?cassettes/|^.copier-answers.yml$|^.github/|
+  .svg$|/tests/([^/]+/)?cassettes/|^.copier-answers.yml$|^.github/|^eslint.config.cjs|^prettier.config.cjs|
   # Maybe reactivate this when all README files include prettier ignore tags?
   ^README\.md$|
   # Library files can have extraneous formatting (even minimized)
@@ -22,7 +22,7 @@ exclude: |
   (LICENSE.*|COPYING.*)
 default_language_version:
   python: python3
-  node: "16.17.0"
+  node: "22.9.0"
 repos:
   - repo: local
     hooks:
@@ -37,55 +37,52 @@ repos:
         name: en.po files cannot exist
         entry: found a en.po file
         language: fail
-        files:
-          '[a-zA-Z0-9_]*/i18n/en\.po$'
-          #  - repo: https://github.com/sbidoul/whool
-          #    rev: v0.5
-          #    hooks:
-          #      - id: whool-init
+        files: '[a-zA-Z0-9_]*/i18n/en\.po$'
   - repo: https://github.com/oca/maintainer-tools
-    rev: d5fab7ee87fceee858a3d01048c78a548974d935
+    rev: bf9ecb9938b6a5deca0ff3d870fbd3f33341fded
     hooks:
       # update the NOT INSTALLABLE ADDONS section above
       - id: oca-update-pre-commit-excluded-addons
       - id: oca-fix-manifest-website
         args: ["https://le-filament.com"]
-      - id: oca-gen-addon-readme
-        args:
-          - --addons-dir=.
-          - --branch=17.0
-          - --org-name=lefilament
-          - --repo-name=template_module
-          - --if-source-changed
-          - --keep-source-digest
-          - --convert-fragments-to-markdown
-      # - id: oca-gen-external-dependencies
   - repo: https://github.com/OCA/odoo-pre-commit-hooks
-    rev: v0.0.25
+    rev: v0.0.33
     hooks:
       - id: oca-checks-odoo-module
       - id: oca-checks-po
-  - repo: https://github.com/pre-commit/mirrors-prettier
-    rev: v2.7.1
+        args:
+          - --disable=po-pretty-format
+  - repo: local
     hooks:
       - id: prettier
         name: prettier (with plugin-xml)
-        additional_dependencies:
-          - "prettier@2.7.1"
-          - "@prettier/plugin-xml@2.2.0"
+        entry: prettier
         args:
-          - --plugin=@prettier/plugin-xml
+          - --write
+          - --list-different
+          - --ignore-unknown
+        types: [text]
         files: \.(css|htm|html|js|json|jsx|less|md|scss|toml|ts|xml|yaml|yml)$
-  - repo: https://github.com/pre-commit/mirrors-eslint
-    rev: v8.24.0
+        language: node
+        additional_dependencies:
+          - "prettier@3.3.3"
+          - "@prettier/plugin-xml@3.4.1"
+  - repo: local
     hooks:
       - id: eslint
-        verbose: true
+        name: eslint
+        entry: eslint
         args:
           - --color
           - --fix
+        verbose: true
+        types: [javascript]
+        language: node
+        additional_dependencies:
+          - "eslint@9.12.0"
+          - "eslint-plugin-jsdoc@50.3.1"
   - repo: https://github.com/pre-commit/pre-commit-hooks
-    rev: v4.3.0
+    rev: v4.6.0
     hooks:
       - id: trailing-whitespace
         # exclude autogenerated files
@@ -107,13 +104,13 @@ repos:
       - id: mixed-line-ending
         args: ["--fix=lf"]
   - repo: https://github.com/astral-sh/ruff-pre-commit
-    rev: v0.1.3
+    rev: v0.6.8
     hooks:
       - id: ruff
         args: [--fix, --exit-non-zero-on-fix]
       - id: ruff-format
   - repo: https://github.com/OCA/pylint-odoo
-    rev: v9.0.4
+    rev: v9.1.3
     hooks:
       - id: pylint_odoo
         name: pylint with optional checks
diff --git a/.prettierrc.yml b/.prettierrc.yml
deleted file mode 100644
index 5b6d4b361ace92f3877993bf2848fac190d8fab6..0000000000000000000000000000000000000000
--- a/.prettierrc.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-# Defaults for all prettier-supported languages.
-# Prettier will complete this with settings from .editorconfig file.
-bracketSpacing: false
-printWidth: 88
-proseWrap: always
-semi: true
-trailingComma: "es5"
-xmlWhitespaceSensitivity: "strict"
diff --git a/.pylintrc b/.pylintrc
index 4fb9ba5362fb402b42c1a587d56b28ed71e8f933..b855a9270efdb66248c84038041d1a589961ee44 100644
--- a/.pylintrc
+++ b/.pylintrc
@@ -10,7 +10,7 @@ manifest-required-authors=Le Filament
 manifest-required-keys=license
 manifest-deprecated-keys=description,active
 license-allowed=AGPL-3,GPL-2,GPL-2 or any later version,GPL-3,GPL-3 or any later version,LGPL-3
-valid-odoo-versions=17.0
+valid-odoo-versions=18.0
 
 [MESSAGES CONTROL]
 disable=all
diff --git a/.pylintrc-mandatory b/.pylintrc-mandatory
index 42885e9b5eb0cde47fa65d308683c29504934143..f9450512a1b688db0b671c400b492ac9e4e2e425 100644
--- a/.pylintrc-mandatory
+++ b/.pylintrc-mandatory
@@ -9,7 +9,7 @@ manifest-required-authors=Le Filament
 manifest-required-keys=license
 manifest-deprecated-keys=description,active
 license-allowed=AGPL-3,GPL-2,GPL-2 or any later version,GPL-3,GPL-3 or any later version,LGPL-3
-valid-odoo-versions=17.0
+valid-odoo-versions=18.0
 
 [MESSAGES CONTROL]
 disable=all
diff --git a/.ruff.toml b/.ruff.toml
index 0240c75f6a4ae4550f3473ad0a5faaef022bf6c7..5e63128201e64f4d1d6a2b1b582a555579b1298b 100644
--- a/.ruff.toml
+++ b/.ruff.toml
@@ -10,21 +10,22 @@ extend-select = [
     "I",  # isort
     "UP",  # pyupgrade
 ]
+extend-safe-fixes = ["UP008"]
 exclude = ["setup/*"]
 
 [format]
 exclude = ["setup/*"]
 
-[per-file-ignores]
+[lint.per-file-ignores]
 "__init__.py" = ["F401", "I001"]  # ignore unused and unsorted imports in __init__.py
 "__manifest__.py" = ["B018"]  # useless expression
 
-[isort]
+[lint.isort]
 section-order = ["future", "standard-library", "third-party", "odoo", "odoo-addons", "first-party", "local-folder"]
 
-[isort.sections]
+[lint.isort.sections]
 "odoo" = ["odoo"]
 "odoo-addons" = ["odoo.addons"]
 
-[mccabe]
+[lint.mccabe]
 max-complexity = 16
diff --git a/__manifest__.py b/__manifest__.py
index a9151751a702dfa33321d4ab4f5633f72d02672e..f8fae2f9276e9e0391428840036a39b54cd32ad0 100644
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -3,7 +3,7 @@
     "summary": "Gestion des mise en production logicielles",
     "author": "Le Filament",
     "website": "https://le-filament.com",
-    "version": "17.0.1.0.0",
+    "version": "18.0.1.0.0",
     "license": "AGPL-3",
     "depends": [
         "web",
@@ -15,7 +15,7 @@
         # wizard
         "wizard/multi_partner_release_wizard.xml",
         # templates
-        "templates/header_template.xml",
+        # "templates/header_template.xml",
         "templates/partner_release_detail.xml",
         "templates/partner_release_list.xml",
         # views
diff --git a/controllers/__init__.py b/controllers/__init__.py
index 3512ec93f73fff1dc1885b8a3e42d65980dba163..a2ce8dc1d231cee67f816e5aa6213430a16099ec 100644
--- a/controllers/__init__.py
+++ b/controllers/__init__.py
@@ -1 +1 @@
-from . import banner_release, main, portal
+from . import main, portal
diff --git a/controllers/banner_release.py b/controllers/banner_release.py
deleted file mode 100644
index b0f0b400f45a095dfed48a39e5cfe4390ef92f9f..0000000000000000000000000000000000000000
--- a/controllers/banner_release.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# © 2022 Le Filament (<http://www.le-filament.com>)
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-
-from odoo import http
-from odoo.http import request
-
-
-class BannerController(http.Controller):
-    @http.route(["/lefilament_release/header"], type="json", auth="user")
-    def release_header(self):
-        return {
-            "html": request.env["ir.qweb"]._render(
-                "lefilament_release.header_template", {}
-            )
-        }
diff --git a/eslint.config.cjs b/eslint.config.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..0d5731f89a8bc2073894c17dfe41e410db0e4cfe
--- /dev/null
+++ b/eslint.config.cjs
@@ -0,0 +1,202 @@
+jsdoc = require("eslint-plugin-jsdoc");
+
+const config = [{
+    plugins: {
+      jsdoc,
+    },
+
+    languageOptions: {
+        globals: {
+            _: "readonly",
+            $: "readonly",
+            fuzzy: "readonly",
+            jQuery: "readonly",
+            moment: "readonly",
+            odoo: "readonly",
+            openerp: "readonly",
+            owl: "readonly",
+            luxon: "readonly",
+        },
+
+        ecmaVersion: 2024,
+        sourceType: "script",
+    },
+
+    rules: {
+        "accessor-pairs": "warn",
+        "array-callback-return": "warn",
+        "callback-return": "warn",
+        "capitalized-comments": ["warn", "always", {
+            ignoreConsecutiveComments: true,
+            ignoreInlineComments: true,
+        }],
+        complexity: ["warn", 15],
+        "constructor-super": "warn",
+        "dot-notation": "warn",
+        eqeqeq: "warn",
+        "global-require": "warn",
+        "handle-callback-err": "warn",
+        "id-blacklist": "warn",
+        "id-match": "warn",
+        "init-declarations": "error",
+        "max-depth": "warn",
+        "max-nested-callbacks": "warn",
+        "max-statements-per-line": "warn",
+        "no-alert": "warn",
+        "no-array-constructor": "warn",
+        "no-caller": "warn",
+        "no-case-declarations": "warn",
+        "no-class-assign": "warn",
+        "no-cond-assign": "error",
+        "no-const-assign": "error",
+        "no-constant-condition": "warn",
+        "no-control-regex": "warn",
+        "no-debugger": "error",
+        "no-delete-var": "warn",
+        "no-div-regex": "warn",
+        "no-dupe-args": "error",
+        "no-dupe-class-members": "error",
+        "no-dupe-keys": "error",
+        "no-duplicate-case": "error",
+        "no-duplicate-imports": "error",
+        "no-else-return": "warn",
+        "no-empty-character-class": "warn",
+        "no-empty-function": "error",
+        "no-empty-pattern": "error",
+        "no-empty": "warn",
+        "no-eq-null": "error",
+        "no-eval": "error",
+        "no-ex-assign": "error",
+        "no-extend-native": "warn",
+        "no-extra-bind": "warn",
+        "no-extra-boolean-cast": "warn",
+        "no-extra-label": "warn",
+        "no-fallthrough": "warn",
+        "no-func-assign": "error",
+        "no-global-assign": "error",
+        "no-implicit-coercion": ["warn", {
+            allow: ["~"],
+        }],
+        "no-implicit-globals": "warn",
+        "no-implied-eval": "warn",
+        "no-inline-comments": "warn",
+        "no-inner-declarations": "warn",
+        "no-invalid-regexp": "warn",
+        "no-irregular-whitespace": "warn",
+        "no-iterator": "warn",
+        "no-label-var": "warn",
+        "no-labels": "warn",
+        "no-lone-blocks": "warn",
+        "no-lonely-if": "error",
+        "no-mixed-requires": "error",
+        "no-multi-str": "warn",
+        "no-native-reassign": "error",
+        "no-negated-condition": "warn",
+        "no-negated-in-lhs": "error",
+        "no-new-func": "warn",
+        "no-new-object": "warn",
+        "no-new-require": "warn",
+        "no-new-symbol": "warn",
+        "no-new-wrappers": "warn",
+        "no-new": "warn",
+        "no-obj-calls": "warn",
+        "no-octal-escape": "warn",
+        "no-octal": "warn",
+        "no-param-reassign": "warn",
+        "no-path-concat": "warn",
+        "no-process-env": "warn",
+        "no-process-exit": "warn",
+        "no-proto": "warn",
+        "no-prototype-builtins": "warn",
+        "no-redeclare": "warn",
+        "no-regex-spaces": "warn",
+        "no-restricted-globals": "warn",
+        "no-restricted-imports": "warn",
+        "no-restricted-modules": "warn",
+        "no-restricted-syntax": "warn",
+        "no-return-assign": "error",
+        "no-script-url": "warn",
+        "no-self-assign": "warn",
+        "no-self-compare": "warn",
+        "no-sequences": "warn",
+        "no-shadow-restricted-names": "warn",
+        "no-shadow": "warn",
+        "no-sparse-arrays": "warn",
+        "no-sync": "warn",
+        "no-this-before-super": "warn",
+        "no-throw-literal": "warn",
+        "no-undef-init": "warn",
+        "no-undef": "error",
+        "no-unmodified-loop-condition": "warn",
+        "no-unneeded-ternary": "error",
+        "no-unreachable": "error",
+        "no-unsafe-finally": "error",
+        "no-unused-expressions": "error",
+        "no-unused-labels": "error",
+        "no-unused-vars": "error",
+        "no-use-before-define": "error",
+        "no-useless-call": "warn",
+        "no-useless-computed-key": "warn",
+        "no-useless-concat": "warn",
+        "no-useless-constructor": "warn",
+        "no-useless-escape": "warn",
+        "no-useless-rename": "warn",
+        "no-void": "warn",
+        "no-with": "warn",
+        "operator-assignment": ["error", "always"],
+        "prefer-const": "warn",
+        radix: "warn",
+        "require-yield": "warn",
+        "sort-imports": "warn",
+        "spaced-comment": ["error", "always"],
+        strict: ["error", "function"],
+        "use-isnan": "error",
+
+        "jsdoc/check-tag-names": "warn",
+        "jsdoc/check-types": "warn",
+        "jsdoc/require-param-description": "off",
+        "jsdoc/require-return": "off",
+        "jsdoc/require-return-description": "off",
+        "jsdoc/require-return-type": "off",
+
+        "valid-typeof": "warn",
+        yoda: "warn",
+    },
+
+    settings: {
+        jsdoc: {
+            tagNamePreference: {
+                arg: "param",
+                argument: "param",
+                augments: "extends",
+                constructor: "class",
+                exception: "throws",
+                func: "function",
+                method: "function",
+                prop: "property",
+                return: "returns",
+                virtual: "abstract",
+                yield: "yields",
+            },
+            preferredTypes: {
+                array: "Array",
+                bool: "Boolean",
+                boolean: "Boolean",
+                number: "Number",
+                object: "Object",
+                str: "String",
+                string: "String",
+            },
+        },
+    },
+
+}, {
+    files: ["**/*.esm.js"],
+
+    languageOptions: {
+        ecmaVersion: 2024,
+        sourceType: "module",
+    },
+}];
+
+module.exports = config
diff --git a/models/res_partner.py b/models/res_partner.py
index 03fb752fbafc81547d6e8fa0e94b613fb79d1c46..ad0aaf94a0fc103ebd63b7be4ede32ace21b2b52 100644
--- a/models/res_partner.py
+++ b/models/res_partner.py
@@ -57,14 +57,13 @@ class ResPartner(models.Model):
                 if module.get("author_type") != "odoo":
                     # Création du module
                     if module.get("name") not in existing_modules.mapped("name"):
-                        new_module = module
+                        new_module = module.copy()
                         new_module.pop("latest_version", False)
                         module_id = existing_modules.create(new_module)
                     # Mise à jour des versions
                     else:
-                        # ruff: noqa: B023
                         module_id = existing_modules.filtered(
-                            lambda m: m.name == module.get("name")
+                            lambda m: m.name == module.get("name")  # noqa: B023
                         )
                     module_update = ModuleVersion.search(
                         [
@@ -97,9 +96,8 @@ class ResPartner(models.Model):
                 )
             )
             if module_uninstalled:
-                # ruff: noqa: B023
                 module_ids = partner.module_version_ids.filtered(
-                    lambda m: m.module_id.name in module_uninstalled
+                    lambda m: m.module_id.name in module_uninstalled  # noqa: B023
                 )
                 module_ids.unlink()
 
diff --git a/prettier.config.cjs b/prettier.config.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..e66cd82cc1e4dfeded9749598144f820c8491fab
--- /dev/null
+++ b/prettier.config.cjs
@@ -0,0 +1,14 @@
+/** @type {import('prettier').Config} */
+
+const config = {
+  // https://github.com/prettier/prettier/issues/15388#issuecomment-1717746872
+  plugins: [require.resolve("@prettier/plugin-xml")],
+  bracketSpacing: false,
+  printWidth: 88,
+  proseWrap: "always",
+  semi: true,
+  trailingComma: "es5",
+  xmlWhitespaceSensitivity: "preserve",
+};
+
+module.exports = config;
diff --git a/views/res_partner.xml b/views/res_partner.xml
index 22875f7cdd2fb77eb9932024130278594d9dc6a2..4b485971a999baa07b2dc88b4020207aa4090093 100644
--- a/views/res_partner.xml
+++ b/views/res_partner.xml
@@ -14,14 +14,13 @@
                         <group>
                             <field name="server_ip" />
                         </group>
-                        <group>
-                        </group>
+                        <group />
                     </group>
                     <field name="module_version_ids">
-                        <tree editable="top" default_order="module_id">
+                        <list editable="top" default_order="module_id">
                             <field name="module_id" />
                             <field name="latest_version" />
-                        </tree>
+                        </list>
                     </field>
                 </page>
                 <page name="release" invisible="not is_company" string="Releases">
@@ -33,12 +32,12 @@
                         />
                     </group>
                     <field name="release_ids" options="{'no_create': 1, 'no_edit': 1}">
-                        <tree>
+                        <list>
                             <field name="release_date" />
                             <field name="user_id" />
                             <field name="description" />
                             <field name="release_module_ids" widget="many2many_tags" />
-                        </tree>
+                        </list>
                     </field>
                 </page>
             </xpath>
@@ -53,5 +52,4 @@
         <field name="state">code</field>
         <field name="code">action = records.set_release_url()</field>
     </record>
-
 </odoo>
diff --git a/views/res_partner_module.xml b/views/res_partner_module.xml
index 1ce697549a246eb502e675726a502c8fbcaa20b7..16f0c4dd3fc68192b0f0cd5d9e1cd3fe04857b53 100644
--- a/views/res_partner_module.xml
+++ b/views/res_partner_module.xml
@@ -38,22 +38,22 @@
                         readonly="1"
                         default_order="partner_id"
                     >
-                        <tree>
+                        <list>
                             <field name="partner_id" />
                             <field name="latest_version" />
-                        </tree>
+                        </list>
                     </field>
                 </sheet>
             </form>
         </field>
     </record>
 
-    <!-- Tree View -->
+    <!-- List View -->
     <record id="res_partner_module_tree_view" model="ir.ui.view">
         <field name="name">res.partner.module.tree</field>
         <field name="model">res.partner.module</field>
         <field name="arch" type="xml">
-            <tree>
+            <list>
                 <field name="name" />
                 <field name="author_type" />
                 <field name="author" />
@@ -62,7 +62,7 @@
                     options="{'no_create': 1,}"
                     widget="many2many_tags"
                 />
-            </tree>
+            </list>
         </field>
     </record>
 
@@ -71,7 +71,6 @@
         <field name="name">Liste Modules</field>
         <field name="type">ir.actions.act_window</field>
         <field name="res_model">res.partner.module</field>
-        <field name="view_mode">tree,form</field>
+        <field name="view_mode">list,form</field>
     </record>
-
 </odoo>
diff --git a/views/res_partner_module_version.xml b/views/res_partner_module_version.xml
index 3bfe0686a3436daa26bc1f17d763182a8223cf00..98a3fe6fea7bcb5eddf3fdf561c0a3c3fe4b1b72 100644
--- a/views/res_partner_module_version.xml
+++ b/views/res_partner_module_version.xml
@@ -14,16 +14,16 @@
             </field>
         </record>
 
-        <!-- Tree View -->
+        <!-- List View -->
         <record id="res_partner_module_version_tree_view" model="ir.ui.view">
             <field name="name">res.partner.module.version.tree</field>
             <field name="model">res.partner.module.version</field>
             <field name="arch" type="xml">
-                <tree string="Modules" editable="top">
+                <list string="Modules" editable="top">
                     <field name="partner_id" options="{'no_create': 1, 'no_edit': 1}" />
                     <field name="module_id" options="{'no_create': 1, 'no_edit': 1}" />
                     <field name="latest_version" />
-                </tree>
+                </list>
             </field>
         </record>
 
@@ -35,8 +35,7 @@
             <field name="name">Modules par client et version</field>
             <field name="type">ir.actions.act_window</field>
             <field name="res_model">res.partner.module.version</field>
-            <field name="view_mode">tree</field>
+            <field name="view_mode">list</field>
         </record>
-
     </data>
 </odoo>
diff --git a/views/res_partner_release.xml b/views/res_partner_release.xml
index a5ad8b76895ca088d6e5a2dc86d892de7e32c23e..65999aa05610eb36051bb2cff9dd14a7a3a1b998 100644
--- a/views/res_partner_release.xml
+++ b/views/res_partner_release.xml
@@ -66,48 +66,40 @@
                                 options="{'string': 'Copier le lien'}"
                             />
                         </group>
-                        <hr />
+                        <hr colspan="12" />
                         <label for="description" class="font-weight-bold" />
                         <field name="description" />
-                        <hr />
+                        <hr colspan="12" />
                         <label for="release_module_ids" class="font-weight-bold" />
-                        <field
-                            name="release_module_ids"
-                            context="{'default_release_id': active_id}"
-                        >
-                            <tree editable="top">
-                                <field name="partner_id" invisible="1" />
-                                <field name="release_id" invisible="1" />
+                        <field name="release_module_ids">
+                            <list editable="top">
                                 <field
                                     name="module_id"
                                     options="{'no_create': True, 'no_edit': True}"
                                 />
                                 <field name="release_type" />
                                 <field name="log" />
-                            </tree>
+                            </list>
                         </field>
                     </group>
                 </sheet>
-                <div class="oe_chatter">
-                    <field name="message_follower_ids" />
-                    <field name="activity_ids" />
-                    <field name="message_ids" />
-                </div>
+                <chatter />
             </form>
         </field>
     </record>
 
-    <!-- Tree View -->
+    <!-- List View -->
     <record id="res_partner_release_tree_view" model="ir.ui.view">
         <field name="name">res.partner.release.tree</field>
         <field name="model">res.partner.release</field>
         <field name="arch" type="xml">
-            <tree banner_route="/lefilament_release/header">
+            <!-- TODO: make JS action to create releases for multiple customers -->
+            <list>
                 <field name="release_date" />
                 <field name="user_id" />
                 <field name="partner_id" />
                 <field name="name" />
-            </tree>
+            </list>
         </field>
     </record>
 
@@ -125,10 +117,9 @@
 
     <!-- Action Window -->
     <record id="res_partner_release_act_window" model="ir.actions.act_window">
-        <field name="name">Releases Client</field>
+        <field name="name">Releases Client Multiple</field>
         <field name="type">ir.actions.act_window</field>
         <field name="res_model">res.partner.release</field>
-        <field name="view_mode">tree,form,pivot</field>
+        <field name="view_mode">list,form,pivot</field>
     </record>
-
 </odoo>
diff --git a/views/res_partner_release_module.xml b/views/res_partner_release_module.xml
index 16da3a700e3ec4a5e176c0b91bfd7ec0854af70d..d13f84020a0b4a7d04fafcfbd13b64a62382f4b3 100644
--- a/views/res_partner_release_module.xml
+++ b/views/res_partner_release_module.xml
@@ -50,16 +50,16 @@
         </field>
     </record>
 
-    <!-- Tree View -->
+    <!-- List View -->
     <record id="res_partner_release_module_tree_view" model="ir.ui.view">
         <field name="name">res.partner.release.module.tree</field>
         <field name="model">res.partner.release.module</field>
         <field name="arch" type="xml">
-            <tree create="0" delete="0" edit="0">
+            <list create="0" delete="0" edit="0">
                 <field name="release_date" />
                 <field name="module_id" />
                 <field name="release_type" />
-            </tree>
+            </list>
         </field>
     </record>
 
@@ -79,7 +79,6 @@
         <field name="name">Détail Modules</field>
         <field name="type">ir.actions.act_window</field>
         <field name="res_model">res.partner.release.module</field>
-        <field name="view_mode">tree,form,pivot</field>
+        <field name="view_mode">list,form,pivot</field>
     </record>
-
 </odoo>
diff --git a/wizard/multi_partner_release_wizard.xml b/wizard/multi_partner_release_wizard.xml
index 1c48801b855d2f33eddaf314d82d81cadf13d7a5..8eff0d33539224f0a47dc6bc4c13d3a92d14d9b8 100644
--- a/wizard/multi_partner_release_wizard.xml
+++ b/wizard/multi_partner_release_wizard.xml
@@ -8,53 +8,47 @@
         <field name="model">multi.partner.release.wizard</field>
         <field name="arch" type="xml">
             <form string="Releases Client">
-                <sheet>
-                    <group>
-                        <group name="partner_details">
-                            <field name="release_date" />
-                            <field
-                                name="partner_ids"
-                                widget="many2many_tags"
-                                options="{'always_reload': True, 'no_create': True, 'no_edit': True}"
-                            />
-                        </group>
-                        <group name="release_details">
-                            <field
-                                name="user_id"
-                                options="{'no_create': True, 'no_edit': True}"
-                            />
-                            <field name="create_date" string="Créé le" />
-                        </group>
-                        <hr />
-                        <label for="description" class="font-weight-bold" />
-                        <field name="description" />
-                        <hr />
-                        <label for="release_module_ids" class="font-weight-bold" />
+                <group>
+                    <group name="partner_details">
+                        <field name="release_date" />
                         <field
-                            name="release_module_ids"
-                            context="{'default_release_id': active_id}"
-                        >
-                            <tree editable="top">
-                                <field name="release_id" invisible="1" />
-                                <field
-                                    name="module_id"
-                                    options="{'no_create': True, 'no_edit': True}"
-                                />
-                                <field name="release_type" />
-                                <field name="log" />
-                            </tree>
-                        </field>
+                            name="partner_ids"
+                            widget="many2many_tags"
+                            options="{'always_reload': True, 'no_create': True, 'no_edit': True}"
+                        />
                     </group>
-                    <footer>
-                        <button
-                            name="create_releases"
-                            type="object"
-                            string="Créer les releases"
-                            class="btn-primary"
+                    <group name="release_details">
+                        <field
+                            name="user_id"
+                            options="{'no_create': True, 'no_edit': True}"
                         />
-                        <button string="Fermer" class="oe_link" special="cancel" />
-                    </footer>
-                </sheet>
+                        <field name="create_date" string="Créé le" />
+                    </group>
+                    <hr />
+                    <label for="description" class="font-weight-bold" />
+                    <field name="description" />
+                    <hr />
+                    <label for="release_module_ids" class="font-weight-bold" />
+                    <field name="release_module_ids">
+                        <list editable="top">
+                            <field
+                                name="module_id"
+                                options="{'no_create': True, 'no_edit': True}"
+                            />
+                            <field name="release_type" />
+                            <field name="log" />
+                        </list>
+                    </field>
+                </group>
+                <footer>
+                    <button
+                        name="create_releases"
+                        type="object"
+                        string="Créer les releases"
+                        class="btn-primary"
+                    />
+                    <button string="Fermer" class="oe_link" special="cancel" />
+                </footer>
             </form>
         </field>
     </record>
@@ -67,5 +61,4 @@
         <field name="view_mode">form</field>
         <field name="target">new</field>
     </record>
-
 </odoo>