diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index aef9f35eb6d5fd5bae9d5806cbb7c9fa560fded7..0f7225bf335b67876815787d60b836cb6d6a1462 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,8 @@
+2005-12-12  Andrew Haley  <aph@redhat.com>
+
+	* java/lang/VMCompiler.java: Directly generate a new instance of
+	gnu.java.security.provider.MD5.
+
 2005-12-08  Andrew Haley  <aph@redhat.com>
 
 	PR libgcj/25265
diff --git a/libjava/java/lang/VMCompiler.java b/libjava/java/lang/VMCompiler.java
index 27523f6e3ff673dd2ab9b171375a68b6d0011a3c..47920119f67740ee8b11b1ca91d8f31114b931c0 100644
--- a/libjava/java/lang/VMCompiler.java
+++ b/libjava/java/lang/VMCompiler.java
@@ -80,22 +80,18 @@ final class VMCompiler
   private static Vector precompiledMapFiles;
 
   // We create a single MD5 engine and then clone it whenever we want
-  // a new one.  This is simpler than trying to find a new one each
-  // time, and it avoids potential deadlocks due to class loader
-  // oddities.
-  private static final MessageDigest md5Digest;
-
-  static
-  {
-    try
-      {
-	md5Digest = MessageDigest.getInstance("MD5");
-      }
-    catch (NoSuchAlgorithmException _)
-      {
-	md5Digest = null;
-      }
-  }
+  // a new one.
+
+  // We don't use 
+  //
+  // md5Digest = MessageDigest.getInstance("MD5");
+  //
+  // here because that loads a great deal of security provider code as
+  // interpreted bytecode -- before we're able to use this class to
+  // load precompiled classes.
+
+  private static final MessageDigest md5Digest
+    = new gnu.java.security.provider.MD5();
 
   static
   {