diff --git a/bindings/java/Makefile.am b/bindings/java/Makefile.am
index 1007a3e60430584cb1990915c7484ebf23da90e7..0d5bb7777a3039ef75eb18688a436e090b899575 100644
--- a/bindings/java/Makefile.am
+++ b/bindings/java/Makefile.am
@@ -1,25 +1,14 @@
-Z_PATH=@Z_PATH@
-EWF_PATH=@EWF_PATH@
-ANT_PROPS=
-
 # Compile the sub directories
 SUBDIRS = jni
 
-if X_ZLIB
-  ANT_PROPS+=-Dlib.z.path=$(Z_PATH)
-endif
-
-if X_LIBEWF
-  ANT_PROPS+=-Dlib.ewf.path=$(EWF_PATH)
-endif
-
 tsk_jar = $(top_builddir)/bindings/java/dist/Tsk_DataModel.jar
 jardir = $(prefix)/share/java
 jar_DATA = $(tsk_jar)
 
+$(tsk_jar):
 
-$(tsk_jar): 
-	ant dist $(ANT_PROPS) 
+all-local:
+	ant dist
 
 CLEANFILES = $(tsk_jar)
 
diff --git a/bindings/java/build-unix.xml b/bindings/java/build-unix.xml
index 81edd272efaf026818a45c2597e07c798e7624e0..d35e7404d4bc0b90717afabcf760e37a0cc01f2f 100644
--- a/bindings/java/build-unix.xml
+++ b/bindings/java/build-unix.xml
@@ -23,6 +23,17 @@
 		</java>
 	</target>
 
+	<target name="check-native-build" depends="check-native-build-mac,check-native-build-unix"/>
+
+	<target name="check-native-build-mac" depends="testTSKLibs" if="tsk_dylib.present">
+		<uptodate property="native-up-to-date" srcfile="./jni/.libs/libtsk_jni.dylib"
+		targetfile="${amd64}/mac/libtsk_jni.jnilib" />
+	</target>
+
+	<target name="check-native-build-unix" depends="testTSKLibs" if="tsk_so.present">
+		<uptodate property="native-up-to-date" srcfile="./jni/.libs/libtsk_jni.so"
+		targetfile="${amd64}/linux/libtsk_jni.so"/>
+	</target>
 
     <target name="testTSKLibs">
         <property environment="env"/>
@@ -30,68 +41,45 @@
         <available file="./jni/.libs/libtsk_jni.so" property="tsk_so.present"/>
 		<available file="./jni/.libs/libtsk_jni.a" property="present"/>
 		<fail unless="present" message="Run make install on The Sleuthkit."/>
-   	<!-- Default location to find zlib and libewf. Overwritten by properties in makefile -->	
-	<property name="lib.z.path" value="/usr/lib"/>
-	<property name="lib.ewf.path" value="/usr/local/lib"/>
     </target>
 
     <!-- OS X -->
     <target name="copyTskLibs_dylib" depends="testTSKLibs" if="tsk_dylib.present">
         <property environment="env"/>
-        <copy file="./jni/.libs/libtsk_jni.dylib" tofile="./libtsk_jni.jnilib"/>
+        <copy file="./jni/.libs/libtsk_jni.dylib" tofile="./libtsk_jni.jnilib" overwrite="true"/>
     </target>
 	
 	<target name="copyMacLibs" depends="testTSKLibs" if="tsk_dylib.present">
         <property environment="env"/>
 		<property name="jni.dylib" location="${basedir}/jni/.libs/libtsk_jni.dylib" />
 		<property name="jni.jnilib" value="libtsk_jni.jnilib" />
-		<property name="zlib.jni" location="${lib.z.path}/libz.dylib"/>
-		<property name="libewf.jni" location="${lib.ewf.path}/libewf.dylib"/>
 		<!-- x86_64 -->
-        <copy file="${jni.dylib}" tofile="${x86_64}/mac/${jni.jnilib}"/>
-		<copy file="${zlib.jni}" tofile="${x86_64}/mac/zlib.dylib"/>
-		<copy file="${libewf.jni}" tofile="${x86_64}/mac/libewf.dylib"/>
+        <copy file="${jni.dylib}" tofile="${x86_64}/mac/${jni.jnilib}" overwrite="true"/>
 		<!-- amd64 -->
-		<copy file="${jni.dylib}" tofile="${amd64}/mac/${jni.jnilib}"/>
-		<copy file="${zlib.jni}" tofile="${amd64}/mac/zlib.dylib"/>
-		<copy file="${libewf.jni}" tofile="${amd64}/mac/libewf.dylib"/>
+		<copy file="${jni.dylib}" tofile="${amd64}/mac/${jni.jnilib}" overwrite="true"/>
     </target>
 
     <!-- Non-OS X -->
     <target name="copyTskLibs_so" depends="testTSKLibs" if="tsk_so.present">
         <property environment="env"/>
-        <copy file="./jni/.libs/libtsk_jni.so" tofile="./libtsk_jni.so"/>
+        <copy file="./jni/.libs/libtsk_jni.so" tofile="./libtsk_jni.so" overwrite="true"/>
     </target>
 	
 	<target name="copyLinuxLibs" depends="testTSKLibs" if="tsk_so.present">
 		<property environment="env"/>
 		<property name="jni.so" location="${basedir}/jni/.libs/libtsk_jni.so" />
-		<property name="zlib.so" location="${lib.z.path}/libz.so"/>
-		<property name="libewf.so" location="${lib.ewf.path}/libewf.so"/>
 		<!-- x86_64 -->
-		<copy file="${jni.so}" tofile="${x86_64}/linux/libtsk_jni.so"/>
-		<copy file="${zlib.so}" tofile="${x86_64}/linux/libz.so"/>
-		<copy file="${libewf.so}" tofile="${x86_64}/linux/libewf.so"/>
+		<copy file="${jni.so}" tofile="${x86_64}/linux/libtsk_jni.so" overwrite="true"/>
 		<!-- amd64 -->
-		<copy file="${jni.so}" tofile="${amd64}/linux/libtsk_jni.so"/>
-		<copy file="${zlib.so}" tofile="${amd64}/linux/libz.so"/>
-		<copy file="${libewf.so}" tofile="${amd64}/linux/libewf.so"/>
+		<copy file="${jni.so}" tofile="${amd64}/linux/libtsk_jni.so" overwrite="true"/>
 		<!-- x86 -->
-		<copy file="${jni.so}" tofile="${x86}/linux/libtsk_jni.so"/>
-		<copy file="${zlib.so}" tofile="${x86}/linux/libz.so"/>
-		<copy file="${libewf.so}" tofile="${x86}/linux/libewf.so"/>
+		<copy file="${jni.so}" tofile="${x86}/linux/libtsk_jni.so" overwrite="true"/>
 		<!-- i386 -->
-		<copy file="${jni.so}" tofile="${i386}/linux/libtsk_jni.so"/>
-		<copy file="${zlib.so}" tofile="${i386}/linux/libz.so"/>
-		<copy file="${libewf.so}" tofile="${i386}/linux/libewf.so"/>
+		<copy file="${jni.so}" tofile="${i386}/linux/libtsk_jni.so" overwrite="true"/>
 		<!-- i586 -->
-		<copy file="${jni.so}" tofile="${i586}/linux/libtsk_jni.so"/>
-		<copy file="${zlib.so}" tofile="${i586}/linux/libz.so"/>
-		<copy file="${libewf.so}" tofile="${i586}/linux/libewf.so"/>
+		<copy file="${jni.so}" tofile="${i586}/linux/libtsk_jni.so" overwrite="true"/>
 		<!-- i686 -->
-		<copy file="${jni.so}" tofile="${i686}/linux/libtsk_jni.so"/>
-		<copy file="${zlib.so}" tofile="${i686}/linux/libz.so"/>
-		<copy file="${libewf.so}" tofile="${i686}/linux/libewf.so"/>
+		<copy file="${jni.so}" tofile="${i686}/linux/libtsk_jni.so" overwrite="true"/>
 	</target>
 
 	<target name="copyLibs" depends="copyLinuxLibs,copyMacLibs" />
diff --git a/bindings/java/build-windows.xml b/bindings/java/build-windows.xml
index 821ae120fb659a6ad14e1e2d3426057d441ad567..40c6a38396aba76c49ee6f5fa7d7f41ce0818e51 100644
--- a/bindings/java/build-windows.xml
+++ b/bindings/java/build-windows.xml
@@ -33,7 +33,20 @@
 			<sysproperty key="types" value="${test-types}"/>
 		</java>
 	</target>
-	
+
+	<target name="check-native-build" depends="check-build-32,check-build-64"/>
+
+	<target name="check-build-32" if="win32.exists">
+		<uptodate property="native-up-to-date" srcfile="${basedir}/../../win32/Release/libtsk_jni.dll"
+		targetfile="${x86}/win/libtsk_jni.dll"/>
+	</target>
+
+
+	<target name="check-build-64" if="win32.exists">
+		<uptodate property="native-up-to-date" srcfile="${basedir}/../../win32/x64/Release/libtsk_jni.dll"
+		targetfile="${amd64}/win/libtsk_jni.dll"/>
+	</target>
+
 	<target name="copyLibs" depends="copyWinLibs" description="Copy native libs to the correct folder">
 		<property name="tsk.config" value="Release"/>
 		<antcall target="copyWinLibs" />
@@ -52,65 +65,18 @@
 	</target>
 	
 	<target name="copyWinLibs64" depends="checkLibDirs" if="win64.exists">
-		<property name="win64dir" location="${basedir}/../../win32/x64/${tsk.config}" />
-		
-		<fileset dir="${win64dir}" id="win64dlls">
-			<include name="*.dll" />
-		</fileset>
-		<fileset dir="${crt}/win64" id="crt64dlls">
-			<include name="*.dll" />
-		</fileset>
-		
-		<copy todir="${amd64}/win" overwrite="true">
-			<fileset refid="win64dlls" />
-		</copy>
-		<copy todir="${amd64}/win" overwrite="true">
-			<fileset refid="crt64dlls" />
-		</copy>
+		<property name="tsk.jni.64" location="${basedir}/../../win32/x64/${tsk.config}/libtsk_jni.dll" />
 		
-		<copy todir="${x86_64}/win" overwrite="true">
-			<fileset refid="win64dlls" />
-		</copy>		
-		<copy todir="${x86_64}/win" overwrite="true">
-			<fileset refid="crt64dlls" />
-		</copy>
+		<copy file="${tsk.jni.64}" todir="${amd64}/win" overwrite="true"/>
+		<copy file="${tsk.jni.64}" todir="${x86_64}/win" overwrite="true"/>
 	</target>
 	
 	<target name="copyWinLibs32" depends="checkLibDirs" if="win32.exists">
-		<property name="win32dir" location="${basedir}/../../win32/${tsk.config}" />
-		<fileset dir="${win32dir}" id="win32dlls">
-			<include name="*.dll" />
-		</fileset>
-		<fileset dir="${crt}/win32" id="crt32dlls">
-			<include name="*.dll" />
-		</fileset>
-		
-		<copy todir="${i386}/win" overwrite="true">
-			<fileset refid="win32dlls" />
-		</copy>
-		<copy todir="${i386}/win" overwrite="true">
-			<fileset refid="crt32dlls" />
-		</copy>
-		
-		<copy todir="${x86}/win" overwrite="true">
-			<fileset refid="win32dlls" />
-		</copy>
-		<copy todir="${x86}/win" overwrite="true">
-			<fileset refid="crt32dlls" />
-		</copy>
-		
-		<copy todir="${i586}/win" overwrite="true">
-			<fileset refid="win32dlls" />
-		</copy>
-		<copy todir="${i586}/win" overwrite="true">
-			<fileset refid="crt32dlls" />
-		</copy>		
+		<property name="tsk.jni.32" location="${basedir}/../../win32/${tsk.config}/libtsk_jni.dll" />
 		
-		<copy todir="${i686}/win" overwrite="true">
-			<fileset refid="win32dlls" />
-		</copy>
-		<copy todir="${i686}/win" overwrite="true">
-			<fileset refid="crt32dlls" />
-		</copy>	
+		<copy file="${tsk.jni.32}" todir="${i386}/win" overwrite="true"/>
+		<copy file="${tsk.jni.32}" todir="${x86}/win" overwrite="true"/>
+		<copy file="${tsk.jni.32}" todir="${i586}/win" overwrite="true"/>	
+		<copy file="${tsk.jni.32}" todir="${i686}/win" overwrite="true"/>
 	</target>
 </project>
diff --git a/bindings/java/build.xml b/bindings/java/build.xml
index dcd3a31ba7b96eb9ee714c92b41eb16ed7317cd6..5f3725ce4db4e6ed00b88d37d22e2956b5699c98 100755
--- a/bindings/java/build.xml
+++ b/bindings/java/build.xml
@@ -27,7 +27,6 @@
 	<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">
 		<fileset dir="${lib}">
@@ -116,7 +115,23 @@ pattern="lib/[artifact]-[revision](-[classifier]).[ext]" />
 		</javac>
 	</target>
 
-	<target name="dist" depends="init-ivy, compile, copyLibs"
+	<target name="dist" depends="check-build" unless="up-to-date">
+		<antcall target="dist-do"/>
+	</target>
+
+	<target name="check-build" depends="check-native-build">
+		<uptodate property="java-up-to-date" targetfile="${dist}/Tsk_DataModel.jar" >
+		    <srcfiles dir="${src}" includes="**/*.java"/>
+		</uptodate>
+		<condition property="up-to-date">
+			<and>
+				<isset property="java-up-to-date"/>
+				<isset property="native-up-to-date"/>
+			</and>
+		</condition>
+	</target>
+	
+	<target name="dist-do" depends="init-ivy, compile, copyLibs"
         description="generate the distribution" >
     <!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file -->
 		<jar jarfile="${dist}/Tsk_DataModel.jar" basedir="${build}"/>
diff --git a/bindings/java/src/org/sleuthkit/datamodel/LibraryUtils.java b/bindings/java/src/org/sleuthkit/datamodel/LibraryUtils.java
index d56ae1b52309e6d3ebd60d6c1baddf6627de180b..be8685ff9cb1831fb90c32d6118d74a53f5f5d35 100644
--- a/bindings/java/src/org/sleuthkit/datamodel/LibraryUtils.java
+++ b/bindings/java/src/org/sleuthkit/datamodel/LibraryUtils.java
@@ -34,10 +34,6 @@
 public class LibraryUtils {
 	
 	public static final String[] EXTS = new String[] { ".so", ".dylib", ".dll", ".jnilib" };
-	
-	public static final Lib[] CRT_LIBS = new Lib[] { Lib.MSVCP, Lib.MSVCR };
-	
-	public static final Lib[] OTHER_LIBS = new Lib[] { Lib.ZLIB, Lib.LIBEWF };
 
 	/**
 	 * The libraries the TSK Datamodel needs.
@@ -66,51 +62,6 @@ public String getUnixName() {
 		}
 	}
 	
-	/**
-	 * Load all libraries needed for the current platform except the TSK JNI.
-	 * 
-	 * @return 
-	 */
-	public static boolean loadAuxilliaryLibs() {
-		System.out.println("Java lib path: " + System.getProperty("java.library.path"));
-		boolean loaded = true;
-        if (LibraryUtils.isWindows()) {
-            loaded = LibraryUtils.loadCRTLibs();
-		}
-
-		// Always try to load from jar first.
-		for(Lib lib : LibraryUtils.getLibs()) {
-			// Always try to load from jar first.
-			loaded = LibraryUtils.loadLibFromJar(lib);
-			if (!loaded) {
-				// if that fails, try to load from system
-				loaded = loadLibFromSystem(lib);
-			}
-			if (!loaded) {
-				System.out.println("SleuthkitJNI: failed to load " + lib.getLibName());
-			} else {
-				System.out.println("SleuthkitJNI: loaded " + lib.getLibName());
-			}
-		}
-		return loaded;
-	}
-	
-	/**
-	 * Try to load the given Library from the System path.
-	 * 
-	 * @param lib
-	 * @return 
-	 */
-	private static boolean loadLibFromSystem(Lib lib) {
-		String libName = (isWindows() ? lib.getLibName() : lib.getUnixName());
-		try {
-			System.loadLibrary(libName);
-		} catch (UnsatisfiedLinkError e) {
-			return false;
-		}
-		return true;
-	}
-	
 	/**
 	 * Load the Sleuthkit JNI.
 	 * 
@@ -125,42 +76,6 @@ public static boolean loadSleuthkitJNI() {
 		}
 		return loaded;
 	}
-	
-	/** Load the CRT Libraries.
-	 * 
-	 * @return 
-	 */
-	private static boolean loadCRTLibs() {
-		boolean loaded = true;
-		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;
-			}
-		}
-		return loaded;
-	}
 		
 	/**
 	 * Get the name of the current platform.
@@ -265,12 +180,4 @@ private static boolean loadLibFromJar(Lib library) {
 		} 
 		return true;
 	} 
-	
-	private static Lib[] getCRTLibs() {
-		return CRT_LIBS;
-	}
-	
-	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 2d75ca64b1d27b8f81a40fdd461f3854154e284f..8653c39c83a017ced0f66543acb5ac76af79e051 100644
--- a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java
+++ b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java
@@ -118,7 +118,6 @@ public class SleuthkitJNI {
 
 	//Linked library loading
 	static {
-		LibraryUtils.loadAuxilliaryLibs();
 		LibraryUtils.loadSleuthkitJNI();
     }
 
diff --git a/configure.ac b/configure.ac
index 6faa2706d57717023773b171ef4423980cc71e16..74b6ae6827ca6428f5f1188361423f4c388914fc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -180,13 +180,6 @@ AS_IF(
 )
 AS_IF([test "x$ac_cv_lib_z_inflate" = "xyes"], [ax_zlib=yes], [ax_zlib=no])
 
-AM_CONDITIONAL([X_ZLIB],[test "x$with_zlib" != "xno" && test "x$with_zlib" != "xyes"])
-AS_IF([test "x$with_zlib" != "xno"],
-   [Z_PATH="${with_zlib}/lib"],
-   [AC_MSG_NOTICE([failed to make Z_PATH])]
-)
-AC_SUBST(Z_PATH, $Z_PATH)
-
 dnl needed for sqllite
 AC_CHECK_LIB(dl, dlopen)
 
@@ -217,12 +210,6 @@ AS_IF([test "x$with_libewf" != "xno"],
 )
 AS_IF([test "x$ac_cv_lib_ewf_libewf_get_version" = "xyes"], [ax_libewf=yes], [ax_libewf=no])
 
-AM_CONDITIONAL([X_LIBEWF],[test "x$with_libewf" != "xno" && test "x$with_libewf" != "xyes"])
-AS_IF([test "x$with_libewf" != "xno"],
-   [EWF_PATH="${with_libewf}/lib"],
-)
-AC_SUBST(EWF_PATH, $EWF_PATH)
-   
 dnl sqlite requires pthread libraries - this was copied from its configure.ac
 dnl AC_SEARCH_LIBS(pthread_create, pthread)
 AC_SEARCH_LIBS(dlopen, dl)