diff --git a/bindings/java/build.xml b/bindings/java/build.xml
index 309f280b52f26c7ce80a363ece7c2cc8e09e7a1e..d790b070572e3cbd1fcdc68507478555093befbb 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="crt" location="${basedir}/crt" />
   
 	<path id="libraries">
 		<fileset dir="${lib}">
@@ -131,6 +132,15 @@ pattern="lib/[artifact]-[revision](-[classifier]).[ext]" />
 		<copy todir="${x86_64}/win">
 			<fileset refid="win64dlls" />
 		</copy>
+		<fileset dir="${crt}/win64" id="crt64dlls">
+			<include name="*.dll" />
+		</fileset>
+		<copy todir="${amd64}/win">
+			<fileset refid="crt64dlls" />
+		</copy>
+		<copy todir="${x86_64}/win">
+			<fileset refid="crt64dlls" />
+		</copy>
 	</target>
 	
 	<target name="copyWinLibs32" depends="checkLibDirs" if="win32.exists">
@@ -147,6 +157,18 @@ pattern="lib/[artifact]-[revision](-[classifier]).[ext]" />
 		<copy todir="${i586}/win">
 			<fileset refid="win32dlls" />
 		</copy>
+		<fileset dir="${crt}/win32" id="crt32dlls">
+			<include name="*.dll" />
+		</fileset>
+		<copy todir="${i386}/win">
+			<fileset refid="crt32dlls" />
+		</copy>
+		<copy todir="${x86}/win">
+			<fileset refid="crt32dlls" />
+		</copy>
+		<copy todir="${i586}/win">
+			<fileset refid="crt32dlls" />
+		</copy>
 	</target>
 	
 	<target name="jni" depends="compile" description="make the jni.h file">
diff --git a/bindings/java/crt/win32/msvcp100.dll b/bindings/java/crt/win32/msvcp100.dll
new file mode 100644
index 0000000000000000000000000000000000000000..8502dfae5e0c30113d03c36cdb8ddaee1dce94c0
Binary files /dev/null and b/bindings/java/crt/win32/msvcp100.dll differ
diff --git a/bindings/java/crt/win32/msvcr100.dll b/bindings/java/crt/win32/msvcr100.dll
new file mode 100644
index 0000000000000000000000000000000000000000..3e82b1aeace3a21d8b38ff5f6c1c2d8269da4507
Binary files /dev/null and b/bindings/java/crt/win32/msvcr100.dll differ
diff --git a/bindings/java/crt/win64/msvcp100.dll b/bindings/java/crt/win64/msvcp100.dll
new file mode 100644
index 0000000000000000000000000000000000000000..6f0cdf160a2cc3f8baa12177fe499e328782750e
Binary files /dev/null and b/bindings/java/crt/win64/msvcp100.dll differ
diff --git a/bindings/java/crt/win64/msvcr100.dll b/bindings/java/crt/win64/msvcr100.dll
new file mode 100644
index 0000000000000000000000000000000000000000..b1c3a5e77ccc7dec341d58a796aa379a4aec9517
Binary files /dev/null and b/bindings/java/crt/win64/msvcr100.dll differ
diff --git a/bindings/java/src/org/sleuthkit/datamodel/LibraryUtils.java b/bindings/java/src/org/sleuthkit/datamodel/LibraryUtils.java
index fadd05dce01c3c9bb3e9737a6227d2faaa831bdd..92588413f5683077f12e15c204610581fbc9b666 100644
--- a/bindings/java/src/org/sleuthkit/datamodel/LibraryUtils.java
+++ b/bindings/java/src/org/sleuthkit/datamodel/LibraryUtils.java
@@ -9,6 +9,7 @@
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.URL;
+import java.nio.file.Files;
 
 /**
  * Collection of methods to load libraries embedded in the TSK Datamodel Jar file.
@@ -18,15 +19,22 @@
 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, Lib.TSK_JNI };
 	/**
 	 * The libraries the TSK Datamodel needs.
 	 */
 	public enum Lib {
+		MSVCP ("msvcp100"),
+		MSVCR ("msvcr100"),
 		ZLIB ("zlib"),
 		LIBEWF ("libewf"),
 		TSK_JNI ("tsk_jni");
 		
 		private final String name;
+		
 		Lib(String name) {
 			this.name = name;
 		}
@@ -52,7 +60,6 @@ public static String getPlatform() {
 		}
 		// os.arch represents the architecture of the JVM, not the os
 		String arch = System.getProperty("os.arch");
-		System.out.println(arch.toLowerCase() + "/" + os.toLowerCase());
 		return arch.toLowerCase() + "/" + os.toLowerCase();
 	}
 	
@@ -66,7 +73,7 @@ public static boolean isWindows() {
 	}
 	
 	/**
-	 * Attempt to load the specified library.
+	 * Attempt to extract and load the specified library.
 	 * 
 	 * @param library
 	 * @return 
@@ -98,7 +105,11 @@ public static void loadLibrary(Lib library) {
 			// copy library to temp folder and load it
 			try {
 				java.io.File libTemp = new java.io.File(System.getProperty("java.io.tmpdir") + libName + libExt);
-				libTemp.deleteOnExit();
+				
+				if(libTemp.exists()) {
+					// Delete old file
+					Files.delete(libTemp.toPath());
+				}
 				
 				InputStream in = libraryURL.openStream();
 				OutputStream out = new FileOutputStream(libTemp);
@@ -112,11 +123,17 @@ public static void loadLibrary(Lib library) {
 				out.close();
 				
 				System.load(libTemp.getAbsolutePath());
-				
-				libTemp.delete();
 			} catch (IOException e) {
 				// Loading failed.
 			} 
 		}
+	} 
+	
+	public static Lib[] getCRTLibs() {
+		return CRT_LIBS;
+	}
+	
+	public 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 153c610dcbdaa707b6b93d674183397372ebccf1..73efa23fe2d9f590e0b251669ee2c556f765b950 100644
--- a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java
+++ b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java
@@ -118,19 +118,31 @@ public class SleuthkitJNI {
 
 	//Linked library loading
 	static {
-		try {
+		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
-                System.loadLibrary("msvcr100");
-                System.loadLibrary("msvcp100");
+				for(LibraryUtils.Lib crt : LibraryUtils.getCRTLibs()) {
+					LibraryUtils.loadLibrary(crt);
+				}
 				System.out.println("Loaded CRT libraries");
-            } catch (UnsatisfiedLinkError e) {
-				System.out.println("Can't find CRT libraries");
+            } 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.Lib.values()) {
+		}
+		
+		for(LibraryUtils.Lib lib : LibraryUtils.getLibs()) {
 			try {
 				LibraryUtils.loadLibrary(lib);
 				System.out.println("SleuthkitJNI: loaded " + lib);