diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 91c91b9..67161ad 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -294,7 +294,8 @@
                   android:launchMode="singleInstance"
                   android:configChanges="keyboardHidden"
                   android:exported="false"
-                  android:screenOrientation="nosensor" >
+                  android:screenOrientation="nosensor"
+                  android:encryptionAware="true" >
         </activity>
 
         <!-- BroadcastReceiver for receiving Intents from Notification mechanism. -->
@@ -302,7 +303,8 @@
                   android:exported="false" />
 
         <service android:name="com.android.incallui.InCallServiceImpl"
-                 android:permission="android.permission.BIND_INCALL_SERVICE" >
+                 android:permission="android.permission.BIND_INCALL_SERVICE"
+                 android:encryptionAware="true" >
             <meta-data android:name="android.telecom.IN_CALL_SERVICE_UI" android:value="true" />
             <intent-filter>
                 <action android:name="android.telecom.InCallService"/>
diff --git a/src/com/android/dialer/FloatingActionButtonBehavior.java b/src/com/android/dialer/FloatingActionButtonBehavior.java
index 8a407bd..679c9a7 100644
--- a/src/com/android/dialer/FloatingActionButtonBehavior.java
+++ b/src/com/android/dialer/FloatingActionButtonBehavior.java
@@ -34,17 +34,14 @@
 
     @Override
     public boolean layoutDependsOn(CoordinatorLayout parent, FrameLayout child, View dependency) {
-        // This needs to return true to trigger the callback correctly.
-        return true;
+        return dependency instanceof SnackbarLayout;
     }
 
     @Override
     public boolean onDependentViewChanged(CoordinatorLayout parent, FrameLayout child,
             View dependency) {
-        if (dependency instanceof SnackbarLayout) {
-            float translationY = Math.min(0, dependency.getTranslationY() - dependency.getHeight());
-            child.setTranslationY(translationY);
-        }
+        float translationY = Math.min(0, dependency.getTranslationY() - dependency.getHeight());
+        child.setTranslationY(translationY);
         return true;
     }
 }
diff --git a/src/com/android/dialer/calllog/PhoneNumberDisplayUtil.java b/src/com/android/dialer/calllog/PhoneNumberDisplayUtil.java
index 91cd3e1..09b42e9 100644
--- a/src/com/android/dialer/calllog/PhoneNumberDisplayUtil.java
+++ b/src/com/android/dialer/calllog/PhoneNumberDisplayUtil.java
@@ -78,7 +78,7 @@
         } else if (!TextUtils.isEmpty(number)) {
             return number.toString() + postDialDigits;
         } else {
-            return "";
+            return context.getResources().getString(R.string.unknown);
         }
     }
 
diff --git a/src/com/android/dialer/database/FilteredNumberAsyncQueryHandler.java b/src/com/android/dialer/database/FilteredNumberAsyncQueryHandler.java
index 06aca78..ff9b1be 100644
--- a/src/com/android/dialer/database/FilteredNumberAsyncQueryHandler.java
+++ b/src/com/android/dialer/database/FilteredNumberAsyncQueryHandler.java
@@ -134,7 +134,7 @@
                 new Listener() {
                     @Override
                     protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
-                        listener.onHasBlockedNumbers(cursor.getCount() > 0);
+                        listener.onHasBlockedNumbers(cursor != null && cursor.getCount() > 0);
                     }
                 },
                 getContentUri(null),
@@ -161,7 +161,7 @@
                 new Listener() {
                     @Override
                     protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
-                        if (cursor.getCount() != 1) {
+                        if (cursor == null || cursor.getCount() != 1) {
                             listener.onCheckComplete(null);
                             return;
                         }
@@ -246,9 +246,10 @@
         startQuery(NO_TOKEN, new Listener() {
             @Override
             public void onQueryComplete(int token, Object cookie, Cursor cursor) {
-                if (cursor.getCount() != 1) {
+                int rowsReturned = cursor == null ? 0 : cursor.getCount();
+                if (rowsReturned != 1) {
                     throw new SQLiteDatabaseCorruptException
-                            ("Returned " + cursor.getCount() + " rows for uri "
+                            ("Returned " + rowsReturned + " rows for uri "
                                     + uri + "where 1 expected.");
                 }
                 cursor.moveToFirst();
