diff --git a/bindings/java/build-unix.xml b/bindings/java/build-unix.xml
index cd0ef4934b8d82b083ce704d08328bc3dcae072e..2230808bdbe46bbfdb4761d5dbb1cc2ac4f3ce5f 100644
--- a/bindings/java/build-unix.xml
+++ b/bindings/java/build-unix.xml
@@ -42,7 +42,16 @@
         <property environment="env"/>
 		<property name="jni.dylib" location="${basedir}/jni/.libs/libtsk_jni.dylib" />
 		<property name="jni.jnilib" value="libtsk_jni.jnilib" />
+		<property name="mac.zlib" location="/usr/lib/libz.dylib"/>
+		<property name="mac.libewf" location="${env.LIBEWF_HOME}/libewf/.libs/libewf.dylib"/>
+		<!-- x86_64 -->
         <copy file="${jni.dylib}" tofile="${x86_64}/mac/${jni.jnilib}"/>
+		<copy file="${mac.libewf}" tofile="${x86_64}/mac/libewf.dylib"/>
+		<copy file="${mac.zlib}" tofile="${x86_64}/mac/zlib.dylib"/>
+		<!-- amd64 -->
+		<copy file="${jni.dylib}" tofile="${amd64}/mac/${jni.jnilib}"/>
+		<copy file="${mac.libewf}" tofile="${amd64}/mac/libewf.dylib"/>
+		<copy file="${mac.zlib}" tofile="${amd64}/mac/zlib.dylib"/>
     </target>
 
     <!-- Non-OS X -->
@@ -51,11 +60,41 @@
         <copy file="./jni/.libs/libtsk_jni.so" tofile="./libtsk_jni.so"/>
     </target>
 	
-	<target name="copyUnixLibs" depends="testTSKLibs" if="tsk_so.present">
-		<!-- does nothing for now -->
+	<target name="copyLinuxLibs" depends="testTSKLibs" if="tsk_so.present">
+		<property environment="env"/>
+		<property name="jni.so" location="${basedir}/jni/.libs/libtsk_jni.so" />
+		<!-- check that this location is correct -->
+		<property name="linux.zlib" location="/usr/lib/libz.so"/>
+		<property name="zlib.so" value="zlib.so"/>
+		<property name="linux.libewf" location="${env.LIBEWF_HOME}/libewf/.libs/libewf.so"/>
+		<property name="libewf.so" value="libewf.so"/>
+		<!-- x86_64 -->
+		<copy file="${jni.so}" tofile="${x86_64}/linux/libtsk_jni.so"/>
+		<copy file="${linux.zlib}" tofile="${x86_64}/linux/${zlib.so}"/>
+		<copy file="${linux.libewf}" tofile="${x86_64}/linux/${libewf.so}"/>
+		<!-- amd64 -->
+		<copy file="${jni.so}" tofile="${amd64}/linux/libtsk_jni.so"/>
+		<copy file="${linux.zlib}" tofile="${amd64}/linux/${zlib.so}"/>
+		<copy file="${linux.libewf}" tofile="${amd64}/linux/${libewf.so}"/>
+		<!-- x86 -->
+		<copy file="${jni.so}" tofile="${x86}/linux/libtsk_jni.so"/>
+		<copy file="${linux.zlib}" tofile="${x86}/linux/${zlib.so}"/>
+		<copy file="${linux.libewf}" tofile="${x86}/linux/${libewf.so}"/>
+		<!-- i386 -->
+		<copy file="${jni.so}" tofile="${i386}/linux/libtsk_jni.so"/>
+		<copy file="${linux.zlib}" tofile="${i386}/linux/${zlib.so}"/>
+		<copy file="${linux.libewf}" tofile="${i386}/linux/${libewf.so}"/>
+		<!-- i586 -->
+		<copy file="${jni.so}" tofile="${i586}/linux/libtsk_jni.so"/>
+		<copy file="${linux.zlib}" tofile="${i586}/linux/${zlib.so}"/>
+		<copy file="${linux.libewf}" tofile="${i586}/linux/${libewf.so}"/>
+		<!-- i686 -->
+		<copy file="${jni.so}" tofile="${i686}/linux/libtsk_jni.so"/>
+		<copy file="${linux.zlib}" tofile="${i686}/linux/${zlib.so}"/>
+		<copy file="${linux.libewf}" tofile="${i686}/linux/${libewf.so}"/>
 	</target>
 
-	<target name="copyLibs" depends="copyUnixLibs,copyMacLibs" />
+	<target name="copyLibs" depends="copyLinuxLibs,copyMacLibs" />
 	
     <target name="copyTSKLibs" depends="copyTskLibs_so,copyTskLibs_dylib">
         <!-- depends targets take care of the actual copying since the file differs on OS X and Linux -->
diff --git a/bindings/java/build-windows.xml b/bindings/java/build-windows.xml
index 0356ce1af60f0e6500020af8da508de5c6390641..7a78fd1cd40bebd1f645a13adae6ea8d8fd45731 100644
--- a/bindings/java/build-windows.xml
+++ b/bindings/java/build-windows.xml
@@ -98,5 +98,11 @@
 			<fileset refid="crt32dlls" />
 		</copy>		
 		
+		<copy todir="${i686}/win" overwrite="true">
+			<fileset refid="win32dlls" />
+		</copy>
+		<copy todir="${i686}/win" overwrite="true">
+			<fileset refid="crt32dlls" />
+		</copy>	
 	</target>
 </project>
diff --git a/bindings/java/build.xml b/bindings/java/build.xml
index 81c0ddef09f97edb027e45181c4b1acc903e9581..7d1271df6a226a694e59c031b23de3085df92921 100755
--- a/bindings/java/build.xml
+++ b/bindings/java/build.xml
@@ -26,6 +26,7 @@
 	<property name="x86_64" location="build/NATIVELIBS/x86_64" />
 	<property name="i386" location="build/NATIVELIBS/i386" />
 	<property name="i586" location="build/NATIVELIBS/i586" />
+	<property name="i686" location="build/NATIVELIBS/i686"/>
 	<property name="crt" location="${basedir}/crt" />
   
 	<path id="libraries">
@@ -46,15 +47,24 @@
 		<mkdir dir="${native-libs}" />
 		<mkdir dir="${amd64}" />
 		<mkdir dir="${amd64}/win" />
+		<mkdir dir="${amd64}/mac" />
+		<mkdir dir="${amd64}/linux" />
 	    <mkdir dir="${x86}" />
 		<mkdir dir="${x86}/win" />
+		<mkdir dir="${x86}/linux" />
 		<mkdir dir="${x86_64}" />
 		<mkdir dir="${x86_64}/win" />
 		<mkdir dir="${x86_64}/mac" />
+		<mkdir dir="${x86_64}/linux"/>
 		<mkdir dir="${i386}" />
 		<mkdir dir="${i386}/win" />
+		<mkdir dir="${i386}/linux"/>
 		<mkdir dir="${i586}" />
 		<mkdir dir="${i586}/win" />
+		<mkdir dir="${i586}/linux" />
+		<mkdir dir="${i686}"/>
+		<mkdir dir="${i686}/win"/>
+		<mkdir dir="${i686}/linux"/>
 	</target>
   
 	<property name="ivy.install.version" value="2.3.0-rc2" />
diff --git a/bindings/java/src/org/sleuthkit/datamodel/LibraryUtils.java b/bindings/java/src/org/sleuthkit/datamodel/LibraryUtils.java
index 6a258015bd226a181cf6b331e96b03fe90ef6648..096c5b866a91c550e6b5ddc7010710070716f94e 100644
--- a/bindings/java/src/org/sleuthkit/datamodel/LibraryUtils.java
+++ b/bindings/java/src/org/sleuthkit/datamodel/LibraryUtils.java
@@ -44,7 +44,7 @@ public enum Lib {
 		MSVCR ("msvcr100"),
 		ZLIB ("zlib"),
 		LIBEWF ("libewf"),
-		TSK_JNI ("tsk_jni");
+		TSK_JNI ("libtsk_jni");
 		
 		private final String name;
 		
@@ -64,12 +64,10 @@ public String getLibName() {
 	 */
 	public static String getPlatform() {
 		String os = System.getProperty("os.name").toLowerCase();
-		if(os.contains("win")) {
+		if(LibraryUtils.isWindows()) {
 			os = "win";
-		} else if(os.contains("mac")) {
+		} else if(LibraryUtils.isMac()) {
 			os = "mac";
-		} else {
-			os = "unix";
 		}
 		// os.arch represents the architecture of the JVM, not the os
 		String arch = System.getProperty("os.arch");
@@ -94,21 +92,27 @@ private static boolean isMac() {
 		return System.getProperty("os.name").toLowerCase().contains("mac");
 	}
 	
+	/**
+	 * Is the platform Linux?
+	 * 
+	 * @return
+	 */
+	public static boolean isLinux() {
+		return System.getProperty("os.name").equals("Linux");
+	}
+	
     /**
 	 * Attempt to extract and load the specified library.
 	 * 
 	 * @param library
 	 * @return 
 	 */
-	public static void loadLibrary(Lib library) {
+	public static boolean loadLibrary(Lib library) {
 		StringBuilder path = new StringBuilder();
 		path.append("/NATIVELIBS/");
 		path.append(getPlatform());
 		
 		String libName = library.getLibName();
-		if(library == Lib.TSK_JNI && (isWindows() || isMac())) {
-			libName = "lib" + libName;
-		}
 		
 		path.append("/");
 		path.append(libName);
@@ -123,32 +127,36 @@ public static void loadLibrary(Lib library) {
 			}
 		}
 		
-		if(libraryURL != null) {
-			// copy library to temp folder and load it
-			try {
-				java.io.File libTemp = new java.io.File(System.getProperty("java.io.tmpdir") + libName + libExt);
-				
-				if(libTemp.exists()) {
-					// Delete old file
-					libTemp.delete();
-				}
-				
-				InputStream in = libraryURL.openStream();
-				OutputStream out = new FileOutputStream(libTemp);
-				
-				byte[] buffer = new byte[1024];
-				int length;
-				while((length = in.read(buffer)) > 0) {
-					out.write(buffer, 0, length);
-				}
-				in.close();
-				out.close();
-				
-				System.load(libTemp.getAbsolutePath());
-			} catch (IOException e) {
-				// Loading failed.
-			} 
+		if(libraryURL == null) {
+			return false;
 		}
+		
+		// copy library to temp folder and load it
+		try {
+			java.io.File libTemp = new java.io.File(System.getProperty("java.io.tmpdir") + libName + libExt);
+
+			if(libTemp.exists()) {
+				// Delete old file
+				libTemp.delete();
+			}
+
+			InputStream in = libraryURL.openStream();
+			OutputStream out = new FileOutputStream(libTemp);
+
+			byte[] buffer = new byte[1024];
+			int length;
+			while((length = in.read(buffer)) > 0) {
+				out.write(buffer, 0, length);
+			}
+			in.close();
+			out.close();
+
+			System.load(libTemp.getAbsolutePath());
+		} catch (IOException e) {
+			// Loading failed.
+			return false;
+		} 
+		return true;
 	} 
 	
 	public static Lib[] getCRTLibs() {
diff --git a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java
index abdfa26d5503e01ef6dfb99ed7aefbd073c3ae3a..7d0708a44fbe7a323fee35b0003f7715c467582a 100644
--- a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java
+++ b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java
@@ -118,6 +118,7 @@ public class SleuthkitJNI {
 
 	//Linked library loading
 	static {
+		boolean loaded = false;
         if (LibraryUtils.isWindows()) {
             try { 
                 // on windows force loading ms crt dependencies first
@@ -127,9 +128,13 @@ public class SleuthkitJNI {
                 // We should update this if we officially switch to a new version of CRT/compiler
 
                 for(LibraryUtils.Lib crt : LibraryUtils.getCRTLibs()) {
-                    LibraryUtils.loadLibrary(crt);
+                    loaded = LibraryUtils.loadLibrary(crt);
+					if(!loaded) {
+						System.out.println("SleuthkitJNI: failed to load " + crt.getLibName());
+					} else {
+						System.out.println("SleuthkitJNI: loaded " + crt.getLibName());
+					}
                 }
-                System.out.println("Loaded CRT libraries");
             } catch (UnsatisfiedLinkError e1) {
                 System.out.println(e1.toString());
                 try {
@@ -145,8 +150,12 @@ public class SleuthkitJNI {
 
         for (LibraryUtils.Lib lib : LibraryUtils.getLibs()) {
             try {
-                LibraryUtils.loadLibrary(lib);
-                System.out.println("SleuthkitJNI: loaded " + lib);
+                loaded = LibraryUtils.loadLibrary(lib);
+				if(loaded) {
+					System.out.println("SleuthkitJNI: loaded " + lib);
+				} else {
+					System.out.println("SleuthkitJNI: failed to load " + lib);
+				}
             } catch (UnsatisfiedLinkError e) {
                 System.out.println("SleuthkitJNI: error loading " + lib + "library, " + e.toString());
             }