diff --git a/app/controllers/admin/communication/extranets_controller.rb b/app/controllers/admin/communication/extranets_controller.rb
index 0329293ca8109949ecd81eb37556e0bc94c3e524..c4ca5d22ae83ccda613e1cc2fbb91ec39ca43b1f 100644
--- a/app/controllers/admin/communication/extranets_controller.rb
+++ b/app/controllers/admin/communication/extranets_controller.rb
@@ -55,6 +55,6 @@ class Admin::Communication::ExtranetsController < Admin::Communication::Applicat
 
   def extranet_params
     params.require(:communication_extranet)
-          .permit(:name, :domain)
+          .permit(:name, :domain, :logo, :logo_delete)
   end
 end
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index c21323d51354df8dd2e94efec70a7f8c8b9a9790..b296bd1603094237c05fa47fa3d948a30040fde1 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -1,7 +1,7 @@
 class ApplicationController < ActionController::Base
   include WithErrors
   include WithLocale
-  include WithUniversity
+  include WithDomain
 
   def breadcrumb
     add_breadcrumb t('home'), root_path
diff --git a/app/controllers/application_controller/with_domain.rb b/app/controllers/application_controller/with_domain.rb
new file mode 100644
index 0000000000000000000000000000000000000000..6311d132c8ee6c5ff8adba5992a960205c52a822
--- /dev/null
+++ b/app/controllers/application_controller/with_domain.rb
@@ -0,0 +1,30 @@
+module ApplicationController::WithDomain
+  extend ActiveSupport::Concern
+
+  included do
+    def current_extranet
+      @current_extranet ||= Communication::Extranet.with_host(request.host)
+    end
+    helper_method :current_extranet
+
+    def current_university
+      @current_university ||= begin
+        current_extranet.present? ? current_extranet.university
+                                  : University.with_host(request.host)
+      end
+    end
+    helper_method :current_university
+
+    def current_context
+      @current_context ||= begin
+        # Take the extranet as a context
+        context = current_extranet
+        # If no extranet, university becomes the context
+        context ||= current_university
+        # Return context, might be nil if neither extranet nor university
+        context
+      end
+    end
+    helper_method :current_context
+  end
+end
diff --git a/app/controllers/application_controller/with_university.rb b/app/controllers/application_controller/with_university.rb
deleted file mode 100644
index 6fa37e2878780bede8d647ca08200a701b0ea6a1..0000000000000000000000000000000000000000
--- a/app/controllers/application_controller/with_university.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-module ApplicationController::WithUniversity
-  extend ActiveSupport::Concern
-
-  included do
-    # Raises ActiveRecord::RecordNotFound to prevent access from non-listed hosts
-    def current_university
-      @current_university ||= University.with_host(request.host)
-    end
-    helper_method :current_university
-  end
-end
diff --git a/app/models/communication/extranet.rb b/app/models/communication/extranet.rb
index ee7404ad87d539ce1d29c71cc6dd5d0447311483..3ab3df33121f64dedf46635849f7c8c5d05501d9 100644
--- a/app/models/communication/extranet.rb
+++ b/app/models/communication/extranet.rb
@@ -22,6 +22,12 @@ class Communication::Extranet < ApplicationRecord
 
   validates_presence_of :name, :domain
 
+  has_one_attached_deletable :logo
+
+  def self.with_host(host)
+    find_by domain: host
+  end
+
   def url
     "https://#{domain}"
   end
diff --git a/app/models/university/with_identifier.rb b/app/models/university/with_identifier.rb
index f11d17f1aa274493d15a5e27c5934b0f14702aca..1e7815b69b4d3f25356d8101dfb5ed53141a0515 100644
--- a/app/models/university/with_identifier.rb
+++ b/app/models/university/with_identifier.rb
@@ -14,7 +14,7 @@ module University::WithIdentifier
     end
 
     def self.with_host(host)
-      find_by!(identifier: extract_identifier_from(host))
+      find_by identifier: extract_identifier_from(host)
     end
 
     private
diff --git a/app/views/admin/communication/extranets/_form.html.erb b/app/views/admin/communication/extranets/_form.html.erb
index b4b40af7ca312246322e4e4941a10c45de99b959..bcd279d9ffa618ad56fafa8680f599cfabc4c410 100644
--- a/app/views/admin/communication/extranets/_form.html.erb
+++ b/app/views/admin/communication/extranets/_form.html.erb
@@ -8,6 +8,22 @@
         <div class="card-body">
           <%= f.input :name %>
           <%= f.input :domain %>
+
+        </div>
+      </div>
+    </div>
+    <div class="col-md-4">
+      <div class="card flex-fill w-100">
+        <div class="card-header">
+          <h5 class="card-title mb-0"><%= t('logo') %></h5>
+        </div>
+        <div class="card-body">
+          <%= f.input :logo,
+                      as: :single_deletable_file,
+                      input_html: { accept: '.jpg,.jpeg,.png,.svg' },
+                      preview: 200,
+                      direct_upload: true %>
+
         </div>
       </div>
     </div>
diff --git a/app/views/layouts/devise.html.erb b/app/views/layouts/devise.html.erb
index 61956b6598dc6754d32c9780c5cdada5bd20c237..da32f8c68dbf28f08c67e47c2de97b812c1c1800 100644
--- a/app/views/layouts/devise.html.erb
+++ b/app/views/layouts/devise.html.erb
@@ -16,10 +16,10 @@
         <div class="col-sm-10 mx-auto">
           <h1 class="my-5 py-5 text-center">
             <%= link_to root_path do %>
-              <% if current_university.logo.attached? %>
-                <%= image_tag current_university.logo, width: 200, alt: current_university.to_s %>
+              <% if current_context.logo.attached? %>
+                <%= image_tag current_context.logo, width: 200, alt: current_context.to_s %>
               <% else %>
-                <%= current_university %>
+                <%= current_context %>
               <% end %>
             <% end %>
           </h1>