diff --git a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java
index 82ec4ae11c4d7821c7705a142a7da3294e615250..3a6b7c77bde2f84c192895fc88eb012a0fb4b66d 100644
--- a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java
+++ b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java
@@ -643,6 +643,9 @@ private static long openImage(String[] imageFiles, int sSize, boolean useCache)
 	public static long openVs(long imgHandle, long vsOffset) throws TskCoreException {
 		getTSKReadLock();
 		try {
+			if(! imgHandleIsValid(imgHandle)) {
+				throw new TskCoreException("Image handle " + imgHandle + " is closed");
+			}
 			return openVsNat(imgHandle, vsOffset);
 		} finally {
 			releaseTSKReadLock();
@@ -756,6 +759,17 @@ private static int convertSignedToUnsigned(int val) {
 
 		return val & 0xffff;	// convert negative value to positive value
 	}
+	
+	/**
+	 * Test that the given image handle is valid.
+	 * @param imgHandle
+	 * @return true if it is valid, false otherwise
+	 */
+	private static boolean imgHandleIsValid(long imgHandle) {
+		synchronized(HandleCache.cacheLock) {
+			return HandleCache.fsHandleCache.containsKey(imgHandle);
+		}
+	}
 
 	//do reads
 	/**
@@ -775,6 +789,9 @@ private static int convertSignedToUnsigned(int val) {
 	public static int readImg(long imgHandle, byte[] readBuffer, long offset, long len) throws TskCoreException {
 		getTSKReadLock();
 		try {
+			if(! imgHandleIsValid(imgHandle)) {
+				throw new TskCoreException("Image handle " + imgHandle + " is closed");
+			}
 			//returned byte[] is the data buffer
 			return readImgNat(imgHandle, readBuffer, offset, len);
 		} finally {
@@ -1226,6 +1243,9 @@ private static String timezoneLongToShort(String timezoneLongForm) {
 	public static int finishImageWriter(long imgHandle) throws TskCoreException {
 		getTSKReadLock();
 		try {
+			if(! imgHandleIsValid(imgHandle)) {
+				throw new TskCoreException("Image handle " + imgHandle + " is closed");
+			}
 			return finishImageWriterNat(imgHandle);
 		} finally {
 			releaseTSKReadLock();
@@ -1242,7 +1262,11 @@ public static int finishImageWriter(long imgHandle) throws TskCoreException {
 	public static int getFinishImageProgress(long imgHandle) {
 		getTSKReadLock();
 		try {
-			return getFinishImageProgressNat(imgHandle);
+			if (imgHandleIsValid(imgHandle)) {
+				return getFinishImageProgressNat(imgHandle);
+			} else {
+				return 0;
+			}
 		} finally {
 			releaseTSKReadLock();
 		}
@@ -1256,7 +1280,9 @@ public static int getFinishImageProgress(long imgHandle) {
 	public static void cancelFinishImage(long imgHandle) {
 		getTSKReadLock();
 		try {
-			cancelFinishImageNat(imgHandle);
+			if (imgHandleIsValid(imgHandle)) {
+				cancelFinishImageNat(imgHandle);
+			}
 		} finally {
 			releaseTSKReadLock();
 		}