diff --git a/app/controllers/admin/research/researchers_controller.rb b/app/controllers/admin/research/researchers_controller.rb
index 9a2bb07e4fc6c7906a51e15251a0ef37581bfc18..4ccb65cd1157c54bb4ec737b284512b5d2ac12a0 100644
--- a/app/controllers/admin/research/researchers_controller.rb
+++ b/app/controllers/admin/research/researchers_controller.rb
@@ -15,7 +15,7 @@ class Admin::Research::ResearchersController < Admin::Research::ApplicationContr
 
   def show
     @papers = @researcher.research_journal_papers.ordered.page(params[:page])
-    @possible_hal_authors = @researcher.possible_hal_authors unless @researcher.hal_identity?
+    @possible_hal_authors = @researcher.possible_hal_authors
     @papers = @researcher.research_journal_papers.ordered.page(params[:page])
     breadcrumb
     add_breadcrumb @researcher
diff --git a/app/models/research/hal/author.rb b/app/models/research/hal/author.rb
new file mode 100644
index 0000000000000000000000000000000000000000..094f188d22b70d5e188ebfe573c08416979cb1cc
--- /dev/null
+++ b/app/models/research/hal/author.rb
@@ -0,0 +1,17 @@
+# == Schema Information
+#
+# Table name: research_hal_authors
+#
+#  id                :uuid             not null, primary key
+#  doc_identifier    :string
+#  first_name        :string
+#  form_identifier   :string
+#  full_name         :string
+#  last_name         :string
+#  person_identifier :string
+#  created_at        :datetime         not null
+#  updated_at        :datetime         not null
+#
+class Research::Hal::Author < ApplicationRecord
+  has_and_belongs_to_many :publications
+end
diff --git a/app/models/research/hal/publication.rb b/app/models/research/hal/publication.rb
index 302b618727fe42053a0a7192238d0465797691c1..2e82ebae65429b1dced648188395effe0323e472 100644
--- a/app/models/research/hal/publication.rb
+++ b/app/models/research/hal/publication.rb
@@ -25,11 +25,7 @@ class Research::Hal::Publication < ApplicationRecord
 
   DOI_PREFIX = 'http://dx.doi.org/'.freeze
 
-  has_and_belongs_to_many :research_people,
-                          class_name: 'University::Person', 
-                          foreign_key: 'university_person_id',
-                          association_foreign_key: 'research_publication_id'
-  alias :researchers :research_people
+  has_and_belongs_to_many :publications
 
   before_destroy { research_people.clear }
 
diff --git a/app/models/university/person/with_research.rb b/app/models/university/person/with_research.rb
index febdd4246c0ba69f9c06394381c15cd331d32e07..ade03dda8fce8c4248df198f7305e75e1854f5b6 100644
--- a/app/models/university/person/with_research.rb
+++ b/app/models/university/person/with_research.rb
@@ -12,12 +12,7 @@ module University::Person::WithResearch
     scope :with_hal_identifier, -> { where.not(hal_form_identifier: [nil,'']) }
   end
 
-  def hal_identity?
-    hal_form_identifier.present?
-  end
-
   def import_research_hal_publications!
-    return unless hal_identity?
     response = HalOpenscience::Document.search  "authIdForm_i:#{hal_form_identifier}",
                                                 fields: ["*"],
                                                 limit: 1000
diff --git a/app/views/admin/research/researchers/show.html.erb b/app/views/admin/research/researchers/show.html.erb
index dcbd2f426be3a3b8fc32d197d5cbbd5a609ffe00..c6deccf681aee60e0b2bc1ac69e780eeda8ee26c 100644
--- a/app/views/admin/research/researchers/show.html.erb
+++ b/app/views/admin/research/researchers/show.html.erb
@@ -9,43 +9,44 @@
   <% end %>
 <% end %>
 
-<%= osuny_panel Research::Hal::Publication.model_name.human(count: 2), action: @researcher.hal_publications.count do %>
-  <% if @researcher.hal_identity? %>
-    <div class="table-responsive">
-      <%= render 'admin/research/hal/publications/list', publications: @researcher.hal_publications.ordered %>
-    </div>
-  <% else %>
-    <p><%= t 'research.hal.select_identifier' %><p>
-    <div class="table-responsive">
-      <table class="table">
-        <tbody>
-          <% @possible_hal_authors.each do |author| %>
-            <%
-            path = admin_research_researcher_path @researcher, 
-                                                  hal_doc_identifier: author.docid,
-                                                  hal_form_identifier: author.attributes['form_i'],
-                                                  hal_person_identifier: author.attributes['person_i']
-            %>
-            <tr>
-              <td width="300">
-                Identifiant HAL : <%= author.docid %><br>
-                <small><%= author.fullName_s %></small>
-              </td>
-              <td class="ps-3" width="200"><%= link_to 'Choisir cet identifiant', path, method: :put, class: 'btn btn-primary btn-sm' %><td>
-              <td class="ps-3">
-                <% docs = HalOpenscience::Document.search "authIdFormPerson_s:#{author.docid}", fields: ["*"], limit: 5 %>
-                <ul class="list-unstyled small">
-                  <% docs.results.each do |doc| %>
-                    <li class="mb-2"><%= sanitize doc.citationFull_s %></li>
-                  <% end unless docs.nil? %>
-                </ul>
-              </td>
-            </tr>
-          <% end %>
-        </tbody>
-      </table>
-    </div>
-  <% end %>
+<%= osuny_panel Research::Hal::Author.model_name.human(count: 2), action: @researcher.hal_publications.count do %>
+  <p><%= t 'research.hal.select_identifier' %><p>
+  <div class="table-responsive">
+    <table class="table">
+      <tbody>
+        <% @possible_hal_authors.each do |author| %>
+          <%
+          path = admin_research_researcher_path @researcher, 
+                                                hal_doc_identifier: author.docid,
+                                                hal_form_identifier: author.attributes['form_i'],
+                                                hal_person_identifier: author.attributes['person_i']
+          %>
+          <tr>
+            <td width="300">
+              Identifiant HAL : <%= author.docid %><br>
+              <small><%= author.fullName_s %></small>
+            </td>
+            <td class="ps-3" width="200"><%= link_to 'Choisir cet identifiant', path, method: :put, class: 'btn btn-primary btn-sm' %><td>
+            <td class="ps-3">
+              <% docs = HalOpenscience::Document.search "authIdFormPerson_s:#{author.docid}", fields: ["*"], limit: 5 %>
+              <ul class="list-unstyled small">
+                <% docs.results.each do |doc| %>
+                  <li class="mb-2"><%= sanitize doc.citationFull_s %></li>
+                <% end unless docs.nil? %>
+              </ul>
+            </td>
+          </tr>
+        <% end %>
+      </tbody>
+    </table>
+  </div>
+<% end %>
+
+<%= osuny_panel Research::Hal::Publication.model_name.human do %>
+  <p><%= "#{@researcher.hal_publications.count} #{Research::Hal::Publication.model_name.human(count: @researcher.hal_publications.count).downcase}" %> 
+  <div class="table-responsive">
+    <%= render 'admin/research/hal/publications/list', publications: @researcher.hal_publications.ordered %>
+  </div>
 <% end %>
 
 <% content_for :action_bar_right do %>
diff --git a/config/locales/research/en.yml b/config/locales/research/en.yml
index a6805e9c0a7009d4c4e2d1cccfac2d6fc1fc4ec6..0aac0744d187e6e775ef8850116cc216221408d2 100644
--- a/config/locales/research/en.yml
+++ b/config/locales/research/en.yml
@@ -2,11 +2,15 @@ en:
   activemodel:
     models:
       research: Research
+      research/hal: HAL
   activerecord:
     models:
       university/person/researcher:
         one: Researcher
         other: Researchers
+      research/hal/author:
+        one: Author
+        other: Authors
       research/hal/publication:
         one: Publication
         other: Publications
@@ -32,6 +36,10 @@ en:
         one: Thesis
         other: Theses
     attributes:
+      research/hal/author:
+        first_name: First name
+        last_name: Last name
+        full_name: Full name
       research/hal/publication:
         description: Publications scientifiques importées automatiquement de HAL
         docid: Identifier
@@ -93,8 +101,8 @@ en:
       source: Serge Haroche, Prix Nobel de physique 2012
     hal:
       title: HAL
-      select_identifier: You have no HAL identifier yet. Is it one of these possibilities? If there are several, please choose the most complete one (without -0 at the end).
-    manage_researchers: Managege researchers
+      select_identifier: Select all the HAL authors that correspond to this researcher. Use the publications to be sure it's the same person.
+    manage_researchers: Manage researchers
     researchers:
       one: Researcher
       other: Researchers
diff --git a/config/locales/research/fr.yml b/config/locales/research/fr.yml
index f2eb4e9f3310c2e659f225348980bfe7b67def1b..0cde7ec468e216adadf65a3a4caca8243b6a748e 100644
--- a/config/locales/research/fr.yml
+++ b/config/locales/research/fr.yml
@@ -2,11 +2,15 @@ fr:
   activemodel:
     models:
       research: Recherche
+      research/hal: HAL
   activerecord:
     models:
       university/person/researcher:
         one: Chercheur·e
         other: Chercheur·e·s
+      research/hal/author:
+        one: Auteur·e
+        other: Auteur·e·s
       research/hal/publication:
         one: Publication
         other: Publications
@@ -32,6 +36,10 @@ fr:
         one: Thèse
         other: Thèses
     attributes:
+      research/hal/author:
+        first_name: Prénom
+        last_name: Nom
+        full_name: Nom complet
       research/hal/publication:
         description: Publications scientifiques importées automatiquement de HAL
         docid: Identifiant
@@ -92,8 +100,7 @@ fr:
       text: La recherche scientifique est, à la fois, une démarche créatrice de connaissances motivée par la curiosité pure et une activité génératrice d’innovations qui augmentent les moyens d’action et de diagnostic sur la nature, l’homme et la société. Ces deux aspects de la recherche, le fondamental et l’appliqué, loin de s’opposer, sont complémentaires l’un de l’autre. La recherche fondamentale crée le socle de connaissances à partir duquel naissent les applications et, inversement, les avancées technologiques procurent les outils d’investigation de plus en plus perfectionnés qui conduisent à approfondir nos connaissances fondamentales.
       source: Serge Haroche, Prix Nobel de physique 2012
     hal:
-      title: HAL
-      select_identifier: Vous n'avez pas d'identifiant HAL. Est-ce l'une des possibilités suivantes ? S'il y a plusieurs possibilités, choisissez l'identifiant le plus complet (sans 0 à la fin).
+      select_identifier: Choisissez tou·te·s les auteur·e·s HAL correspondant à cette personne. Appuyez-vous sur les publications pour vérifier qu'il s'agit de la bonne personne.
     manage_researchers: Gérer les chercheur·e·s
     researchers:
       one: Chercheur·e
diff --git a/config/routes/admin/research.rb b/config/routes/admin/research.rb
index 9bf9266f4f66665be07e0f79534799258fb00ecc..7792d706ece59750dcceba1f5cfcfc9658887153 100644
--- a/config/routes/admin/research.rb
+++ b/config/routes/admin/research.rb
@@ -1,6 +1,11 @@
 namespace :research do
   resources :researchers, only: [:index, :show, :update]
   namespace :hal do
+    resources :authors, only: [:index, :show, :destroy] do
+      member do
+        get :static
+      end
+    end
     resources :publications, only: [:index, :show, :destroy] do
       member do
         get :static
diff --git a/db/migrate/20230217205953_create_research_hal_authors.rb b/db/migrate/20230217205953_create_research_hal_authors.rb
new file mode 100644
index 0000000000000000000000000000000000000000..c182ed2167d81c78fd9bd4a5302f4cb7c68d4259
--- /dev/null
+++ b/db/migrate/20230217205953_create_research_hal_authors.rb
@@ -0,0 +1,24 @@
+class CreateResearchHalAuthors < ActiveRecord::Migration[7.0]
+  def change
+    create_table :research_hal_authors, id: :uuid do |t|
+      t.string :doc_identifier
+      t.string :form_identifier
+      t.string :person_identifier
+      t.string :first_name
+      t.string :last_name
+      t.string :full_name
+
+      t.timestamps
+    end
+
+    create_join_table :research_hal_authors, :research_hal_publications, column_options: {type: :uuid} do |t|
+      t.index [:research_hal_author_id, :research_hal_publication_id], name: 'hal_author_publication'
+      t.index [:research_hal_publication_id, :research_hal_author_id], name: 'hal_publication_author'
+    end
+
+    create_join_table :research_hal_authors, :university_persons, column_options: {type: :uuid} do |t|
+      t.index [:research_hal_author_id, :university_person_id], name: 'hal_author_person'
+      t.index [:university_person_id, :research_hal_author_id], name: 'hal_person_author'
+    end
+  end
+end
diff --git a/db/schema.rb b/db/schema.rb
index be3d3b1ef409edd38552e6864fa51fdab64fbcb9..018e3421e53c264aac19e28c8758f6377576e9fa 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
 #
 # It's strongly recommended that you check this file into your version control system.
 
-ActiveRecord::Schema[7.0].define(version: 2023_02_17_202815) do
+ActiveRecord::Schema[7.0].define(version: 2023_02_17_205953) do
   # These are extensions that must be enabled in order to support this database
   enable_extension "pgcrypto"
   enable_extension "plpgsql"
@@ -592,6 +592,31 @@ ActiveRecord::Schema[7.0].define(version: 2023_02_17_202815) do
     t.string "summernote_locale"
   end
 
+  create_table "research_hal_authors", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+    t.string "doc_identifier"
+    t.string "form_identifier"
+    t.string "person_identifier"
+    t.string "first_name"
+    t.string "last_name"
+    t.string "full_name"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+  end
+
+  create_table "research_hal_authors_publications", id: false, force: :cascade do |t|
+    t.uuid "research_hal_author_id", null: false
+    t.uuid "research_hal_publication_id", null: false
+    t.index ["research_hal_author_id", "research_hal_publication_id"], name: "hal_author_publication"
+    t.index ["research_hal_publication_id", "research_hal_author_id"], name: "hal_publication_author"
+  end
+
+  create_table "research_hal_authors_university_persons", id: false, force: :cascade do |t|
+    t.uuid "research_hal_author_id", null: false
+    t.uuid "university_person_id", null: false
+    t.index ["research_hal_author_id", "university_person_id"], name: "hal_author_person"
+    t.index ["university_person_id", "research_hal_author_id"], name: "hal_person_author"
+  end
+
   create_table "research_hal_publications", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
     t.string "docid"
     t.jsonb "data"
diff --git a/test/fixtures/research/hal/authors.yml b/test/fixtures/research/hal/authors.yml
new file mode 100644
index 0000000000000000000000000000000000000000..29f9027fd28e33384b1cb07b8fadaab6e377ae9c
--- /dev/null
+++ b/test/fixtures/research/hal/authors.yml
@@ -0,0 +1,30 @@
+# == Schema Information
+#
+# Table name: research_hal_authors
+#
+#  id                :uuid             not null, primary key
+#  doc_identifier    :string
+#  first_name        :string
+#  form_identifier   :string
+#  full_name         :string
+#  last_name         :string
+#  person_identifier :string
+#  created_at        :datetime         not null
+#  updated_at        :datetime         not null
+#
+
+one:
+  doc_identifier: MyString
+  form_identifier: MyString
+  person_identifier: MyString
+  first_name: MyString
+  last_name: MyString
+  full_name: MyString
+
+two:
+  doc_identifier: MyString
+  form_identifier: MyString
+  person_identifier: MyString
+  first_name: MyString
+  last_name: MyString
+  full_name: MyString
diff --git a/test/models/research/hal/author_test.rb b/test/models/research/hal/author_test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..bda90df48fe6211be70220edcc05ff3ee1916821
--- /dev/null
+++ b/test/models/research/hal/author_test.rb
@@ -0,0 +1,21 @@
+# == Schema Information
+#
+# Table name: research_hal_authors
+#
+#  id                :uuid             not null, primary key
+#  doc_identifier    :string
+#  first_name        :string
+#  form_identifier   :string
+#  full_name         :string
+#  last_name         :string
+#  person_identifier :string
+#  created_at        :datetime         not null
+#  updated_at        :datetime         not null
+#
+require "test_helper"
+
+class Research::Hal::AuthorTest < ActiveSupport::TestCase
+  # test "the truth" do
+  #   assert true
+  # end
+end