diff --git a/bindings/java/jni/dataModel_SleuthkitJNI.cpp b/bindings/java/jni/dataModel_SleuthkitJNI.cpp
index 47c7303e06007839e2b652995030fcb395292da5..11f431e9ccb1f4100ee8f90ceee33ec355f8a172 100644
--- a/bindings/java/jni/dataModel_SleuthkitJNI.cpp
+++ b/bindings/java/jni/dataModel_SleuthkitJNI.cpp
@@ -26,7 +26,7 @@ using std::stringstream;
 using std::for_each;
 
 static TSK_HDB_INFO * m_NSRLDb = NULL;
-static std::vector<TSK_HDB_INFO *> m_knownbads;
+static std::vector<TSK_HDB_INFO *> m_hashDbs;
 
 /*
 * JNI file handle structure encapsulates both
@@ -311,9 +311,9 @@ JNIEXPORT jint JNICALL
         return -1;
     }
 
-    m_knownbads.push_back(temp);
+    m_hashDbs.push_back(temp);
     
-    return m_knownbads.size();
+    return m_hashDbs.size();
 }
 
 /*
@@ -338,9 +338,9 @@ JNIEXPORT jint JNICALL
         return -1;
     }
 
-    m_knownbads.push_back(temp);
+    m_hashDbs.push_back(temp);
     
-    return m_knownbads.size();
+    return m_hashDbs.size();
 }
 
 /*
@@ -360,7 +360,7 @@ JNIEXPORT jint JNICALL
 {
     int8_t retval = 0;
 
-    if((size_t) dbHandle > m_knownbads.size()) {
+    if((size_t) dbHandle > m_hashDbs.size()) {
         setThrowTskCoreError(env, "Invalid database handle");
         retval = 1;
     } else {
@@ -372,7 +372,7 @@ JNIEXPORT jint JNICALL
         TSK_TCHAR filenameT[1024];
         toTCHAR(env, filenameT, 1024, filenameJ);
 
-        TSK_HDB_INFO * db = m_knownbads.at(dbHandle-1);
+        TSK_HDB_INFO * db = m_hashDbs.at(dbHandle-1);
 
         if(db != NULL) {
             retval = tsk_hdb_add_str(db, filenameT, md5, sha1, sha256);
@@ -403,10 +403,10 @@ JNIEXPORT jboolean JNICALL
 {
     bool retval = false;
 
-    if((size_t) dbHandle > m_knownbads.size()) {
+    if((size_t) dbHandle > m_hashDbs.size()) {
         setThrowTskCoreError(env, "Invalid database handle");
     } else {
-        TSK_HDB_INFO * db = m_knownbads.at(dbHandle-1);
+        TSK_HDB_INFO * db = m_hashDbs.at(dbHandle-1);
 
         if(db != NULL) {
             retval = (db->idx_info->updateable == 1) ? true : false;
@@ -428,10 +428,10 @@ JNIEXPORT jboolean JNICALL
 {
     bool retval = false;
 
-    if((size_t) dbHandle > m_knownbads.size()) {
+    if((size_t) dbHandle > m_hashDbs.size()) {
         setThrowTskCoreError(env, "Invalid database handle");
     } else {
-        TSK_HDB_INFO * db = m_knownbads.at(dbHandle-1);
+        TSK_HDB_INFO * db = m_hashDbs.at(dbHandle-1);
 
         if(db != NULL) {
             retval = (tsk_hdb_is_idxonly(db) == 1) ? true : false;
@@ -483,11 +483,11 @@ JNIEXPORT jstring JNICALL
 JNIEXPORT jstring JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_getDbName
   (JNIEnv * env, jclass obj, jint dbHandle)
 {
-    if((size_t) dbHandle > m_knownbads.size()) {
+    if((size_t) dbHandle > m_hashDbs.size()) {
         setThrowTskCoreError(env, "Invalid database handle");
         return env->NewStringUTF("-1");
     } else {
-        TSK_HDB_INFO * temp = m_knownbads.at(dbHandle-1);
+        TSK_HDB_INFO * temp = m_hashDbs.at(dbHandle-1);
         if (temp == NULL) {
             setThrowTskCoreError(env, "Error: database object is null");
             return env->NewStringUTF("-1");
@@ -508,9 +508,9 @@ JNIEXPORT void JNICALL
         m_NSRLDb = NULL;
     }
 
-    for_each(m_knownbads.begin(), m_knownbads.end(), tsk_hdb_close);
+    for_each(m_hashDbs.begin(), m_hashDbs.end(), tsk_hdb_close);
    
-    m_knownbads.clear();
+    m_hashDbs.clear();
 }
 
 /*
@@ -550,7 +550,7 @@ JNIEXPORT jint JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_nsrlDbLookup
 JNIEXPORT jint JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_knownBadDbLookup
 (JNIEnv * env, jclass obj, jstring hash, jint dbHandle){
 
-    if((size_t) dbHandle > m_knownbads.size()) {
+    if((size_t) dbHandle > m_hashDbs.size()) {
         setThrowTskCoreError(env, "Invalid database handle");
         return -1;
     }
@@ -563,7 +563,7 @@ JNIEXPORT jint JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_knownBadDbLooku
 
     
 
-    TSK_HDB_INFO * db = m_knownbads.at(dbHandle-1);
+    TSK_HDB_INFO * db = m_hashDbs.at(dbHandle-1);
 
     if(db != NULL) {
         int8_t retval = tsk_hdb_lookup_str(db, md5, TSK_HDB_FLAG_QUICK, NULL, NULL);
@@ -1532,15 +1532,21 @@ Java_org_sleuthkit_datamodel_SleuthkitJNI_createLookupIndexByPathNat (JNIEnv * e
     tsk_hdb_close(temp);
 }
 
+/*
+ * Create an index for the given database
+ * @param env pointer to java environment this was called from
+ * @param obj the java object this was called from
+ * @param dbHandle handle for the database
+ */
 JNIEXPORT void JNICALL
 Java_org_sleuthkit_datamodel_SleuthkitJNI_createLookupIndexNat (JNIEnv * env,
     jclass obj, jint dbHandle)
 {
-    if((size_t) dbHandle > m_knownbads.size()) {
+    if((size_t) dbHandle > m_hashDbs.size()) {
         setThrowTskCoreError(env, "Invalid database handle");
         return;
     } else {
-        TSK_HDB_INFO * temp = m_knownbads.at(dbHandle-1);
+        TSK_HDB_INFO * temp = m_hashDbs.at(dbHandle-1);
         if (temp == NULL) {
             setThrowTskCoreError(env, "Error: database object is null");
             return;
@@ -1593,14 +1599,20 @@ JNIEXPORT jboolean JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_lookupIndex
     return (jboolean) retval == 1;
 }
 
+/*
+ * Check if an index exists for the given database.
+ * @param env pointer to java environment this was called from
+ * @param obj the java object this was called from
+ * @param dbHandle handle for the database
+ */
 JNIEXPORT jboolean JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_lookupIndexExistsNat
   (JNIEnv * env, jclass obj, jint dbHandle) {
 
-    if((size_t) dbHandle > m_knownbads.size()) {
+    if((size_t) dbHandle > m_hashDbs.size()) {
         setThrowTskCoreError(env, "Invalid database handle");
         return (jboolean) false;
     } else {
-        TSK_HDB_INFO * temp = m_knownbads.at(dbHandle-1);
+        TSK_HDB_INFO * temp = m_hashDbs.at(dbHandle-1);
         if (temp == NULL) {
             return (jboolean) false;
         }
diff --git a/bindings/java/jni/dataModel_SleuthkitJNI.h b/bindings/java/jni/dataModel_SleuthkitJNI.h
index e8a7dc7009677df8dc1770da825997988d830f37..47261d57c71ad71f21d4c2fd2500a9cea62d9f55 100644
--- a/bindings/java/jni/dataModel_SleuthkitJNI.h
+++ b/bindings/java/jni/dataModel_SleuthkitJNI.h
@@ -83,7 +83,6 @@ JNIEXPORT jint JNICALL
     Java_org_sleuthkit_datamodel_SleuthkitJNI_addStrDbKnownBadNat(JNIEnv * env,
     jclass obj, jstring filenameJ, jstring hashMd5J, jstring hashSha1J, jstring hashSha256J, jint dbHandle);
 
-
 /*
  * Class:     org_sleuthkit_datamodel_SleuthkitJNI
  * Method:    isUpdateableDbKnownBadNat
@@ -93,12 +92,15 @@ JNIEXPORT jboolean JNICALL
     Java_org_sleuthkit_datamodel_SleuthkitJNI_isUpdateableDbKnownBadNat(JNIEnv * env,
     jclass obj, jint dbHandle);
 
-
+/*
+ * Class:     org_sleuthkit_datamodel_SleuthkitJNI
+ * Method:    isIdxOnlyHashDbNat
+ * Signature: 
+ */
 JNIEXPORT jboolean JNICALL
     Java_org_sleuthkit_datamodel_SleuthkitJNI_isIdxOnlyHashDbNat(JNIEnv * env,
     jclass obj, jint dbHandle);
 
-
 /*
  * Class:     org_sleuthkit_datamodel_SleuthkitJNI
  * Method:    getDbName
@@ -301,24 +303,33 @@ JNIEXPORT void JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_closeFileNat
 
 /*
  * Class:     org_sleuthkit_datamodel_SleuthkitJNI
- * Method:    createLookupIndexNat
+ * Method:    createLookupIndexByPathNat
  * Signature: (Ljava/lang/String;)V
  */
 JNIEXPORT void JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_createLookupIndexByPathNat
   (JNIEnv *, jclass, jstring);
 
+/*
+ * Class:     org_sleuthkit_datamodel_SleuthkitJNI
+ * Method:    createLookupIndexNat
+ * Signature: 
+ */
 JNIEXPORT void JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_createLookupIndexNat
   (JNIEnv *, jclass, jint);
 
 /*
  * Class:     org_sleuthkit_datamodel_SleuthkitJNI
- * Method:    lookupIndexExistsNat
+ * Method:    lookupIndexExistsByPathNat
  * Signature: (Ljava/lang/String;)Z
  */
 JNIEXPORT jboolean JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_lookupIndexExistsByPathNat
   (JNIEnv *, jclass, jstring);
 
-
+/*
+ * Class:     org_sleuthkit_datamodel_SleuthkitJNI
+ * Method:    lookupIndexExistsNat
+ * Signature: 
+ */
 JNIEXPORT jboolean JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_lookupIndexExistsNat
   (JNIEnv *, jclass, jint);
 
diff --git a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java
index ef91dc53db0776af21eb059ad6a48aded4f93e23..d0e6853ae2c8d1d4fefd3bcdff6428ebd70db897 100644
--- a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java
+++ b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java
@@ -789,7 +789,7 @@ public static boolean isUpdateableHashDatabase(int dbHandle) throws TskCoreExcep
 		return isUpdateableDbKnownBadNat(dbHandle);
 	}    
     
-    public boolean hashDatabaseHasLegacyLookupIndexOnly(int dbHandle) throws TskCoreException {
+    public static boolean hashDatabaseHasLegacyLookupIndexOnly(int dbHandle) throws TskCoreException {
         return isIdxOnlyHashDbNat(dbHandle);
     }
     
diff --git a/tsk/hashdb/sqlite_index.cpp b/tsk/hashdb/sqlite_index.cpp
index 7652a38cc37ae25d303f70983379bf066f0799f5..7f7dbed781ad003068697513fe4af80707107657 100644
--- a/tsk/hashdb/sqlite_index.cpp
+++ b/tsk/hashdb/sqlite_index.cpp
@@ -395,7 +395,17 @@ sqlite_v1_lookup_str(TSK_HDB_INFO * hdb_info, const char *hash,
 		pos += 2 * sizeof(char);
 	}
 
-	return sqlite_v1_lookup_raw(hdb_info, hashBlob, len, flags, action, ptr);
+	int8_t ret = sqlite_v1_lookup_raw(hdb_info, hashBlob, len, flags, action, ptr);
+    
+    if ((ret == 1) && (hdb_info->db_type == TSK_HDB_DBTYPE_IDXONLY_ID)
+        && !(flags & TSK_HDB_FLAG_QUICK) && (action != NULL)) {
+        //name is blank because we don't have a name in this case
+        ///@todo query the names table for associations
+        char * name = "";
+        action(hdb_info, hash, name, ptr);
+    }
+
+	return ret;		
 			
 }
 
@@ -419,77 +429,83 @@ sqlite_v1_lookup_raw(TSK_HDB_INFO * hdb_info, uint8_t * hash, uint8_t len,
                    TSK_HDB_LOOKUP_FN action, void *ptr)
 {
 	char hashbuf[TSK_HDB_HTYPE_SHA1_LEN + 1];
-	int i;
+	int8_t ret = 0;
+    int i;
 	static const char hex[] = "0123456789abcdef";
 	TSK_OFF_T offset;
     char * selectStmt;
+    sqlite3_stmt* stmt = NULL;
 
     tsk_take_lock(&hdb_info->lock);
 
 	/* Sanity check */
 	if ((hdb_info->hash_len)/2 != len) {
-        tsk_release_lock(&hdb_info->lock);
 		tsk_error_reset();
 		tsk_error_set_errno(TSK_ERR_HDB_ARG);
 		tsk_error_set_errstr("hdb_lookup: Hash passed is different size than expected: %d vs %d",
 			hdb_info->hash_len, len);
-		return -1;
-	}
+		ret = -1;
+	} else {
 
-    if (m_stmt == NULL) {
     	if (hdb_info->hash_type == TSK_HDB_HTYPE_MD5_ID) {
             selectStmt = "SELECT md5,database_offset from hashes where md5=? limit 1";
         } else if (hdb_info->hash_type == TSK_HDB_HTYPE_SHA1_ID) {
             selectStmt = "SELECT sha1,database_offset from hashes where sha1=? limit 1";
         } else {
-            tsk_release_lock(&hdb_info->lock);
             tsk_error_reset();
             tsk_error_set_errno(TSK_ERR_HDB_ARG);
             tsk_error_set_errstr("Unknown hash type: %d\n", hdb_info->hash_type);
-            return 1;
+            ret = -1;
         }
-        prepare_stmt(selectStmt, &m_stmt, hdb_info->idx_info->idx_struct.idx_sqlite_v1->hIdx_sqlite);
-    }
-
-	if (attempt(sqlite3_bind_blob(m_stmt, 1, hash, len, free),
-		SQLITE_OK,
-		"Error binding binary blob: %s\n",
-		hdb_info->idx_info->idx_struct.idx_sqlite_v1->hIdx_sqlite)) {
-            tsk_release_lock(&hdb_info->lock);
-			return -1;
-	}
 
-	if (sqlite3_step(m_stmt) == SQLITE_ROW) {
-		if ((flags & TSK_HDB_FLAG_QUICK)
-			|| (hdb_info->db_type == TSK_HDB_DBTYPE_IDXONLY_ID)) {
-				sqlite3_reset(m_stmt);
-                tsk_release_lock(&hdb_info->lock);
-				return 1;
-		} else {
-			for (i = 0; i < len; i++) {
-				hashbuf[2 * i] = hex[(hash[i] >> 4) & 0xf];
-				hashbuf[2 * i + 1] = hex[hash[i] & 0xf];
-			}
-			hashbuf[2 * len] = '\0';
-
-			offset = sqlite3_column_int64(m_stmt, 1);
-			sqlite3_reset(m_stmt);
-
-			if (hdb_info->getentry(hdb_info, hashbuf, offset, flags, action, ptr)) {
-                tsk_release_lock(&hdb_info->lock);
-				tsk_error_set_errstr2("hdb_lookup");
-				return -1;
-			}
-			return 1;
-		}
-	}
-
-	sqlite3_reset(m_stmt);
+        if (ret != -1) {
+            prepare_stmt(selectStmt, &stmt, hdb_info->idx_info->idx_struct.idx_sqlite_v1->hIdx_sqlite);
+        
+	        if (attempt(sqlite3_bind_blob(stmt, 1, hash, len, free),
+		        SQLITE_OK,
+		        "Error binding binary blob: %s\n",
+		        hdb_info->idx_info->idx_struct.idx_sqlite_v1->hIdx_sqlite)) {
+			    ret = -1;
+	        } else {
+                // Found a match
+	            if (sqlite3_step(stmt) == SQLITE_ROW) {
+		            if ((flags & TSK_HDB_FLAG_QUICK)
+			            || (hdb_info->db_type == TSK_HDB_DBTYPE_IDXONLY_ID)) {
+				        
+                        // There is just an index, so no other info to get
+                        ///@todo Look up a name in the sqlite db
+                        ret = 1;
+		            } else {
+                        // Use offset to get more info
+			            for (i = 0; i < len; i++) {
+				            hashbuf[2 * i] = hex[(hash[i] >> 4) & 0xf];
+				            hashbuf[2 * i + 1] = hex[hash[i] & 0xf];
+			            }
+			            hashbuf[2 * len] = '\0';
+
+			            offset = sqlite3_column_int64(stmt, 1);
+
+			            if (hdb_info->getentry(hdb_info, hashbuf, offset, flags, action, ptr)) {
+				            tsk_error_set_errstr2("hdb_lookup");
+				            ret = -1;
+			            } else {
+			                ret = 1;
+                        }
+		            }
+                }
+            }
+        
+	        sqlite3_reset(stmt);
     
-    tsk_release_lock(&hdb_info->lock);
+            if (stmt) {
+                finalize_stmt(stmt);
+            }
+        }
+    }
 
-	return 0;
+    tsk_release_lock(&hdb_info->lock);
 
+	return ret;
 }
 
 
diff --git a/tsk/hashdb/tm_lookup.cpp b/tsk/hashdb/tm_lookup.cpp
index 1c97f0567f664947ed5a6540b708bc3f13e79709..cc663b0b60e641961a21ee65ca504e51582e887d 100644
--- a/tsk/hashdb/tm_lookup.cpp
+++ b/tsk/hashdb/tm_lookup.cpp
@@ -57,8 +57,7 @@ tsk_hdb_lookup_str(TSK_HDB_INFO * hdb_info, const char *hash,
         return -1;
     }
 
-	return hdb_info->idx_info->lookup_str(hdb_info, hash, flags, action, ptr);
-			
+    return hdb_info->idx_info->lookup_str(hdb_info, hash, flags, action, ptr);
 }
 
 /**