diff --git a/app/controllers/concerns/bbb_server.rb b/app/controllers/concerns/bbb_server.rb
index 1346f187ff0701a278cde2c392a229d203e077a6..26d9ea2d46db9dcd32617c8b4c9e1db238fca019 100644
--- a/app/controllers/concerns/bbb_server.rb
+++ b/app/controllers/concerns/bbb_server.rb
@@ -119,6 +119,20 @@ module BbbServer
     bbb_server.publish_recordings(record_id, false)
   end
 
+  # Protect a recording
+  def protect_recording(record_id, meta = {})
+    meta[:recordID] = record_id
+    meta[:protect] = true
+    bbb_server.send_api_request("updateRecordings", meta)
+  end
+
+  # Unprotect a recording
+  def unprotect_recording(record_id, meta = {})
+    meta[:recordID] = record_id
+    meta[:protect] = false
+    bbb_server.send_api_request("updateRecordings", meta)
+  end
+
   # Deletes a recording from a room.
   def delete_recording(record_id)
     bbb_server.delete_recordings(record_id)
diff --git a/app/controllers/recordings_controller.rb b/app/controllers/recordings_controller.rb
index f3e200bac2b1ec58445fd6ac081ca42bb802efc9..54b9d784d40c51f15814be59a53f29ee5ccf475c 100644
--- a/app/controllers/recordings_controller.rb
+++ b/app/controllers/recordings_controller.rb
@@ -28,6 +28,12 @@ class RecordingsController < ApplicationController
       "meta_#{META_LISTED}" => (params[:state] == "public"),
     }
 
+    if params[:state] == "protected"
+      protect_recording(params[:record_id])
+    else
+      unprotect_recording(params[:record_id])
+    end
+
     if params[:state] == "inaccessible"
       unpublish_recording(params[:record_id])
     else
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 6e752d0bd0558bc1aca14aadcf677004d7f4b15e..550c71a212f0e6989b9bb4e73a91ce4e91052f7e 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -147,4 +147,9 @@ module ApplicationHelper
       current_user&.role&.get_permission("can_launch_recording")
     end
   end
+
+  # Returns true if protected recordings is enabled on BigBlueButton/Scalelite server
+  def protected_recording?(rec)
+    !rec[:protected].nil?
+  end
 end
diff --git a/app/views/shared/components/_recording_row.html.erb b/app/views/shared/components/_recording_row.html.erb
index a6c4cb3cd06326973238e9c4153c85e83fe00571..091fbc152cb534118cce40e1fdff102c48bc78ff 100644
--- a/app/views/shared/components/_recording_row.html.erb
+++ b/app/views/shared/components/_recording_row.html.erb
@@ -52,6 +52,8 @@
     <div class="dropdown">
       <% if recording[:metadata][:"gl-listed"] == "true" %>
         <button class="btn btn-sm btn-secondary dropdown-toggle" data-toggle="dropdown"><i class="dropdown-icon fas fa-globe px-2"></i> <%= t("recording.visibility.public") %></button>
+      <% elsif recording[:protected] == "true" %>
+        <button class="btn btn-sm btn-secondary dropdown-toggle" data-toggle="dropdown"><i class="dropdown-icon fas fa-shield-alt px-2"></i> <%= t("recording.visibility.protected") %></button>
       <% elsif !recording[:published] %>
         <button class="btn btn-sm btn-secondary dropdown-toggle" data-toggle="dropdown"><i class="dropdown-icon fas fa-lock px-2"></i> <%= t("recording.visibility.inaccessible") %></button>
       <% else %>
@@ -61,6 +63,11 @@
         <%= button_to update_recording_path(meetingID: recording[:meetingID], record_id: recording[:recordID], state: "public"), class: "dropdown-item", "data-disable": "" do %>
           <i class="dropdown-icon fas fa-globe"></i> <%= t("recording.visibility.public") %>
         <% end %>
+        <% if protected_recording?(recording) %>
+          <%= button_to update_recording_path(meetingID: recording[:meetingID], record_id: recording[:recordID], state: "protected"), class: "dropdown-item", "data-disable": "" do %>
+            <i class="dropdown-icon fas fa-shield-alt"></i> <%= t("recording.visibility.protected") %>
+          <% end %>
+        <% end %>
         <%= button_to update_recording_path(meetingID: recording[:meetingID], record_id: recording[:recordID], state: "unlisted"), class: "dropdown-item", "data-disable": "" do %>
           <i class="dropdown-icon fas fa-link"></i> <%= t("recording.visibility.unlisted") %>
         <% end %>