diff --git a/native/jni/src/suggest/core/dicnode/dic_node_utils.cpp b/native/jni/src/suggest/core/dicnode/dic_node_utils.cpp
index 48752f2cdff90d18996452062edf2f2741ac7c64..2d02a7d9ca6730221c25da9419b56c709c599d17 100644
--- a/native/jni/src/suggest/core/dicnode/dic_node_utils.cpp
+++ b/native/jni/src/suggest/core/dicnode/dic_node_utils.cpp
@@ -16,8 +16,6 @@
 
 #include "suggest/core/dicnode/dic_node_utils.h"
 
-#include <cstring>
-
 #include "suggest/core/dicnode/dic_node.h"
 #include "suggest/core/dicnode/dic_node_vector.h"
 #include "suggest/core/dictionary/multi_bigram_map.h"
@@ -103,34 +101,4 @@ namespace latinime {
             NOT_A_PROBABILITY);
 }
 
-////////////////
-// Char utils //
-////////////////
-
-// TODO: Move to char_utils?
-/* static */ int DicNodeUtils::appendTwoWords(const int *const src0, const int16_t length0,
-        const int *const src1, const int16_t length1, int *const dest) {
-    int actualLength0 = 0;
-    for (int i = 0; i < length0; ++i) {
-        if (src0[i] == 0) {
-            break;
-        }
-        actualLength0 = i + 1;
-    }
-    actualLength0 = std::min(actualLength0, MAX_WORD_LENGTH);
-    memmove(dest, src0, actualLength0 * sizeof(dest[0]));
-    if (!src1 || length1 == 0) {
-        return actualLength0;
-    }
-    int actualLength1 = 0;
-    for (int i = 0; i < length1; ++i) {
-        if (src1[i] == 0) {
-            break;
-        }
-        actualLength1 = i + 1;
-    }
-    actualLength1 = std::min(actualLength1, MAX_WORD_LENGTH - actualLength0);
-    memmove(&dest[actualLength0], src1, actualLength1 * sizeof(dest[0]));
-    return actualLength0 + actualLength1;
-}
 } // namespace latinime
diff --git a/native/jni/src/suggest/core/dicnode/dic_node_utils.h b/native/jni/src/suggest/core/dicnode/dic_node_utils.h
index 3f1514a529d8896a3c71447bd7c3270410c2089f..4c0f1f15d119c465a080a677942789cb36c02c1a 100644
--- a/native/jni/src/suggest/core/dicnode/dic_node_utils.h
+++ b/native/jni/src/suggest/core/dicnode/dic_node_utils.h
@@ -17,8 +17,6 @@
 #ifndef LATINIME_DIC_NODE_UTILS_H
 #define LATINIME_DIC_NODE_UTILS_H
 
-#include <stdint.h>
-
 #include "defines.h"
 
 namespace latinime {
@@ -30,8 +28,6 @@ class MultiBigramMap;
 
 class DicNodeUtils {
  public:
-    static int appendTwoWords(const int *src0, const int16_t length0, const int *src1,
-            const int16_t length1, int *const dest);
     static void initAsRoot(
             const DictionaryStructureWithBufferPolicy *const dictionaryStructurePolicy,
             const int prevWordPtNodePos, DicNode *const newRootDicNode);
diff --git a/native/jni/src/suggest/core/result/suggestions_output_utils.cpp b/native/jni/src/suggest/core/result/suggestions_output_utils.cpp
index 19912f2ac404ed5c362cb2b145161514ea1c2a21..a27631510078d25b7d283e15626350fafd64941f 100644
--- a/native/jni/src/suggest/core/result/suggestions_output_utils.cpp
+++ b/native/jni/src/suggest/core/result/suggestions_output_utils.cpp
@@ -254,8 +254,9 @@ const int SuggestionsOutputUtils::MIN_LEN_FOR_MULTI_WORD_AUTOCORRECT = 16;
         outputScores[outputWordIndex] = shortcutScore;
         outputScores[outputWordIndex] = std::max(S_INT_MIN + 1, shortcutScore) - 1;
         const int startIndex2 = outputWordIndex * MAX_WORD_LENGTH;
-        DicNodeUtils::appendTwoWords(0, 0, shortcutTarget, shortcutTargetStringLength,
-                &outputCodePoints[startIndex2]);
+        // Copy shortcut target code points to the output buffer.
+        memmove(&outputCodePoints[startIndex2], shortcutTarget,
+                shortcutTargetStringLength * sizeof(shortcutTarget[0]));
         ++outputWordIndex;
     }
     return outputWordIndex;