diff --git a/bindings/java/jni/dataModel_SleuthkitJNI.cpp b/bindings/java/jni/dataModel_SleuthkitJNI.cpp
index 52eaaf4d07d09b7bf2caae0cd4f04039a28a73c5..121ca940c7c53d388025bba476a19094e8f91ec2 100644
--- a/bindings/java/jni/dataModel_SleuthkitJNI.cpp
+++ b/bindings/java/jni/dataModel_SleuthkitJNI.cpp
@@ -1430,31 +1430,24 @@ Java_org_sleuthkit_datamodel_SleuthkitJNI_openVolNat(JNIEnv * env,
 * @param obj the java object this was called from
 * @param a_img_info the pointer to the parent img object
 * @param offset the offset in bytes to the pool
-* @param pool_type the type of pool
 */
 JNIEXPORT jlong JNICALL
 Java_org_sleuthkit_datamodel_SleuthkitJNI_openPoolNat(JNIEnv * env,
-    jclass obj, jlong a_img_info, jlong offset, jlong pool_type)
+    jclass obj, jlong a_img_info, jlong offset)
 {
-    printf("@@@ openPoolNat\n");
     TSK_IMG_INFO *img_info = castImgInfo(env, a_img_info);
     if (img_info == 0) {
         //exception already set
         return 0;
     }
-    printf("  Casted img_info\n");
 
-    // TODO - use pool type
-    //const TSK_POOL_INFO *pool = tsk_pool_open_img_sing(img_info, offset * img_info->sector_size, TSK_POOL_TYPE_DETECT);
     const TSK_POOL_INFO *pool = tsk_pool_open_img_sing(img_info, offset, TSK_POOL_TYPE_DETECT);
     if (pool == NULL) {
-        printf("  Failed to load pool\n");
         tsk_error_print(stderr);
         if (tsk_error_get_errno() == TSK_ERR_POOL_UNSUPTYPE)
             tsk_pool_type_print(stderr);
         setThrowTskCoreError(env, tsk_error_get());
     }
-    printf("  Loaded pool! Has address 0x%x\n", pool);
     return (jlong) pool;
 }
 
@@ -1470,21 +1463,11 @@ TODO UPDATe
 JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_getImgInfoNat
 (JNIEnv * env, jclass obj, jlong a_pool_info, jlong pool_block) {
 
-
-    printf("@@@ openGetImgInfoNat - trying to cast pool with address 0x%x\n", a_pool_info);
     TSK_POOL_INFO *pool_info = castPoolInfo(env, a_pool_info);
     if (pool_info == 0) {
-        printf("@@@ openGetImgInfoNat - Invalid cast to pool???\n");
-        fflush(stdout);
         //exception already set
         return 0;
     }
-
-    printf("Java_org_sleuthkit_datamodel_SleuthkitJNI_openGetImgInfoNat - pool_block = %lld\n", pool_block);
-    fflush(stdout);
-
-    printf("  Making new img_info\n");
-    fflush(stdout);
     TSK_IMG_INFO *img_info = pool_info->get_img_info(pool_info, pool_block);
 
     return (jlong)img_info;
diff --git a/bindings/java/jni/dataModel_SleuthkitJNI.h b/bindings/java/jni/dataModel_SleuthkitJNI.h
index 14eb6753386b5368814e1ba86cbd4f14a4d7eab2..500aa6bedc29dac8a8083c435903ac158a0357eb 100644
--- a/bindings/java/jni/dataModel_SleuthkitJNI.h
+++ b/bindings/java/jni/dataModel_SleuthkitJNI.h
@@ -290,10 +290,10 @@ JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_openVolNat
 /*
  * Class:     org_sleuthkit_datamodel_SleuthkitJNI
  * Method:    openPoolNat
- * Signature: (JJJ)J
+ * Signature: (JJ)J
  */
 JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_openPoolNat
-  (JNIEnv *, jclass, jlong, jlong, jlong);
+  (JNIEnv *, jclass, jlong, jlong);
 
 /*
  * Class:     org_sleuthkit_datamodel_SleuthkitJNI
diff --git a/bindings/java/src/org/sleuthkit/datamodel/Pool.java b/bindings/java/src/org/sleuthkit/datamodel/Pool.java
index 754daa56c5402042aa10fb47496b4d3d9e905d89..4c3e12ff3f411388285e5829bdb90856fc0b35bc 100644
--- a/bindings/java/src/org/sleuthkit/datamodel/Pool.java
+++ b/bindings/java/src/org/sleuthkit/datamodel/Pool.java
@@ -43,7 +43,6 @@ protected Pool(SleuthkitCase db, long obj_id, String name, long type, long imgOf
 		super(db, obj_id, name);
 		this.type = type;
 		this.imgOffset = imgOffset;
-		System.out.println("### made a pool! Image offset " + imgOffset + "\n");
 	}
 
 	@Override
@@ -96,7 +95,7 @@ long getPoolHandle() throws TskCoreException {
 					Content dataSource = getDataSource();
 					if ((dataSource != null) && (dataSource instanceof Image)) {
 						Image image = (Image) dataSource;
-						poolHandle = SleuthkitJNI.openPool(image.getImageHandle(), imgOffset, getType().getPoolType(), getSleuthkitCase());
+						poolHandle = SleuthkitJNI.openPool(image.getImageHandle(), imgOffset, getSleuthkitCase());
 					} else {
 						throw new TskCoreException("Data Source of pool is not an image");
 					}
diff --git a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java
index 254f4f3e6ec2af4528f7e5a1c2267484766f49fc..94b37a1387828c2504194c89b25bf605a57e1e45 100644
--- a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java
+++ b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java
@@ -835,7 +835,7 @@ public static long openVsPart(long vsHandle, long volId) throws TskCoreException
 	 * @throws TskCoreException exception thrown if critical error occurs within
 	 *                          TSK
 	 */
-	public static long openPool(long imgHandle, long offset, long poolType, SleuthkitCase skCase) throws TskCoreException {
+	public static long openPool(long imgHandle, long offset, SleuthkitCase skCase) throws TskCoreException {
 		getTSKReadLock();
 		try {
 			if(! imgHandleIsValid(imgHandle)) {
@@ -851,12 +851,10 @@ public static long openPool(long imgHandle, long offset, long poolType, Sleuthki
 				}
 				
 				if (HandleCache.getCaseHandles(caseDbPointer).poolHandleCache.containsKey(offset)) {
-					System.out.println("\n#### Using the pool cache!");
 					return HandleCache.getCaseHandles(caseDbPointer).poolHandleCache.get(offset);
 				} else {
 					//returned long is ptr to pool Handle object in tsk
-					System.out.println("\n#### Trying to open pool at offset " + offset);
-					long poolHandle = openPoolNat(imgHandle, offset, poolType);
+					long poolHandle = openPoolNat(imgHandle, offset);
 					HandleCache.getCaseHandles(caseDbPointer).poolHandleCache.put(offset, poolHandle);
 					return poolHandle;
 				}
@@ -1779,7 +1777,7 @@ public static long openFile(long fsHandle, long fileId, TSK_FS_ATTR_TYPE_ENUM at
 
 	private static native long openVolNat(long vsHandle, long volId) throws TskCoreException;
 	
-	private static native long openPoolNat(long imgHandle, long offset, long poolType) throws TskCoreException;
+	private static native long openPoolNat(long imgHandle, long offset) throws TskCoreException;
 	
 	private static native long getImgInfoNat(long poolHandle, long poolOffset) throws TskCoreException;
 	
diff --git a/bindings/java/src/org/sleuthkit/datamodel/TskData.java b/bindings/java/src/org/sleuthkit/datamodel/TskData.java
index 0330c6c0fd31a92a4b4f6262a1d9f9bf50a3f286..ae7263a4549194fd7d6fe9301b39d6d1036cf16e 100644
--- a/bindings/java/src/org/sleuthkit/datamodel/TskData.java
+++ b/bindings/java/src/org/sleuthkit/datamodel/TskData.java
@@ -578,6 +578,7 @@ public enum TSK_VS_TYPE_ENUM {
 		TSK_VS_TYPE_SUN(0x0004, "SUN VTOC"), ///< Sun VTOC NON-NLS
 		TSK_VS_TYPE_MAC(0x0008, "Mac"), ///< Mac partition table NON-NLS
 		TSK_VS_TYPE_GPT(0x0010, "GPT"), ///< GPT partition table NON-NLS
+		TSK_VS_TYPE_APFS(0x0020, "APFS"), ///< APFS pool NON-NLS
 		TSK_VS_TYPE_DBFILLER(0x00F0, bundle.getString("TskData.tskVSTypeEnum.fake")), ///< fake partition table type for loaddb (for images that do not have a volume system)
 		TSK_VS_TYPE_UNSUPP(0xFFFF, bundle.getString("TskData.tskVSTypeEnum.unsupported"));    ///< Unsupported
 
diff --git a/bindings/java/src/org/sleuthkit/datamodel/Volume.java b/bindings/java/src/org/sleuthkit/datamodel/Volume.java
index 4c77d965a05a0aa6624df16fef309b4509b79652..df007479eeed02f4908de68264d05bbfce4e1a73 100644
--- a/bindings/java/src/org/sleuthkit/datamodel/Volume.java
+++ b/bindings/java/src/org/sleuthkit/datamodel/Volume.java
@@ -68,6 +68,12 @@ public int read(byte[] buf, long offset, long len) throws TskCoreException {
 				throw new TskCoreException(bundle.getString("Volume.read.exception.msg1.text"));
 			}
 			VolumeSystem parentVs = (VolumeSystem) myParent;
+			
+			// Reading from APFS volumes/volume systems is not yet supported
+			if (parentVs.getType().equals(TskData.TSK_VS_TYPE_ENUM.TSK_VS_TYPE_APFS)) {
+				throw new TskCoreException("Reading APFS pool volumes not yet supported");
+			}
+			
 			// read from the volume
 			if (volumeHandle == 0) {
 				volumeHandle = SleuthkitJNI.openVsPart(parentVs.getVolumeSystemHandle(), addr);
diff --git a/tsk/auto/auto.cpp b/tsk/auto/auto.cpp
index 49e568a42e28d703434546b081fef231b81a8adf..39775dd6cf74c852cd17a31362453caea8a9ccaf 100755
--- a/tsk/auto/auto.cpp
+++ b/tsk/auto/auto.cpp
@@ -431,10 +431,10 @@ TskAuto::findFilesInPool(TSK_OFF_T start, TSK_POOL_TYPE_ENUM ptype)
 
     // see if the super class wants to continue with this.
     TSK_FILTER_ENUM retval1 = filterPool(pool);
-    //if (retval1 == TSK_FILTER_SKIP)
-    //    return TSK_WALK_CONT;
-    //else if ((retval1 == TSK_FILTER_STOP) || (tsk->getStopProcessing()))
-    //    return TSK_WALK_STOP;
+    if (retval1 == TSK_FILTER_SKIP)
+        return TSK_OK;
+    else if ((retval1 == TSK_FILTER_STOP))
+        return TSK_STOP;
 
     /* Only APFS pools are currently supported */
     if (pool->ctype == TSK_POOL_TYPE_APFS) {
@@ -449,32 +449,29 @@ TskAuto::findFilesInPool(TSK_OFF_T start, TSK_POOL_TYPE_ENUM ptype)
             }
 
             if (filterRetval != TSK_FILTER_SKIP) {
-                printf("findFilesInPool - should be making new pool_img...\n");
-                fflush(stdout);
                 TSK_IMG_INFO *pool_img = pool->get_img_info(pool, vol_info->block);
                 if (pool_img != NULL) {
-                    printf("Calling apfs_open with image of type 0x%x\n", pool_img->itype);
                     TSK_FS_INFO *fs_info = apfs_open(pool_img, 0, TSK_FS_TYPE_APFS, "");
                     if (fs_info) {
-                        printf("Image in fs_info from apfs_open has type 0x%x\n", fs_info->img_info->itype);
-                        fflush(stdout);
                         TSK_RETVAL_ENUM retval = findFilesInFsInt(fs_info, fs_info->root_inum);
                         tsk_fs_close(fs_info);
 
                         if (retval == TSK_STOP) {
+                            pool_img->close(pool_img);
                             pool->close(pool);
                             return TSK_STOP;
                         }
                     }
                     else {
                         pool_img->close(pool_img);
+                        pool->close(pool);
                         tsk_error_set_errstr2(
                             "findFilesInPool: Error opening APFS file system");
                         registerError();
                         return TSK_ERR;
                     }
 
-                    // Don't close pool_img here because it will also close the pool
+                    tsk_img_close(pool_img);
                 }
                 else {
                     pool->close(pool);
diff --git a/tsk/auto/auto_db.cpp b/tsk/auto/auto_db.cpp
index 81b38b1741928e8fc652e9b34313aaac785d8277..bea8330352643e82532c07834e056b334f3115fb 100755
--- a/tsk/auto/auto_db.cpp
+++ b/tsk/auto/auto_db.cpp
@@ -307,9 +307,7 @@ TSK_FILTER_ENUM TskAutoDb::filterVs(const TSK_VS_INFO * vs_info)
 TSK_FILTER_ENUM
 TskAutoDb::filterPool(const TSK_POOL_INFO * pool_info)
 {
-    printf("filterPool\n");
-
-    m_poolFound = true; // TODO - this needs to get reset at some point
+    m_poolFound = true;
 
     if (m_volFound && m_vsFound) {
         // there's a volume system and volume
@@ -334,8 +332,6 @@ TskAutoDb::filterPool(const TSK_POOL_INFO * pool_info)
 TSK_FILTER_ENUM
 TskAutoDb::filterPoolVol(const TSK_POOL_VOLUME_INFO * pool_vol)
 {
-    printf("filterPoolVol 0x%llx\n", pool_vol->index);
-    //m_curPoolVol = pool_vol->index;
 
     if (m_db->addPoolVolumeInfo(pool_vol, m_curPoolVs, m_curPoolVol)) {
         registerError();
@@ -350,6 +346,7 @@ TskAutoDb::filterVol(const TSK_VS_PART_INFO * vs_part)
 {
     m_volFound = true;
     m_foundStructure = true;
+    m_poolFound = false;
 
     if (m_db->addVolumeInfo(vs_part, m_curVsId, m_curVolId)) {
         registerError();
@@ -565,9 +562,6 @@ TskAutoDb::startAddImage(TSK_IMG_INFO * img_info, const char* deviceId)
         return 1;
     }
 
-    printf("TskAutoDb::startAddImage\n");
-    fflush(stdout);
-
     if (tsk_verbose)
         tsk_fprintf(stderr, "TskAutoDb::startAddImage: Starting add image process\n");
 
diff --git a/tsk/auto/db_sqlite.cpp b/tsk/auto/db_sqlite.cpp
index 921d27055fc99abc16da594dc402e7fa644d9ece..1ad9ad0e678039c8d2c1b63b006a93df74bf9703 100755
--- a/tsk/auto/db_sqlite.cpp
+++ b/tsk/auto/db_sqlite.cpp
@@ -764,7 +764,7 @@ TskDbSqlite::addPoolInfo(const TSK_POOL_INFO *pool_info, int64_t parObjId, int64
         return 1;
 
     snprintf(stmt, 1024,
-        "INSERT INTO tsk_pool_info (obj_id, img_offset, pool_type) VALUES (%" PRId64 ",%" PRIuDADDR ",%d)", poolObjId, pool_info->img_offset, pool_info->ctype); // TODO - offset
+        "INSERT INTO tsk_pool_info (obj_id, img_offset, pool_type) VALUES (%" PRId64 ",%" PRIuDADDR ",%d)", poolObjId, pool_info->img_offset, pool_info->ctype);
 
 
     int retVal = attempt_exec(stmt,
@@ -777,7 +777,7 @@ TskDbSqlite::addPoolInfo(const TSK_POOL_INFO *pool_info, int64_t parObjId, int64
         return 1;
 
     snprintf(stmt, 1024,
-        "INSERT INTO tsk_vs_info (obj_id, vs_type, img_offset, block_size) VALUES (%" PRId64 ", %d,%" PRIuDADDR ",%d)", objId, 0, pool_info->img_offset, pool_info->block_size); // TODO - offset
+        "INSERT INTO tsk_vs_info (obj_id, vs_type, img_offset, block_size) VALUES (%" PRId64 ", %d,%" PRIuDADDR ",%d)", objId, TSK_VS_TYPE_APFS, pool_info->img_offset, pool_info->block_size); // TODO - offset
 
     return attempt_exec(stmt,
         "Error adding data to tsk_vs_info table: %s\n");
@@ -847,8 +847,6 @@ TskDbSqlite::addFsInfo(const TSK_FS_INFO* fs_info, int64_t parObjId,
 
     if (addObject(TSK_DB_OBJECT_TYPE_FS, parObjId, objId))
         return 1;
-    printf("addFsInfo\n");
-    fflush(stdout);
     TSK_OFF_T pool_block = 0L;
     if (fs_info->img_info->itype == TSK_IMG_TYPE_POOL) {
         IMG_POOL_INFO *pool_img = (IMG_POOL_INFO*)fs_info->img_info;
diff --git a/tsk/fs/fs_open.c b/tsk/fs/fs_open.c
index 92362877d6771d849233696ff3583caa4bab4cbd..e1d0cb4a62f194659a3d32c0fb5a2f50887677d6 100755
--- a/tsk/fs/fs_open.c
+++ b/tsk/fs/fs_open.c
@@ -224,8 +224,6 @@ tsk_fs_open_img_decrypt(TSK_IMG_INFO * a_img_info, TSK_OFF_T a_offset,
         return yaffs2_open(a_img_info, a_offset, a_ftype, 0);
     } 
     else if (TSK_FS_TYPE_ISAPFS(a_ftype)) {
-        printf("Opening apfs\n");
-        fflush(stdout);
         return apfs_open(a_img_info, a_offset, a_ftype, a_pass);
     }
     tsk_error_reset();
diff --git a/tsk/pool/apfs_pool_compat.cpp b/tsk/pool/apfs_pool_compat.cpp
index 9102776b7994b29968b1da28e5bb60d7ae8920d4..77443f557c59cc26f785123dc3acd51ce3e14d47 100755
--- a/tsk/pool/apfs_pool_compat.cpp
+++ b/tsk/pool/apfs_pool_compat.cpp
@@ -296,8 +296,6 @@ apfs_img_imgstat(TSK_IMG_INFO * img_info, FILE *file)
 static ssize_t
 apfs_img_read(TSK_IMG_INFO * img_info, TSK_OFF_T offset, char *buf, size_t len)
 {
-    printf("apfs_img_read: reading offset 0x%llx\n", offset);
-    fflush(stdout);
     IMG_POOL_INFO *pool_img_info = (IMG_POOL_INFO *)img_info;
     const auto pool = static_cast<APFSPoolCompat*>(pool_img_info->pool_info->impl);
     TSK_IMG_INFO *origInfo = pool->getTSKImgInfo(0);
diff --git a/tsk/vs/mm_open.c b/tsk/vs/mm_open.c
index 1599370561c4a8c3f3451ee852784c5163c16447..f8bdce2e9759ad7c7a9b174003436608c6b46029 100644
--- a/tsk/vs/mm_open.c
+++ b/tsk/vs/mm_open.c
@@ -194,6 +194,7 @@ tsk_vs_open(TSK_IMG_INFO * img_info, TSK_DADDR_T offset,
             return tsk_vs_sun_open(img_info, offset);
         case TSK_VS_TYPE_GPT:
             return tsk_vs_gpt_open(img_info, offset);
+        case TSK_VS_TYPE_APFS: // Not supported yet
         case TSK_VS_TYPE_UNSUPP:
         default:
             tsk_error_reset();
diff --git a/tsk/vs/tsk_vs.h b/tsk/vs/tsk_vs.h
index 25b890b938afeb32ad8b5fffce08a20dd28cced9..5432df34bfeabc99cc1a5e5dba4b0858b9ad09da 100644
--- a/tsk/vs/tsk_vs.h
+++ b/tsk/vs/tsk_vs.h
@@ -53,6 +53,7 @@ extern "C" {
         TSK_VS_TYPE_SUN = 0x0004,       ///< Sun VTOC
         TSK_VS_TYPE_MAC = 0x0008,       ///< Mac partition table
         TSK_VS_TYPE_GPT = 0x0010,       ///< GPT partition table
+        TSK_VS_TYPE_APFS =  0x0020,     ///< APFS 
         TSK_VS_TYPE_DBFILLER = 0x00F0,  ///< fake partition table type for loaddb (for images that do not have a volume system)
         TSK_VS_TYPE_UNSUPP = 0xffff,    ///< Unsupported
     } TSK_VS_TYPE_ENUM;