diff --git a/native/jni/src/suggest/core/dicnode/dic_node.h b/native/jni/src/suggest/core/dicnode/dic_node.h
index 4f69a84c3d5a6b64e3fd897b9aff4d7c51ca0f2b..fd3af1592f68b071d204d3b38d335543f0be75e1 100644
--- a/native/jni/src/suggest/core/dicnode/dic_node.h
+++ b/native/jni/src/suggest/core/dicnode/dic_node.h
@@ -36,7 +36,7 @@
 #define DUMP_WORD_AND_SCORE(header) \
         do { char charBuf[50]; char prevWordCharBuf[50]; \
         INTS_TO_CHARS(getOutputWordBuf(), getNodeCodePointCount(), charBuf, NELEMS(charBuf)); \
-        INTS_TO_CHARS(mDicNodeState.mDicNodeStatePrevWord.mPrevWord, \
+        INTS_TO_CHARS(mDicNodeState.mDicNodeStatePrevWord.getPrevWordBuf(), \
                 mDicNodeState.mDicNodeStatePrevWord.getPrevWordLength(), prevWordCharBuf, \
                 NELEMS(prevWordCharBuf)); \
         AKLOGI("#%8s, %5f, %5f, %5f, %5f, %s, %s, %d, %5f,", header, \
@@ -313,7 +313,7 @@ class DicNode {
     void outputResult(int *dest) const {
         const uint16_t prevWordLength = mDicNodeState.mDicNodeStatePrevWord.getPrevWordLength();
         const uint16_t currentDepth = getNodeCodePointCount();
-        DicNodeUtils::appendTwoWords(mDicNodeState.mDicNodeStatePrevWord.mPrevWord,
+        DicNodeUtils::appendTwoWords(mDicNodeState.mDicNodeStatePrevWord.getPrevWordBuf(),
                    prevWordLength, getOutputWordBuf(), currentDepth, dest);
         DUMP_WORD_AND_SCORE("OUTPUT");
     }
@@ -324,7 +324,7 @@ class DicNode {
     // are concatenated together in mPrevWord - which contains a space at the end.
     int getTotalNodeSpaceCount() const {
         if (isFirstWord()) return 0;
-        return CharUtils::getSpaceCount(mDicNodeState.mDicNodeStatePrevWord.mPrevWord,
+        return CharUtils::getSpaceCount(mDicNodeState.mDicNodeStatePrevWord.getPrevWordBuf(),
                 mDicNodeState.mDicNodeStatePrevWord.getPrevWordLength());
     }
 
@@ -376,7 +376,7 @@ class DicNode {
     }
 
     AK_FORCE_INLINE const int *getOutputWordBuf() const {
-        return mDicNodeState.mDicNodeStateOutput.mCodePointsBuf;
+        return mDicNodeState.mDicNodeStateOutput.getCodePointBuf();
     }
 
     int getPrevCodePointG(int pointerId) const {
diff --git a/native/jni/src/suggest/core/dicnode/internal/dic_node_state.h b/native/jni/src/suggest/core/dicnode/internal/dic_node_state.h
index e7121a9d793ea2c939e2decc7cebe7ca49fd95d3..a41667567264f0b283a31867aed32a1c62d59afc 100644
--- a/native/jni/src/suggest/core/dicnode/internal/dic_node_state.h
+++ b/native/jni/src/suggest/core/dicnode/internal/dic_node_state.h
@@ -68,9 +68,9 @@ class DicNodeState {
         mDicNodeStatePrevWord.init(
                 prevWordDicNodeState->mDicNodeStatePrevWord.getPrevWordCount() + 1,
                 prevWordPos,
-                prevWordDicNodeState->mDicNodeStatePrevWord.mPrevWord,
+                prevWordDicNodeState->mDicNodeStatePrevWord.getPrevWordBuf(),
                 prevWordDicNodeState->mDicNodeStatePrevWord.getPrevWordLength(),
-                prevWordDicNodeState->mDicNodeStateOutput.mCodePointsBuf,
+                prevWordDicNodeState->mDicNodeStateOutput.getCodePointBuf(),
                 prevWordCodePointCount,
                 prevWordDicNodeState->mDicNodeStatePrevWord.getSecondWordFirstInputIndex(),
                 prevWordDicNodeState->mDicNodeStateInput.getInputIndex(0) /* lastInputIndex */);
diff --git a/native/jni/src/suggest/core/dicnode/internal/dic_node_state_output.h b/native/jni/src/suggest/core/dicnode/internal/dic_node_state_output.h
index 011d020c40343248edafaca5f8ca8b5de5c5058e..216939afe438c73257909899fe18ac8fed79a948 100644
--- a/native/jni/src/suggest/core/dicnode/internal/dic_node_state_output.h
+++ b/native/jni/src/suggest/core/dicnode/internal/dic_node_state_output.h
@@ -66,13 +66,15 @@ class DicNodeStateOutput {
         return mCodePointsBuf[index];
     }
 
-    // TODO: Move to private
-    int mCodePointsBuf[MAX_WORD_LENGTH];
+    const int *getCodePointBuf() const {
+        return mCodePointsBuf;
+    }
 
  private:
     DISALLOW_COPY_AND_ASSIGN(DicNodeStateOutput);
 
     uint16_t mOutputtedCodePointCount;
+    int mCodePointsBuf[MAX_WORD_LENGTH];
 };
 } // namespace latinime
 #endif // LATINIME_DIC_NODE_STATE_OUTPUT_H
diff --git a/native/jni/src/suggest/core/dicnode/internal/dic_node_state_prevword.h b/native/jni/src/suggest/core/dicnode/internal/dic_node_state_prevword.h
index f8233bb96842197d51afef92fbeb828ab4cd8abd..f2b1ce8f7febec85db94522783f99ed95ae6445c 100644
--- a/native/jni/src/suggest/core/dicnode/internal/dic_node_state_prevword.h
+++ b/native/jni/src/suggest/core/dicnode/internal/dic_node_state_prevword.h
@@ -123,8 +123,9 @@ class DicNodeStatePrevWord {
         return true;
     }
 
-    // TODO: Move to private
-    int mPrevWord[MAX_WORD_LENGTH];
+    const int *getPrevWordBuf() const {
+        return mPrevWord;
+    }
 
  private:
     DISALLOW_COPY_AND_ASSIGN(DicNodeStatePrevWord);
@@ -134,6 +135,7 @@ class DicNodeStatePrevWord {
     int16_t mPrevWordStart;
     int mPrevWordPtNodePos;
     int mSecondWordFirstInputIndex;
+    int mPrevWord[MAX_WORD_LENGTH];
 };
 } // namespace latinime
 #endif // LATINIME_DIC_NODE_STATE_PREVWORD_H