diff --git a/tests/Android.mk b/tests/Android.mk
index bb31539..204b8c3 100644
--- a/tests/Android.mk
+++ b/tests/Android.mk
@@ -7,6 +7,8 @@
 
 LOCAL_JAVA_LIBRARIES := android.test.runner bouncycastle
 
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-test mockito-target
+
 # Include all test java files.
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
index aa7f947..fe9520e 100644
--- a/tests/AndroidManifest.xml
+++ b/tests/AndroidManifest.xml
@@ -51,17 +51,7 @@
         </activity>
     </application>
 
-    <instrumentation android:name="android.test.InstrumentationTestRunner"
-        android:targetPackage="com.android.settings"
-        android:label="Settings App Tests">
-    </instrumentation>
-
-    <instrumentation android:name="SettingsLaunchPerformance"
-        android:targetPackage="com.android.settings"
-        android:label="Settings Launch Performance">
-    </instrumentation>
-
-    <instrumentation android:name="android.test.InstrumentationTestRunner"
+    <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
         android:targetPackage="com.android.settings"
         android:label="Settings Test Cases">
     </instrumentation>
diff --git a/tests/README b/tests/README
new file mode 100644
index 0000000..9af7c8a
--- /dev/null
+++ b/tests/README
@@ -0,0 +1,17 @@
+To build the tests you can use the following command at the root of your android source tree
+$ make SettingsTests
+
+The test apk then needs to be installed onto your test device via for example
+$ adb install -r out/target/product/shamu/data/app/SettingsTests/SettingsTests.apk
+
+To run all tests:
+$ adb shell am instrument -w com.android.settings.tests/android.support.test.runner.AndroidJUnitRunner
+
+To run all tests in a specific class:
+$ adb shell am instrument -w -e class com.android.managedprovisioning.<class> com.android.managedprovisioning.tests/android.test.InstrumentationTestRunner
+
+To run a specific test:
+$ adb shell am instrument -w -e class com.android.settings.<class> com.android.settings.tests/android.support.test.runner.AndroidJUnitRunner
+
+More general information can be found at
+http://developer.android.com/reference/android/support/test/runner/AndroidJUnitRunner.html
diff --git a/tests/src/com/android/settings/UtilsTests.java b/tests/src/com/android/settings/UtilsTests.java
new file mode 100644
index 0000000..9d4a5b8
--- /dev/null
+++ b/tests/src/com/android/settings/UtilsTests.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertNull;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.when;
+
+import android.content.pm.UserInfo;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+public class UtilsTests extends AndroidTestCase {
+    private static final int TEST_PRIMARY_USER_ID = 10;
+    private static final int TEST_MANAGED_PROFILE_ID = 11;
+
+    @Mock private UserManager mUserManager;
+
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        // // this is necessary for mockito to work
+        System.setProperty("dexmaker.dexcache", getContext().getCacheDir().toString());
+
+        MockitoAnnotations.initMocks(this);
+        when(mUserManager.getUserHandle()).thenReturn(TEST_PRIMARY_USER_ID);
+        UserInfo primaryUser = new UserInfo(TEST_PRIMARY_USER_ID, null,
+                UserInfo.FLAG_INITIALIZED | UserInfo.FLAG_PRIMARY);
+        when(mUserManager.getUserInfo(TEST_PRIMARY_USER_ID)).thenReturn(primaryUser);
+        UserInfo managedProfile = new UserInfo(TEST_MANAGED_PROFILE_ID, null,
+                UserInfo.FLAG_INITIALIZED | UserInfo.FLAG_MANAGED_PROFILE);
+        when(mUserManager.getUserInfo(eq(TEST_MANAGED_PROFILE_ID))).thenReturn(managedProfile);
+    }
+
+    @SmallTest
+    public void testGetManagedProfile() {
+        UserHandle[] userHandles = new UserHandle[] {
+            new UserHandle(TEST_PRIMARY_USER_ID),
+            new UserHandle(TEST_MANAGED_PROFILE_ID)
+        };
+        when(mUserManager.getUserProfiles())
+                .thenReturn(new ArrayList<UserHandle>(Arrays.asList(userHandles)));
+        assertEquals(TEST_MANAGED_PROFILE_ID,
+                Utils.getManagedProfile(mUserManager).getIdentifier());
+    }
+
+    @SmallTest
+    public void testGetManagedProfile_notPresent() {
+        UserHandle[] userHandles = new UserHandle[] {
+            new UserHandle(TEST_PRIMARY_USER_ID)
+        };
+        when(mUserManager.getUserProfiles())
+                .thenReturn(new ArrayList<UserHandle>(Arrays.asList(userHandles)));
+        assertNull(Utils.getManagedProfile(mUserManager));
+    }
+}
