diff --git a/res/layout/document_debug_info.xml b/res/layout/document_debug_info.xml
index 83664af..c24a05b 100644
--- a/res/layout/document_debug_info.xml
+++ b/res/layout/document_debug_info.xml
@@ -21,6 +21,5 @@
     android:layout_height="wrap_content"
     android:layout_margin="@dimen/grid_item_margin"
     android:textAlignment="viewStart"
-    android:typeface="monospace"
     android:textSize="11sp"
     android:textColor="#FF000000" />
diff --git a/src/com/android/documentsui/MenuManager.java b/src/com/android/documentsui/MenuManager.java
index 0d9b188..a3732e3 100644
--- a/src/com/android/documentsui/MenuManager.java
+++ b/src/com/android/documentsui/MenuManager.java
@@ -25,7 +25,6 @@
 import com.android.documentsui.base.DocumentInfo;
 import com.android.documentsui.base.Menus;
 import com.android.documentsui.base.RootInfo;
-import com.android.documentsui.base.Shared;
 import com.android.documentsui.base.State;
 import com.android.documentsui.dirlist.DirectoryFragment;
 import com.android.documentsui.queries.SearchViewManager;
diff --git a/src/com/android/documentsui/Metrics.java b/src/com/android/documentsui/Metrics.java
index 52d348d..15cf902 100644
--- a/src/com/android/documentsui/Metrics.java
+++ b/src/com/android/documentsui/Metrics.java
@@ -31,6 +31,7 @@
 import android.util.Log;
 
 import com.android.documentsui.base.DocumentInfo;
+import com.android.documentsui.base.Providers;
 import com.android.documentsui.base.RootInfo;
 import com.android.documentsui.base.State;
 import com.android.documentsui.base.State.ActionType;
@@ -48,13 +49,6 @@
 public final class Metrics {
     private static final String TAG = "Metrics";
 
-    // These are the native provider authorities that the metrics code is capable of recognizing and
-    // explicitly counting.
-    private static final String AUTHORITY_MEDIA = "com.android.providers.media.documents";
-    private static final String AUTHORITY_STORAGE = "com.android.externalstorage.documents";
-    private static final String AUTHORITY_DOWNLOADS = "com.android.providers.downloads.documents";
-    private static final String AUTHORITY_MTP = "com.android.mtp.documents";
-
     // These strings have to be whitelisted in tron. Do not change them.
     private static final String COUNT_LAUNCH_ACTION = "docsui_launch_action";
     private static final String COUNT_ROOT_VISITED = "docsui_root_visited";
@@ -668,26 +662,26 @@
         }
 
         switch (uri.getAuthority()) {
-            case AUTHORITY_MEDIA:
+            case Providers.AUTHORITY_MEDIA:
                 switch (DocumentsContract.getRootId(uri)) {
-                    case "audio_root":
+                    case Providers.ROOT_ID_AUDIO:
                         return ROOT_AUDIO;
-                    case "images_root":
+                    case Providers.ROOT_ID_IMAGES:
                         return ROOT_IMAGES;
-                    case "videos_root":
+                    case Providers.ROOT_ID_VIDEOS:
                         return ROOT_VIDEOS;
                     default:
                         return ROOT_OTHER;
                 }
-            case AUTHORITY_STORAGE:
-                if ("home".equals(DocumentsContract.getRootId(uri))) {
+            case Providers.AUTHORITY_STORAGE:
+                if (Providers.ROOT_ID_HOME.equals(DocumentsContract.getRootId(uri))) {
                     return ROOT_HOME;
                 } else {
                     return ROOT_DEVICE_STORAGE;
                 }
-            case AUTHORITY_DOWNLOADS:
+            case Providers.AUTHORITY_DOWNLOADS:
                 return ROOT_DOWNLOADS;
-            case AUTHORITY_MTP:
+            case Providers.AUTHORITY_MTP:
                 return ROOT_MTP;
             default:
                 return ROOT_OTHER;
@@ -748,9 +742,9 @@
 
     private static boolean isSystemProvider(String authority) {
         switch (authority) {
-            case AUTHORITY_MEDIA:
-            case AUTHORITY_STORAGE:
-            case AUTHORITY_DOWNLOADS:
+            case Providers.AUTHORITY_MEDIA:
+            case Providers.AUTHORITY_STORAGE:
+            case Providers.AUTHORITY_DOWNLOADS:
                 return true;
             default:
                 return false;
diff --git a/src/com/android/documentsui/OpenExternalDirectoryActivity.java b/src/com/android/documentsui/OpenExternalDirectoryActivity.java
index 77e76f9..44ccc1e 100644
--- a/src/com/android/documentsui/OpenExternalDirectoryActivity.java
+++ b/src/com/android/documentsui/OpenExternalDirectoryActivity.java
@@ -68,6 +68,8 @@
 import android.widget.CompoundButton.OnCheckedChangeListener;
 import android.widget.TextView;
 
+import com.android.documentsui.base.Providers;
+
 import java.io.File;
 import java.io.IOException;
 import java.util.List;
@@ -78,7 +80,6 @@
 public class OpenExternalDirectoryActivity extends Activity {
     private static final String TAG = "OpenExternalDirectory";
     private static final String FM_TAG = "open_external_directory";
-    private static final String EXTERNAL_STORAGE_AUTH = "com.android.externalstorage.documents";
     private static final String EXTRA_FILE = "com.android.documentsui.FILE";
     private static final String EXTRA_APP_LABEL = "com.android.documentsui.APP_LABEL";
     private static final String EXTRA_VOLUME_LABEL = "com.android.documentsui.VOLUME_LABEL";
@@ -315,7 +316,7 @@
         }
         if (DEBUG) Log.d(TAG, "doc id for " + file + ": " + docId);
 
-        final Uri uri = DocumentsContract.buildTreeDocumentUri(EXTERNAL_STORAGE_AUTH, docId);
+        final Uri uri = DocumentsContract.buildTreeDocumentUri(Providers.AUTHORITY_STORAGE, docId);
         if (uri == null) {
             Log.e(TAG, "Could not get URI for doc id " + docId);
             return null;
@@ -502,7 +503,7 @@
     private synchronized ContentProviderClient getExternalStorageClient() {
         if (mExternalStorageClient == null) {
             mExternalStorageClient =
-                    getContentResolver().acquireContentProviderClient(EXTERNAL_STORAGE_AUTH);
+                    getContentResolver().acquireContentProviderClient(Providers.AUTHORITY_STORAGE);
         }
         return mExternalStorageClient;
     }
diff --git a/src/com/android/documentsui/base/DocumentInfo.java b/src/com/android/documentsui/base/DocumentInfo.java
index afdaccc..bf01f2f 100644
--- a/src/com/android/documentsui/base/DocumentInfo.java
+++ b/src/com/android/documentsui/base/DocumentInfo.java
@@ -222,7 +222,8 @@
                 + ", isDeleteSupported=" + isDeleteSupported()
                 + ", isCreateSupported=" + isCreateSupported()
                 + ", isRenameSupported=" + isRenameSupported()
-                + "}";
+                + "} @ "
+                + derivedUri;
     }
 
     public boolean isCreateSupported() {
diff --git a/src/com/android/documentsui/base/Providers.java b/src/com/android/documentsui/base/Providers.java
new file mode 100644
index 0000000..561c442
--- /dev/null
+++ b/src/com/android/documentsui/base/Providers.java
@@ -0,0 +1,37 @@
+/*
+ * 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.documentsui.base;
+
+/**
+ * Details about various system providers. These all need to be in sync with the
+ * resources in their respective packages.
+ */
+public final class Providers {
+
+    public static final String AUTHORITY_STORAGE = "com.android.externalstorage.documents";
+    public static final String ROOT_ID_DEVICE = "primary";
+    public static final String ROOT_ID_HOME = "home";
+
+    public static final String AUTHORITY_DOWNLOADS = "com.android.providers.downloads.documents";
+    public static final String ROOT_ID_DOWNLOADS = "downloads";
+
+    public static final String AUTHORITY_MEDIA = "com.android.providers.media.documents";
+    public static final String ROOT_ID_IMAGES = "images_root";
+    public static final String ROOT_ID_VIDEOS = "videos_root";
+    public static final String ROOT_ID_AUDIO = "audio_root";
+
+    public static final String AUTHORITY_MTP = "com.android.mtp.documents";
+}
diff --git a/src/com/android/documentsui/base/RootInfo.java b/src/com/android/documentsui/base/RootInfo.java
index 3a19ef7..50b9603 100644
--- a/src/com/android/documentsui/base/RootInfo.java
+++ b/src/com/android/documentsui/base/RootInfo.java
@@ -252,30 +252,30 @@
     }
 
     public boolean isExternalStorage() {
-        return "com.android.externalstorage.documents".equals(authority);
+        return Providers.AUTHORITY_STORAGE.equals(authority);
     }
 
     public boolean isDownloads() {
-        return "com.android.providers.downloads.documents".equals(authority);
+        return Providers.AUTHORITY_DOWNLOADS.equals(authority);
     }
 
     public boolean isImages() {
-        return "com.android.providers.media.documents".equals(authority)
-                && "images_root".equals(rootId);
+        return Providers.AUTHORITY_MEDIA.equals(authority)
+                && Providers.ROOT_ID_IMAGES.equals(rootId);
     }
 
     public boolean isVideos() {
-        return "com.android.providers.media.documents".equals(authority)
-                && "videos_root".equals(rootId);
+        return Providers.AUTHORITY_MEDIA.equals(authority)
+                && Providers.ROOT_ID_VIDEOS.equals(rootId);
     }
 
     public boolean isAudio() {
-        return "com.android.providers.media.documents".equals(authority)
-                && "audio_root".equals(rootId);
+        return Providers.AUTHORITY_MEDIA.equals(authority)
+                && Providers.ROOT_ID_AUDIO.equals(rootId);
     }
 
     public boolean isMtp() {
-        return "com.android.mtp.documents".equals(authority);
+        return Providers.AUTHORITY_MTP.equals(authority);
     }
 
     public boolean isLibrary() {
@@ -412,7 +412,8 @@
                 + ", isUsb=" + isUsb()
                 + ", isSd=" + isSd()
                 + ", isMtp=" + isMtp()
-                + "}";
+                + "} @ "
+                + getUri();
     }
 
     public String getDirectoryString() {
diff --git a/src/com/android/documentsui/base/Shared.java b/src/com/android/documentsui/base/Shared.java
index 8e93587..31a9451 100644
--- a/src/com/android/documentsui/base/Shared.java
+++ b/src/com/android/documentsui/base/Shared.java
@@ -217,7 +217,7 @@
         return shouldShowDocumentsRoot(activity)
                 ? DocumentsContract.buildHomeUri()
                 : DocumentsContract.buildRootUri(
-                        "com.android.providers.downloads.documents", "downloads");
+                        Providers.AUTHORITY_DOWNLOADS, Providers.ROOT_ID_DOWNLOADS);
     }
 
     public static boolean isHardwareKeyboardAvailable(Context context) {
@@ -226,7 +226,8 @@
 
     public static void ensureKeyboardPresent(Context context, AlertDialog dialog) {
         if (!isHardwareKeyboardAvailable(context)) {
-            dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
+            dialog.getWindow().setSoftInputMode(
+                    WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
         }
     }
 
diff --git a/src/com/android/documentsui/queries/SearchViewManager.java b/src/com/android/documentsui/queries/SearchViewManager.java
index 6ade64d..04bc53f 100644
--- a/src/com/android/documentsui/queries/SearchViewManager.java
+++ b/src/com/android/documentsui/queries/SearchViewManager.java
@@ -244,7 +244,7 @@
     public boolean onQueryTextSubmit(String query) {
 
         if (mCommandProcessor.accept(query)) {
-            cancelSearch();
+            mSearchView.setQuery("", false);
         } else {
             mCurrentSearch = query;
             mSearchView.clearFocus();
diff --git a/src/com/android/documentsui/roots/RootsAccess.java b/src/com/android/documentsui/roots/RootsAccess.java
index 8259337..784ccfb 100644
--- a/src/com/android/documentsui/roots/RootsAccess.java
+++ b/src/com/android/documentsui/roots/RootsAccess.java
@@ -25,8 +25,8 @@
 import com.android.documentsui.base.RootInfo;
 import com.android.documentsui.base.State;
 
-import java.util.Arrays;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 
@@ -63,6 +63,8 @@
         final List<RootInfo> matching = new ArrayList<>();
         for (RootInfo root : roots) {
 
+            if (DEBUG) Log.v(tag, "Evaluationg root: " + root);
+
             if (state.action == State.ACTION_CREATE && !root.supportsCreate()) {
                 if (DEBUG) Log.v(tag, "Excluding read-only root because: ACTION_CREATE.");
                 continue;
diff --git a/src/com/android/documentsui/ui/DocumentDebugInfo.java b/src/com/android/documentsui/ui/DocumentDebugInfo.java
index 18d66f2..80dc8c9 100644
--- a/src/com/android/documentsui/ui/DocumentDebugInfo.java
+++ b/src/com/android/documentsui/ui/DocumentDebugInfo.java
@@ -49,7 +49,9 @@
                 .append("** OPERATIONS **\n\n")
                 .append("create: " + doc.isCreateSupported()).append("\n")
                 .append("delete: " + doc.isDeleteSupported()).append("\n")
-                .append("rename: " + doc.isRenameSupported()).append("\n")
+                .append("rename: " + doc.isRenameSupported()).append("\n\n")
+                .append("** URI **\n\n")
+                .append(doc.derivedUri).append("\n")
                 .toString();
 
         setText(dbgInfo);
diff --git a/tests/common/com/android/documentsui/testing/TestRootsAccess.java b/tests/common/com/android/documentsui/testing/TestRootsAccess.java
index 0a2fbd2..7a97ffb 100644
--- a/tests/common/com/android/documentsui/testing/TestRootsAccess.java
+++ b/tests/common/com/android/documentsui/testing/TestRootsAccess.java
@@ -15,6 +15,7 @@
  */
 package com.android.documentsui.testing;
 
+import com.android.documentsui.base.Providers;
 import com.android.documentsui.base.RootInfo;
 import com.android.documentsui.base.State;
 import com.android.documentsui.roots.RootsAccess;
@@ -36,12 +37,12 @@
 
     static {
         DOWNLOADS = new RootInfo();
-        DOWNLOADS.authority = "com.android.providers.downloads.documents";
-        DOWNLOADS.rootId = "downloads";
+        DOWNLOADS.authority = Providers.AUTHORITY_DOWNLOADS;
+        DOWNLOADS.rootId = Providers.ROOT_ID_DOWNLOADS;
 
         HOME = new RootInfo();
-        HOME.authority = "com.android.externalstorage.documents";
-        HOME.rootId = "home";
+        HOME.authority = Providers.AUTHORITY_STORAGE;
+        HOME.rootId = Providers.ROOT_ID_HOME;
 
         HAMMY = new RootInfo();
         HAMMY.authority = "yummies";
diff --git a/tests/unit/com/android/documentsui/roots/RootsCacheTest.java b/tests/unit/com/android/documentsui/roots/RootsCacheTest.java
index ff7277b..e9c9883 100644
--- a/tests/unit/com/android/documentsui/roots/RootsCacheTest.java
+++ b/tests/unit/com/android/documentsui/roots/RootsCacheTest.java
@@ -21,6 +21,7 @@
 import android.test.AndroidTestCase;
 import android.test.suitebuilder.annotation.SmallTest;
 
+import com.android.documentsui.base.Providers;
 import com.android.documentsui.base.RootInfo;
 import com.android.documentsui.base.State;
 
@@ -68,7 +69,7 @@
 
     public void testMatchingRoots_DirectoryCopy() throws Exception {
         RootInfo downloads = buildForMimeTypes("*/*");
-        downloads.authority = "com.android.providers.downloads.documents";
+        downloads.authority = Providers.AUTHORITY_DOWNLOADS;
         mRoots.add(downloads);
 
         mState.acceptMimes = new String[] { "*/*" };
