diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/bigram_dict_content.cpp b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/bigram_dict_content.cpp
index a871e2b91b47c278da73865edab00dd1a5bf768c..04c80a76c8109b42a8d88090f14372e55b7024ad 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/bigram_dict_content.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/bigram_dict_content.cpp
@@ -25,7 +25,7 @@ const BigramEntry BigramDictContent::getBigramEntryAndAdvancePosition(
     const BufferWithExtendableBuffer *const bigramListBuffer = getContentBuffer();
     const int bigramFlags = bigramListBuffer->readUintAndAdvancePosition(
             Ver4DictConstants::BIGRAM_FLAGS_FIELD_SIZE, bigramEntryPos);
-    const int hasNext = (bigramFlags & Ver4DictConstants::BIGRAM_HAS_NEXT_MASK) != 0;
+    const bool hasNext = (bigramFlags & Ver4DictConstants::BIGRAM_HAS_NEXT_MASK) != 0;
     int probability = NOT_A_PROBABILITY;
     int timestamp = Ver4DictConstants::NOT_A_TIME_STAMP;
     int level = 0;
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/terminal_position_lookup_table.cpp b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/terminal_position_lookup_table.cpp
index c38aeb4cafa0c2ae967656c971a47c63152bb8be..d0853a5d3a452f5efadb9036ba4e29d78bec3ce8 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/terminal_position_lookup_table.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/terminal_position_lookup_table.cpp
@@ -53,13 +53,12 @@ bool TerminalPositionLookupTable::setTerminalPtNodePosition(
 bool TerminalPositionLookupTable::flushToFile(const char *const dictDirPath,
         const int newHeaderRegionSize) const {
     const int headerRegionSizeDiff = newHeaderRegionSize - mHeaderRegionSize;
-    // If header region size has been changed, terminal PtNode positions have to be adjusted
-    // depending on the new header region size.
-    if (headerRegionSizeDiff != 0) {
-        TerminalPositionLookupTable lookupTableToWrite;
+    // If header region size has been changed or used buffer size is smaller than actual buffer
+    // size, regenerate lookup table and write the new table to file.
+    if (headerRegionSizeDiff != 0 || getEntryPos(mSize) < getBuffer()->getTailPosition()) {
+        TerminalPositionLookupTable lookupTableToWrite(newHeaderRegionSize);
         for (int i = 0; i < mSize; ++i) {
-            const int terminalPtNodePosition = getTerminalPtNodePosition(i)
-                    + headerRegionSizeDiff;
+            const int terminalPtNodePosition = getTerminalPtNodePosition(i);
             if (!lookupTableToWrite.setTerminalPtNodePosition(i, terminalPtNodePosition)) {
                 AKLOGE("Cannot set terminal position to lookupTableToWrite."
                         " terminalId: %d, position: %d", i, terminalPtNodePosition);
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/terminal_position_lookup_table.h b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/terminal_position_lookup_table.h
index ca33d71dd95347951d7bff55651988243bf7f36f..80b358c43826aa89070b5e89bd27103007bf566b 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/terminal_position_lookup_table.h
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/terminal_position_lookup_table.h
@@ -37,6 +37,9 @@ class TerminalPositionLookupTable : public SingleDictContent {
                       / Ver4DictConstants::TERMINAL_ADDRESS_TABLE_ADDRESS_SIZE),
               mHeaderRegionSize(headerRegionSize) {}
 
+    explicit TerminalPositionLookupTable(const int headerRegionSize)
+            : mSize(0), mHeaderRegionSize(headerRegionSize) {}
+
     TerminalPositionLookupTable() : mSize(0), mHeaderRegionSize(0) {}
 
     int getTerminalPtNodePosition(const int terminalId) const;