diff --git a/templates/zerver/app/invite_user.html b/templates/zerver/app/invite_user.html
index 1e070159d3..f3220e348d 100644
--- a/templates/zerver/app/invite_user.html
+++ b/templates/zerver/app/invite_user.html
@@ -21,6 +21,7 @@
                         
                     
                 
diff --git a/zerver/tests/test_signup.py b/zerver/tests/test_signup.py
index 4f96db0579..769737ec67 100644
--- a/zerver/tests/test_signup.py
+++ b/zerver/tests/test_signup.py
@@ -727,6 +727,7 @@ class InviteUserTest(InviteUserBase):
         self.submit_reg_form_for_user(invitee, "password")
         invitee_profile = self.nonreg_user('alice')
         self.assertTrue(invitee_profile.is_realm_admin)
+        self.assertFalse(invitee_profile.is_guest)
 
     def test_invite_user_as_admin_from_normal_account(self) -> None:
         """
@@ -749,6 +750,30 @@ class InviteUserTest(InviteUserBase):
         response = self.invite(invitee, ["Denmark"], invite_as=100)
         self.assert_json_error(response, "Must be invited as an valid type of user")
 
+    def test_successful_invite_user_as_guest_from_normal_account(self) -> None:
+        self.login(self.example_email('hamlet'))
+        invitee = self.nonreg_email('alice')
+        self.assert_json_success(self.invite(invitee, ["Denmark"],
+                                             invite_as=PreregistrationUser.INVITE_AS['GUEST_USER']))
+        self.assertTrue(find_key_by_email(invitee))
+
+        self.submit_reg_form_for_user(invitee, "password")
+        invitee_profile = self.nonreg_user('alice')
+        self.assertFalse(invitee_profile.is_realm_admin)
+        self.assertTrue(invitee_profile.is_guest)
+
+    def test_successful_invite_user_as_guest_from_admin_account(self) -> None:
+        self.login(self.example_email('iago'))
+        invitee = self.nonreg_email('alice')
+        self.assert_json_success(self.invite(invitee, ["Denmark"],
+                                             invite_as=PreregistrationUser.INVITE_AS['GUEST_USER']))
+        self.assertTrue(find_key_by_email(invitee))
+
+        self.submit_reg_form_for_user(invitee, "password")
+        invitee_profile = self.nonreg_user('alice')
+        self.assertFalse(invitee_profile.is_realm_admin)
+        self.assertTrue(invitee_profile.is_guest)
+
     def test_successful_invite_user_with_name(self) -> None:
         """
         A call to /json/invites with valid parameters causes an invitation
diff --git a/zerver/views/registration.py b/zerver/views/registration.py
index 6800bb40ce..e49028c2d6 100644
--- a/zerver/views/registration.py
+++ b/zerver/views/registration.py
@@ -81,6 +81,7 @@ def accounts_register(request: HttpRequest) -> HttpResponse:
     realm_creation = prereg_user.realm_creation
     password_required = prereg_user.password_required
     is_realm_admin = prereg_user.invited_as == PreregistrationUser.INVITE_AS['REALM_ADMIN'] or realm_creation
+    is_guest = prereg_user.invited_as == PreregistrationUser.INVITE_AS['GUEST_USER']
 
     try:
         validators.validate_email(email)
@@ -280,7 +281,9 @@ def accounts_register(request: HttpRequest) -> HttpResponse:
             # make it respect invited_as_admin / is_realm_admin.
         else:
             user_profile = do_create_user(email, password, realm, full_name, short_name,
-                                          prereg_user=prereg_user, is_realm_admin=is_realm_admin,
+                                          prereg_user=prereg_user,
+                                          is_realm_admin=is_realm_admin,
+                                          is_guest=is_guest,
                                           tos_version=settings.TOS_VERSION,
                                           timezone=timezone,
                                           newsletter_data={"IP": request.META['REMOTE_ADDR']},