diff --git a/bindings/java/jni/dataModel_SleuthkitJNI.cpp b/bindings/java/jni/dataModel_SleuthkitJNI.cpp
index e4c6dd957994757b8639ce5f3f040e49655413ce..7cdeb65bcaa1f77ea78f70291ff58674305be05f 100644
--- a/bindings/java/jni/dataModel_SleuthkitJNI.cpp
+++ b/bindings/java/jni/dataModel_SleuthkitJNI.cpp
@@ -311,6 +311,66 @@ JNIEXPORT jint JNICALL
     return hashDbs.size();
 }
 
+/**
+ * Begins a hash database transaction.
+ * @param env Pointer to Java environment from which this method was called.
+ * @param obj The Java object from which this method was called.
+ * @param dbHandle A handle for the hash database.
+ * @return 1 on error and 0 on success.
+ */
+JNIEXPORT jint JNICALL
+Java_org_sleuthkit_datamodel_SleuthkitJNI_hashDbBeginTransactionNat(
+    JNIEnv * env, jclass obj, jint dbHandle)
+{
+    if((size_t) dbHandle > hashDbs.size()) {
+        setThrowTskCoreError(env, "Invalid database handle");
+        return 1;
+    }
+
+    TSK_HDB_INFO * db = hashDbs.at(dbHandle-1);
+    if(!db) {
+        setThrowTskCoreError(env, "Invalid database handle");
+        return 1;
+    }
+
+    if(!db->accepts_updates()) {
+        setThrowTskCoreError(env, "Database does not accept updates");
+        return 1;
+    }
+
+    return 0;
+}
+
+/**
+ * Ends a hash database transaction.
+ * @param env Pointer to Java environment from which this method was called.
+ * @param obj The Java object from which this method was called.
+ * @param dbHandle A handle for the hash database.
+ * @return 1 on error and 0 on success.
+ */
+JNIEXPORT jint JNICALL
+Java_org_sleuthkit_datamodel_SleuthkitJNI_hashDbEndTransactionNat(
+    JNIEnv * env, jclass obj, jint dbHandle)
+{
+    if((size_t) dbHandle > hashDbs.size()) {
+        setThrowTskCoreError(env, "Invalid database handle");
+        return 1;
+    }
+
+    TSK_HDB_INFO * db = hashDbs.at(dbHandle-1);
+    if(!db) {
+        setThrowTskCoreError(env, "Invalid database handle");
+        return 1;
+    }
+
+    if(!db->accepts_updates()) {
+        setThrowTskCoreError(env, "Database does not accept updates");
+        return 1;
+    }
+
+    return 0;
+}
+
 /**
  * Adds data to a hash database.
  * @param env Pointer to Java environment from which this method was called.
diff --git a/bindings/java/jni/dataModel_SleuthkitJNI.h b/bindings/java/jni/dataModel_SleuthkitJNI.h
index c2eed0af193ad45a11a8cfc5936688c75c86b2e4..dc36be5b0eaa7162399e58337827e6920703cb3f 100644
--- a/bindings/java/jni/dataModel_SleuthkitJNI.h
+++ b/bindings/java/jni/dataModel_SleuthkitJNI.h
@@ -65,6 +65,14 @@ JNIEXPORT jint JNICALL
     Java_org_sleuthkit_datamodel_SleuthkitJNI_hashDbNewNat(JNIEnv * env,
     jclass obj, jstring pathJ);
 
+JNIEXPORT jint JNICALL
+Java_org_sleuthkit_datamodel_SleuthkitJNI_hashDbBeginTransactionNat(
+    JNIEnv * env, jclass obj, jint dbHandle);
+
+JNIEXPORT jint JNICALL
+Java_org_sleuthkit_datamodel_SleuthkitJNI_hashDbEndTransactionNat(
+    JNIEnv * env, jclass obj, jint dbHandle);
+
 /*
  * Class:     org_sleuthkit_datamodel_SleuthkitJNI
  * Method:    hashDbAddRecordNat
diff --git a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java
index 20b675b5f3d2ff46efca23d91aaf2360af47b387..f0104ce4f4aac0f88edbcd9ed4cb9222a121b473 100644
--- a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java
+++ b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java
@@ -54,7 +54,11 @@ public class SleuthkitJNI {
 	private static native int hashDbOpenNat(String hashDbPath) throws TskCoreException;
 
     private static native int hashDbNewNat(String hashDbPath) throws TskCoreException;
-    
+	
+	private static native int hashDbBeginTransactionNat(int dbHandle) throws TskCoreException;	
+
+	private static native int hashDbEndTransactionNat(int dbHandle) throws TskCoreException;	
+
     private static native int hashDbAddEntryNat(String filename, String hashMd5, String hashSha1, String hashSha256, String comment, int dbHandle) throws TskCoreException;
 
     private static native boolean hashDbIsUpdateableNat(int dbHandle);
@@ -688,11 +692,15 @@ public static void addToHashDatabase(String filename, String md5, String sha1, S
 	}
 
     public static void addToHashDatabase(List<HashEntry> hashes, int dbHandle) throws TskCoreException {
-		// RJCTODO: Begin transaction
-		for (HashEntry entry : hashes) {
-			hashDbAddEntryNat(entry.getFileName(), entry.getMd5Hash(), entry.getSha1Hash(), entry.getSha256Hash(), entry.getComment(), dbHandle);			
+		hashDbBeginTransactionNat(dbHandle);
+		try {
+			for (HashEntry entry : hashes) {
+				hashDbAddEntryNat(entry.getFileName(), entry.getMd5Hash(), entry.getSha1Hash(), entry.getSha256Hash(), entry.getComment(), dbHandle);			
+			}
+		}
+		finally {
+			hashDbEndTransactionNat(dbHandle);
 		}
-		// RJCTODO: end transaction
 	}
 	
 	public static boolean isUpdateableHashDatabase(int dbHandle) throws TskCoreException {