diff --git a/java/src/com/android/inputmethod/latin/DicTraverseSession.java b/java/src/com/android/inputmethod/latin/DicTraverseSession.java
index ae68e69..437876e 100644
--- a/java/src/com/android/inputmethod/latin/DicTraverseSession.java
+++ b/java/src/com/android/inputmethod/latin/DicTraverseSession.java
@@ -22,20 +22,30 @@
     static {
         JniUtils.loadNativeLibrary();
     }
+    private native long setDicTraverseSessionNative(String locale);
+    private native void initDicTraverseSessionNative(
+            long nativeDicTraverseSession, int[] previousWord, int previwousWordLength);
+    private native void releaseDicTraverseSessionNative(long nativeDicTraverseSession);
 
     private long mNativeDicTraverseSession;
 
     public DicTraverseSession(Locale locale) {
         mNativeDicTraverseSession = createNativeDicTraverseSession(
                 locale != null ? locale.toString() : "");
+        initSession();
     }
 
     public long getSession() {
         return mNativeDicTraverseSession;
     }
 
-    private native long setDicTraverseSessionNative(String locale);
-    private native void releaseDicTraverseSessionNative(long nativeDicTraverseSession);
+    public void initSession() {
+        initSession(null, 0);
+    }
+
+    public void initSession(int[] previousWord, int previousWordLength) {
+        initDicTraverseSessionNative(mNativeDicTraverseSession, previousWord, previousWordLength);
+    }
 
     private final long createNativeDicTraverseSession(String locale) {
         return setDicTraverseSessionNative(locale);
diff --git a/native/jni/com_android_inputmethod_latin_DicTraverseSession.cpp b/native/jni/com_android_inputmethod_latin_DicTraverseSession.cpp
index e796537..0f5c396 100644
--- a/native/jni/com_android_inputmethod_latin_DicTraverseSession.cpp
+++ b/native/jni/com_android_inputmethod_latin_DicTraverseSession.cpp
@@ -23,6 +23,8 @@
 namespace latinime {
 void *(*DicTraverseWrapper::sDicTraverseSessionFactoryMethod)() = 0;
 void (*DicTraverseWrapper::sDicTraverseSessionReleaseMethod)(void *) = 0;
+void (*DicTraverseWrapper::sDicTraverseSessionInitMethod)(
+        JNIEnv *, void *, const jintArray, const jint) = 0;
 
 static jlong latinime_setDicTraverseSession(JNIEnv *env, jobject object,
         jstring localejStr) {
@@ -30,15 +32,21 @@
     return reinterpret_cast<jlong>(traverseSession);
 }
 
+static void latinime_initDicTraverseSession(JNIEnv *env, jlong traverseSession,
+        jintArray previousWord, jint previousWordLength) {
+    void *ts = reinterpret_cast<void*>(traverseSession);
+    DicTraverseWrapper::initDicTraverseSession(env, ts, previousWord, previousWordLength);
+}
+
 static void latinime_DicTraverseSession_release(
         JNIEnv *env, jobject object, jlong traverseSession) {
-    void *pi = reinterpret_cast<void*>(traverseSession);
-    if (!pi) return;
-    DicTraverseWrapper::releaseDicTraverseSession(pi);
+    void *ts = reinterpret_cast<void*>(traverseSession);
+    DicTraverseWrapper::releaseDicTraverseSession(ts);
 }
 
 static JNINativeMethod sMethods[] = {
     {"setDicTraverseSessionNative", "(Ljava/lang/String;)J", (void*)latinime_setDicTraverseSession},
+    {"initDicTraverseSessionNative", "(J[II)V", (void*)latinime_initDicTraverseSession},
     {"releaseDicTraverseSessionNative", "(J)V", (void*)latinime_DicTraverseSession_release}
 };
 
diff --git a/native/jni/com_android_inputmethod_latin_DicTraverseSession.h b/native/jni/com_android_inputmethod_latin_DicTraverseSession.h
index a84fe78..a76815d 100644
--- a/native/jni/com_android_inputmethod_latin_DicTraverseSession.h
+++ b/native/jni/com_android_inputmethod_latin_DicTraverseSession.h
@@ -31,6 +31,12 @@
         }
         return 0;
     }
+    static void initDicTraverseSession(JNIEnv *env, void *traverseSession,
+            const jintArray prevWord, const jint prevWordLength) {
+        if (sDicTraverseSessionInitMethod) {
+            sDicTraverseSessionInitMethod(env, traverseSession, prevWord, prevWordLength);
+        }
+    }
     static void releaseDicTraverseSession(void *traverseSession) {
         if (sDicTraverseSessionReleaseMethod) {
             sDicTraverseSessionReleaseMethod(traverseSession);
@@ -39,6 +45,7 @@
  private:
     DISALLOW_IMPLICIT_CONSTRUCTORS(DicTraverseWrapper);
     static void *(*sDicTraverseSessionFactoryMethod)();
+    static void (*sDicTraverseSessionInitMethod)(JNIEnv *, void *, const jintArray, const jint);
     static void (*sDicTraverseSessionReleaseMethod)(void *);
 };
 int register_DicTraverseSession(JNIEnv *env);
