diff --git a/tsk/auto/auto_db.cpp b/tsk/auto/auto_db.cpp
index 0265c72c04e7b646ec9436f2913b447658167f12..94fe1f60ed3af61015240221fbec4b9be15423b9 100755
--- a/tsk/auto/auto_db.cpp
+++ b/tsk/auto/auto_db.cpp
@@ -112,20 +112,23 @@ void TskAutoDb::setNoFatFsOrphans(bool noFatFsOrphans)
 void TskAutoDb::setAddUnallocSpace(bool addUnallocSpace)
 {
     setAddUnallocSpace(addUnallocSpace, -1);
+    m_maxChunkSize = (int64_t)512 * 1024 * 1024;
 }
 
 void TskAutoDb::setAddUnallocSpace(bool addUnallocSpace, int64_t minChunkSize)
 {
     m_addUnallocSpace = addUnallocSpace;
     m_minChunkSize = minChunkSize;
-    m_maxChunkSize = -1;
+    //m_maxChunkSize = -1;
+    m_maxChunkSize = (int64_t)512 * 1024 * 1024;
 }
 
 void TskAutoDb::setAddUnallocSpace(int64_t minChunkSize, int64_t maxChunkSize)
 {
     m_addUnallocSpace = true;
     m_minChunkSize = minChunkSize;
-    m_maxChunkSize = maxChunkSize;
+    //m_maxChunkSize = maxChunkSize;
+    m_maxChunkSize = (int64_t)512 * 1024 * 1024;
 }
 
 /**
@@ -377,21 +380,27 @@ TskAutoDb::addUnallocatedPoolBlocksToDb(size_t & numPool) {
         /* Create the unallocated space files */
         TSK_FS_ATTR_RUN * unalloc_runs = tsk_pool_unallocated_runs(pool_info);
         TSK_FS_ATTR_RUN * current_run = unalloc_runs;
-        vector<TSK_DB_FILE_LAYOUT_RANGE> ranges;
+        //vector<TSK_DB_FILE_LAYOUT_RANGE> ranges;
         while (current_run != NULL) {
 
-            TSK_DB_FILE_LAYOUT_RANGE tempRange(current_run->addr * pool_info->block_size, current_run->len * pool_info->block_size, 0);
-
-            ranges.push_back(tempRange);
-            int64_t fileObjId = 0;
-            if (m_db->addUnallocBlockFile(unallocVolObjId, 0, current_run->len * pool_info->block_size, ranges, fileObjId, m_curImgId)) {
+            if (addUnallocBlockFileInChunks(current_run->addr * pool_info->block_size, current_run->len * pool_info->block_size, unallocVolObjId, m_curImgId) == TSK_ERR) {
                 registerError();
                 tsk_fs_attr_run_free(unalloc_runs);
                 return TSK_ERR;
             }
 
+            //TSK_DB_FILE_LAYOUT_RANGE tempRange(current_run->addr * pool_info->block_size, current_run->len * pool_info->block_size, 0);
+
+            //ranges.push_back(tempRange);
+            //int64_t fileObjId = 0;
+            //if (m_db->addUnallocBlockFile(unallocVolObjId, 0, current_run->len * pool_info->block_size, ranges, fileObjId, m_curImgId)) {
+            //    registerError();
+            //    tsk_fs_attr_run_free(unalloc_runs);
+            //    return TSK_ERR;
+            //}
+
             current_run = current_run->next;
-            ranges.clear();
+            //ranges.clear();
         }
         tsk_fs_attr_run_free(unalloc_runs);
     }
@@ -1329,13 +1338,17 @@ TSK_RETVAL_ENUM TskAutoDb::addUnallocVsSpaceToDb(size_t & numVsP) {
         vector<TSK_DB_FILE_LAYOUT_RANGE> ranges;
         const uint64_t byteStart = vsInfo.offset + vsInfo.block_size * vsPart.start;
         const uint64_t byteLen = vsInfo.block_size * vsPart.len; 
-        TSK_DB_FILE_LAYOUT_RANGE tempRange(byteStart, byteLen, 0);
-        ranges.push_back(tempRange);
-        int64_t fileObjId = 0;
-        if (m_db->addUnallocBlockFile(vsPart.objId, 0, tempRange.byteLen, ranges, fileObjId, m_curImgId) == TSK_ERR) {
+        if (addUnallocBlockFileInChunks(byteStart, byteLen, vsPart.objId, m_curImgId) == TSK_ERR) {
             registerError();
             return TSK_ERR;
         }
+        //TSK_DB_FILE_LAYOUT_RANGE tempRange(byteStart, byteLen, 0);
+        //ranges.push_back(tempRange);
+        //int64_t fileObjId = 0;
+        //if (m_db->addUnallocBlockFile(vsPart.objId, 0, tempRange.byteLen, ranges, fileObjId, m_curImgId) == TSK_ERR) {
+        //    registerError();
+        //    return TSK_ERR;
+        //}
     }
 
     return TSK_OK;
@@ -1357,14 +1370,63 @@ TSK_RETVAL_ENUM TskAutoDb::addUnallocImageSpaceToDb() {
         retImgFile = TSK_ERR;
     }
     else {
-        TSK_DB_FILE_LAYOUT_RANGE tempRange(0, imgSize, 0);
+        //TSK_DB_FILE_LAYOUT_RANGE tempRange(0, imgSize, 0);
         //add unalloc block file for the entire image
+        //vector<TSK_DB_FILE_LAYOUT_RANGE> ranges;
+        //ranges.push_back(tempRange);
+        //int64_t fileObjId = 0;
+        //retImgFile = m_db->addUnallocBlockFile(m_curImgId, 0, imgSize, ranges, fileObjId, m_curImgId);
+        retImgFile = addUnallocBlockFileInChunks(0, imgSize, m_curImgId, m_curImgId);
+    }
+    return retImgFile;
+}
+
+TSK_RETVAL_ENUM TskAutoDb::addUnallocBlockFileInChunks(uint64_t byteStart, TSK_OFF_T totalSize, int64_t parentObjId, int64_t dataSourceObjId) {
+
+    printf("\n###\nAdding unalloc file: parent: %lld, image: %lld, original start: 0x%llx, total size: 0x%llx \n",
+        parentObjId, dataSourceObjId, byteStart, totalSize);
+
+    if (m_maxChunkSize <= 0) {
+        // No chunking - write the entire file
+        TSK_DB_FILE_LAYOUT_RANGE tempRange(byteStart, totalSize, 0);
         vector<TSK_DB_FILE_LAYOUT_RANGE> ranges;
         ranges.push_back(tempRange);
         int64_t fileObjId = 0;
-        retImgFile = m_db->addUnallocBlockFile(m_curImgId, 0, imgSize, ranges, fileObjId, m_curImgId);
+        return m_db->addUnallocBlockFile(parentObjId, 0, totalSize, ranges, fileObjId, dataSourceObjId);
     }
-    return retImgFile;
+
+    // We will chunk into separate files with max size m_maxChunkSize
+    uint64_t maxChunkSize = (uint64_t)m_maxChunkSize;
+    uint64_t bytesLeft = (uint64_t)totalSize;
+    uint64_t startingOffset = byteStart;
+    uint64_t chunkSize;
+    vector<TSK_DB_FILE_LAYOUT_RANGE> ranges;
+    while (bytesLeft > 0) {
+
+        if (maxChunkSize > bytesLeft) {
+            chunkSize = bytesLeft;
+            bytesLeft = 0;
+        }
+        else {
+            chunkSize = maxChunkSize;
+            bytesLeft -= maxChunkSize;
+        }
+
+        TSK_DB_FILE_LAYOUT_RANGE tempRange(startingOffset, chunkSize, 0);     
+        ranges.push_back(tempRange);
+        int64_t fileObjId = 0;
+
+        printf("Adding range starting at 0x%llx with size 0x%llx\n", startingOffset, chunkSize);
+        TSK_RETVAL_ENUM retval = m_db->addUnallocBlockFile(parentObjId, 0, chunkSize, ranges, fileObjId, dataSourceObjId);
+        if (retval != TSK_OK) {
+            printf("Error adding unalloc file: parent: %lld, image: %lld, original start: 0x%llx, total size: 0x%llx, range start: 0x%llx, range size: 0x%llx\n", 
+                parentObjId, dataSourceObjId, byteStart, totalSize, startingOffset, chunkSize);
+            return retval;
+        }
+        ranges.clear();
+        startingOffset += chunkSize;
+    }
+    return TSK_OK;
 }
 
 /**
diff --git a/tsk/auto/tsk_case_db.h b/tsk/auto/tsk_case_db.h
index fb6bc765644125dd5445e1a437782c7c9b3374de..4b29e156e68360371d212f111be9b21eb22e8b3a 100644
--- a/tsk/auto/tsk_case_db.h
+++ b/tsk/auto/tsk_case_db.h
@@ -198,6 +198,7 @@ class TskAutoDb:public TskAuto {
     TSK_RETVAL_ENUM addUnallocVsSpaceToDb(size_t & numVsP);
     TSK_RETVAL_ENUM addUnallocImageSpaceToDb();
     TSK_RETVAL_ENUM addUnallocSpaceToDb();
+    TSK_RETVAL_ENUM addUnallocBlockFileInChunks(uint64_t byteStart, TSK_OFF_T totalSize, int64_t parentObjId, int64_t dataSourceObjId);
 
 };