diff --git a/transition_machine/src/ActionBank.cpp b/transition_machine/src/ActionBank.cpp
index 74121631d886add7b22afc823103d7790fcaba3e..b8affab8ec818584431de065b468c9b99a5fb01f 100644
--- a/transition_machine/src/ActionBank.cpp
+++ b/transition_machine/src/ActionBank.cpp
@@ -186,7 +186,7 @@ Action::BasicAction ActionBank::bufferAdd(std::string tapeName, std::string valu
       auto & tape = config.getTape(tapeName);
       auto & from = tape.getHyp(relativeIndex);
 
-      auto parts = util::split(from, '|');
+      auto parts = from.empty() ? std::vector<std::string>() : util::split(from, '|');
       parts.emplace_back(value);
 
       std::sort(parts.begin(), parts.end());
@@ -218,6 +218,9 @@ Action::BasicAction ActionBank::bufferAdd(std::string tapeName, std::string valu
       auto & tape = config.getTape(tapeName);
       auto & from = tape.getHyp(relativeIndex);
 
+      if (from.empty())
+        return true;
+
       auto splited = util::split(from, '|');
       for (auto & part : splited)
         if (part == value)
diff --git a/transition_machine/src/Oracle.cpp b/transition_machine/src/Oracle.cpp
index 8d90e0766a7d5bf88c94f7eeb53254252065620f..f9f723b433fe1b5dc310d73cd653abb915e095fa 100644
--- a/transition_machine/src/Oracle.cpp
+++ b/transition_machine/src/Oracle.cpp
@@ -289,8 +289,11 @@ void Oracle::createDatabase()
     if (!strncmp("WRITE", action.c_str(), 5))
       return action == "WRITE b.0 MORPHO " + c.getTape("MORPHO").getRef(0) ? 0 : 1;
 
-    auto partsRef = util::split(c.getTape("MORPHO").getRef(0), '|');
-    auto partsHyp = util::split(c.getTape("MORPHO").getHyp(0), '|');
+    auto & hypMorpho = c.getTape("MORPHO").getHyp(0);
+    auto & refMorpho = c.getTape("MORPHO").getRef(0);
+
+    auto partsRef = refMorpho.empty() ? std::vector<std::string>() : util::split(refMorpho, '|');
+    auto partsHyp = hypMorpho.empty() ? std::vector<std::string>() : util::split(hypMorpho, '|');
 
     if (!strncmp("NOTHING", action.c_str(), 7))
     {