diff --git a/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileSystemManagerTest.java b/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileSystemManagerTest.java
index 4c22157..51b829c 100644
--- a/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileSystemManagerTest.java
+++ b/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileSystemManagerTest.java
@@ -25,6 +25,7 @@
 import org.apache.commons.vfs2.FileObject;
 import org.apache.commons.vfs2.FileSystemException;
 import org.apache.commons.vfs2.FileSystemManager;
+import org.apache.commons.vfs2.FilesCache;
 import org.apache.commons.vfs2.VFS;
 import org.apache.commons.vfs2.cache.NullFilesCache;
 import org.apache.commons.vfs2.provider.ram.RamFileProvider;
@@ -77,6 +78,43 @@
         }
     }
 
+    @Test
+    public void testFileCacheEmptyAfterVFSClose() throws FileSystemException {
+        final FileSystemManager manager = VFS.getManager();
+        Assert.assertNotNull(manager);
+        try (final FileObject fileObject = manager
+            .resolveFile(Paths.get("src/test/resources/test-data/read-tests/file1.txt").toUri())) {
+            Assert.assertTrue(fileObject.exists());
+            final FilesCache filesCache = manager.getFilesCache();
+            final FileName name = fileObject.getName();
+            // Make sure we have file object in the cache.
+            Assert.assertNotNull(filesCache.getFile(fileObject.getFileSystem(), name));
+            VFS.close();
+            // Cache MUST now be empty.
+            Assert.assertNull(filesCache.getFile(fileObject.getFileSystem(), name));
+        }
+    }
+
+    @Test
+    public void testFileCacheEmptyAfterManagerClose() throws FileSystemException {
+        final FileSystemManager manager = VFS.getManager();
+        Assert.assertNotNull(manager);
+        try (final FileObject fileObject = manager
+            .resolveFile(Paths.get("src/test/resources/test-data/read-tests/file1.txt").toUri())) {
+            Assert.assertTrue(fileObject.exists());
+            final FilesCache filesCache = manager.getFilesCache();
+            final FileName name = fileObject.getName();
+            // Make sure we have file object in the cache.
+            Assert.assertNotNull(filesCache.getFile(fileObject.getFileSystem(), name));
+            manager.close();
+            // Cache MUST now be empty.
+            Assert.assertNull(filesCache.getFile(fileObject.getFileSystem(), name));
+        } finally {
+            // Makes sure we reset the singleton or other tests will fail.
+            VFS.close();
+        }
+    }
+
     /**
      * Even if the file name is absolute, the base file must be given. This is an inconsistency in the API, but it is
      * documented as such.
