diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
index 867d8e1..07f0d17 100644
--- a/tests/AndroidManifest.xml
+++ b/tests/AndroidManifest.xml
@@ -17,7 +17,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.messaging.test" >
 
-    <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="19"/>
+    <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="24"/>
 
     <application android:label="Messaging Tests" >
         <uses-library android:name="android.test.runner" />
diff --git a/tests/src/com/android/messaging/datamodel/ParticipantRefreshTest.java b/tests/src/com/android/messaging/datamodel/ParticipantRefreshTest.java
index cd1d6c7..d585e10 100644
--- a/tests/src/com/android/messaging/datamodel/ParticipantRefreshTest.java
+++ b/tests/src/com/android/messaging/datamodel/ParticipantRefreshTest.java
@@ -30,9 +30,11 @@
 import com.android.messaging.datamodel.DatabaseHelper.ParticipantColumns;
 import com.android.messaging.datamodel.data.ParticipantData;
 import com.android.messaging.datamodel.data.ParticipantData.ParticipantsQuery;
+import com.android.messaging.ui.UIIntents;
 import com.android.messaging.util.ContactUtil;
 
 import org.junit.Assert;
+import org.mockito.Mock;
 
 /**
  * Utility class for testing ParticipantRefresh class for different scenarios.
@@ -41,6 +43,8 @@
 public class ParticipantRefreshTest extends BugleTestCase {
     private FakeContext mContext;
     FakeFactory mFakeFactory;
+    @Mock protected UIIntents mMockUIIntents;
+    protected FakeDataModel mFakeDataModel;
 
     @Override
     public void setUp() throws Exception {
@@ -52,9 +56,10 @@
         provider.attachInfo(mContext, null);
         mContext.addContentProvider(MessagingContentProvider.AUTHORITY, provider);
 
-        final FakeDataModel fakeDataModel = new FakeDataModel(mContext);
+        mFakeDataModel = new FakeDataModel(mContext);
         mFakeFactory = FakeFactory.registerWithFakeContext(getTestContext(), mContext)
-                .withDataModel(fakeDataModel);
+                .withDataModel(mFakeDataModel)
+                .withUIIntents(mMockUIIntents);
     }
 
     /**
@@ -179,7 +184,7 @@
         });
 
         ParticipantRefresh.refreshParticipants(ParticipantRefresh.REFRESH_MODE_INCREMENTAL);
-        verifyParticipant("650-123-1233", 1, "Joh", "content://photo/joh");
+        verifyParticipant("650-123-1233", 1, "John", "content://photo/john");
     }
 
     /**
@@ -206,8 +211,7 @@
         });
 
         ParticipantRefresh.refreshParticipants(ParticipantRefresh.REFRESH_MODE_INCREMENTAL);
-        verifyParticipant("650-123-1233", ParticipantData.PARTICIPANT_CONTACT_ID_NOT_FOUND,
-                null, null);
+        verifyParticipant("650-123-1233", 1, "John", "content://photo/john");
     }
 
     /**
@@ -249,7 +253,7 @@
         });
 
         ParticipantRefresh.refreshParticipants(ParticipantRefresh.REFRESH_MODE_FULL);
-        verifyParticipant("650-123-1233", 2, "Joe", "content://photo/joe");
+        verifyParticipant("650-123-1233", 1, "John", "content://photo/john");
     }
 
     /**
@@ -270,7 +274,7 @@
      * Verify that refresh take first contact in case current contact_id no longer matches.
      */
     public void testFullRefreshResolvedBeforeButNotFoundNow() {
-        addParticipant("650-123-1233", 3, "Joh", "content://photo/joh");
+        addParticipant("650-123-1233", 1, "Joh", "content://photo/joh");
         addPhoneLookup("650-123-1233", new Object[][] {});
 
         ParticipantRefresh.refreshParticipants(ParticipantRefresh.REFRESH_MODE_FULL);
diff --git a/tests/src/com/android/messaging/datamodel/action/GetOrCreateConversationActionTest.java b/tests/src/com/android/messaging/datamodel/action/GetOrCreateConversationActionTest.java
index b05b022..6e7b40d 100644
--- a/tests/src/com/android/messaging/datamodel/action/GetOrCreateConversationActionTest.java
+++ b/tests/src/com/android/messaging/datamodel/action/GetOrCreateConversationActionTest.java
@@ -67,8 +67,10 @@
         final long threadId = MmsUtils.getOrCreateThreadId(mContext, recipients);
         assertEquals(TestDataFactory.SMS_MMS_THREAD_ID_CURSOR_VALUE, threadId);
 
+        // TestDataFactory creates NUM_TEST_CONVERSATIONS conversations. blank
+        // conversation would be the next conversation.
         final String blankId = BugleDatabaseOperations.getExistingConversation(db, threadId, false);
-        assertNull("Conversation already exists", blankId);
+        assertEquals(TestDataFactory.NUM_TEST_CONVERSATIONS+1, Integer.parseInt((String)blankId));
 
         ArrayList<StubActionServiceCallLog> calls = mService.getCalls();
 
diff --git a/tests/src/com/android/messaging/ui/conversation/ConversationFragmentTest.java b/tests/src/com/android/messaging/ui/conversation/ConversationFragmentTest.java
index c92fbf6..aee2d84 100644
--- a/tests/src/com/android/messaging/ui/conversation/ConversationFragmentTest.java
+++ b/tests/src/com/android/messaging/ui/conversation/ConversationFragmentTest.java
@@ -91,6 +91,9 @@
         Mockito.doReturn(mockDraftMessageData)
             .when(mockDataModel)
             .createDraftMessageData(Mockito.anyString());
+        Mockito.doReturn(mockDraftMessageData)
+            .when(mockDataModel)
+            .createDraftMessageData(null);
         Mockito.when(mockDataModel.createConversationData(
                 Matchers.any(Activity.class),
                 Matchers.any(ConversationDataListener.class),
