diff --git a/java/src/com/android/inputmethod/keyboard/ProximityInfo.java b/java/src/com/android/inputmethod/keyboard/ProximityInfo.java
index fe836c1e2b6507b821698e54767cc930da963221..fcada3762460c86cb6626666cd17b7dc86203fce 100644
--- a/java/src/com/android/inputmethod/keyboard/ProximityInfo.java
+++ b/java/src/com/android/inputmethod/keyboard/ProximityInfo.java
@@ -16,6 +16,8 @@
 
 package com.android.inputmethod.keyboard;
 
+import com.android.inputmethod.latin.Utils;
+
 public class ProximityInfo {
     public static final int MAX_PROXIMITY_CHARS_SIZE = 16;
 
@@ -34,6 +36,9 @@ public class ProximityInfo {
     }
 
     private int mNativeProximityInfo;
+    static {
+        Utils.loadNativeLibrary();
+    }
     private native int setProximityInfoNative(int maxProximityCharsSize, int displayWidth,
             int displayHeight, int gridWidth, int gridHeight, int[] proximityCharsArray);
     private native void releaseProximityInfoNative(int nativeProximityInfo);
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionary.java b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
index 33b8c7af695d5d5c8db23286acfc74857b53c607..55cd0848a0691498559a161305bdf6430b65bce5 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
@@ -109,6 +109,9 @@ public class BinaryDictionary extends Dictionary {
         return sInstance;
     }
 
+    static {
+        Utils.loadNativeLibrary();
+    }
     private native int openNative(String sourceDir, long dictOffset, long dictSize,
             int typedLetterMultiplier, int fullWordMultiplier, int maxWordLength,
             int maxWords, int maxAlternatives);
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 97f6b8d837bcd30fbce8c786ae97fabbdac094c5..91fd5b01e98390498f10b9e22594b57d0a2304fb 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -211,14 +211,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
 
     private final ArrayList<WordAlternatives> mWordHistory = new ArrayList<WordAlternatives>();
 
-    static {
-        try {
-            System.loadLibrary("jni_latinime");
-        } catch (UnsatisfiedLinkError ule) {
-            Log.e(TAG, "Could not load native library jni_latinime");
-        }
-    }
-
     public abstract static class WordAlternatives {
         protected CharSequence mChosenWord;
 
diff --git a/java/src/com/android/inputmethod/latin/Utils.java b/java/src/com/android/inputmethod/latin/Utils.java
index f26766768acd6349bdcff7cc57bd0dc996803fd6..727e3f16dcf602296ea23a0f5c71a86af6427d61 100644
--- a/java/src/com/android/inputmethod/latin/Utils.java
+++ b/java/src/com/android/inputmethod/latin/Utils.java
@@ -553,4 +553,12 @@ public class Utils {
     public static int getMainDictionaryResourceId(Resources res) {
         return res.getIdentifier("main", "raw", LatinIME.class.getPackage().getName());
     }
+
+    public static void loadNativeLibrary() {
+        try {
+            System.loadLibrary("jni_latinime");
+        } catch (UnsatisfiedLinkError ule) {
+            Log.e(TAG, "Could not load native library jni_latinime");
+        }
+    }
 }