diff --git a/app/controllers/server/websites_controller.rb b/app/controllers/server/websites_controller.rb
index 8e1992e01650fe13ba78754da0c4ce5e6eed065c..a5b335d147c051a3f5796e8826dfe35251c330eb 100644
--- a/app/controllers/server/websites_controller.rb
+++ b/app/controllers/server/websites_controller.rb
@@ -27,10 +27,6 @@ class Server::WebsitesController < Server::ApplicationController
 
   def update
     @website.update(website_params)
-    @website.recursive_dependencies.each do |dependency|
-      next unless dependency.respond_to?(:university_id)
-      dependency.update_column :university_id, @website.university_id
-    end
     redirect_to server_website_path(@website), notice: t('admin.successfully_updated_html', model: @website.to_s)
   end
 
diff --git a/app/models/communication/website.rb b/app/models/communication/website.rb
index 0886d3dfcc57f6cdc360b6c147ce63507a18a4dc..f94b13404ba25c0719e9e5a69543e92eb73f6a5c 100644
--- a/app/models/communication/website.rb
+++ b/app/models/communication/website.rb
@@ -81,6 +81,7 @@ class Communication::Website < ApplicationRecord
   validates :default_image, size: { less_than: 5.megabytes }
 
   before_validation :sanitize_fields
+  after_save :manage_university_change
 
   scope :ordered, -> { order(:name) }
   scope :in_production, -> { where(in_production: true) }
@@ -155,4 +156,21 @@ class Communication::Website < ApplicationRecord
     self.repository = Osuny::Sanitizer.sanitize(self.repository, 'string')
     self.url = Osuny::Sanitizer.sanitize(self.url, 'string')
   end
+
+  def manage_university_change
+    if saved_change_to_university_id?
+      recursive_dependencies.each do |dependency|
+        reconnect_dependency dependency
+      end
+    end
+  end
+  
+  def reconnect_dependency(dependency)
+    return unless dependency.respond_to?(:university_id)
+    # vérifier par les connexions qu'un objet indirect n'est pas utilisé dans un autre website
+    return if dependency.connections.where.not(website: self).any?
+    # il faut si l'objet est une person déconnecter le user éventuellement associé.
+    dependency.update_column :user_id, nil if dependency.is_a? University::Person
+    dependency.update_column :university_id, university_id
+  end
 end