diff --git a/native/jni/src/defines.h b/native/jni/src/defines.h
index e349aed..cb66814 100644
--- a/native/jni/src/defines.h
+++ b/native/jni/src/defines.h
@@ -270,6 +270,7 @@
 #define NOT_A_COORDINATE (-1)
 #define NOT_AN_INDEX (-1)
 #define NOT_A_PROBABILITY (-1)
+#define NOT_A_DICT_POS (S_INT_MIN)
 
 #define KEYCODE_SPACE ' '
 #define KEYCODE_SINGLE_QUOTE '\''
diff --git a/native/jni/src/suggest/core/dicnode/dic_node.h b/native/jni/src/suggest/core/dicnode/dic_node.h
index abfe82a..52db8e9 100644
--- a/native/jni/src/suggest/core/dicnode/dic_node.h
+++ b/native/jni/src/suggest/core/dicnode/dic_node.h
@@ -97,7 +97,6 @@
     DicNode &operator=(const DicNode &dicNode);
     virtual ~DicNode() {}
 
-    // TODO: minimize arguments by looking binary_format
     // Init for copy
     void initByCopy(const DicNode *dicNode) {
         mIsUsed = true;
@@ -107,13 +106,12 @@
         PROF_NODE_COPY(&dicNode->mProfiler, mProfiler);
     }
 
-    // TODO: minimize arguments by looking binary_format
     // Init for root with prevWordNodePos which is used for bigram
-    void initAsRoot(const int pos, const int childrenPos, const int prevWordNodePos) {
+    void initAsRoot(const int rootGroupPos, const int prevWordNodePos) {
         mIsUsed = true;
         mIsCachedForNextSuggestion = false;
         mDicNodeProperties.init(
-                pos, 0 /* flags */, childrenPos, 0 /* attributesPos */,
+                NOT_A_DICT_POS, 0 /* flags */, rootGroupPos, NOT_A_DICT_POS /* attributesPos */,
                 NOT_A_CODE_POINT /* nodeCodePoint */, NOT_A_PROBABILITY /* probability */,
                 false /* isTerminal */, true /* hasChildren */, 0 /* depth */,
                 0 /* terminalDepth */);
@@ -130,13 +128,12 @@
         PROF_NODE_COPY(&parentNode->mProfiler, mProfiler);
     }
 
-    // TODO: minimize arguments by looking binary_format
     // Init for root with previous word
-    void initAsRootWithPreviousWord(DicNode *dicNode, const int pos, const int childrenPos) {
+    void initAsRootWithPreviousWord(DicNode *dicNode, const int rootGroupPos) {
         mIsUsed = true;
         mIsCachedForNextSuggestion = dicNode->mIsCachedForNextSuggestion;
         mDicNodeProperties.init(
-                pos,  0 /* flags */, childrenPos, 0 /* attributesPos */,
+                NOT_A_DICT_POS,  0 /* flags */, rootGroupPos, NOT_A_DICT_POS /* attributesPos */,
                 NOT_A_CODE_POINT /* nodeCodePoint */, NOT_A_PROBABILITY /* probability */,
                 false /* isTerminal */, true /* hasChildren */, 0 /* depth */,
                 0 /* terminalDepth */);
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 5902882..2063c39 100644
--- a/native/jni/src/suggest/core/dicnode/dic_node_utils.cpp
+++ b/native/jni/src/suggest/core/dicnode/dic_node_utils.cpp
@@ -36,17 +36,14 @@
 
 /* static */ void DicNodeUtils::initAsRoot(const BinaryDictionaryInfo *const binaryDictionaryInfo,
         const int prevWordNodePos, DicNode *const newRootNode) {
-    const int rootPos = binaryDictionaryInfo->getRootPosition();
-    const int childrenPos = rootPos;
-    newRootNode->initAsRoot(rootPos, childrenPos, prevWordNodePos);
+    newRootNode->initAsRoot(binaryDictionaryInfo->getRootPosition(), prevWordNodePos);
 }
 
 /*static */ void DicNodeUtils::initAsRootWithPreviousWord(
         const BinaryDictionaryInfo *const binaryDictionaryInfo,
         DicNode *const prevWordLastNode, DicNode *const newRootNode) {
-    const int rootPos = binaryDictionaryInfo->getRootPosition();
-    const int childrenPos = rootPos;
-    newRootNode->initAsRootWithPreviousWord(prevWordLastNode, rootPos, childrenPos);
+    newRootNode->initAsRootWithPreviousWord(
+            prevWordLastNode, binaryDictionaryInfo->getRootPosition());
 }
 
 /* static */ void DicNodeUtils::initByCopy(DicNode *srcNode, DicNode *destNode) {
@@ -80,6 +77,7 @@
     const bool hasMultipleChars = (0 != (BinaryFormat::FLAG_HAS_MULTIPLE_CHARS & flags));
     const bool isTerminal = (0 != (BinaryFormat::FLAG_IS_TERMINAL & flags));
     const bool hasChildren = BinaryFormat::hasChildrenInFlags(flags);
+    const bool hasShortcuts = (0 != (BinaryFormat::FLAG_HAS_SHORTCUT_TARGETS & flags));
 
     int codePoint = BinaryFormat::getCodePointAndForwardPointer(
             binaryDictionaryInfo->getDictRoot(), &pos);
@@ -101,11 +99,12 @@
     } while (NOT_A_CODE_POINT != codePoint);
 
     const int probability = isTerminal ? BinaryFormat::readProbabilityWithoutMovingPointer(
-            binaryDictionaryInfo->getDictRoot(), pos) : -1;
+            binaryDictionaryInfo->getDictRoot(), pos) : NOT_A_PROBABILITY;
     pos = BinaryFormat::skipProbability(flags, pos);
     int childrenPos = hasChildren ? BinaryFormat::readChildrenPosition(
-            binaryDictionaryInfo->getDictRoot(), flags, pos) : 0;
-    const int attributesPos = BinaryFormat::skipChildrenPosition(flags, pos);
+            binaryDictionaryInfo->getDictRoot(), flags, pos) : NOT_A_DICT_POS;
+    const int attributesPos =
+            hasShortcuts ? BinaryFormat::skipChildrenPosition(flags, pos) : NOT_A_DICT_POS;
     const int siblingPos = BinaryFormat::skipChildrenPosAndAttributes(
             binaryDictionaryInfo->getDictRoot(), flags, pos);
 
