diff --git a/templates/zerver/app/settings_overlay.html b/templates/zerver/app/settings_overlay.html
index d6bb150b46..63bae0ed3c 100644
--- a/templates/zerver/app/settings_overlay.html
+++ b/templates/zerver/app/settings_overlay.html
@@ -111,6 +111,7 @@
                     
                     {% endif %}
                 
+                {% if not is_guest %}
                 
                     
                     {{ _('Default streams') }}
@@ -118,6 +119,7 @@
                     
                     {% endif %}
                 
+                {% endif %}
                 
                     
                     {{ _('Linkifiers') }}
diff --git a/zerver/lib/actions.py b/zerver/lib/actions.py
index d603b46bd5..741fe42c2a 100644
--- a/zerver/lib/actions.py
+++ b/zerver/lib/actions.py
@@ -3650,14 +3650,14 @@ def notify_default_streams(realm: Realm) -> None:
         type="default_streams",
         default_streams=streams_to_dicts_sorted(get_default_streams_for_realm(realm.id))
     )
-    send_event(realm, event, active_user_ids(realm.id))
+    send_event(realm, event, active_non_guest_user_ids(realm.id))
 
 def notify_default_stream_groups(realm: Realm) -> None:
     event = dict(
         type="default_stream_groups",
         default_stream_groups=default_stream_groups_to_dicts_sorted(get_default_stream_groups(realm))
     )
-    send_event(realm, event, active_user_ids(realm.id))
+    send_event(realm, event, active_non_guest_user_ids(realm.id))
 
 def do_add_default_stream(stream: Stream) -> None:
     realm_id = stream.realm_id
diff --git a/zerver/lib/events.py b/zerver/lib/events.py
index f9482d793c..edb64f1d98 100644
--- a/zerver/lib/events.py
+++ b/zerver/lib/events.py
@@ -289,11 +289,17 @@ def fetch_initial_state_data(user_profile: UserProfile,
         state['stream_name_max_length'] = Stream.MAX_NAME_LENGTH
         state['stream_description_max_length'] = Stream.MAX_DESCRIPTION_LENGTH
     if want('default_streams'):
-        state['realm_default_streams'] = streams_to_dicts_sorted(
-            get_default_streams_for_realm(realm.id))
+        if user_profile.is_guest:
+            state['realm_default_streams'] = []
+        else:
+            state['realm_default_streams'] = streams_to_dicts_sorted(
+                get_default_streams_for_realm(realm.id))
     if want('default_stream_groups'):
-        state['realm_default_stream_groups'] = default_stream_groups_to_dicts_sorted(
-            get_default_stream_groups(realm))
+        if user_profile.is_guest:
+            state['realm_default_stream_groups'] = []
+        else:
+            state['realm_default_stream_groups'] = default_stream_groups_to_dicts_sorted(
+                get_default_stream_groups(realm))
 
     if want('stop_words'):
         state['stop_words'] = read_stop_words()
diff --git a/zerver/tests/test_events.py b/zerver/tests/test_events.py
index 88ac4d878c..3f4cdd8619 100644
--- a/zerver/tests/test_events.py
+++ b/zerver/tests/test_events.py
@@ -44,6 +44,7 @@ from zerver.lib.actions import (
     do_change_full_name,
     do_change_icon_source,
     do_change_is_admin,
+    do_change_is_guest,
     do_change_notification_settings,
     do_change_realm_domain,
     do_change_stream_description,
@@ -1422,6 +1423,21 @@ class EventsRegisterTest(ZulipTestCase):
         error = default_stream_groups_checker('events[0]', events[0])
         self.assert_on_error(error)
 
+    def test_default_stream_group_events_guest(self) -> None:
+        streams = []
+        for stream_name in ["Scotland", "Verona", "Denmark"]:
+            streams.append(get_stream(stream_name, self.user_profile.realm))
+
+        do_create_default_stream_group(self.user_profile.realm, "group1",
+                                       "This is group1", streams)
+        group = lookup_default_stream_groups(["group1"], self.user_profile.realm)[0]
+
+        do_change_is_guest(self.user_profile, True)
+        venice_stream = get_stream("Venice", self.user_profile.realm)
+        self.do_test(lambda: do_add_streams_to_default_stream_group(self.user_profile.realm,
+                                                                    group, [venice_stream]),
+                     state_change_expected = False, num_events=0)
+
     def test_default_streams_events(self) -> None:
         default_streams_checker = self.check_events_dict([
             ('type', equals('default_streams')),
@@ -1440,6 +1456,14 @@ class EventsRegisterTest(ZulipTestCase):
         error = default_streams_checker('events[0]', events[0])
         self.assert_on_error(error)
 
+    def test_default_streams_events_guest(self) -> None:
+        do_change_is_guest(self.user_profile, True)
+        stream = get_stream("Scotland", self.user_profile.realm)
+        self.do_test(lambda: do_add_default_stream(stream),
+                     state_change_expected = False, num_events=0)
+        self.do_test(lambda: do_remove_default_stream(stream),
+                     state_change_expected = False, num_events=0)
+
     def test_muted_topics_events(self) -> None:
         muted_topics_checker = self.check_events_dict([
             ('type', equals('muted_topics')),