diff --git a/reviewboard/admin/context_processors.py b/reviewboard/admin/context_processors.py
index bb8fb6338e24f225a42d3c5d3d4cba5f36f75a7a..27ed7a39fccdb771e5ba4daf7252c606cbfff651 100644
--- a/reviewboard/admin/context_processors.py
+++ b/reviewboard/admin/context_processors.py
@@ -1,5 +1,7 @@
 from __future__ import unicode_literals
 
+from djblets.siteconfig.models import SiteConfiguration
+
 from reviewboard import (get_manual_url, get_package_version,
                          get_version_string, is_release, VERSION)
 from reviewboard.admin.read_only import is_site_read_only_for
@@ -25,8 +27,19 @@ def read_only(request):
 
     Returns:
         dict:
-        Dictionary of read-only status information.
+        Dictionary of read-only status information. The dictionary will
+        contain the following keys:
+
+        ``'is_read_only'`` (:py:class:`bool`):
+            Whether the current user is in read-only mode or not.
+
+        ``'read_only_message'`` (:py:class:`unicode`):
+            A custom message to be displayed in the read-only banner. May be
+            an empty string.
     """
+    siteconfig = SiteConfiguration.objects.get_current()
+
     return {
         'is_read_only': is_site_read_only_for(request.user),
+        'read_only_message': siteconfig.get('read_only_message', ''),
     }
diff --git a/reviewboard/admin/forms.py b/reviewboard/admin/forms.py
index 58ad244577b4232fe7ae6c8097f3ecd1c3fd1ffc..c295ad86025b594f4c77b10535ab639d783df55a 100644
--- a/reviewboard/admin/forms.py
+++ b/reviewboard/admin/forms.py
@@ -94,6 +94,12 @@ class GeneralSettingsForm(SiteSettingsForm):
         required=False,
         widget=forms.TextInput(attrs={'size': '30'}))
 
+    read_only_message = forms.CharField(
+        label=_('Read-only message'),
+        help_text=_('A custom message displayed when the site is in read-only mode.'),
+        required=False,
+        widget=forms.TextInput(attrs={'size': '30'}))
+
     server = forms.CharField(
         label=_("Server"),
         help_text=_("The URL of this Review Board server. This should not "
@@ -369,7 +375,7 @@ class GeneralSettingsForm(SiteSettingsForm):
                 'fields': ('company', 'server', 'site_media_url',
                            'site_static_url', 'site_admin_name',
                            'site_admin_email', 'locale_timezone',
-                           'site_read_only'),
+                           'site_read_only', 'read_only_message'),
             },
             {
                 'classes': ('wide',),
diff --git a/reviewboard/static/rb/css/defs.less b/reviewboard/static/rb/css/defs.less
index d6e0679c33c0193e16a2b67a1869ee670f8785f2..b5c06448516e61da823c48fedb98bf4c38d9868d 100644
--- a/reviewboard/static/rb/css/defs.less
+++ b/reviewboard/static/rb/css/defs.less
@@ -32,6 +32,7 @@
 @read-only-banner-bg: #FFFA99;
 @read-only-banner-border-bottom: 1px darken(@read-only-banner-bg, 55%) solid;
 @read-only-banner-padding-left: @headerbar-padding-left;
+@read-only-banner-header-padding-right: 5px;
 
 @box-border-color: #888A85;
 @box-border-radius: 6px;
diff --git a/reviewboard/static/rb/css/pages/base.less b/reviewboard/static/rb/css/pages/base.less
index 53115f197d862b0c4bb9d9334c5ffc6cbc1f1edb..6c8cb579191892c134679746ebaa6ee68323824e 100644
--- a/reviewboard/static/rb/css/pages/base.less
+++ b/reviewboard/static/rb/css/pages/base.less
@@ -713,10 +713,15 @@ textarea {
   font-size: 110%;
   padding: @headerbar-padding;
   padding-left: @read-only-banner-padding-left;
+  vertical-align: middle;
+  h2 {
+    display: inline;
+    font-size: 100%;
+  }
 }
 
-#read-only-banner-message {
-  vertical-align: middle;
+#read-only-banner-header {
+  padding-right: @read-only-banner-header-padding-right;
 }
 
 #topbar {
diff --git a/reviewboard/templates/base.html b/reviewboard/templates/base.html
index 2f536d6fcde1722a1786d80d4d230f8118f8b62c..cc92b4a78f252c5e18ec4b3c842715c00564fb40 100644
--- a/reviewboard/templates/base.html
+++ b/reviewboard/templates/base.html
@@ -69,7 +69,12 @@
 {%  block read_only_banner %}
 {%   if siteconfig_settings.site_read_only %}
       <div id="read-only-banner">
-       <span id="read-only-banner-message">{% trans "Site is in read-only mode." %}</span>
+       <span id="read-only-banner-header">
+        <h2>{% trans "Read-Only Mode" %}</h2>
+       </span>
+       <span id="read-only-banner-message">
+        {{ read_only_message }}
+       </span>
       </div>
 {%   endif %}
 {%  endblock read_only_banner %}
