diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/MultiPackageNamingUtils.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/extension/multi/MultiPackageNamingUtils.java
similarity index 76%
rename from converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/MultiPackageNamingUtils.java
rename to converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/extension/multi/MultiPackageNamingUtils.java
index 7e00c47184b997e5f7ac4d51b54cde5600feeea5..eefbd1bd251c649fafabc6a80326cc19b6060758 100644
--- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/MultiPackageNamingUtils.java
+++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/extension/multi/MultiPackageNamingUtils.java
@@ -1,4 +1,4 @@
-package lcsb.mapviewer.converter.model.sbml;
+package lcsb.mapviewer.converter.model.sbml.extension.multi;
 
 import org.apache.log4j.Logger;
 import org.sbml.jsbml.ext.multi.MultiSpeciesType;
@@ -26,8 +26,6 @@ public final class MultiPackageNamingUtils {
   private static Logger logger = Logger.getLogger(MultiPackageNamingUtils.class);
 
   private static final String MINERVA_MODIFICATION_TYPE_PREFIX = "minerva_modification_type_";
-  private static final String MINERVA_POSITION_TO_COMPARTMENT_PREFIX = "minerva_position_to_compartment_";
-  private static final String MINERVA_STRUCTURAL_STATE_PREFIX = "minerva_structural_state_";
 
   /**
    * Returns id of the {@link MultiSpeciesType} for a given minerva class.
@@ -53,28 +51,16 @@ public final class MultiPackageNamingUtils {
     return getSpeciesTypeId(element.getClass());
   }
 
-  public static final String getStructuralStateFeatureId(Class<?> speciesClass) {
-    return MINERVA_STRUCTURAL_STATE_PREFIX + speciesClass.getSimpleName();
+  public static final String getFeatureId(Class<?> speciesClass, BioEntityFeature feature) {
+    return feature.getIdPrefix() + speciesClass.getSimpleName();
   }
 
-  public static String getStructuralStateFeatureId(Species element) {
-    return getStructuralStateFeatureId(element.getClass());
+  public static String getFeatureId(Species element, BioEntityFeature feature) {
+    return getFeatureId(element.getClass(), feature);
   }
 
-  public static boolean isStructuralStateFeatureId(String featureTypeId) {
-    return featureTypeId.startsWith(MINERVA_STRUCTURAL_STATE_PREFIX);
-  }
-
-  public static final String getPositionToCompartmentFeatureId(Class<?> speciesClass) {
-    return MINERVA_POSITION_TO_COMPARTMENT_PREFIX + speciesClass.getSimpleName();
-  }
-
-  public static String getPositionToCompartmentFeatureId(Species element) {
-    return getPositionToCompartmentFeatureId(element.getClass());
-  }
-
-  public static boolean isPositionToCompartmentFeatureId(String featureTypeId) {
-    return featureTypeId.startsWith(MINERVA_POSITION_TO_COMPARTMENT_PREFIX);
+  public static boolean isFeatureId(String featureTypeId, BioEntityFeature feature) {
+    return featureTypeId.startsWith(feature.getIdPrefix());
   }
 
   public static String getModificationFeatureId(ModificationResidue mr) {
diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesExporter.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesExporter.java
index 3dfc259f4058b9fc87295aaa720a27a69d945947..d2af7f4ee525de798bb11f7831a1f9a5d6c0e3b8 100644
--- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesExporter.java
+++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesExporter.java
@@ -23,10 +23,11 @@ import org.sbml.jsbml.ext.multi.SpeciesFeatureType;
 import org.sbml.jsbml.ext.multi.SpeciesFeatureValue;
 import org.sbml.jsbml.ext.render.LocalStyle;
 
-import lcsb.mapviewer.converter.model.sbml.MultiPackageNamingUtils;
 import lcsb.mapviewer.converter.model.sbml.SbmlElementExporter;
 import lcsb.mapviewer.converter.model.sbml.SbmlExtension;
 import lcsb.mapviewer.converter.model.sbml.compartment.SbmlCompartmentExporter;
+import lcsb.mapviewer.converter.model.sbml.extension.multi.BioEntityFeature;
+import lcsb.mapviewer.converter.model.sbml.extension.multi.MultiPackageNamingUtils;
 import lcsb.mapviewer.model.map.InconsistentModelException;
 import lcsb.mapviewer.model.map.species.AntisenseRna;
 import lcsb.mapviewer.model.map.species.Complex;
@@ -215,7 +216,8 @@ public class SbmlSpeciesExporter extends SbmlElementExporter<Species, org.sbml.j
       structuralState = ((Complex) element).getStructuralState();
     }
     if (structuralState != null) {
-      SpeciesFeatureType structuralStateFeature = getStructuralStateFeature(element.getClass(), speciesType);
+      SpeciesFeatureType structuralStateFeature = getFeature(element.getClass(), speciesType,
+          BioEntityFeature.STRUCTURAL_STATE);
       PossibleSpeciesFeatureValue structuralStateFeatureValue = getPosibleFeatureIdByName(structuralState,
           structuralStateFeature);
 
@@ -261,7 +263,8 @@ public class SbmlSpeciesExporter extends SbmlElementExporter<Species, org.sbml.j
     if (element.getPositionToCompartment() != null) {
       positionToCompartmentName = element.getPositionToCompartment().name();
     }
-    SpeciesFeatureType structuralStateFeature = getPositionToCompartmentFeature(element.getClass(), speciesType);
+    SpeciesFeatureType structuralStateFeature = getFeature(element.getClass(), speciesType,
+        BioEntityFeature.POSITION_TO_COMPARTMENT);
     PossibleSpeciesFeatureValue structuralStateFeatureValue = getPosibleFeatureIdByName(positionToCompartmentName,
         structuralStateFeature);
 
@@ -343,28 +346,17 @@ public class SbmlSpeciesExporter extends SbmlElementExporter<Species, org.sbml.j
     return speciesType;
   }
 
-  private SpeciesFeatureType getStructuralStateFeature(Class<? extends Element> clazz, MultiSpeciesType speciesType) {
+  private SpeciesFeatureType getFeature(Class<? extends Element> clazz, MultiSpeciesType speciesType,
+      BioEntityFeature bioEntityFeature) {
     SpeciesFeatureType feature = speciesType
-        .getSpeciesFeatureType(MultiPackageNamingUtils.getStructuralStateFeatureId(clazz));
+        .getSpeciesFeatureType(MultiPackageNamingUtils.getFeatureId(clazz, bioEntityFeature));
     if (feature == null) {
       feature = new SpeciesFeatureType();
-      feature.setName("Structural state");
-      feature.setId(MultiPackageNamingUtils.getStructuralStateFeatureId(clazz));
-      addPosibleValueToFeature(feature, "");
-      speciesType.getListOfSpeciesFeatureTypes().add(feature);
-    }
-    return feature;
-  }
-
-  private SpeciesFeatureType getPositionToCompartmentFeature(Class<? extends Element> clazz,
-      MultiSpeciesType speciesType) {
-    SpeciesFeatureType feature = speciesType
-        .getSpeciesFeatureType(MultiPackageNamingUtils.getPositionToCompartmentFeatureId(clazz));
-    if (feature == null) {
-      feature = new SpeciesFeatureType();
-      feature.setName("Position to compartment");
-      feature.setId(MultiPackageNamingUtils.getPositionToCompartmentFeatureId(clazz));
-      addPosibleValueToFeature(feature, "undefined");
+      feature.setName(bioEntityFeature.getFeatureName());
+      feature.setId(MultiPackageNamingUtils.getFeatureId(clazz, bioEntityFeature));
+      if (bioEntityFeature.getDefaultValue() != null) {
+        addPosibleValueToFeature(feature, bioEntityFeature.getDefaultValue());
+      }
       speciesType.getListOfSpeciesFeatureTypes().add(feature);
     }
     return feature;
diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesParser.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesParser.java
index 1bdf6ff54812ec2cdedad74d3811bf493579f2c8..12566be85fd5b1500cde88370a22d47e182b881d 100644
--- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesParser.java
+++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesParser.java
@@ -27,8 +27,9 @@ import org.sbml.jsbml.ext.render.LocalStyle;
 import lcsb.mapviewer.common.Pair;
 import lcsb.mapviewer.common.exception.InvalidStateException;
 import lcsb.mapviewer.converter.InvalidInputDataExecption;
-import lcsb.mapviewer.converter.model.sbml.MultiPackageNamingUtils;
 import lcsb.mapviewer.converter.model.sbml.SbmlElementParser;
+import lcsb.mapviewer.converter.model.sbml.extension.multi.BioEntityFeature;
+import lcsb.mapviewer.converter.model.sbml.extension.multi.MultiPackageNamingUtils;
 import lcsb.mapviewer.model.map.compartment.Compartment;
 import lcsb.mapviewer.model.map.species.Complex;
 import lcsb.mapviewer.model.map.species.Degraded;
@@ -126,43 +127,35 @@ public class SbmlSpeciesParser extends SbmlElementParser<org.sbml.jsbml.Species>
       SpeciesFeature feature) {
     String warnPrefix = new ElementUtils().getElementTag(minervaElement);
     String featureTypeString = feature.getSpeciesFeatureType();
-    if (MultiPackageNamingUtils.isStructuralStateFeatureId(featureTypeString)) {
-      if (featureTypeString.equals(MultiPackageNamingUtils.getStructuralStateFeatureId(minervaElement))) {
-        SpeciesFeatureType featureType = speciesType.getListOfSpeciesFeatureTypes().get(featureTypeString);
+    if (MultiPackageNamingUtils.isFeatureId(featureTypeString, BioEntityFeature.STRUCTURAL_STATE)) {
+      SpeciesFeatureType featureType = speciesType.getListOfSpeciesFeatureTypes().get(featureTypeString);
 
-        List<String> structuralStates = new ArrayList<>();
-        for (SpeciesFeatureValue featureValue : feature.getListOfSpeciesFeatureValues()) {
-          PossibleSpeciesFeatureValue possibleSpeciesFeatureValue = featureType.getListOfPossibleSpeciesFeatureValues()
-              .get(featureValue.getValue());
-          structuralStates.add(possibleSpeciesFeatureValue.getName());
-        }
-        if (minervaElement instanceof Protein) {
-          ((Protein) minervaElement).setStructuralState(String.join("; ", structuralStates));
-        } else if (minervaElement instanceof Complex) {
-          ((Complex) minervaElement).setStructuralState(String.join("; ", structuralStates));
-        } else {
-          logger.warn(warnPrefix + "Structural state not supported");
-        }
+      List<String> structuralStates = new ArrayList<>();
+      for (SpeciesFeatureValue featureValue : feature.getListOfSpeciesFeatureValues()) {
+        PossibleSpeciesFeatureValue possibleSpeciesFeatureValue = featureType.getListOfPossibleSpeciesFeatureValues()
+            .get(featureValue.getValue());
+        structuralStates.add(possibleSpeciesFeatureValue.getName());
+      }
+      if (minervaElement instanceof Protein) {
+        ((Protein) minervaElement).setStructuralState(String.join("; ", structuralStates));
+      } else if (minervaElement instanceof Complex) {
+        ((Complex) minervaElement).setStructuralState(String.join("; ", structuralStates));
       } else {
-        logger.warn(warnPrefix + "Invalid structural state for class " + featureTypeString);
+        logger.warn(warnPrefix + "Structural state not supported");
       }
-    } else if (MultiPackageNamingUtils.isPositionToCompartmentFeatureId(featureTypeString)) {
-      if (featureTypeString.equals(MultiPackageNamingUtils.getPositionToCompartmentFeatureId(minervaElement))) {
-        SpeciesFeatureType featureType = speciesType.getListOfSpeciesFeatureTypes().get(featureTypeString);
+    } else if (MultiPackageNamingUtils.isFeatureId(featureTypeString, BioEntityFeature.POSITION_TO_COMPARTMENT)) {
+      SpeciesFeatureType featureType = speciesType.getListOfSpeciesFeatureTypes().get(featureTypeString);
 
-        List<String> positionToCompartments = new ArrayList<>();
-        for (SpeciesFeatureValue featureValue : feature.getListOfSpeciesFeatureValues()) {
-          PossibleSpeciesFeatureValue possibleSpeciesFeatureValue = featureType.getListOfPossibleSpeciesFeatureValues()
-              .get(featureValue.getValue());
-          positionToCompartments.add(possibleSpeciesFeatureValue.getName());
-        }
-        if (positionToCompartments.size() != 1) {
-          logger.warn(warnPrefix + "Position to compartment must exactly one value");
-        } else {
-          minervaElement.setPositionToCompartment(PositionToCompartment.getByString(positionToCompartments.get(0)));
-        }
+      List<String> positionToCompartments = new ArrayList<>();
+      for (SpeciesFeatureValue featureValue : feature.getListOfSpeciesFeatureValues()) {
+        PossibleSpeciesFeatureValue possibleSpeciesFeatureValue = featureType.getListOfPossibleSpeciesFeatureValues()
+            .get(featureValue.getValue());
+        positionToCompartments.add(possibleSpeciesFeatureValue.getName());
+      }
+      if (positionToCompartments.size() != 1) {
+        logger.warn(warnPrefix + "Position to compartment must exactly one value");
       } else {
-        logger.warn(warnPrefix + "Position to compartment for class " + featureTypeString);
+        minervaElement.setPositionToCompartment(PositionToCompartment.getByString(positionToCompartments.get(0)));
       }
     } else if (MultiPackageNamingUtils.isModificationFeatureId(featureTypeString)) {
       createModificationResidues(minervaElement, speciesType, feature);
@@ -211,8 +204,10 @@ public class SbmlSpeciesParser extends SbmlElementParser<org.sbml.jsbml.Species>
         mr = new TranscriptionSite();
         if (minervaElement instanceof SpeciesWithTranscriptionSite) {
           TranscriptionSite transcriptionSite = (TranscriptionSite) mr;
-          transcriptionSite.setActive(MultiPackageNamingUtils.getTranscriptionFactorActiveStateFromFeatureTypeName(featureTypeString));
-          transcriptionSite.setDirection(MultiPackageNamingUtils.getTranscriptionFactorDirectionStateFromFeatureTypeName(featureTypeString));
+          transcriptionSite.setActive(
+              MultiPackageNamingUtils.getTranscriptionFactorActiveStateFromFeatureTypeName(featureTypeString));
+          transcriptionSite.setDirection(
+              MultiPackageNamingUtils.getTranscriptionFactorDirectionStateFromFeatureTypeName(featureTypeString));
           ((SpeciesWithTranscriptionSite) minervaElement).addTranscriptionSite(transcriptionSite);
         } else {
           logger.warn(warnPrefix + "Object class doesn't support " + mr.getClass());