diff --git a/src/com/google/enterprise/adaptor/fs/FileDelegate.java b/src/com/google/enterprise/adaptor/fs/FileDelegate.java
index 1bdd715..a480cb0 100644
--- a/src/com/google/enterprise/adaptor/fs/FileDelegate.java
+++ b/src/com/google/enterprise/adaptor/fs/FileDelegate.java
@@ -61,6 +61,13 @@
   BasicFileAttributes readBasicAttributes(Path doc) throws IOException;
 
   /**
+   * Gets the lastAccess time for the file or directory.
+   *
+   * @param doc the file/folder to set the last accessed time on
+   */
+  FileTime getLastAccessTime(Path doc) throws IOException;
+
+  /**
    * Sets the lastAccess time for the file or directory.
    *
    * @param doc the file/folder to set the last accessed time on
diff --git a/src/com/google/enterprise/adaptor/fs/FsAdaptor.java b/src/com/google/enterprise/adaptor/fs/FsAdaptor.java
index 977f924..609588b 100644
--- a/src/com/google/enterprise/adaptor/fs/FsAdaptor.java
+++ b/src/com/google/enterprise/adaptor/fs/FsAdaptor.java
@@ -34,12 +34,14 @@
 import com.google.enterprise.adaptor.Response;
 import com.google.enterprise.adaptor.StartupException;
 
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStreamWriter;
 import java.io.Writer;
 import java.nio.charset.Charset;
 import java.nio.file.AccessDeniedException;
+import java.nio.file.NoSuchFileException;
 import java.nio.file.Path;
 import java.nio.file.attribute.AclFileAttributeView;
 import java.nio.file.attribute.BasicFileAttributes;
@@ -454,14 +456,6 @@
     DocId id = req.getDocId();
     Path doc = delegate.getPath(id.getUniqueId());
 
-    if (!isSupportedPath(doc)) {
-      log.log(Level.WARNING, "The path {0} is not a supported file type.", doc);
-      resp.respondNotFound();
-      return;
-    }
-
-    final boolean docIsDirectory = delegate.isDirectory(doc);
-
     if (!id.equals(delegate.newDocId(doc))) {
       log.log(Level.WARNING,
           "The {0} is not a valid id generated by the adaptor.", id);
@@ -475,18 +469,38 @@
     }
 
     // Populate the document metadata.
-    BasicFileAttributes attrs = delegate.readBasicAttributes(doc);
-    final FileTime lastAccessTime = attrs.lastAccessTime();
+    BasicFileAttributes attrs;
+    try {
+      attrs = delegate.readBasicAttributes(doc);
+    } catch (FileNotFoundException e) {
+      log.log(Level.INFO, "Not found: {0}", doc);
+      resp.respondNotFound();
+      return;
+    } catch (NoSuchFileException e) {
+      log.log(Level.INFO, "Not found: {0}", doc);
+      resp.respondNotFound();
+      return;
+    }      
+
+    if (!isFileOrFolder(doc)) {
+      log.log(Level.INFO, "The path {0} is not a regular file or directory.",
+              doc);
+      resp.respondNotFound();
+      return;
+    }
+
+    final boolean docIsDirectory = attrs.isDirectory();
+    final FileTime lastAccessTime = delegate.getLastAccessTime(doc);
 
     if (!docIsDirectory) {
       if (lastAccessTimeFilter.excluded(lastAccessTime)) {
-        log.log(Level.WARNING, "Skipping {0} because it was last accessed {1}.",
+        log.log(Level.FINE, "Skipping {0} because it was last accessed {1}.",
             new Object[] {doc, lastAccessTime.toString().substring(0, 10)});
         resp.respondNotFound();
         return;
       }
       if (lastModifiedTimeFilter.excluded(attrs.lastModifiedTime())) {
-        log.log(Level.WARNING, "Skipping {0} because it was last modified {1}.",
+        log.log(Level.FINE, "Skipping {0} because it was last modified {1}.",
             new Object[] {doc, 
                 attrs.lastModifiedTime().toString().substring(0, 10)});
         resp.respondNotFound();
@@ -587,7 +601,7 @@
       HtmlResponseWriter writer = createHtmlResponseWriter(resp);
       writer.start(id, getFileName(doc));
       for (Path file : delegate.newDirectoryStream(doc)) {
-        if (isSupportedPath(file)) {
+        if (isFileOrFolder(file)) {
           writer.addLink(delegate.newDocId(file), getFileName(file));
         }
       }
@@ -600,13 +614,18 @@
         try {
           input.close();
         } finally {
-          try {
-            delegate.setLastAccessTime(doc, lastAccessTime);
-          } catch (IOException e) {
-            // This failure can be expected. We can have full permissions
-            // to read but not write/update permissions.
-            log.log(Level.CONFIG,
-                "Unable to restore last access time for {0}.", doc);
+          // Do a follow up check to see if the last access time has changed.
+          // If the last access time has changed, attempt to reset it.
+          if (!lastAccessTime.equals(delegate.getLastAccessTime(doc))) {
+            log.log(Level.FINE, "Restoring last access time for {0}.", doc);
+            try {
+              delegate.setLastAccessTime(doc, lastAccessTime);
+            } catch (IOException e) {
+              // This failure can be expected. We can have full permissions
+              // to read but not write/update permissions.
+              log.log(Level.FINE,
+                  "Unable to restore last access time for {0}.", doc);
+            }
           }
         }
       }
@@ -631,8 +650,12 @@
     return name.isEmpty() ? file.getRoot().toString() : name;
   }
 
+  /**
+   * Returns true if the path is a regular file or a folder;
+   * false if the path is a link, a special file, or doesn't exist.
+   */
   @VisibleForTesting
-  boolean isSupportedPath(Path p) throws IOException {
+  boolean isFileOrFolder(Path p) throws IOException {
     return delegate.isRegularFile(p) || delegate.isDirectory(p);
   }
 
diff --git a/src/com/google/enterprise/adaptor/fs/NioFileDelegate.java b/src/com/google/enterprise/adaptor/fs/NioFileDelegate.java
index 84ab250..ebb737e 100644
--- a/src/com/google/enterprise/adaptor/fs/NioFileDelegate.java
+++ b/src/com/google/enterprise/adaptor/fs/NioFileDelegate.java
@@ -64,6 +64,12 @@
   }
 
   @Override
+  public FileTime getLastAccessTime(Path doc) throws IOException {
+    return (FileTime)Files.getAttribute(doc, "lastAccessTime",
+        LinkOption.NOFOLLOW_LINKS);
+  }
+
+  @Override
   public void setLastAccessTime(Path doc, FileTime time) throws IOException {
     Files.setAttribute(doc, "lastAccessTime", time, LinkOption.NOFOLLOW_LINKS);
   }
diff --git a/src/com/google/enterprise/adaptor/fs/WindowsAclFileAttributeViews.java b/src/com/google/enterprise/adaptor/fs/WindowsAclFileAttributeViews.java
index f71296c..90c3b06 100644
--- a/src/com/google/enterprise/adaptor/fs/WindowsAclFileAttributeViews.java
+++ b/src/com/google/enterprise/adaptor/fs/WindowsAclFileAttributeViews.java
@@ -288,10 +288,9 @@
 
     Netapi32Ex.SHARE_INFO_502 info =
         new Netapi32Ex.SHARE_INFO_502(buf.getValue());
-    netapi32.NetApiBufferFree(buf.getValue());
-
     WinNT.SECURITY_DESCRIPTOR_RELATIVE sdr =
         new WinNT.SECURITY_DESCRIPTOR_RELATIVE(info.shi502_security_descriptor);
+    netapi32.NetApiBufferFree(buf.getValue());
     WinNT.ACL dacl = sdr.getDiscretionaryACL();
 
     ImmutableList.Builder<AclEntry> builder = ImmutableList.builder();
diff --git a/src/com/google/enterprise/adaptor/fs/WindowsFileDelegate.java b/src/com/google/enterprise/adaptor/fs/WindowsFileDelegate.java
index ff23659..19bedfa 100644
--- a/src/com/google/enterprise/adaptor/fs/WindowsFileDelegate.java
+++ b/src/com/google/enterprise/adaptor/fs/WindowsFileDelegate.java
@@ -43,14 +43,18 @@
 import com.sun.jna.ptr.PointerByReference;
 import com.sun.jna.win32.W32APIOptions;
 
+import java.io.BufferedInputStream;
 import java.io.File;
 import java.io.IOException;
+import java.io.InputStream;
 import java.nio.file.attribute.AclEntry;
 import java.nio.file.attribute.AclFileAttributeView;
+import java.nio.file.attribute.FileTime;
 import java.nio.file.Files;
 import java.nio.file.LinkOption;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.nio.ByteBuffer;
 import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.CountDownLatch;
@@ -82,6 +86,29 @@
   }
 
   @Override
+  public InputStream newInputStream(Path doc) throws IOException {
+    return new BufferedInputStream(new WinFileInputStream(doc));
+  }
+
+  @Override
+  public FileTime getLastAccessTime(Path doc) throws IOException {
+    HANDLE handle = kernel32.CreateFile(doc.toString(), WinNT.GENERIC_READ,
+        WinNT.FILE_SHARE_READ | WinNT.FILE_SHARE_WRITE,
+        new WinBase.SECURITY_ATTRIBUTES(), WinNT.OPEN_EXISTING,
+        WinNT.FILE_ATTRIBUTE_NORMAL, null);
+      if (Kernel32.INVALID_HANDLE_VALUE.equals(handle)) {
+        throw new IOException("Unable to open " + doc
+            + ". GetLastError: " + kernel32.GetLastError());
+      }
+
+    WinBase.FILETIME.ByReference accessTime =
+        new WinBase.FILETIME.ByReference();
+    kernel32.GetFileTime(handle, null, accessTime, null);
+    kernel32.CloseHandle(handle);
+    return FileTime.fromMillis(accessTime.toDate().getTime());
+  }
+
+  @Override
   public AclFileAttributeViews getAclViews(Path doc) throws IOException {
     return aclViews.getAclViews(doc);
   }
@@ -474,4 +501,55 @@
   public void destroy() {
     stopMonitorPath();
   }
+
+  private class WinFileInputStream extends InputStream {
+    private final HANDLE handle;
+
+    public WinFileInputStream(Path path) throws IOException {
+      handle = kernel32.CreateFile(path.toString(),
+          WinNT.GENERIC_READ | WinNT.GENERIC_WRITE,
+          WinNT.FILE_SHARE_READ | WinNT.FILE_SHARE_WRITE,
+          new WinBase.SECURITY_ATTRIBUTES(),
+          WinNT.OPEN_EXISTING, WinNT.FILE_ATTRIBUTE_NORMAL, null);
+      if (Kernel32.INVALID_HANDLE_VALUE.equals(handle)) {
+        throw new IOException("Unable to open " + path
+            + ". GetLastError: " + kernel32.GetLastError());
+      }
+
+      // Call SetFileTime with a value of 0xFFFFFFFF for lpLastAccessTime
+      // to keep Windows from updating the last access time
+      // when reading the file content.
+      WinBase.FILETIME ft = new WinBase.FILETIME();
+      ft.dwHighDateTime = 0xFFFFFFFF;
+      ft.dwLowDateTime = 0xFFFFFFFF;
+      kernel32.SetFileTime(handle, null, ft, null);
+    }
+
+    @Override
+    public int read() throws IOException {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public int read(byte[] inBuf, int start, int count) throws IOException {
+      IntByReference lpNumberOfBytesRead = new IntByReference(0);
+      boolean result = kernel32.ReadFile(handle,
+          ByteBuffer.wrap(inBuf, start, count), count,
+          lpNumberOfBytesRead, null);
+      if (!result) {
+        throw new IOException("Unable to read file data. "
+            + "GetLastError: " + kernel32.GetLastError());
+      }
+      if (lpNumberOfBytesRead.getValue() != 0) {
+        return lpNumberOfBytesRead.getValue();
+      } else {
+        return -1;
+      }
+    }
+
+    @Override
+    public void close() throws IOException {
+      kernel32.CloseHandle(handle);
+    }
+  }
 }
diff --git a/src/overview.html b/src/overview.html
index 3aa10c4..a84f486 100644
--- a/src/overview.html
+++ b/src/overview.html
@@ -15,24 +15,33 @@
 </ul>
 
 <h4>Permissions needed by the Adaptor</h4>
-  <p>The Windows user account that the adaptor is running under must have sufficient permissions to
-  list the content of folders, read the content of documents, read attributes of files and folders
-  and read ACLs for both files and folders. You can accomplish this by using an 
-    account that is a member of one of the following groups:
 
+  <p>The Windows account that the adaptor is running under must have
+  sufficient permissions to:
   <ul>
-    <li>Administrator</li>
-    <li>Power User</li>
-    <li>Print Operator</li>
-    <li>Server Operator</li>
+    <li>List the content of folders</li> 
+    <li>Read the content of documents</li> 
+    <li>Read attributes of files and folders</li>
+    <li>Read permissions (ACLs) for both files and folders</li>
+    <li>Write basic attributes permissions. See below: <em>Advanced Topics > Not changing 'last
+    access' of the documents on the share</em></li>
   </ul>
 
-  <p>It is not sufficient for the user to be a member of one of the groups at the Domain level.
-    For more information, read the following Microsoft document:
-    <a href="http://msdn.microsoft.com/en-us/library/bb525388(VS.85).aspx">http://msdn.microsoft.com/en-us/library/bb525388(VS.85).aspx</a></p>
+  <p>Membership in one of these groups grants a Windows account the
+  sufficient permissions needed by the Adaptor:
+  <ul>
+    <li>Administrators</li>
+    <li>Power Users</li>
+    <li>Print Operators</li>
+    <li>Server Operators</li>
+  </ul>
 
-  <p>For the adaptor to restore the last access date for documents after reading its contents, the adaptor
-   needs write permission. Being a member of the above groups grants this permission.
+  <p>Note: it is not sufficient for the user to be member of one of
+  these groups at the domain level. The user must be a member of one of
+  these groups on the local machine that exports the Windows Share. More
+  information in the Microsoft documentation, on the <a
+  href="http://msdn.microsoft.com/en-us/library/bb525388(VS.85).aspx">
+  NetShareGetinfo function</a>.</p>
 
 <h4>Configure GSA for Adaptor</h4>
 <ol>
diff --git a/test/com/google/enterprise/adaptor/fs/FsAdaptorTest.java b/test/com/google/enterprise/adaptor/fs/FsAdaptorTest.java
index c756af8..6a5b25f 100644
--- a/test/com/google/enterprise/adaptor/fs/FsAdaptorTest.java
+++ b/test/com/google/enterprise/adaptor/fs/FsAdaptorTest.java
@@ -202,13 +202,13 @@
   }
 
   @Test
-  public void testIsSupportedPath() throws Exception {
+  public void testIsFileOrFolder() throws Exception {
     root.addChildren(new MockFile("foo"), new MockFile("bar", true),
                      new MockFile("link").setIsRegularFile(false));
-    assertTrue(adaptor.isSupportedPath(rootPath));
-    assertTrue(adaptor.isSupportedPath(getPath("foo")));
-    assertTrue(adaptor.isSupportedPath(getPath("bar")));
-    assertFalse(adaptor.isSupportedPath(getPath("link")));
+    assertTrue(adaptor.isFileOrFolder(rootPath));
+    assertTrue(adaptor.isFileOrFolder(getPath("foo")));
+    assertTrue(adaptor.isFileOrFolder(getPath("bar")));
+    assertFalse(adaptor.isFileOrFolder(getPath("link")));
   }
 
   @Test
@@ -321,13 +321,6 @@
     assertTrue(response.notFound);
   }
 
-  /*
-   * This test was invalidated when the check for isSupportedPath()
-   * was moved above the check for bad DocIds in the beginning of
-   * FsAdaptor.getDocumentContent().  This test still passes, but
-   * the notFound response is coming from the earlier check for
-   * isSupportedPath(), not from the bad DocId.
-   */
   @Test
   public void testGetDocContentBadDocId() throws Exception {
     root.addChildren(new MockFile("badfile"));
@@ -339,6 +332,15 @@
   }
 
   @Test
+  public void testGetDocContentFileNotFound() throws Exception {
+    adaptor.init(context);
+    MockResponse response = new MockResponse();
+    // The requested DocId is missing the root component of the path.
+    adaptor.getDocContent(new MockRequest(getDocId("non-existent")), response);
+    assertTrue(response.notFound);
+  }
+
+  @Test
   public void testGetDocContentHiddenFile() throws Exception {
     root.addChildren(new MockFile("hidden.txt").setIsHidden(true));
     adaptor.init(context);
diff --git a/test/com/google/enterprise/adaptor/fs/MockFileDelegate.java b/test/com/google/enterprise/adaptor/fs/MockFileDelegate.java
index 4764a8a..c8fd6a1 100644
--- a/test/com/google/enterprise/adaptor/fs/MockFileDelegate.java
+++ b/test/com/google/enterprise/adaptor/fs/MockFileDelegate.java
@@ -105,6 +105,11 @@
   }
 
   @Override
+  public FileTime getLastAccessTime(Path doc) throws IOException {
+    return readBasicAttributes(doc).lastAccessTime();
+  }
+
+  @Override
   public void setLastAccessTime(Path doc, FileTime time) throws IOException {
     getFile(doc).setLastAccessTime(time);
   }
diff --git a/test/com/google/enterprise/adaptor/fs/NioFileDelegateTest.java b/test/com/google/enterprise/adaptor/fs/NioFileDelegateTest.java
index 761fdd9..ee79e96 100644
--- a/test/com/google/enterprise/adaptor/fs/NioFileDelegateTest.java
+++ b/test/com/google/enterprise/adaptor/fs/NioFileDelegateTest.java
@@ -30,6 +30,7 @@
 import java.io.InputStreamReader;
 import java.nio.file.DirectoryStream;
 import java.nio.file.Files;
+import java.nio.file.NoSuchFileException;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.nio.file.attribute.AclFileAttributeView;
@@ -43,6 +44,9 @@
   private FileDelegate delegate = new TestNioFileDelegate();
 
   @Rule
+  public ExpectedException thrown = ExpectedException.none();
+
+  @Rule
   public TemporaryFolder temp = new TemporaryFolder();
 
   private Path newTempDir(String name) throws IOException {
@@ -131,6 +135,13 @@
   }
 
   @Test
+  public void testReadBasicAttributesFileNotFound() throws Exception {
+    Path file = Paths.get(temp.getRoot().toString(), "notFound");
+    thrown.expect(NoSuchFileException.class);
+    BasicFileAttributes attrs = delegate.readBasicAttributes(file);
+  }
+
+  @Test
   public void testProbeContentType() throws Exception {
     TestHelper.assumeOsIsNotMac();
     String content = "<html><title>Foo</title><body>Bar</body></html>";
