diff --git a/src/com/android/documentsui/MenuManager.java b/src/com/android/documentsui/MenuManager.java
index 5bf360f..39ecbfa 100644
--- a/src/com/android/documentsui/MenuManager.java
+++ b/src/com/android/documentsui/MenuManager.java
@@ -175,9 +175,11 @@
     public void updateContextMenuForContainer(Menu menu) {
         MenuItem paste = menu.findItem(R.id.menu_paste_from_clipboard);
         MenuItem selectAll = menu.findItem(R.id.menu_select_all);
+        MenuItem createDir = menu.findItem(R.id.menu_create_dir);
 
         paste.setEnabled(mDirDetails.hasItemsToPaste() && mDirDetails.canCreateDoc());
         updateSelectAll(selectAll);
+        updateCreateDir(createDir);
     }
 
     /**
diff --git a/tests/common/com/android/documentsui/testing/TestDirectoryDetails.java b/tests/common/com/android/documentsui/testing/TestDirectoryDetails.java
index 81bbbef..82bd047 100644
--- a/tests/common/com/android/documentsui/testing/TestDirectoryDetails.java
+++ b/tests/common/com/android/documentsui/testing/TestDirectoryDetails.java
@@ -27,8 +27,8 @@
     public boolean isInRecents;
     public boolean hasRootSettings;
     public boolean hasItemsToPaste;
+    public boolean canCreateDoc;
     public boolean canCreateDirectory;
-    public boolean getDisplayFileSize;
 
     public TestDirectoryDetails() {
         super(null);
@@ -55,6 +55,11 @@
     }
 
     @Override
+    public boolean canCreateDoc() {
+        return canCreateDoc;
+    }
+
+    @Override
     public boolean canCreateDirectory() {
         return canCreateDirectory;
     }
diff --git a/tests/unit/com/android/documentsui/files/MenuManagerTest.java b/tests/unit/com/android/documentsui/files/MenuManagerTest.java
index fd1f6cf..5d1fb7d 100644
--- a/tests/unit/com/android/documentsui/files/MenuManagerTest.java
+++ b/tests/unit/com/android/documentsui/files/MenuManagerTest.java
@@ -17,6 +17,7 @@
 package com.android.documentsui.files;
 
 import static junit.framework.Assert.assertEquals;
+
 import static org.junit.Assert.assertTrue;
 
 import android.provider.DocumentsContract.Document;
@@ -62,6 +63,8 @@
     private TestMenuItem pasteInto;
     private TestMenuItem advanced;
     private TestMenuItem eject;
+
+    private TestActivity testActivity;
     private TestSelectionDetails selectionDetails;
     private TestDirectoryDetails dirDetails;
     private TestSearchViewManager testSearchManager;
@@ -239,8 +242,70 @@
         mgr.updateContextMenuForContainer(testMenu);
 
         selectAll.assertVisible();
+        selectAll.assertEnabled();
         paste.assertVisible();
+        paste.assertDisabled();
         createDir.assertVisible();
+        createDir.assertDisabled();
+    }
+
+    @Test
+    public void testContextMenu_EmptyArea_NoItemToPaste() {
+        dirDetails.hasItemsToPaste = false;
+        dirDetails.canCreateDoc = true;
+
+        mgr.updateContextMenuForContainer(testMenu);
+
+        selectAll.assertVisible();
+        selectAll.assertEnabled();
+        paste.assertVisible();
+        paste.assertDisabled();
+        createDir.assertVisible();
+        createDir.assertDisabled();
+    }
+
+    @Test
+    public void testContextMenu_EmptyArea_CantCreateDoc() {
+        dirDetails.hasItemsToPaste = true;
+        dirDetails.canCreateDoc = false;
+
+        mgr.updateContextMenuForContainer(testMenu);
+
+        selectAll.assertVisible();
+        selectAll.assertEnabled();
+        paste.assertVisible();
+        paste.assertDisabled();
+        createDir.assertVisible();
+        createDir.assertDisabled();
+    }
+
+    @Test
+    public void testContextMenu_EmptyArea_CanPaste() {
+        dirDetails.hasItemsToPaste = true;
+        dirDetails.canCreateDoc = true;
+
+        mgr.updateContextMenuForContainer(testMenu);
+
+        selectAll.assertVisible();
+        selectAll.assertEnabled();
+        paste.assertVisible();
+        paste.assertEnabled();
+        createDir.assertVisible();
+        createDir.assertDisabled();
+    }
+
+    @Test
+    public void testContextMenu_EmptyArea_CanCreateDirectory() {
+        dirDetails.canCreateDirectory = true;
+
+        mgr.updateContextMenuForContainer(testMenu);
+
+        selectAll.assertVisible();
+        selectAll.assertEnabled();
+        paste.assertVisible();
+        paste.assertDisabled();
+        createDir.assertVisible();
+        createDir.assertEnabled();
     }
 
     @Test
diff --git a/tests/unit/com/android/documentsui/picker/MenuManagerTest.java b/tests/unit/com/android/documentsui/picker/MenuManagerTest.java
index bf9f5cf..f282bd7 100644
--- a/tests/unit/com/android/documentsui/picker/MenuManagerTest.java
+++ b/tests/unit/com/android/documentsui/picker/MenuManagerTest.java
@@ -182,10 +182,77 @@
 
     @Test
     public void testContextMenu_EmptyArea() {
+        dirDetails.hasItemsToPaste = false;
+        dirDetails.canCreateDoc = false;
+        dirDetails.canCreateDirectory = false;
+
         mgr.updateContextMenuForContainer(testMenu);
+
         selectAll.assertVisible();
+        selectAll.assertEnabled();
         paste.assertVisible();
+        paste.assertDisabled();
         createDir.assertVisible();
+        createDir.assertDisabled();
+    }
+
+    @Test
+    public void testContextMenu_EmptyArea_NoItemToPaste() {
+        dirDetails.hasItemsToPaste = false;
+        dirDetails.canCreateDoc = true;
+
+        mgr.updateContextMenuForContainer(testMenu);
+
+        selectAll.assertVisible();
+        selectAll.assertEnabled();
+        paste.assertVisible();
+        paste.assertDisabled();
+        createDir.assertVisible();
+        createDir.assertDisabled();
+    }
+
+    @Test
+    public void testContextMenu_EmptyArea_CantCreateDoc() {
+        dirDetails.hasItemsToPaste = true;
+        dirDetails.canCreateDoc = false;
+
+        mgr.updateContextMenuForContainer(testMenu);
+
+        selectAll.assertVisible();
+        selectAll.assertEnabled();
+        paste.assertVisible();
+        paste.assertDisabled();
+        createDir.assertVisible();
+        createDir.assertDisabled();
+    }
+
+    @Test
+    public void testContextMenu_EmptyArea_canPaste() {
+        dirDetails.hasItemsToPaste = true;
+        dirDetails.canCreateDoc = true;
+
+        mgr.updateContextMenuForContainer(testMenu);
+
+        selectAll.assertVisible();
+        selectAll.assertEnabled();
+        paste.assertVisible();
+        paste.assertEnabled();
+        createDir.assertVisible();
+        createDir.assertDisabled();
+    }
+
+    @Test
+    public void testContextMenu_EmptyArea_CanCreateDirectory() {
+        dirDetails.canCreateDirectory = true;
+
+        mgr.updateContextMenuForContainer(testMenu);
+
+        selectAll.assertVisible();
+        selectAll.assertEnabled();
+        paste.assertVisible();
+        paste.assertDisabled();
+        createDir.assertVisible();
+        createDir.assertEnabled();
     }
 
     @Test
