diff --git a/app/models/communication/website.rb b/app/models/communication/website.rb
index 2de5b4a46d557de7f4760a600e9a05de5435df0f..6820e3868a2a2eba2d9d0507535de4d09135d40b 100644
--- a/app/models/communication/website.rb
+++ b/app/models/communication/website.rb
@@ -88,6 +88,8 @@ class Communication::Website < ApplicationRecord
   end
 
   def dependencies
+    # Le website est le SEUL cas d'auto-dépendance
+    [self] +
     configs +
     pages +
     posts +
diff --git a/app/models/communication/website/post.rb b/app/models/communication/website/post.rb
index 1e61cbe30c244cffa5f117fcd0b299a181d38d7f..6ecfe61261a38fd22f1d6f74454385836379de9d 100644
--- a/app/models/communication/website/post.rb
+++ b/app/models/communication/website/post.rb
@@ -54,7 +54,7 @@ class Communication::Website::Post < ApplicationRecord
 
   has_one :imported_post,
           class_name: 'Communication::Website::Imported::Post',
-          dependent: :destroy  
+          dependent: :destroy
   belongs_to :author,
              class_name: 'University::Person',
              optional: true
@@ -124,7 +124,8 @@ class Communication::Website::Post < ApplicationRecord
   def dependencies
     active_storage_blobs +
     blocks +
-    categories
+    categories +
+    [author&.author]
   end
 
   def references
diff --git a/app/models/communication/website/with_git_repository.rb b/app/models/communication/website/with_git_repository.rb
index 3f76c0fe093853a34003fd27b1ea266819f16677..b42580aaef7afa26f77381b63dcd3ec7ffd3734a 100644
--- a/app/models/communication/website/with_git_repository.rb
+++ b/app/models/communication/website/with_git_repository.rb
@@ -11,11 +11,11 @@ module Communication::Website::WithGitRepository
     @git_repository ||= Git::Repository.new self
   end
 
-  # Supprimer tous les git_files qui ne sont pas dans les recursive_dependencie_syncable
+  # Supprimer tous les git_files qui ne sont pas dans les recursive_dependencies_syncable
   def destroy_obsolete_git_files
     website_git_files.find_each do |git_file|
       dependency = git_file.about
-      is_obsolete = !dependency.in?(recursive_dependencie_syncable)
+      is_obsolete = !dependency.in?(recursive_dependencies_syncable)
       if is_obsolete
         # TODO git_file.destroy serait plus ActiveRecord
         Communication::Website::GitFile.sync(self, dependency, destroy: true)
diff --git a/app/models/concerns/as_direct_object.rb b/app/models/concerns/as_direct_object.rb
index cfbaec991499b42af9995809793584b67ba5f761..6b21fb09cbfa59c3a302e7fd43a61f7d46fbe188 100644
--- a/app/models/concerns/as_direct_object.rb
+++ b/app/models/concerns/as_direct_object.rb
@@ -17,11 +17,13 @@ module AsDirectObject
                class_name: 'Communication::Website',
                foreign_key: :communication_website_id
 
-    has_many  :connections, 
+    has_many  :connections,
               as: :direct_source,
               class_name: 'Communication::Website::Connection',
               dependent: :destroy # When the direct object disappears all connections with the object as a source must disappear
 
+    after_save  :sync_connections
+    after_touch :sync_connections
   end
 
   def is_direct_object?
@@ -31,4 +33,10 @@ module AsDirectObject
   def is_indirect_object?
     false
   end
+
+  def sync_connections
+    dependencies.each do |dependency|
+      website.connect(dependency, self)
+    end
+  end
 end
\ No newline at end of file
diff --git a/app/models/education/diploma.rb b/app/models/education/diploma.rb
index 0d31049aadc1a51f4da44ce1d3739b908a7f23e1..980a00f74fa8747f3e75783733d955a4fb41219c 100644
--- a/app/models/education/diploma.rb
+++ b/app/models/education/diploma.rb
@@ -52,6 +52,10 @@ class Education::Diploma < ApplicationRecord
     "#{git_path_content_prefix(website)}diplomas/#{slug}/_index.html" if for_website?(website)
   end
 
+  def dependencies
+    programs
+  end
+
   def references
     []
   end
diff --git a/app/models/university/person.rb b/app/models/university/person.rb
index fa91f6d149b2a87287e555d0c4dbb3b193ba5daa..0c797db15fd865c79bbc0609e019990dfa4d36d2 100644
--- a/app/models/university/person.rb
+++ b/app/models/university/person.rb
@@ -58,13 +58,14 @@ class University::Person < ApplicationRecord
   include WithBlobs
   include WithBlocks
   include WithCountry
+  # WithRoles included before WithEducation because needed for the latter
+  include WithRoles
   include WithEducation
   include WithExperiences
   include WithGitFiles
   include WithPermalink
   include WithPicture
   include WithResearch
-  include WithRoles
   include WithSlug
   include WithTranslations
   include WithUniversity
@@ -206,7 +207,11 @@ class University::Person < ApplicationRecord
   end
 
   def references
-    []
+    [administrator, author, researcher, teacher]
+  end
+
+  def person
+    @person ||= University::Person.find(id)
   end
 
   def administrator
diff --git a/app/models/university/person/administrator.rb b/app/models/university/person/administrator.rb
index d223d63092e150c1f7e467438d1a2a536e531b2a..aae047a35bda4b05e961089bda4c377e4971c9e8 100644
--- a/app/models/university/person/administrator.rb
+++ b/app/models/university/person/administrator.rb
@@ -64,4 +64,12 @@ class University::Person::Administrator < University::Person
   def template_static
     "admin/university/people/administrators/static"
   end
+
+  def dependencies
+    [person]
+  end
+
+  def references
+    education_programs_as_administrator
+  end
 end
diff --git a/app/models/university/person/author.rb b/app/models/university/person/author.rb
index 16d662adc35a7fc4d660b21c6f0792b6d7399fe1..0adb5fac5166e15a9e0133391f0ac09a88617f36 100644
--- a/app/models/university/person/author.rb
+++ b/app/models/university/person/author.rb
@@ -64,4 +64,12 @@ class University::Person::Author < University::Person
   def template_static
     "admin/university/people/authors/static"
   end
+
+  def dependencies
+    [person]
+  end
+
+  def references
+    communication_website_posts
+  end
 end
diff --git a/app/models/university/person/researcher.rb b/app/models/university/person/researcher.rb
index 4b39dfe8a805aa218616ecca86ac59403f3076a7..6fbd666ad02fadd718e0c2390fe702851f926757 100644
--- a/app/models/university/person/researcher.rb
+++ b/app/models/university/person/researcher.rb
@@ -64,4 +64,12 @@ class University::Person::Researcher < University::Person
   def template_static
     "admin/university/people/researchers/static"
   end
+
+  def dependencies
+    [person]
+  end
+
+  def references
+    research_journal_papers
+  end
 end
diff --git a/app/models/university/person/teacher.rb b/app/models/university/person/teacher.rb
index 8d05c99b37475977271052658f1576ab14554709..064f031d5669eb7f8147f1309e7c3b6ca829f1fd 100644
--- a/app/models/university/person/teacher.rb
+++ b/app/models/university/person/teacher.rb
@@ -65,4 +65,12 @@ class University::Person::Teacher < University::Person
   def template_static
     "admin/university/people/teachers/static"
   end
+
+  def dependencies
+    [person]
+  end
+
+  def references
+    education_programs_as_teacher
+  end
 end
diff --git a/config/initializers/active_storage.rb b/config/initializers/active_storage.rb
index 111aff7e39b8b3c3216a4f2e143bfdcdae11411f..750130fecf6e1b2dbe3a2478802fe418dbcf964a 100644
--- a/config/initializers/active_storage.rb
+++ b/config/initializers/active_storage.rb
@@ -47,6 +47,10 @@ Rails.application.config.to_prepare do
       "data/media/#{id[0..1]}/#{id}.yml"
     end
 
+    def syncable?
+      true
+    end
+
     def exportable_to_git?
       true
     end