diff --git a/src/com/android/tradefed/device/UserInfo.java b/src/com/android/tradefed/device/UserInfo.java
index b37ef1b..4cccbbb 100644
--- a/src/com/android/tradefed/device/UserInfo.java
+++ b/src/com/android/tradefed/device/UserInfo.java
@@ -42,12 +42,36 @@
     public enum UserType {
         /** current foreground user of the device */
         CURRENT,
+        /**
+         * guest user. Only one can exist at a time, may be ephemeral and have more restrictions.
+         */
+        GUEST,
         /** user flagged as primary on the device; most often primary = system user = user 0 */
         PRIMARY,
         /** system user = user 0 */
         SYSTEM,
         /** secondary user, i.e. non-primary and non-system. */
         SECONDARY;
+
+        public boolean isCurrent() {
+            return this == CURRENT;
+        }
+
+        public boolean isGuest() {
+            return this == GUEST;
+        }
+
+        public boolean isPrimary() {
+            return this == PRIMARY;
+        }
+
+        public boolean isSystem() {
+            return this == SYSTEM;
+        }
+
+        public boolean isSecondary() {
+            return this == SECONDARY;
+        }
     }
 
     public UserInfo(int userId, String userName, int flag, boolean isRunning) {
@@ -73,6 +97,10 @@
         return mIsRunning;
     }
 
+    public boolean isGuest() {
+        return (mFlag & FLAG_GUEST) == FLAG_GUEST;
+    }
+
     public boolean isPrimary() {
         return (mFlag & FLAG_PRIMARY) == FLAG_PRIMARY;
     }
@@ -90,6 +118,8 @@
         switch (userType) {
             case CURRENT:
                 return mUserId == currentUserId;
+            case GUEST:
+                return isGuest();
             case PRIMARY:
                 return isPrimary();
             case SYSTEM:
diff --git a/src/com/android/tradefed/suite/checker/UserChecker.java b/src/com/android/tradefed/suite/checker/UserChecker.java
index bca52d5..92b12dd 100644
--- a/src/com/android/tradefed/suite/checker/UserChecker.java
+++ b/src/com/android/tradefed/suite/checker/UserChecker.java
@@ -65,7 +65,7 @@
             mSwitchedToUserId =
                     device.createUser(
                             /* name= */ "Tf" + mUserToSwitchTo.toString().toLowerCase(),
-                            /* guest= */ false,
+                            /* guest= */ mUserToSwitchTo.isGuest(),
                             /* ephemeral= */ false);
             CLog.i(
                     "No user of type %s found, created user %d",
diff --git a/tests/src/com/android/tradefed/suite/checker/UserCheckerTest.java b/tests/src/com/android/tradefed/suite/checker/UserCheckerTest.java
index 6d36c6c..d4fece2 100644
--- a/tests/src/com/android/tradefed/suite/checker/UserCheckerTest.java
+++ b/tests/src/com/android/tradefed/suite/checker/UserCheckerTest.java
@@ -185,6 +185,26 @@
     }
 
     @Test
+    public void testSwitchToGuest() throws Exception {
+        UserChecker checker = new UserChecker();
+        OptionSetter mOptionSetter = new OptionSetter(checker);
+        mOptionSetter.setOptionValue("user-type", "guest");
+        ITestDevice device =
+                mockDeviceUserState(
+                        /* currentUser=  */ 0,
+                        /* userIds= */ new Integer[] {0, 10},
+                        /* flags=        */ new Integer[] {0, UserInfo.FLAG_GUEST},
+                        /* isRunning= */ new Boolean[] {true, false});
+
+        when(device.switchUser(10)).thenReturn(true);
+
+        StatusCheckerResult result = checker.preExecutionCheck(device);
+        assertEquals(CheckStatus.SUCCESS, result.getStatus());
+        verify(device, never()).createUser(any(), anyBoolean(), anyBoolean());
+        verify(device, times(1)).switchUser(10);
+    }
+
+    @Test
     public void testCreateSecondary() throws Exception {
         UserChecker checker = new UserChecker();
         OptionSetter mOptionSetter = new OptionSetter(checker);
@@ -201,6 +221,24 @@
         verify(device, times(1)).switchUser(10);
     }
 
+    @Test
+    public void testCreateGuest() throws Exception {
+        UserChecker checker = new UserChecker();
+        OptionSetter mOptionSetter = new OptionSetter(checker);
+        mOptionSetter.setOptionValue("user-type", "guest");
+        ITestDevice device =
+                mockDeviceUserState(/* currentUser=  */ 0, /* userIds= */ new Integer[] {0});
+
+        when(device.createUser("Tfguest", /* guest= */ true, /* ephemeral= */ false))
+                .thenReturn(10);
+        when(device.switchUser(10)).thenReturn(true);
+
+        StatusCheckerResult result = checker.preExecutionCheck(device);
+        assertEquals(CheckStatus.SUCCESS, result.getStatus());
+        verify(device, times(1)).createUser("Tfguest", /* guest= */ true, /* ephemeral= */ false);
+        verify(device, times(1)).switchUser(10);
+    }
+
     // // TEST HELPERS
 
     /** Return a device with the user state calls mocked. */
diff --git a/tests/src/com/android/tradefed/targetprep/SwitchUserTargetPreparerTest.java b/tests/src/com/android/tradefed/targetprep/SwitchUserTargetPreparerTest.java
index d18c551..c5bbb06 100644
--- a/tests/src/com/android/tradefed/targetprep/SwitchUserTargetPreparerTest.java
+++ b/tests/src/com/android/tradefed/targetprep/SwitchUserTargetPreparerTest.java
@@ -57,7 +57,7 @@
     }
 
     @Test
-    public void testSetUpRunAsPrimary_ifAlreadyInPrimary()
+    public void testSetUpRunAsPrimary_ifAlreadyInPrimary_noSwitch()
             throws DeviceNotAvailableException, TargetSetupError, ConfigurationException {
         mOptionSetter.setOptionValue("user-type", "primary");
 
@@ -77,23 +77,22 @@
     }
 
     @Test
-    public void testSetUpRunAsSystem_ifAlreadyInSystem_switchToSystem()
+    public void testSetUpRunAsSystem_ifAlreadyInSystem_noSwitch()
             throws DeviceNotAvailableException, TargetSetupError, ConfigurationException {
         mOptionSetter.setOptionValue("user-type", "system");
 
         // setup
-        when(mMockDevice.getCurrentUser()).thenReturn(11);
+        when(mMockDevice.getCurrentUser()).thenReturn(0);
         mockListUsersInfo(
                 mMockDevice,
                 /* userIds= */ new Integer[] {0, 11},
                 /* flags= */ new Integer[] {0, UserInfo.FLAG_PRIMARY});
-        when(mMockDevice.switchUser(0)).thenReturn(true);
 
         // act
         mSwitchUserTargetPreparer.setUp(mMockDevice, /* buildInfo= */ null);
 
         // assert
-        verify(mMockDevice, times(1)).switchUser(0);
+        verify(mMockDevice, never()).switchUser(0);
     }
 
     @Test
@@ -117,6 +116,26 @@
     }
 
     @Test
+    public void testSetUpRunAsGuest_ifNotInGuest_switchToGuest()
+            throws DeviceNotAvailableException, TargetSetupError, ConfigurationException {
+        mOptionSetter.setOptionValue("user-type", "guest");
+
+        // setup
+        when(mMockDevice.getCurrentUser()).thenReturn(11);
+        mockListUsersInfo(
+                mMockDevice,
+                /* userIds= */ new Integer[] {0, 10, 11},
+                /* flags= */ new Integer[] {0, UserInfo.FLAG_GUEST, 0});
+        when(mMockDevice.switchUser(10)).thenReturn(true);
+
+        // act
+        mSwitchUserTargetPreparer.setUp(mMockDevice, /* buildInfo= */ null);
+
+        // assert
+        verify(mMockDevice, times(1)).switchUser(10);
+    }
+
+    @Test
     public void testSetUpRunAsSystem_ifNotInSystem_switchToSystem()
             throws DeviceNotAvailableException, TargetSetupError, ConfigurationException {
         mOptionSetter.setOptionValue("user-type", "system");
