diff --git a/bindings/java/jni/dataModel_SleuthkitJNI.cpp b/bindings/java/jni/dataModel_SleuthkitJNI.cpp
index 908c709b3020e7af04b06a74e7d0eab8dfa67c03..75ff69cb024e4c1f015dc58c483ad36881d8ef77 100644
--- a/bindings/java/jni/dataModel_SleuthkitJNI.cpp
+++ b/bindings/java/jni/dataModel_SleuthkitJNI.cpp
@@ -2188,12 +2188,7 @@ JNIEXPORT jint JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_finishImageWrit
 (JNIEnv * env, jclass obj, jlong a_img_info) {
     // Set up the TSK_IMG_INFO object
     TSK_IMG_INFO *img_info = castImgInfo(env, a_img_info);
-    IMG_RAW_INFO *raw_info = (IMG_RAW_INFO*)img_info;
-
-    if (raw_info->img_writer != NULL) {
-        return raw_info->img_writer->finish_image(raw_info->img_writer);
-    }
-    return -1;
+    return tsk_img_writer_finish(img_info);
 }
 
 /*
diff --git a/tsk/img/img_writer.cpp b/tsk/img/img_writer.cpp
index 2ec1ab322559d1d1fdbcb909f061e56fa1a17bf3..fc33af5852c935279ff9a78328a746ae6f9da997 100644
--- a/tsk/img/img_writer.cpp
+++ b/tsk/img/img_writer.cpp
@@ -601,7 +601,7 @@ static TSK_RETVAL_ENUM tsk_img_writer_finish_image(TSK_IMG_WRITER* img_writer) {
  * @param img_info        the TSK_IMG_INFO object
  * @param outputFileName  path to the VHD
  */
-TSK_RETVAL_ENUM tsk_img_writer_create(TSK_IMG_INFO * img_info, const TSK_TCHAR * outputFileName) {
+TSK_RETVAL_ENUM tsk_img_writer_create(TSK_IMG_INFO *img_info, const TSK_TCHAR *outputFileName) {
 #ifndef TSK_WIN32
     return TSK_ERR;
 #else
@@ -620,6 +620,13 @@ TSK_RETVAL_ENUM tsk_img_writer_create(TSK_IMG_INFO * img_info, const TSK_TCHAR *
         return TSK_ERR;
     }
 
+    if (img_info->itype != TSK_IMG_TYPE_RAW) {
+        tsk_error_reset();
+        tsk_error_set_errno(TSK_ERR_IMG_OPEN);
+        tsk_error_set_errstr("tsk_img_writer_create: image writer can be used on only raw images");
+        return TSK_ERR;
+    }
+
     IMG_RAW_INFO* raw_info = (IMG_RAW_INFO *)img_info;
 
     /* This should not be run on split images*/
@@ -734,4 +741,25 @@ TSK_RETVAL_ENUM tsk_img_writer_create(TSK_IMG_INFO * img_info, const TSK_TCHAR *
 #endif
 }
 
+/**
+ * Read the remaining sectors into the VHD file. 
+ */
+TSK_RETVAL_ENUM tsk_img_writer_finish(TSK_IMG_INFO *img_info) {
+    if (img_info->itype != TSK_IMG_TYPE_RAW) {
+        tsk_error_reset();
+        tsk_error_set_errno(TSK_ERR_IMG_ARG);
+        tsk_error_set_errstr("tsk_img_writer_finish: image writer can be used on only raw images");
+        return TSK_ERR;
+    }
+
+    IMG_RAW_INFO* raw_info = (IMG_RAW_INFO *)img_info;
+    if (raw_info->img_writer == NULL) {
+        tsk_error_reset();
+        tsk_error_set_errno(TSK_ERR_IMG_ARG);
+        tsk_error_set_errstr("tsk_img_writer_finish: image writer not set");
+        return TSK_ERR;
+    }
+
+    return raw_info->img_writer->finish_image(raw_info->img_writer);
+}
 
diff --git a/tsk/img/img_writer.h b/tsk/img/img_writer.h
index bb7df269978f0caa74193a4bfef986ce0a9a42ab..68a890bb86bc1c56b1dc244e6a881ff2b3b7667f 100644
--- a/tsk/img/img_writer.h
+++ b/tsk/img/img_writer.h
@@ -19,7 +19,8 @@
 #ifdef __cplusplus
 extern "C" {
 #endif
-    TSK_RETVAL_ENUM tsk_img_writer_create(TSK_IMG_INFO* img_info, const TSK_TCHAR * outputFileName);
+    TSK_RETVAL_ENUM tsk_img_writer_create(TSK_IMG_INFO *img_info, const TSK_TCHAR * outputFileName);
+    TSK_RETVAL_ENUM tsk_img_writer_finish(TSK_IMG_INFO *img_info);
 
     enum IMG_WRITER_BLOCK_STATUS_ENUM {
         IMG_WRITER_BLOCK_STATUS_UNALLOC = 0,