diff --git a/tsk/auto/auto.cpp b/tsk/auto/auto.cpp
index 43f2ad9261d580632ab3dd1aaf42502b72b3f15f..b2438376b99f2588cf2566a9f71f4a00f20a725b 100755
--- a/tsk/auto/auto.cpp
+++ b/tsk/auto/auto.cpp
@@ -189,7 +189,7 @@ void
  * instead of opening a new copy.
  */
 void
-TskAuto::setExternalFileSystemList(std::list<TSK_FS_INFO *> fsInfoList)
+TskAuto::setExternalFileSystemList(const std::list<TSK_FS_INFO *>& fsInfoList)
 {
 	m_exteralFsInfoList.resize(fsInfoList.size());
 	m_exteralFsInfoList.assign(fsInfoList.begin(), fsInfoList.end());
@@ -661,6 +661,18 @@ uint8_t
         return 1;
     }
 
+	// If we already have an open copy of this file system, use it
+	for (auto itr = m_exteralFsInfoList.begin(); itr != m_exteralFsInfoList.end(); itr++) {
+		if ((*itr)->offset == a_start) {
+			TSK_FS_INFO *fs_info = *itr;
+			TSK_RETVAL_ENUM retval = findFilesInFsInt(fs_info, fs_info->root_inum);
+			if (m_errors.empty() == false)
+				return TSK_ERR;
+			else
+				return retval;
+		}
+	}
+
     TSK_FS_INFO *fs_info;
     if ((fs_info = tsk_fs_open_img(m_img_info, a_start, a_ftype)) == NULL) {
         if (isCurVsValid() == false) {
diff --git a/tsk/auto/tsk_auto.h b/tsk/auto/tsk_auto.h
index c9f1d9a3a747ef9cb8da809ddc59ef35d8817be3..58ef0ce368a57cb4b3eebaef81201eae6e1dceef 100644
--- a/tsk/auto/tsk_auto.h
+++ b/tsk/auto/tsk_auto.h
@@ -100,7 +100,7 @@ class TskAuto {
 
     void setFileFilterFlags(TSK_FS_DIR_WALK_FLAG_ENUM);
     void setVolFilterFlags(TSK_VS_PART_FLAG_ENUM);
-	void setExternalFileSystemList(std::list<TSK_FS_INFO *> exteralFsInfoList);
+	void setExternalFileSystemList(const std::list<TSK_FS_INFO *>& exteralFsInfoList);
 
     /**
      * TskAuto calls this method before it processes the volume system that is found in an