diff --git a/bindings/java/build-unix.xml b/bindings/java/build-unix.xml
index 2230808bdbe46bbfdb4761d5dbb1cc2ac4f3ce5f..7e9cab9d6cfff023a0d688342d59a81de32d9ba9 100644
--- a/bindings/java/build-unix.xml
+++ b/bindings/java/build-unix.xml
@@ -42,16 +42,10 @@
         <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 -->
@@ -63,35 +57,18 @@
 	<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="copyLinuxLibs,copyMacLibs" />
diff --git a/bindings/java/src/org/sleuthkit/datamodel/LibraryUtils.java b/bindings/java/src/org/sleuthkit/datamodel/LibraryUtils.java
index 096c5b866a91c550e6b5ddc7010710070716f94e..502fb99025ae524af6a6e908581c4fb38e979c08 100644
--- a/bindings/java/src/org/sleuthkit/datamodel/LibraryUtils.java
+++ b/bindings/java/src/org/sleuthkit/datamodel/LibraryUtils.java
@@ -23,6 +23,8 @@
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.URL;
+import java.util.Arrays;
+import java.util.List;
 
 /**
  * Collection of methods to load libraries embedded in the TSK Datamodel Jar file.
@@ -35,34 +37,113 @@ public class LibraryUtils {
 	
 	public static final Lib[] CRT_LIBS = new Lib[] { Lib.MSVCP, Lib.MSVCR };
 	
-	public static final Lib[] OTHER_LIBS = new Lib[] { Lib.ZLIB, Lib.LIBEWF, Lib.TSK_JNI };
+	public static final Lib[] OTHER_LIBS = new Lib[] { Lib.ZLIB, Lib.LIBEWF };
 	/**
 	 * The libraries the TSK Datamodel needs.
 	 */
 	public enum Lib {
-		MSVCP ("msvcp100"),
-		MSVCR ("msvcr100"),
-		ZLIB ("zlib"),
-		LIBEWF ("libewf"),
-		TSK_JNI ("libtsk_jni");
+		MSVCP ("msvcp100", ""),
+		MSVCR ("msvcr100", ""),
+		ZLIB ("zlib", "z"),
+		LIBEWF ("libewf", "ewf"),
+		TSK_JNI ("libtsk_jni", "tsk_jni");
 		
 		private final String name;
+		private final String unixName;
 		
-		Lib(String name) {
+		Lib(String name, String unixName) {
 			this.name = name;
+			this.unixName = unixName;
 		}
 		
 		public String getLibName() {
 			return this.name;
 		}
+		
+		public String getUnixName() {
+			return this.unixName;
+		}
 	}
 	
+	/**
+	 * Load all libraries needed for the current platform except the TSK JNI.
+	 * 
+	 * @return 
+	 */
+	public static boolean loadAuxilliaryLibs() {
+		boolean loaded = true;
+        if (LibraryUtils.isWindows()) {
+            try { 
+                // on windows force loading ms crt dependencies first
+                // in case linker can't find them on some systems
+                // Note: if shipping with a different CRT version, this will only print a warning
+                // and try to use linker mechanism to find the correct versions of libs.
+                // We should update this if we officially switch to a new version of CRT/compiler
+                for(LibraryUtils.Lib crt : LibraryUtils.getCRTLibs()) {
+                    loaded = LibraryUtils.loadLibFromJar(crt);
+					if(!loaded) {
+						System.out.println("SleuthkitJNI: failed to load " + crt.getLibName());
+					} else {
+						System.out.println("SleuthkitJNI: loaded " + crt.getLibName());
+					}
+                }
+            } catch (UnsatisfiedLinkError e1) {
+                System.out.println(e1.toString());
+                try {
+                    //Try to load from system path.
+                    System.out.println("Can't find CRT libraries, attempting to load from System.loadLibrary");
+                    System.loadLibrary("msvcr100");
+                    System.loadLibrary("msvcp100");
+					loaded = true;
+                } catch (UnsatisfiedLinkError e2) {
+                    System.out.println("SleuthkitJNI: error loading CRT libraries, " + e2.toString());
+					loaded = false;
+                }
+            }
+			
+			for(LibraryUtils.Lib lib : LibraryUtils.getLibs()) {
+				loaded = LibraryUtils.loadLibFromJar(lib);
+				if (!loaded) {
+					System.out.println("SleuthkitJNI: failed to load " + lib.getLibName());
+				} else {
+					System.out.println("SleuthkitJNI: loaded " + lib.getLibName());
+				}
+			}
+		} else {
+			// Unix platform
+			for (Lib lib : LibraryUtils.getLibs()) {
+				try {
+					System.loadLibrary(lib.getUnixName());
+					System.out.println("SleuthkitJNI: loaded " + lib.getLibName());
+				} catch (UnsatisfiedLinkError e) {
+					loaded = false;
+					System.out.println("SleuthkitJNI: failed to load " + lib.getLibName());
+				}
+			}
+		}
+		return loaded;
+	}
+	
+	/**
+	 * Load the Sleuthkit JNI.
+	 * 
+	 * @return 
+	 */
+	public static boolean loadSleuthkitJNI() {
+		boolean loaded = LibraryUtils.loadLibFromJar(Lib.TSK_JNI);
+		if (!loaded) {
+			System.out.println("SleuthkitJNI: failed to load " + Lib.TSK_JNI.getLibName());
+		} else {
+			System.out.println("SleuthkitJNI: loaded " + Lib.TSK_JNI.getLibName());
+		}
+		return loaded;
+	}
 	/**
 	 * Get the name of the current platform.
 	 * 
 	 * @return a platform identifier, formatted as "OS_ARCH/OS_NAME"
 	 */
-	public static String getPlatform() {
+	private static String getPlatform() {
 		String os = System.getProperty("os.name").toLowerCase();
 		if(LibraryUtils.isWindows()) {
 			os = "win";
@@ -79,7 +160,7 @@ public static String getPlatform() {
 	 * 
 	 * @return 
 	 */
-	public static boolean isWindows() {
+	private static boolean isWindows() {
 		return System.getProperty("os.name").toLowerCase().contains("windows");
 	}
 
@@ -97,7 +178,7 @@ private static boolean isMac() {
 	 * 
 	 * @return
 	 */
-	public static boolean isLinux() {
+	private static boolean isLinux() {
 		return System.getProperty("os.name").equals("Linux");
 	}
 	
@@ -107,7 +188,7 @@ public static boolean isLinux() {
 	 * @param library
 	 * @return 
 	 */
-	public static boolean loadLibrary(Lib library) {
+	private static boolean loadLibFromJar(Lib library) {
 		StringBuilder path = new StringBuilder();
 		path.append("/NATIVELIBS/");
 		path.append(getPlatform());
@@ -159,11 +240,11 @@ public static boolean loadLibrary(Lib library) {
 		return true;
 	} 
 	
-	public static Lib[] getCRTLibs() {
+	private static Lib[] getCRTLibs() {
 		return CRT_LIBS;
 	}
 	
-	public static Lib[] getLibs() {
+	private static Lib[] getLibs() {
 		return OTHER_LIBS;
 	}
 }
diff --git a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java
index 7d0708a44fbe7a323fee35b0003f7715c467582a..2d75ca64b1d27b8f81a40fdd461f3854154e284f 100644
--- a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java
+++ b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java
@@ -118,49 +118,8 @@ public class SleuthkitJNI {
 
 	//Linked library loading
 	static {
-		boolean loaded = false;
-        if (LibraryUtils.isWindows()) {
-            try { 
-                // on windows force loading ms crt dependencies first
-                // in case linker can't find them on some systems
-                // Note: if shipping with a different CRT version, this will only print a warning
-                // and try to use linker mechanism to find the correct versions of libs.
-                // We should update this if we officially switch to a new version of CRT/compiler
-
-                for(LibraryUtils.Lib crt : LibraryUtils.getCRTLibs()) {
-                    loaded = LibraryUtils.loadLibrary(crt);
-					if(!loaded) {
-						System.out.println("SleuthkitJNI: failed to load " + crt.getLibName());
-					} else {
-						System.out.println("SleuthkitJNI: loaded " + crt.getLibName());
-					}
-                }
-            } catch (UnsatisfiedLinkError e1) {
-                System.out.println(e1.toString());
-                try {
-                    //Try to load from system path.
-                    System.out.println("Can't find CRT libraries, attempting to load from System.loadLibrary");
-                    System.loadLibrary("msvcr100");
-                    System.loadLibrary("msvcp100");
-                } catch (UnsatisfiedLinkError e2) {
-                    System.out.println("SleuthkitJNI: error loading CRT libraries, " + e2.toString());
-                }
-            }
-        }
-
-        for (LibraryUtils.Lib lib : LibraryUtils.getLibs()) {
-            try {
-                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());
-            }
-        }
-
+		LibraryUtils.loadAuxilliaryLibs();
+		LibraryUtils.loadSleuthkitJNI();
     }
 
 	public SleuthkitJNI() {