diff --git a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java
index f20b2851227561a160d27ec131e28919edfb48a3..3110c1120690bb653cd4c22fd8967bdb470386d3 100755
--- a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java
+++ b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java
@@ -8408,5 +8408,23 @@ public LocalFile addLocalFile(String fileName, String localPath,
 		return addLocalFile(fileName, localPath, size, ctime, crtime, atime, mtime,
 				isFile, TskData.EncodingType.NONE, parent);
 	}
+	
+	/**
+	 * Start process of adding a image to the case. Adding an image is a
+	 * multi-step process and this returns an object that allows it to happen.
+	 *
+	 * @param timezone        TZ time zone string to use for ingest of image.
+	 * @param addUnallocSpace Set to true to create virtual files for
+	 *                        unallocated space in the image.
+	 * @param noFatFsOrphans  Set to true to skip processing orphan files of FAT
+	 *                        file systems.
+	 *
+	 * @return Object that encapsulates control of adding an image via the
+	 *         SleuthKit native code layer
+	 * @Deprecated Use the newer version with explicit image writer path parameter
+	 */
+	public AddImageProcess makeAddImageProcess(String timezone, boolean addUnallocSpace, boolean noFatFsOrphans) {
+		return this.caseHandle.initAddImageProcess(timezone, addUnallocSpace, noFatFsOrphans, "");
+	}
 
 }
diff --git a/tsk/auto/auto_db.cpp b/tsk/auto/auto_db.cpp
index af3a115650de5e2a8fc22ffe9dab1d21744c68a7..d1f76e81034a814dbfcd30e845413e570b3ae364 100644
--- a/tsk/auto/auto_db.cpp
+++ b/tsk/auto/auto_db.cpp
@@ -531,7 +531,10 @@ TskAutoDb::startAddImage(TSK_IMG_INFO * img_info, const char* deviceId)
     }
 
     if (m_imageWriterEnabled) {
-        tsk_img_writer_create(m_img_info, m_imageWriterPath);
+        if (tsk_img_writer_create(m_img_info, m_imageWriterPath)) {
+            registerError();
+            return 1;
+        }
     }
 
     if (m_addFileSystems) {
diff --git a/tsk/img/img_writer.cpp b/tsk/img/img_writer.cpp
index a27399379b83e6b570a91d1cfbd6c778784c634e..adaa027dc21354520cab0f8157ff1c2298d20377 100644
--- a/tsk/img/img_writer.cpp
+++ b/tsk/img/img_writer.cpp
@@ -442,7 +442,7 @@ static TSK_RETVAL_ENUM tsk_img_writer_finish_image(TSK_IMG_WRITER* img_writer) {
 
         /* Simple progress indicator - current block / totalBlocks (as an integer)
          */
-        img_writer->finishProgress = (i * 100) / img_writer->totalBlocks;
+        img_writer->finishProgress = (int)((i * 100) / img_writer->totalBlocks);
 
         if (img_writer->blockStatus[i] != IMG_WRITER_BLOCK_STATUS_FINISHED) {
 
@@ -602,7 +602,6 @@ static TSK_RETVAL_ENUM writeDynamicDiskHeader(TSK_IMG_WRITER * writer) {
     if (FALSE == WriteFile(writer->outputFileHandle, diskHeader, VHD_DISK_HEADER_LENGTH, &bytesWritten, NULL)) {
         int lastError = GetLastError();
         tsk_error_reset();
-        tsk_error_reset();
         tsk_error_set_errno(TSK_ERR_IMG_WRITE);
         tsk_error_set_errstr("writeFooter: error writing VHD header",
             lastError);
@@ -630,6 +629,9 @@ TSK_RETVAL_ENUM tsk_img_writer_create(TSK_IMG_INFO * img_info, const TSK_TCHAR *
     /* Everything will break if the buffers coming in are larger than the block 
        size (i.e., they could span three blocks instead of just two)*/
     if (TSK_IMG_INFO_CACHE_LEN > VHD_DEFAULT_BLOCK_SIZE) {
+        tsk_error_reset();
+        tsk_error_set_errno(TSK_ERR_IMG_OPEN);
+        tsk_error_set_errstr("tsk_img_writer_create: tsk cache length is larger than the block size");
         return TSK_ERR;
     }
 
@@ -637,6 +639,9 @@ TSK_RETVAL_ENUM tsk_img_writer_create(TSK_IMG_INFO * img_info, const TSK_TCHAR *
 
     /* This should not be run on split images*/
     if (img_info->num_img != 1) {
+        tsk_error_reset();
+        tsk_error_set_errno(TSK_ERR_IMG_OPEN);
+        tsk_error_set_errstr("tsk_img_writer_create: image writer can not be used on split images");
         return TSK_ERR;
     }
 
@@ -659,6 +664,9 @@ TSK_RETVAL_ENUM tsk_img_writer_create(TSK_IMG_INFO * img_info, const TSK_TCHAR *
     /* Calculation time */
     writer->imageSize = raw_info->img_info.size;
     if (writer->imageSize > VHD_MAX_IMAGE_SIZE) {
+        tsk_error_reset();
+        tsk_error_set_errno(TSK_ERR_IMG_OPEN);
+        tsk_error_set_errstr("tsk_img_writer_create: image file is too large to copy");
         return TSK_ERR;
     }
     writer->blockSize = VHD_DEFAULT_BLOCK_SIZE;
@@ -691,8 +699,7 @@ TSK_RETVAL_ENUM tsk_img_writer_create(TSK_IMG_INFO * img_info, const TSK_TCHAR *
 
         tsk_error_reset();
         tsk_error_set_errno(TSK_ERR_IMG_OPEN);
-        tsk_error_set_errstr("tsk_img_writer_create: file \"%" PRIttocTSK
-            "\" - %d", outputFileName, lastError);
+        tsk_error_set_errstr("tsk_img_writer_create: error creating file \"%" PRIttocTSK "\"", outputFileName);
         return TSK_ERR;
     }