diff --git a/src/com/android/documentsui/FocusManager.java b/src/com/android/documentsui/FocusManager.java
index 1b8567e..85f7f74 100644
--- a/src/com/android/documentsui/FocusManager.java
+++ b/src/com/android/documentsui/FocusManager.java
@@ -84,7 +84,7 @@
         boolean focusChanged = false;
         if (mNavDrawerHasFocus) {
             mDrawer.setOpen(false);
-            focusDirectoryList();
+            focusChanged = focusDirectoryList();
         } else {
             mDrawer.setOpen(true);
             focusChanged = mRootsFocuser.run();
diff --git a/src/com/android/documentsui/dirlist/DirectoryAddonsAdapter.java b/src/com/android/documentsui/dirlist/DirectoryAddonsAdapter.java
index d99e168..0437361 100644
--- a/src/com/android/documentsui/dirlist/DirectoryAddonsAdapter.java
+++ b/src/com/android/documentsui/dirlist/DirectoryAddonsAdapter.java
@@ -83,17 +83,25 @@
 
     @Override
     public DocumentHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+        DocumentHolder holder = null;
         switch (viewType) {
             case ITEM_TYPE_SECTION_BREAK:
-                return new TransparentDividerDocumentHolder(mEnv.getContext());
+                holder = new TransparentDividerDocumentHolder(mEnv.getContext());
+                mEnv.initDocumentHolder(holder);
+                break;
             case ITEM_TYPE_HEADER_MESSAGE:
-                return new HeaderMessageDocumentHolder(mEnv.getContext(), parent,
+                holder = new HeaderMessageDocumentHolder(mEnv.getContext(), parent,
                         this::onDismissHeaderMessage);
+                mEnv.initDocumentHolder(holder);
+                break;
             case ITEM_TYPE_INFLATED_MESSAGE:
-                return new InflateMessageDocumentHolder(mEnv.getContext(), parent);
+                holder = new InflateMessageDocumentHolder(mEnv.getContext(), parent);
+                mEnv.initDocumentHolder(holder);
+                break;
             default:
-                return mDelegate.createViewHolder(parent, viewType);
+                holder = mDelegate.createViewHolder(parent, viewType);
         }
+        return holder;
     }
 
     private void onDismissHeaderMessage() {
diff --git a/src/com/android/documentsui/dirlist/HeaderMessageDocumentHolder.java b/src/com/android/documentsui/dirlist/HeaderMessageDocumentHolder.java
index be2ce4c..8c8fbdc 100644
--- a/src/com/android/documentsui/dirlist/HeaderMessageDocumentHolder.java
+++ b/src/com/android/documentsui/dirlist/HeaderMessageDocumentHolder.java
@@ -31,7 +31,7 @@
  * are more information from the Provider.
  * Used by {@link DirectoryAddonsAdapter}.
  */
-final class HeaderMessageDocumentHolder extends DocumentHolder {
+final class HeaderMessageDocumentHolder extends MessageHolder {
     private Message mMessage;
     private ImageView mIcon;
     private TextView mTextView;
diff --git a/src/com/android/documentsui/dirlist/InflateMessageDocumentHolder.java b/src/com/android/documentsui/dirlist/InflateMessageDocumentHolder.java
index d0c4ba0..d0709cb 100644
--- a/src/com/android/documentsui/dirlist/InflateMessageDocumentHolder.java
+++ b/src/com/android/documentsui/dirlist/InflateMessageDocumentHolder.java
@@ -29,7 +29,7 @@
  * in the directory, whether due to no items, no search results or an error.
  * Used by {@link DirectoryAddonsAdapter}.
  */
-final class InflateMessageDocumentHolder extends DocumentHolder {
+final class InflateMessageDocumentHolder extends MessageHolder {
     private Message mMessage;
     private TextView mMsgView;
     private ImageView mImageView;
diff --git a/src/com/android/documentsui/dirlist/MessageHolder.java b/src/com/android/documentsui/dirlist/MessageHolder.java
new file mode 100644
index 0000000..a9a722d
--- /dev/null
+++ b/src/com/android/documentsui/dirlist/MessageHolder.java
@@ -0,0 +1,47 @@
+/*
+ * 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.dirlist;
+
+import android.content.Context;
+import android.view.ViewGroup;
+import android.widget.Space;
+
+import com.android.documentsui.base.DocumentInfo;
+import com.android.documentsui.base.Events.InputEvent;
+
+/**
+ * Base class for all non-Document Holder classes.
+ */
+abstract class MessageHolder extends DocumentHolder {
+    public MessageHolder(Context context, Space space) {
+        super(context, space);
+    }
+
+    public MessageHolder(Context context, ViewGroup parent, int layout) {
+        super(context, parent, layout);
+    }
+
+    @Override
+    public boolean isInSelectionHotspot(InputEvent event) {
+        return false;
+    }
+
+    @Override
+    public boolean isInDragHotspot(InputEvent event) {
+        return false;
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/documentsui/dirlist/TransparentDividerDocumentHolder.java b/src/com/android/documentsui/dirlist/TransparentDividerDocumentHolder.java
index 2cf8b3e..44efd80 100644
--- a/src/com/android/documentsui/dirlist/TransparentDividerDocumentHolder.java
+++ b/src/com/android/documentsui/dirlist/TransparentDividerDocumentHolder.java
@@ -16,6 +16,7 @@
 
 package com.android.documentsui.dirlist;
 
+
 import android.content.Context;
 import android.database.Cursor;
 import android.widget.Space;
@@ -27,7 +28,7 @@
  * The most elegant transparent blank box that spans N rows ever conceived.
  * Used by {@link DirectoryAddonsAdapter}.
  */
-final class TransparentDividerDocumentHolder extends DocumentHolder {
+final class TransparentDividerDocumentHolder extends MessageHolder {
     private final int mVisibleHeight;
     private State mState;
 
diff --git a/src/com/android/documentsui/dirlist/UserInputHandler.java b/src/com/android/documentsui/dirlist/UserInputHandler.java
index 00912cd..6a05624 100644
--- a/src/com/android/documentsui/dirlist/UserInputHandler.java
+++ b/src/com/android/documentsui/dirlist/UserInputHandler.java
@@ -441,6 +441,14 @@
                 return false;
             }
 
+            int itemType = doc.getItemViewType();
+            // Ignore events sent to Addon Holders.
+            if (itemType == DocumentsAdapter.ITEM_TYPE_HEADER_MESSAGE
+                    || itemType == DocumentsAdapter.ITEM_TYPE_INFLATED_MESSAGE
+                    || itemType == DocumentsAdapter.ITEM_TYPE_SECTION_BREAK) {
+                return false;
+            }
+
             if (mFocusHandler.handleKey(doc, keyCode, event)) {
                 // Handle range selection adjustments. Extending the selection will adjust the
                 // bounds of the in-progress range selection. Each time an unshifted navigation
