diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SBOTermModifierType.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SBOTermModifierType.java
index 605f4b8c5ff35a64fc498456ab3cd14704d705be..580deecbb6f5d2301dff945374b6922c6f005b23 100644
--- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SBOTermModifierType.java
+++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SBOTermModifierType.java
@@ -1,7 +1,7 @@
 package lcsb.mapviewer.converter.model.sbml.reaction;
 
-import java.util.HashSet;
-import java.util.Set;
+import java.util.ArrayList;
+import java.util.List;
 
 import org.apache.log4j.Logger;
 
@@ -19,7 +19,7 @@ public enum SBOTermModifierType {
   ;
 
   private static Logger logger = Logger.getLogger(SBOTermModifierType.class);
-  private Set<String> sboTerms = new HashSet<>();
+  private List<String> sboTerms = new ArrayList<>();
   Class<? extends Modifier> clazz;
 
   private SBOTermModifierType(Class<? extends Modifier> clazz, String[] inputSboTerms) {
@@ -47,4 +47,22 @@ public enum SBOTermModifierType {
     }
     return result;
   }
+
+  public static String getTermByType(Class<? extends Modifier> clazz) {
+    for (SBOTermModifierType term : values()) {
+      if (clazz.equals(term.clazz)) {
+        return term.getSBO();
+      }
+    }
+    logger.warn("Cannot find SBO term for class: " + clazz);
+    return null;
+  }
+
+  private String getSBO() {
+    if (sboTerms.size() != 0) {
+      return sboTerms.get(0);
+    }
+    logger.warn("Cannot find SBO term for class: " + clazz);
+    return null;
+  }
 }
diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionExporter.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionExporter.java
index 67e13918475d16c3ad17a005f0d601d2d789e884..ef9da4db73f43dd08b3ee0c90691189516fca5dc 100644
--- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionExporter.java
+++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionExporter.java
@@ -78,6 +78,10 @@ public class SbmlReactionExporter extends SbmlBioEntityExporter<Reaction, org.sb
       Species sbmlSymbol = speciesExporter.getSbmlElementByElementId(modifier.getElement().getElementId());
       SimpleSpeciesReference speciesReference = result.createModifier(sbmlSymbol);
       speciesReferenceByReactionNode.put(modifier, speciesReference);
+      String term = SBOTermModifierType.getTermByType(modifier.getClass());
+      if (term != null) {
+        speciesReference.setSBOTerm(term);
+      }
     }
     if (reaction.getKinetics() != null) {
       result.setKineticLaw(createKineticLaw(reaction));
diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionParser.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionParser.java
index 876a08866dba110b8b5d022691a4541a81582c05..af039111ebceda389bf4e94ace29bd648fdddd30 100644
--- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionParser.java
+++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionParser.java
@@ -109,32 +109,33 @@ public class SbmlReactionParser extends SbmlBioEntityParser {
           SpeciesGlyph speciesGlyph = layout.getSpeciesGlyph(speciesRefernceGlyph.getSpeciesGlyph());
           ReactionNode minervaNode = null;
           Class<? extends ReactionNode> nodeClass = null;
-          switch (speciesRefernceGlyph.getRole()) {
-          case ACTIVATOR:
-            nodeClass = Trigger.class;
-            break;
-          case INHIBITOR:
-            nodeClass = Inhibition.class;
-            break;
-          case MODIFIER:
-            nodeClass = Modulation.class;
-            break;
-          case PRODUCT:
-            nodeClass = Product.class;
-            break;
-          case SIDEPRODUCT:
-            nodeClass = Product.class;
-            break;
-          case SIDESUBSTRATE:
-            nodeClass = Reactant.class;
-            break;
-          case SUBSTRATE:
-            nodeClass = Reactant.class;
-            break;
-          case UNDEFINED:
-            nodeClass = null;
-            break;
+          if (speciesRefernceGlyph.getRole() != null) {
+            switch (speciesRefernceGlyph.getRole()) {
+            case ACTIVATOR:
+              nodeClass = Trigger.class;
+              break;
+            case INHIBITOR:
+              nodeClass = Inhibition.class;
+              break;
+            case PRODUCT:
+              nodeClass = Product.class;
+              break;
+            case SIDEPRODUCT:
+              nodeClass = Product.class;
+              break;
+            case SIDESUBSTRATE:
+              nodeClass = Reactant.class;
+              break;
+            case SUBSTRATE:
+              nodeClass = Reactant.class;
+              break;
+            case UNDEFINED:
+            case MODIFIER:
+              nodeClass = null;
+              break;
+            }
           }
+
           if (reactionWithLayout.isReversible() && (nodeClass == Reactant.class || nodeClass == Product.class)) {
             nodeClass = null;
           }
@@ -148,7 +149,11 @@ public class SbmlReactionParser extends SbmlBioEntityParser {
               }
             }
           }
+          if (nodeClass == Modifier.class) {
+            nodeClass = Modulation.class;
+          }
           if (minervaNode == null) {
+            logger.debug(nodeClass);
             throw new InvalidInputDataExecption(
                 "Cannot find reaction node for layouted reaction: " + speciesGlyph.getSpecies() + ", " + glyph.getId());
           }
diff --git a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/GenericSbmlToXmlParserTest.java b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/GenericSbmlToXmlParserTest.java
index 4b17dfa7715602f28499226864a40e2cbefb02c7..c3f9c5bfa68cd7d53f0ee37331f53875e4f15805 100644
--- a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/GenericSbmlToXmlParserTest.java
+++ b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/GenericSbmlToXmlParserTest.java
@@ -53,6 +53,7 @@ public class GenericSbmlToXmlParserTest {
   @Test
   public void toXmlModelTest() throws Exception {
     try {
+
       String dir = Files.createTempDirectory("sbgn-temp-images-dir").toFile().getAbsolutePath();
 
       IConverter converter = new SbmlParser();
@@ -64,7 +65,7 @@ public class GenericSbmlToXmlParserTest {
           + filePath.getFileName().toString().substring(0, filePath.getFileName().toString().indexOf(".xml"));
       String xmlFilePath = pathWithouExtension.concat(".xml");
       converter.exportModelToFile(model, xmlFilePath);
-      
+
       Model model2 = converter.createModel(new ConverterParams().filename(xmlFilePath));
       model2.setName(null);
 
diff --git a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesParserTest.java b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesParserTest.java
index 2a049eecec810853e37d1db9f6255c4989176cbc..c82b00a7e468e9216c66a5aa151999427068216c 100644
--- a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesParserTest.java
+++ b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesParserTest.java
@@ -6,6 +6,7 @@ import java.io.FileNotFoundException;
 
 import org.apache.log4j.Logger;
 import org.junit.Test;
+import org.sbml.jsbml.SBMLDocument;
 
 import lcsb.mapviewer.converter.ConverterParams;
 import lcsb.mapviewer.converter.InvalidInputDataExecption;
@@ -128,4 +129,5 @@ public class SbmlSpeciesParserTest {
     assertTrue(element instanceof Unknown);
   }
 
+
 }