diff --git a/reading_machine/include/Config.hpp b/reading_machine/include/Config.hpp
index 310e2f442114567b08f470359dc0629839c970d1..21dab0b62b0ee66947e921d90bbe594f3f98c34b 100644
--- a/reading_machine/include/Config.hpp
+++ b/reading_machine/include/Config.hpp
@@ -91,6 +91,7 @@ class Config
   void popStack();
   bool isComment(std::size_t lineIndex) const;
   bool isMultiword(std::size_t lineIndex) const;
+  int getMultiwordSize(std::size_t lineIndex) const;
   bool isEmptyNode(std::size_t lineIndex) const;
   bool isToken(std::size_t lineIndex) const;
   bool moveWordIndex(int relativeMovement);
diff --git a/reading_machine/src/Action.cpp b/reading_machine/src/Action.cpp
index 94bfee7f9cd589734b78b94d2dafad120ab4f74a..ecbcff7e220bd04769adc1a9ea3fbdcf3072538a 100644
--- a/reading_machine/src/Action.cpp
+++ b/reading_machine/src/Action.cpp
@@ -287,7 +287,7 @@ Action Action::updateIds()
           break;
         util::myThrow("The current sentence is too long to be completly held by the data strucure. Consider increasing SubConfig::SpanSize");
       }
-      if (!config.isToken(i))
+      if (config.isComment(i) || config.isEmptyNode(i))
         continue;
 
       if (config.getLastNotEmptyHypConst(Config::EOSColName, i) == Config::EOSSymbol1)
@@ -301,14 +301,16 @@ Action Action::updateIds()
 
     for (unsigned int i = firstIndexOfSentence, currentId = 1; i <= config.getStack(0); ++i)
     {
-      if (!config.isToken(i))
+      if (config.isComment(i) || config.isEmptyNode(i))
         continue;
 
       if (config.getLastNotEmptyHypConst(Config::EOSColName, i) == Config::EOSSymbol1)
         break;
 
-      config.getFirstEmpty(Config::idColName, i) = fmt::format("{}", currentId);
-      ++currentId;
+      if (config.isMultiword(i))
+        config.getFirstEmpty(Config::idColName, i) = fmt::format("{}-{}", currentId, currentId+config.getMultiwordSize(i));
+      else
+        config.getFirstEmpty(Config::idColName, i) = fmt::format("{}", currentId++);
     }
   };
 
diff --git a/reading_machine/src/Config.cpp b/reading_machine/src/Config.cpp
index dd8ca3ec38c7ce3af5ad0096f6fd97e81ece7403..ca81d9edfc854e33ffee4de7e536a22289575620 100644
--- a/reading_machine/src/Config.cpp
+++ b/reading_machine/src/Config.cpp
@@ -334,6 +334,12 @@ bool Config::isMultiword(std::size_t lineIndex) const
   return hasColIndex(idColName) && getConst(idColName, lineIndex, 0).get().find('-') != std::string::npos;
 }
 
+int Config::getMultiwordSize(std::size_t lineIndex) const
+{
+  auto splited = util::split(getConst(idColName, lineIndex, 0).get(), '-');
+  return std::stoi(std::string(splited[1])) - std::stoi(std::string(splited[0]));
+}
+
 bool Config::isEmptyNode(std::size_t lineIndex) const
 {
   return hasColIndex(idColName) && getConst(idColName, lineIndex, 0).get().find('.') != std::string::npos;