diff --git a/src/com/google/enterprise/adaptor/sharepoint/RareModificationCache.java b/src/com/google/enterprise/adaptor/sharepoint/RareModificationCache.java
index 1dc17f4..6fc5805 100644
--- a/src/com/google/enterprise/adaptor/sharepoint/RareModificationCache.java
+++ b/src/com/google/enterprise/adaptor/sharepoint/RareModificationCache.java
@@ -238,7 +238,9 @@
       this.anonymousPermMask
           = l.getMetadata().getAnonymousPermMask().longValue();
       this.rootFolder = l.getMetadata().getRootFolder();
-      this.defaultViewUrl = l.getMetadata().getDefaultViewUrl();
+      this.defaultViewUrl = "/".equals(l.getMetadata().getDefaultViewUrl()) 
+          ? l.getMetadata().getRootFolder() 
+          : l.getMetadata().getDefaultViewUrl();
       this.defaultViewItemUrl = l.getMetadata().getDefaultViewItemUrl();
       this.scopeId = l.getMetadata().getScopeID();
     }
diff --git a/src/com/google/enterprise/adaptor/sharepoint/SharePointAdaptor.java b/src/com/google/enterprise/adaptor/sharepoint/SharePointAdaptor.java
index 3ee29fd..4500ef4 100644
--- a/src/com/google/enterprise/adaptor/sharepoint/SharePointAdaptor.java
+++ b/src/com/google/enterprise/adaptor/sharepoint/SharePointAdaptor.java
@@ -1512,7 +1512,9 @@
       response.addMetadata(METADATA_LIST_GUID, l.getMetadata().getID());
 
       response.setDisplayUrl(sharePointUrlToUri(
-          l.getMetadata().getDefaultViewUrl()));
+            "/".equals(l.getMetadata().getDefaultViewUrl()) 
+            ? l.getMetadata().getRootFolder() 
+            : l.getMetadata().getDefaultViewUrl()));
       String lastModified = l.getMetadata().getLastModified();
       try {
         response.setLastModified(
diff --git a/test/com/google/enterprise/adaptor/sharepoint/SharePointAdaptorTest.java b/test/com/google/enterprise/adaptor/sharepoint/SharePointAdaptorTest.java
index 95b1be8..10b5b0e 100644
--- a/test/com/google/enterprise/adaptor/sharepoint/SharePointAdaptorTest.java
+++ b/test/com/google/enterprise/adaptor/sharepoint/SharePointAdaptorTest.java
@@ -892,6 +892,39 @@
         .getDocContent(request, response);
     assertTrue(response.isNotFound());
   }
+  
+  @Test
+  public void testGetDocContentListEmptyDefaultView() throws Exception {
+    SiteDataSoap siteData = MockSiteData.blank()
+        .register(SITES_SITECOLLECTION_LISTS_CUSTOMLIST_URLSEG_EXCHANGE)
+        .register(SITES_SITECOLLECTION_LISTS_CUSTOMLIST_L_CONTENT_EXCHANGE
+            .replaceInContent("DefaultViewUrl=\"/sites/SiteCollection/Lists/"
+            + "Custom List/AllItems.aspx\"", "DefaultViewUrl=\"/\""))        
+        .register(SITES_SITECOLLECTION_LISTS_CUSTOMLIST_F_CONTENT_EXCHANGE)
+        .register(SITES_SITECOLLECTION_S_CONTENT_EXCHANGE)
+        .register(new URLSegmentsExchange(
+              "http://localhost:1/sites/SiteCollection/Lists/Custom List",
+               true, null, null, "{6F33949A-B3FF-4B0C-BA99-93CB518AC2C0}",
+               null));
+    adaptor = new SharePointAdaptor(initableSoapFactory,
+        new UnsupportedHttpClient(), executorFactory);
+    AccumulatingDocIdPusher pusher = new AccumulatingDocIdPusher();
+    adaptor.init(new MockAdaptorContext(config, pusher));
+    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    GetContentsRequest request = new GetContentsRequest(
+        new DocId("http://localhost:1/sites/SiteCollection/Lists/Custom List"));
+    GetContentsResponse response = new GetContentsResponse(baos);
+    adaptor.new SiteAdaptor("http://localhost:1/sites/SiteCollection",
+          "http://localhost:1/sites/SiteCollection", siteData,
+          new UnsupportedUserGroupSoap(), new UnsupportedPeopleSoap(),
+          Callables.returning(SITES_SITECOLLECTION_MEMBER_MAPPING),
+          new UnsupportedCallable<MemberIdMapping>())
+        .getDocContent(request, response);
+    // Verify display URL for List document
+    assertEquals(URI.create("http://localhost:1/sites/SiteCollection/Lists/"
+          + "Custom%20List"), response.getDisplayUrl());    
+  }
+  
 
   @Test
   public void testGetDocContentAttachment() throws Exception {
@@ -1514,7 +1547,37 @@
           + "Lists/Custom%20List/Test%20Folder"),
         response.getDisplayUrl());
   }
+  
+  @Test
+  public void testGetDocContentFolderEmptyDefaultView() throws Exception {
+    SiteDataSoap siteData = MockSiteData.blank()
+        .register(SITES_SITECOLLECTION_S_CONTENT_EXCHANGE)
+        .register(SITES_SITECOLLECTION_LISTS_CUSTOMLIST_1_URLSEG_EXCHANGE)
+        .register(SITES_SITECOLLECTION_LISTS_CUSTOMLIST_L_CONTENT_EXCHANGE
+            .replaceInContent("DefaultViewUrl=\"/sites/SiteCollection/Lists/"
+            + "Custom List/AllItems.aspx\"", "DefaultViewUrl=\"/\""))
+        .register(SITES_SITECOLLECTION_LISTS_CUSTOMLIST_1_LI_CONTENT_EXCHANGE)
+        .register(SITES_SITECOLLECTION_LISTS_CUSTOMLIST_1_F_CONTENT_EXCHANGE);
 
+    adaptor = new SharePointAdaptor(initableSoapFactory,
+        new UnsupportedHttpClient(), executorFactory);
+    adaptor.init(new MockAdaptorContext(config, pusher));
+    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    GetContentsRequest request = new GetContentsRequest(
+        new DocId("http://localhost:1/sites/SiteCollection/Lists/Custom List/"
+          + "Test Folder"));
+    GetContentsResponse response = new GetContentsResponse(baos);
+    adaptor.new SiteAdaptor("http://localhost:1/sites/SiteCollection",
+          "http://localhost:1/sites/SiteCollection",
+          siteData, new UnsupportedUserGroupSoap(), new UnsupportedPeopleSoap(),
+          Callables.returning(SITES_SITECOLLECTION_MEMBER_MAPPING),
+          new UnsupportedCallable<MemberIdMapping>())
+        .getDocContent(request, response);    
+    assertEquals(URI.create("http://localhost:1/sites/SiteCollection/Lists/"
+          + "Custom%20List?RootFolder=/sites/SiteCollection/"
+          + "Lists/Custom%20List/Test%20Folder"),response.getDisplayUrl());
+  }
+  
   @Test
   public void testGetDocIds() throws Exception {
     final Map<GroupPrincipal, Collection<Principal>> goldenGroups;
