diff --git a/model-command/src/main/java/lcsb/mapviewer/commands/ColorModelCommand.java b/model-command/src/main/java/lcsb/mapviewer/commands/ColorModelCommand.java
index 534d8432b41e771f39fd170a54356001aa6cd48d..f7da34ff5dfc2d45ffe2881c0a8e5bd916aeb390 100644
--- a/model-command/src/main/java/lcsb/mapviewer/commands/ColorModelCommand.java
+++ b/model-command/src/main/java/lcsb/mapviewer/commands/ColorModelCommand.java
@@ -10,6 +10,7 @@ import java.util.Map;
 import org.apache.log4j.Logger;
 
 import lcsb.mapviewer.common.Pair;
+import lcsb.mapviewer.common.comparator.StringComparator;
 import lcsb.mapviewer.common.exception.NotImplementedException;
 import lcsb.mapviewer.model.graphics.ArrowTypeData;
 import lcsb.mapviewer.model.map.BioEntity;
@@ -20,6 +21,7 @@ import lcsb.mapviewer.model.map.compartment.Compartment;
 import lcsb.mapviewer.model.map.layout.ColorSchema;
 import lcsb.mapviewer.model.map.layout.InvalidColorSchemaException;
 import lcsb.mapviewer.model.map.model.Model;
+import lcsb.mapviewer.model.map.model.ModelData;
 import lcsb.mapviewer.model.map.model.ModelSubmodelConnection;
 import lcsb.mapviewer.model.map.reaction.AbstractNode;
 import lcsb.mapviewer.model.map.reaction.Product;
@@ -60,6 +62,8 @@ public class ColorModelCommand extends ModelCommand {
    */
   private ElementUtils eu = new ElementUtils();
 
+  private StringComparator stringComparator = new StringComparator();
+
   /**
    * Default constructor.
    * 
@@ -125,6 +129,9 @@ public class ColorModelCommand extends ModelCommand {
     if (schema.getName() != null) {
       return false;
     }
+    if (!modelMatch(reaction.getModelData(), schema)) {
+      return false;
+    }
 
     if (schema.getReactionIdentifier() != null
         && schema.getReactionIdentifier().equalsIgnoreCase(reaction.getIdReaction())) {
@@ -150,6 +157,19 @@ public class ColorModelCommand extends ModelCommand {
     return false;
   }
 
+  private boolean modelMatch(ModelData model, ColorSchema schema) {
+    if (schema.getModelName() != null && !schema.getModelName().isEmpty()) {
+      if (model == null) {
+        logger.warn("Model of element is null...");
+        return false;
+      }
+      if (stringComparator.compare(model.getName(), schema.getModelName()) != 0) {
+        return false;
+      }
+    }
+    return true;
+  }
+
   /**
    * Applies color schema into the {@link Element}.
    * 
@@ -181,6 +201,9 @@ public class ColorModelCommand extends ModelCommand {
    */
   protected boolean match(Element element, ColorSchema schema) {
     if (element instanceof Species) {
+      if (!modelMatch(element.getModelData(), schema)) {
+        return false;
+      }
       if (schema.getName() != null) {
         if (!element.getName().equalsIgnoreCase(schema.getName())) {
           return false;
diff --git a/model-command/src/test/java/lcsb/mapviewer/commands/ColorModelCommandTest.java b/model-command/src/test/java/lcsb/mapviewer/commands/ColorModelCommandTest.java
index 6514aa1dc9b1550344228b8dfc1294502bfec864..d523a7c938e27f7168f6e8048cbb3e44e804c92f 100644
--- a/model-command/src/test/java/lcsb/mapviewer/commands/ColorModelCommandTest.java
+++ b/model-command/src/test/java/lcsb/mapviewer/commands/ColorModelCommandTest.java
@@ -362,4 +362,94 @@ public class ColorModelCommandTest extends CommandTestFunctions {
 
   }
 
+  @Test
+  public void testReactionColoringWithModelNotMatching() throws Exception {
+    try {
+      Model model = getModelForFile("testFiles/reactions_to_color.xml", false);
+
+      ColorSchema schema = new GenericColorSchema();
+      schema.setReactionIdentifier("re4");
+      schema.setName(null);
+      schema.setModelName(model.getName() + "XXX");
+
+      Collection<ColorSchema> schemas = new ArrayList<>();
+      schemas.add(schema);
+
+      ColorModelCommand factory = new ColorModelCommand(model, schemas, colorExtractor);
+      Map<Object, ColorSchema> map = factory.getModifiedElements();
+      assertEquals(0, map.values().size());
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
+
+  @Test
+  public void testReactionColoringWithModelMatch() throws Exception {
+    try {
+      Model model = getModelForFile("testFiles/reactions_to_color.xml", false);
+
+      ColorSchema schema = new GenericColorSchema();
+      schema.setReactionIdentifier("re4");
+      schema.setName(null);
+      schema.setModelName(model.getName());
+
+      Collection<ColorSchema> schemas = new ArrayList<>();
+      schemas.add(schema);
+
+      ColorModelCommand factory = new ColorModelCommand(model, schemas, colorExtractor);
+      Map<Object, ColorSchema> map = factory.getModifiedElements();
+      assertEquals(1, map.values().size());
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
+
+  @Test
+  public void testAliasColoringWithModelNotMatching() throws Exception {
+    try {
+      Model model = getModelForFile("testFiles/sample.xml", false);
+
+      ColorSchema schema = new GenericColorSchema();
+      schema.setName("CNC");
+      schema.setModelName(model.getName() + "XXX");
+
+      Collection<ColorSchema> schemas = new ArrayList<>();
+      schemas.add(schema);
+
+      ColorModelCommand factory = new ColorModelCommand(model, schemas, colorExtractor);
+      Map<Object, ColorSchema> map = factory.getModifiedElements();
+      assertEquals(0, map.values().size());
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
+
+  @Test
+  public void testAliasColoringWithModelMatch() throws Exception {
+    try {
+      Model model = getModelForFile("testFiles/sample.xml", false);
+
+      ColorSchema schema = new GenericColorSchema();
+      schema.setName("CNC");
+      schema.setModelName(model.getName());
+
+      Collection<ColorSchema> schemas = new ArrayList<>();
+      schemas.add(schema);
+
+      ColorModelCommand factory = new ColorModelCommand(model, schemas, colorExtractor);
+      Map<Object, ColorSchema> map = factory.getModifiedElements();
+      assertEquals(1, map.values().size());
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
+
 }
diff --git a/model/src/main/java/lcsb/mapviewer/model/map/layout/ColorSchema.java b/model/src/main/java/lcsb/mapviewer/model/map/layout/ColorSchema.java
index 4b2c13e3e2ee5ed59bbd8ffeff5e72869170bfbb..e4a4b1f2e2e1dcfecfcefd5151066e4b4e7850df 100644
--- a/model/src/main/java/lcsb/mapviewer/model/map/layout/ColorSchema.java
+++ b/model/src/main/java/lcsb/mapviewer/model/map/layout/ColorSchema.java
@@ -8,12 +8,13 @@ import java.util.List;
 
 import lcsb.mapviewer.common.Pair;
 import lcsb.mapviewer.model.map.MiriamType;
+import lcsb.mapviewer.model.map.model.Model;
 import lcsb.mapviewer.model.map.species.Element;
 
 /**
  * Entry of coloring schema used for changing colors in the map. It allows to
- * identify some elements by use of the filters (by name, type, etcs.) and
- * contains information about the color that should be assigned to the fileter
+ * identify some elements by use of the filters (by name, type, etc.) and
+ * contains information about the color that should be assigned to the filter
  * elements.
  * 
  * @author Piotr Gawron
@@ -21,436 +22,449 @@ import lcsb.mapviewer.model.map.species.Element;
  */
 public abstract class ColorSchema implements Serializable {
 
-	/**
-	 * 
-	 */
-	private static final long							 serialVersionUID											= 1L;
-
-	/**
-	 * Name of the {@link Element Element}. If null
-	 * then this field will be skiped.
-	 */
-	private String												 name																	= null;
-
-	/**
-	 * Identifier of the reaction to change the color.
-	 */
-	private String												 reactionIdentifier										= null;
-
-	/**
-	 * Should the direction of highlighted reaction be reversed.
-	 */
-	private Boolean												 reverseReaction											= null;
-
-	/**
-	 * Width of the line in the reaction.
-	 */
-	private Double												 lineWidth														= null;
-
-	/**
-	 * In which compartments (identified by name) the element can occur.
-	 */
-	private List<String>									 compartments													= new ArrayList<String>();
-
-	/**
-	 * What types of element should be identified by this entry.
-	 */
-	private List<Class<? extends Element>>	 types																= new ArrayList<>();
-
-	/**
-	 * Value (-1..1 range) that is assigned to filtered elements (it will be
-	 * transformed into color later on). Only one of the {@link #value} and
-	 * {@link #color} can be set.
-	 */
-	private Double												 value																= null;
-
-	/**
-	 * Color that is assigned to filtered elements. Only one of the {@link #value}
-	 * and {@link #color} can be set.
-	 */
-	private Color													 color																= null;
-
-	/**
-	 * General identifier that identifies the element.
-	 */
-	private String												 generalIdentifier										= null;
-
-	/**
-	 * List of specific identifiers that filter the elements.
-	 */
-	private List<Pair<MiriamType, String>> identifierColumns										= new ArrayList<>();
-
-	/**
-	 * Number of elements matched by this entry.
-	 */
-	private int														 matches															= 0;
-
-	/**
-	 * Short description of the entry.
-	 */
-	private String												 description;
-
-	/**
-	 * Default constructor.
-	 */
-	protected ColorSchema() {
-	}
-
-	/**
-	 * Initializes object by copying data from the parameter.
-	 * 
-	 * @param original
-	 *          original object used for initialization
-	 */
-	protected ColorSchema(ColorSchema original) {
-		this.setName(original.getName());
-		this.setReactionIdentifier(original.getReactionIdentifier());
-		this.setReverseReaction(original.getReverseReaction());
-		this.setLineWidth(original.getLineWidth());
-		this.addCompartments(original.getCompartments());
-		this.addTypes(original.getTypes());
-		this.setValue(original.getValue());
-		this.setColor(original.getColor());
-		this.setGeneralIdentifier(original.getGeneralIdentifier());
-		this.addIdentifierColumns(original.getIdentifierColumns());
-		this.setMatches(original.getMatches());
-		this.setDescription(original.getDescription());
-	}
-
-	/**
-	 * Adds identifiers to {@link #identifierColumns} list.
-	 * 
-	 * @param identifierColumnsList
-	 *          list of pairs defining type of identifier and the identifier value
-	 */
-	public void addIdentifierColumns(List<Pair<MiriamType, String>> identifierColumnsList) {
-		for (Pair<MiriamType, String> pair : identifierColumnsList) {
-			addIdentifierColumn(pair);
-		}
-
-	}
-
-	/**
-	 * Adds class types to {@link #types} list.
-	 * 
-	 * @param types2
-	 *          list of classes to add
-	 */
-	public void addTypes(List<Class<? extends Element>> types2) {
-		for (Class<? extends Element> clazz : types2) {
-			addType(clazz);
-		}
-	}
-
-	/**
-	 * Adds compartment names to {@link #compartments} list.
-	 * 
-	 * @param compartments2
-	 *          elements to add
-	 */
-	public void addCompartments(String[] compartments2) {
-		for (String string : compartments2) {
-			compartments.add(string);
-		}
-	}
-
-	/**
-	 * Adds compartment names to {@link #compartments} list.
-	 * 
-	 * @param compartments2
-	 *          elements to add
-	 */
-	public void addCompartments(Collection<String> compartments2) {
-		for (String string : compartments2) {
-			compartments.add(string);
-		}
-	}
-
-	@Override
-	public String toString() {
-		StringBuilder result = new StringBuilder();
-		result.append("[");
-		if (name != null) {
-			result.append(name + ",");
-		}
-		if (compartments.size() > 0) {
-			result.append("(");
-			for (String comp : compartments) {
-				result.append(comp + ",");
-			}
-			result.append("),");
-		}
-		if (types.size() > 0) {
-			result.append("(");
-			for (Class<?> clazz : types) {
-				result.append(clazz.getSimpleName() + ",");
-			}
-			result.append("),");
-		}
-		if (value != null) {
-			result.append(value + ",");
-		}
-		if (color != null) {
-			result.append(color + ",");
-		}
-		if (generalIdentifier != null) {
-			result.append(generalIdentifier + ",");
-		}
-		if (types.size() > 0) {
-			result.append("(");
-			for (Pair<MiriamType, String> pair : identifierColumns) {
-				result.append(pair.getLeft() + "-" + pair.getRight() + ",");
-			}
-			result.append("),");
-		}
-		result.append(matches + "]");
-		return result.toString();
-	}
-
-	/**
-	 * @return the name
-	 * @see #name
-	 */
-	public String getName() {
-		return name;
-	}
-
-	/**
-	 * @param name
-	 *          the name to set
-	 * @see #name
-	 */
-	public void setName(String name) {
-		if (name == null) {
-			this.name = null;
-		} else {
-			this.name = name.trim();
-		}
-	}
-
-	/**
-	 * @return the compartments
-	 * @see #compartments
-	 */
-	public List<String> getCompartments() {
-		return compartments;
-	}
-
-	/**
-	 * @param compartments
-	 *          the compartments to set
-	 * @see #compartments
-	 */
-	public void setCompartments(List<String> compartments) {
-		this.compartments = compartments;
-	}
-
-	/**
-	 * @return the types
-	 * @see #types
-	 */
-	public List<Class<? extends Element>> getTypes() {
-		return types;
-	}
-
-	/**
-	 * @param types
-	 *          the types to set
-	 * @see #types
-	 */
-	public void setTypes(List<Class<? extends Element>> types) {
-		this.types = types;
-	}
-
-	/**
-	 * @return the value
-	 * @see #value
-	 */
-	public Double getValue() {
-		return value;
-	}
-
-	/**
-	 * @param value
-	 *          the value to set
-	 * @see #value
-	 */
-	public void setValue(Double value) {
-		this.value = value;
-	}
-
-	/**
-	 * @return the color
-	 * @see #color
-	 */
-	public Color getColor() {
-		return color;
-	}
-
-	/**
-	 * @param color
-	 *          the color to set
-	 * @see #color
-	 */
-	public void setColor(Color color) {
-		this.color = color;
-	}
-
-	/**
-	 * @return the generalIdentifier
-	 * @see #generalIdentifier
-	 */
-	public String getGeneralIdentifier() {
-		return generalIdentifier;
-	}
-
-	/**
-	 * @param generalIdentifier
-	 *          the generalIdentifier to set
-	 * @see #generalIdentifier
-	 */
-	public void setGeneralIdentifier(String generalIdentifier) {
-		this.generalIdentifier = generalIdentifier;
-	}
-
-	/**
-	 * @return the identifierColumns
-	 * @see #identifierColumns
-	 */
-	public List<Pair<MiriamType, String>> getIdentifierColumns() {
-		return identifierColumns;
-	}
-
-	/**
-	 * @param identifierColumns
-	 *          the identifierColumns to set
-	 * @see #identifierColumns
-	 */
-	public void setIdentifierColumns(List<Pair<MiriamType, String>> identifierColumns) {
-		this.identifierColumns = identifierColumns;
-	}
-
-	/**
-	 * @return the matches
-	 * @see #matches
-	 */
-	public int getMatches() {
-		return matches;
-	}
-
-	/**
-	 * @param matches
-	 *          the matches to set
-	 * @see #matches
-	 */
-	public void setMatches(int matches) {
-		this.matches = matches;
-	}
-
-	/**
-	 * Adds identifier to {@link #identifierColumns} list.
-	 * 
-	 * @param pair
-	 *          pair defining type of identifier and the identifier value
-	 */
-	public void addIdentifierColumn(Pair<MiriamType, String> pair) {
-		identifierColumns.add(pair);
-
-	}
-
-	/**
-	 * @return the reactionIdentifier
-	 * @see #reactionIdentifier
-	 */
-	public String getReactionIdentifier() {
-		return reactionIdentifier;
-	}
-
-	/**
-	 * @param reactionIdentifier
-	 *          the reactionIdentifier to set
-	 * @see #reactionIdentifier
-	 */
-	public void setReactionIdentifier(String reactionIdentifier) {
-		this.reactionIdentifier = reactionIdentifier;
-	}
-
-	/**
-	 * @return the lineWidth
-	 * @see #lineWidth
-	 */
-	public Double getLineWidth() {
-		return lineWidth;
-	}
-
-	/**
-	 * @param lineWidth
-	 *          the lineWidth to set
-	 * @see #lineWidth
-	 */
-	public void setLineWidth(Double lineWidth) {
-		this.lineWidth = lineWidth;
-	}
-
-	/**
-	 * @return the reverseReaction
-	 * @see #reverseReaction
-	 */
-	public Boolean getReverseReaction() {
-		return reverseReaction;
-	}
-
-	/**
-	 * @param reverseReaction
-	 *          the reverseReaction to set
-	 * @see #reverseReaction
-	 */
-	public void setReverseReaction(Boolean reverseReaction) {
-		this.reverseReaction = reverseReaction;
-	}
-
-	/**
-	 * Adds compartment name to {@link #compartments}.
-	 * 
-	 * @param name
-	 *          compartment name
-	 */
-	public void addCompartment(String name) {
-		compartments.add(name);
-	}
-
-	/**
-	 * Adds class type to {@link #types} list.
-	 * 
-	 * @param clazz
-	 *          class to add
-	 */
-	public void addType(Class<? extends Element> clazz) {
-		this.types.add(clazz);
-	}
-
-	/**
-	 * @return the description
-	 * @see #description
-	 */
-	public String getDescription() {
-		return description;
-	}
-
-	/**
-	 * @param description
-	 *          the description to set
-	 * @see #description
-	 */
-	public void setDescription(String description) {
-		this.description = description;
-	}
-
-	/**
-	 * Creates a copy of this object.
-	 * 
-	 * @return copy of the object
-	 */
-	public abstract ColorSchema copy();
+  /**
+   * 
+   */
+  private static final long serialVersionUID = 1L;
+
+  /**
+   * Name of the {@link Element Element}. If null then this field will be skipped.
+   */
+  private String name = null;
+
+  /**
+   * Name of the {@link Model} to which this schema should be limited. If null
+   * then this field will be skipped.
+   */
+  private String modelName = null;
+
+  /**
+   * Identifier of the reaction to change the color.
+   */
+  private String reactionIdentifier = null;
+
+  /**
+   * Should the direction of highlighted reaction be reversed.
+   */
+  private Boolean reverseReaction = null;
+
+  /**
+   * Width of the line in the reaction.
+   */
+  private Double lineWidth = null;
+
+  /**
+   * In which compartments (identified by name) the element can occur.
+   */
+  private List<String> compartments = new ArrayList<String>();
+
+  /**
+   * What types of element should be identified by this entry.
+   */
+  private List<Class<? extends Element>> types = new ArrayList<>();
+
+  /**
+   * Value (-1..1 range) that is assigned to filtered elements (it will be
+   * transformed into color later on). Only one of the {@link #value} and
+   * {@link #color} can be set.
+   */
+  private Double value = null;
+
+  /**
+   * Color that is assigned to filtered elements. Only one of the {@link #value}
+   * and {@link #color} can be set.
+   */
+  private Color color = null;
+
+  /**
+   * General identifier that identifies the element.
+   */
+  private String generalIdentifier = null;
+
+  /**
+   * List of specific identifiers that filter the elements.
+   */
+  private List<Pair<MiriamType, String>> identifierColumns = new ArrayList<>();
+
+  /**
+   * Number of elements matched by this entry.
+   */
+  private int matches = 0;
+
+  /**
+   * Short description of the entry.
+   */
+  private String description;
+
+  /**
+   * Default constructor.
+   */
+  protected ColorSchema() {
+  }
+
+  /**
+   * Initializes object by copying data from the parameter.
+   * 
+   * @param original
+   *          original object used for initialization
+   */
+  protected ColorSchema(ColorSchema original) {
+    this.setName(original.getName());
+    this.setReactionIdentifier(original.getReactionIdentifier());
+    this.setReverseReaction(original.getReverseReaction());
+    this.setLineWidth(original.getLineWidth());
+    this.addCompartments(original.getCompartments());
+    this.addTypes(original.getTypes());
+    this.setValue(original.getValue());
+    this.setColor(original.getColor());
+    this.setGeneralIdentifier(original.getGeneralIdentifier());
+    this.addIdentifierColumns(original.getIdentifierColumns());
+    this.setMatches(original.getMatches());
+    this.setDescription(original.getDescription());
+  }
+
+  /**
+   * Adds identifiers to {@link #identifierColumns} list.
+   * 
+   * @param identifierColumnsList
+   *          list of pairs defining type of identifier and the identifier value
+   */
+  public void addIdentifierColumns(List<Pair<MiriamType, String>> identifierColumnsList) {
+    for (Pair<MiriamType, String> pair : identifierColumnsList) {
+      addIdentifierColumn(pair);
+    }
+
+  }
+
+  /**
+   * Adds class types to {@link #types} list.
+   * 
+   * @param types2
+   *          list of classes to add
+   */
+  public void addTypes(List<Class<? extends Element>> types2) {
+    for (Class<? extends Element> clazz : types2) {
+      addType(clazz);
+    }
+  }
+
+  /**
+   * Adds compartment names to {@link #compartments} list.
+   * 
+   * @param compartments2
+   *          elements to add
+   */
+  public void addCompartments(String[] compartments2) {
+    for (String string : compartments2) {
+      compartments.add(string);
+    }
+  }
+
+  /**
+   * Adds compartment names to {@link #compartments} list.
+   * 
+   * @param compartments2
+   *          elements to add
+   */
+  public void addCompartments(Collection<String> compartments2) {
+    for (String string : compartments2) {
+      compartments.add(string);
+    }
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder result = new StringBuilder();
+    result.append("[");
+    if (name != null) {
+      result.append(name + ",");
+    }
+    if (compartments.size() > 0) {
+      result.append("(");
+      for (String comp : compartments) {
+        result.append(comp + ",");
+      }
+      result.append("),");
+    }
+    if (types.size() > 0) {
+      result.append("(");
+      for (Class<?> clazz : types) {
+        result.append(clazz.getSimpleName() + ",");
+      }
+      result.append("),");
+    }
+    if (value != null) {
+      result.append(value + ",");
+    }
+    if (color != null) {
+      result.append(color + ",");
+    }
+    if (generalIdentifier != null) {
+      result.append(generalIdentifier + ",");
+    }
+    if (types.size() > 0) {
+      result.append("(");
+      for (Pair<MiriamType, String> pair : identifierColumns) {
+        result.append(pair.getLeft() + "-" + pair.getRight() + ",");
+      }
+      result.append("),");
+    }
+    result.append(matches + "]");
+    return result.toString();
+  }
+
+  /**
+   * @return the name
+   * @see #name
+   */
+  public String getName() {
+    return name;
+  }
+
+  /**
+   * @param name
+   *          the name to set
+   * @see #name
+   */
+  public void setName(String name) {
+    if (name == null) {
+      this.name = null;
+    } else {
+      this.name = name.trim();
+    }
+  }
+
+  /**
+   * @return the compartments
+   * @see #compartments
+   */
+  public List<String> getCompartments() {
+    return compartments;
+  }
+
+  /**
+   * @param compartments
+   *          the compartments to set
+   * @see #compartments
+   */
+  public void setCompartments(List<String> compartments) {
+    this.compartments = compartments;
+  }
+
+  /**
+   * @return the types
+   * @see #types
+   */
+  public List<Class<? extends Element>> getTypes() {
+    return types;
+  }
+
+  /**
+   * @param types
+   *          the types to set
+   * @see #types
+   */
+  public void setTypes(List<Class<? extends Element>> types) {
+    this.types = types;
+  }
+
+  /**
+   * @return the value
+   * @see #value
+   */
+  public Double getValue() {
+    return value;
+  }
+
+  /**
+   * @param value
+   *          the value to set
+   * @see #value
+   */
+  public void setValue(Double value) {
+    this.value = value;
+  }
+
+  /**
+   * @return the color
+   * @see #color
+   */
+  public Color getColor() {
+    return color;
+  }
+
+  /**
+   * @param color
+   *          the color to set
+   * @see #color
+   */
+  public void setColor(Color color) {
+    this.color = color;
+  }
+
+  /**
+   * @return the generalIdentifier
+   * @see #generalIdentifier
+   */
+  public String getGeneralIdentifier() {
+    return generalIdentifier;
+  }
+
+  /**
+   * @param generalIdentifier
+   *          the generalIdentifier to set
+   * @see #generalIdentifier
+   */
+  public void setGeneralIdentifier(String generalIdentifier) {
+    this.generalIdentifier = generalIdentifier;
+  }
+
+  /**
+   * @return the identifierColumns
+   * @see #identifierColumns
+   */
+  public List<Pair<MiriamType, String>> getIdentifierColumns() {
+    return identifierColumns;
+  }
+
+  /**
+   * @param identifierColumns
+   *          the identifierColumns to set
+   * @see #identifierColumns
+   */
+  public void setIdentifierColumns(List<Pair<MiriamType, String>> identifierColumns) {
+    this.identifierColumns = identifierColumns;
+  }
+
+  /**
+   * @return the matches
+   * @see #matches
+   */
+  public int getMatches() {
+    return matches;
+  }
+
+  /**
+   * @param matches
+   *          the matches to set
+   * @see #matches
+   */
+  public void setMatches(int matches) {
+    this.matches = matches;
+  }
+
+  /**
+   * Adds identifier to {@link #identifierColumns} list.
+   * 
+   * @param pair
+   *          pair defining type of identifier and the identifier value
+   */
+  public void addIdentifierColumn(Pair<MiriamType, String> pair) {
+    identifierColumns.add(pair);
+
+  }
+
+  /**
+   * @return the reactionIdentifier
+   * @see #reactionIdentifier
+   */
+  public String getReactionIdentifier() {
+    return reactionIdentifier;
+  }
+
+  /**
+   * @param reactionIdentifier
+   *          the reactionIdentifier to set
+   * @see #reactionIdentifier
+   */
+  public void setReactionIdentifier(String reactionIdentifier) {
+    this.reactionIdentifier = reactionIdentifier;
+  }
+
+  /**
+   * @return the lineWidth
+   * @see #lineWidth
+   */
+  public Double getLineWidth() {
+    return lineWidth;
+  }
+
+  /**
+   * @param lineWidth
+   *          the lineWidth to set
+   * @see #lineWidth
+   */
+  public void setLineWidth(Double lineWidth) {
+    this.lineWidth = lineWidth;
+  }
+
+  /**
+   * @return the reverseReaction
+   * @see #reverseReaction
+   */
+  public Boolean getReverseReaction() {
+    return reverseReaction;
+  }
+
+  /**
+   * @param reverseReaction
+   *          the reverseReaction to set
+   * @see #reverseReaction
+   */
+  public void setReverseReaction(Boolean reverseReaction) {
+    this.reverseReaction = reverseReaction;
+  }
+
+  /**
+   * Adds compartment name to {@link #compartments}.
+   * 
+   * @param name
+   *          compartment name
+   */
+  public void addCompartment(String name) {
+    compartments.add(name);
+  }
+
+  /**
+   * Adds class type to {@link #types} list.
+   * 
+   * @param clazz
+   *          class to add
+   */
+  public void addType(Class<? extends Element> clazz) {
+    this.types.add(clazz);
+  }
+
+  /**
+   * @return the description
+   * @see #description
+   */
+  public String getDescription() {
+    return description;
+  }
+
+  /**
+   * @param description
+   *          the description to set
+   * @see #description
+   */
+  public void setDescription(String description) {
+    this.description = description;
+  }
+
+  /**
+   * Creates a copy of this object.
+   * 
+   * @return copy of the object
+   */
+  public abstract ColorSchema copy();
+
+  public String getModelName() {
+    return modelName;
+  }
+
+  public void setModelName(String modelName) {
+    this.modelName = modelName;
+  }
 
 }
diff --git a/service/src/main/java/lcsb/mapviewer/services/impl/LayoutService.java b/service/src/main/java/lcsb/mapviewer/services/impl/LayoutService.java
index 4104e98609257c909f66b8b30ac8347e1dd061e0..3e56dd04c2c760331cb683e5a3cbb1cb0bb3ad9a 100644
--- a/service/src/main/java/lcsb/mapviewer/services/impl/LayoutService.java
+++ b/service/src/main/java/lcsb/mapviewer/services/impl/LayoutService.java
@@ -792,6 +792,8 @@ public class LayoutService implements ILayoutService {
       sb.append("\t");
     } else if (column.equals(ColorSchemaColumn.NAME)) {
       sb.append(schema.getName() + "\t");
+    } else if (column.equals(ColorSchemaColumn.MODEL_NAME)) {
+      sb.append(schema.getModelName() + "\t");
     } else if (column.equals(ColorSchemaColumn.VALUE)) {
       sb.append(schema.getValue() + "\t");
     } else if (column.equals(ColorSchemaColumn.COMPARTMENT)) {
@@ -847,6 +849,8 @@ public class LayoutService implements ILayoutService {
       sb.append("\t");
     } else if (column.equals(ColorSchemaColumn.NAME)) {
       sb.append(schema.getName() + "\t");
+    } else if (column.equals(ColorSchemaColumn.MODEL_NAME)) {
+      sb.append(schema.getModelName() + "\t");
     } else if (column.equals(ColorSchemaColumn.VALUE)) {
       sb.append(schema.getValue() + "\t");
     } else if (column.equals(ColorSchemaColumn.COMPARTMENT)) {
diff --git a/service/src/main/java/lcsb/mapviewer/services/utils/ColorSchemaReader.java b/service/src/main/java/lcsb/mapviewer/services/utils/ColorSchemaReader.java
index 2f358661b267053ed1a0db66055ad48d1d5e005c..0176a0da7e7e1832c80d4e7c0c93cde974ef9066 100644
--- a/service/src/main/java/lcsb/mapviewer/services/utils/ColorSchemaReader.java
+++ b/service/src/main/java/lcsb/mapviewer/services/utils/ColorSchemaReader.java
@@ -157,6 +157,7 @@ public class ColorSchemaReader {
       Integer colorColumn = schemaColumns.get(ColorSchemaColumn.COLOR);
       Integer contigColumn = schemaColumns.get(ColorSchemaColumn.CONTIG);
       Integer nameColumn = schemaColumns.get(ColorSchemaColumn.NAME);
+      Integer modelNameColumn = schemaColumns.get(ColorSchemaColumn.MODEL_NAME);
       Integer identifierColumn = schemaColumns.get(ColorSchemaColumn.IDENTIFIER);
       Integer variantIdentifierColumn = schemaColumns.get(ColorSchemaColumn.VARIANT_IDENTIFIER);
       Integer allelFrequencyColumn = schemaColumns.get(ColorSchemaColumn.ALLEL_FREQUENCY);
@@ -202,6 +203,9 @@ public class ColorSchemaReader {
           if (nameColumn != null) {
             processNameColumn(schema, values[nameColumn]);
           }
+          if (modelNameColumn != null) {
+            processModelNameColumn(schema, values[modelNameColumn]);
+          }
           if (compartmentColumn != null) {
             processCompartmentColumn(schema, values[compartmentColumn]);
           }
@@ -328,6 +332,12 @@ public class ColorSchemaReader {
       schema.setName(content);
     }
   }
+  private void processModelNameColumn(ColorSchema schema, String content) {
+    if (!content.isEmpty()) {
+      schema.setModelName(content);
+    }
+  }
+  
 
   /**
    * Sets proper compartment names to {@link ColorSchema} from cell content.
@@ -463,6 +473,7 @@ public class ColorSchemaReader {
       Integer valueColumn = schemaColumns.get(ColorSchemaColumn.VALUE);
       Integer colorColumn = schemaColumns.get(ColorSchemaColumn.COLOR);
       Integer nameColumn = schemaColumns.get(ColorSchemaColumn.NAME);
+      Integer modelNameColumn = schemaColumns.get(ColorSchemaColumn.MODEL_NAME);
       Integer identifierColumn = schemaColumns.get(ColorSchemaColumn.IDENTIFIER);
       Integer reactionIdentifierColumn = schemaColumns.get(ColorSchemaColumn.REACTION_IDENTIFIER);
       Integer compartmentColumn = schemaColumns.get(ColorSchemaColumn.COMPARTMENT);
@@ -499,6 +510,9 @@ public class ColorSchemaReader {
         if (nameColumn != null) {
           processNameColumn(schema, values[nameColumn]);
         }
+        if (modelNameColumn != null) {
+          processModelNameColumn(schema, values[modelNameColumn]);
+        }
         if (valueColumn != null) {
           schema.setValue(parseValueColumn(values[valueColumn], errorPrefix));
         }
@@ -729,6 +743,9 @@ public class ColorSchemaReader {
       if (schema.getName() != null) {
         result.add(ColorSchemaColumn.NAME);
       }
+      if (schema.getModelName() != null) {
+        result.add(ColorSchemaColumn.MODEL_NAME);
+      }
       if (schema.getReactionIdentifier() != null) {
         result.add(ColorSchemaColumn.REACTION_IDENTIFIER);
       }
diff --git a/service/src/main/java/lcsb/mapviewer/services/utils/ColorSchemaXlsxReader.java b/service/src/main/java/lcsb/mapviewer/services/utils/ColorSchemaXlsxReader.java
index f852f697bcb65ecf669503a0bd3a3022d3010e0a..be39f1a333b1a6a9ec4e9834831ebf26574d978c 100644
--- a/service/src/main/java/lcsb/mapviewer/services/utils/ColorSchemaXlsxReader.java
+++ b/service/src/main/java/lcsb/mapviewer/services/utils/ColorSchemaXlsxReader.java
@@ -41,285 +41,302 @@ import lcsb.mapviewer.services.utils.data.ColorSchemaColumn;
  * 
  */
 public class ColorSchemaXlsxReader {
-	/**
-	 * Default class logger.
-	 */
-	@SuppressWarnings("unused")
-	private Logger logger = Logger.getLogger(ColorSchemaXlsxReader.class);
+  /**
+   * Default class logger.
+   */
+  @SuppressWarnings("unused")
+  private Logger logger = Logger.getLogger(ColorSchemaXlsxReader.class);
 
-	/**
-	 * @param fileName
-	 *          file name
-	 * @param sheetName
-	 *          sheet name.
-	 * @return list of ColorSchema.
-	 * @throws IOException
-	 *           exception related to opening the input stream.
-	 * @throws InvalidColorSchemaException
-	 *           invalid color schema exception.
-	 */
-	public Collection<ColorSchema> readColorSchema(String fileName, String sheetName) throws IOException, InvalidColorSchemaException {
-		ColorParser colorParser = new ColorParser();
-		List<ColorSchema> result = new ArrayList<>();
-		FileInputStream file = null;
-		Workbook workbook = null;
+  /**
+   * @param fileName
+   *          file name
+   * @param sheetName
+   *          sheet name.
+   * @return list of ColorSchema.
+   * @throws IOException
+   *           exception related to opening the input stream.
+   * @throws InvalidColorSchemaException
+   *           invalid color schema exception.
+   */
+  public Collection<ColorSchema> readColorSchema(String fileName, String sheetName)
+      throws IOException, InvalidColorSchemaException {
+    ColorParser colorParser = new ColorParser();
+    List<ColorSchema> result = new ArrayList<>();
+    FileInputStream file = null;
+    Workbook workbook = null;
 
-		try {
-			file = new FileInputStream(fileName);
-			// Using XSSF for xlsx format, for xls use HSSF
-			// <-Interface, accepts both HSSF and XSSF.
-			if (FilenameUtils.getExtension(fileName).equalsIgnoreCase("xls")) {
-				workbook = new HSSFWorkbook(file);
-			} else if (FilenameUtils.getExtension(fileName).equalsIgnoreCase("xlsx")) {
-				workbook = new XSSFWorkbook(file);
-			} else {
-				throw new IllegalArgumentException("Received file does not have a standard excel extension.");
-			}
-			Sheet sheet = null;
-			if (sheetName == null) {
-				sheet = workbook.getSheetAt(0);
-			} else {
-				sheet = workbook.getSheet(sheetName);
-			}
-			DataFormat fmt = workbook.createDataFormat();
-			CellStyle textStyle = workbook.createCellStyle();
-			textStyle.setDataFormat(fmt.getFormat("@"));
+    try {
+      file = new FileInputStream(fileName);
+      // Using XSSF for xlsx format, for xls use HSSF
+      // <-Interface, accepts both HSSF and XSSF.
+      if (FilenameUtils.getExtension(fileName).equalsIgnoreCase("xls")) {
+        workbook = new HSSFWorkbook(file);
+      } else if (FilenameUtils.getExtension(fileName).equalsIgnoreCase("xlsx")) {
+        workbook = new XSSFWorkbook(file);
+      } else {
+        throw new IllegalArgumentException("Received file does not have a standard excel extension.");
+      }
+      Sheet sheet = null;
+      if (sheetName == null) {
+        sheet = workbook.getSheetAt(0);
+      } else {
+        sheet = workbook.getSheet(sheetName);
+      }
+      DataFormat fmt = workbook.createDataFormat();
+      CellStyle textStyle = workbook.createCellStyle();
+      textStyle.setDataFormat(fmt.getFormat("@"));
 
-			Iterator<Row> rowIterator = sheet.iterator();
-			Integer valueColumn = null;
-			Integer colorColumn = null;
-			Integer nameColumn = null;
-			Integer identifierColumn = null;
-			Integer reactionIdentifierColumn = null;
-			Integer compartmentColumn = null;
-			Integer typeColumn = null;
-			Integer lineWidthColumn = null;
-			Integer reverseReactionColumn = null;
-			List<Pair<MiriamType, Integer>> foundCustomIdentifiers = new ArrayList<Pair<MiriamType, Integer>>();
-			int lineIndex = 0;
-			Map<ColorSchemaColumn, Integer> foundSchemaColumns = new HashMap<ColorSchemaColumn, Integer>();
-			while (rowIterator.hasNext()) {
-				Row row = rowIterator.next();
-				Cell cell = row.getCell(0, Row.RETURN_BLANK_AS_NULL);
-				if (cell == null) {
-					continue;
-				} else {
-					cell.setCellType(Cell.CELL_TYPE_STRING);
-					if (cell.getStringCellValue().startsWith("#")) {
-						continue;
-					}
-				}
-				lineIndex++;
-				if (lineIndex == 1) {
+      Iterator<Row> rowIterator = sheet.iterator();
+      Integer valueColumn = null;
+      Integer colorColumn = null;
+      Integer nameColumn = null;
+      Integer modelNameColumn = null;
+      Integer identifierColumn = null;
+      Integer reactionIdentifierColumn = null;
+      Integer compartmentColumn = null;
+      Integer typeColumn = null;
+      Integer lineWidthColumn = null;
+      Integer reverseReactionColumn = null;
+      List<Pair<MiriamType, Integer>> foundCustomIdentifiers = new ArrayList<Pair<MiriamType, Integer>>();
+      int lineIndex = 0;
+      Map<ColorSchemaColumn, Integer> foundSchemaColumns = new HashMap<ColorSchemaColumn, Integer>();
+      while (rowIterator.hasNext()) {
+        Row row = rowIterator.next();
+        Cell cell = row.getCell(0, Row.RETURN_BLANK_AS_NULL);
+        if (cell == null) {
+          continue;
+        } else {
+          cell.setCellType(Cell.CELL_TYPE_STRING);
+          if (cell.getStringCellValue().startsWith("#")) {
+            continue;
+          }
+        }
+        lineIndex++;
+        if (lineIndex == 1) {
 
-					Map<String, MiriamType> acceptableIdentifiers = new HashMap<String, MiriamType>();
-					for (MiriamType type : MiriamType.values()) {
-						acceptableIdentifiers.put(type.getCommonName().toLowerCase(), type);
-					}
+          Map<String, MiriamType> acceptableIdentifiers = new HashMap<String, MiriamType>();
+          for (MiriamType type : MiriamType.values()) {
+            acceptableIdentifiers.put(type.getCommonName().toLowerCase(), type);
+          }
 
-					Iterator<Cell> cellIterator = row.cellIterator();
-					int columnIndex = 0;
-					while (cellIterator.hasNext()) {
-						columnIndex++;
-						sheet.setDefaultColumnStyle(columnIndex, textStyle);
-						cell = cellIterator.next();
-						cell.setCellType(Cell.CELL_TYPE_STRING);
-						String value = cell.getStringCellValue();
-						boolean found = false;
-						for (ColorSchemaColumn schemaColumn : ColorSchemaColumn.values()) {
-							if (value.trim().equalsIgnoreCase(schemaColumn.getTitle())) {
-								foundSchemaColumns.put(schemaColumn, columnIndex - 1);
-								found = true;
-								break;
-							}
-						}
-						if (!found) {
-							if (acceptableIdentifiers.keySet().contains(value.toLowerCase())) {
-								foundCustomIdentifiers.add(new Pair<MiriamType, Integer>(acceptableIdentifiers.get(value.toLowerCase()), columnIndex - 1));
-							} else {
-								String columnNames = "";
-								for (ColorSchemaColumn schemaColumn : ColorSchemaColumn.values()) {
-									columnNames += schemaColumn.getTitle() + ", ";
-								}
-								for (String string : acceptableIdentifiers.keySet()) {
-									columnNames += ", " + string;
-								}
-								throw new InvalidColorSchemaException("Unknown column type: " + value + ". Acceptable column name: " + columnNames);
-							}
-						}
-					}
-					valueColumn = foundSchemaColumns.get(ColorSchemaColumn.VALUE);
-					colorColumn = foundSchemaColumns.get(ColorSchemaColumn.COLOR);
-					nameColumn = foundSchemaColumns.get(ColorSchemaColumn.NAME);
-					identifierColumn = foundSchemaColumns.get(ColorSchemaColumn.IDENTIFIER);
-					reactionIdentifierColumn = foundSchemaColumns.get(ColorSchemaColumn.REACTION_IDENTIFIER);
-					compartmentColumn = foundSchemaColumns.get(ColorSchemaColumn.COMPARTMENT);
-					typeColumn = foundSchemaColumns.get(ColorSchemaColumn.TYPE);
-					lineWidthColumn = foundSchemaColumns.get(ColorSchemaColumn.LINE_WIDTH);
-					reverseReactionColumn = foundSchemaColumns.get(ColorSchemaColumn.REVERSE_REACTION);
+          Iterator<Cell> cellIterator = row.cellIterator();
+          int columnIndex = 0;
+          while (cellIterator.hasNext()) {
+            columnIndex++;
+            sheet.setDefaultColumnStyle(columnIndex, textStyle);
+            cell = cellIterator.next();
+            cell.setCellType(Cell.CELL_TYPE_STRING);
+            String value = cell.getStringCellValue();
+            boolean found = false;
+            for (ColorSchemaColumn schemaColumn : ColorSchemaColumn.values()) {
+              if (value.trim().equalsIgnoreCase(schemaColumn.getTitle())) {
+                foundSchemaColumns.put(schemaColumn, columnIndex - 1);
+                found = true;
+                break;
+              }
+            }
+            if (!found) {
+              if (acceptableIdentifiers.keySet().contains(value.toLowerCase())) {
+                foundCustomIdentifiers.add(
+                    new Pair<MiriamType, Integer>(acceptableIdentifiers.get(value.toLowerCase()), columnIndex - 1));
+              } else {
+                String columnNames = "";
+                for (ColorSchemaColumn schemaColumn : ColorSchemaColumn.values()) {
+                  columnNames += schemaColumn.getTitle() + ", ";
+                }
+                for (String string : acceptableIdentifiers.keySet()) {
+                  columnNames += ", " + string;
+                }
+                throw new InvalidColorSchemaException(
+                    "Unknown column type: " + value + ". Acceptable column name: " + columnNames);
+              }
+            }
+          }
+          valueColumn = foundSchemaColumns.get(ColorSchemaColumn.VALUE);
+          colorColumn = foundSchemaColumns.get(ColorSchemaColumn.COLOR);
+          nameColumn = foundSchemaColumns.get(ColorSchemaColumn.NAME);
+          modelNameColumn = foundSchemaColumns.get(ColorSchemaColumn.MODEL_NAME);
+          identifierColumn = foundSchemaColumns.get(ColorSchemaColumn.IDENTIFIER);
+          reactionIdentifierColumn = foundSchemaColumns.get(ColorSchemaColumn.REACTION_IDENTIFIER);
+          compartmentColumn = foundSchemaColumns.get(ColorSchemaColumn.COMPARTMENT);
+          typeColumn = foundSchemaColumns.get(ColorSchemaColumn.TYPE);
+          lineWidthColumn = foundSchemaColumns.get(ColorSchemaColumn.LINE_WIDTH);
+          reverseReactionColumn = foundSchemaColumns.get(ColorSchemaColumn.REVERSE_REACTION);
 
-					if (valueColumn != null && colorColumn != null) {
-						throw new InvalidColorSchemaException("Schema can contain only one of these two columns: ");
-					}
+          if (valueColumn != null && colorColumn != null) {
+            throw new InvalidColorSchemaException("Schema can contain only one of these two columns: ");
+          }
 
-					if (nameColumn == null && identifierColumn == null && foundCustomIdentifiers.size() == 0 && reactionIdentifierColumn == null) {
-						throw new InvalidColorSchemaException("One of these columns is obligatory: name, identifier, reactionIdentifier");
-					}
+          if (nameColumn == null && identifierColumn == null && foundCustomIdentifiers.size() == 0
+              && reactionIdentifierColumn == null) {
+            throw new InvalidColorSchemaException(
+                "One of these columns is obligatory: name, identifier, reactionIdentifier");
+          }
 
-					if (valueColumn == null && colorColumn == null) {
-						throw new InvalidColorSchemaException("Schema must contain one of these two columns: value, name");
-					}
+          if (valueColumn == null && colorColumn == null) {
+            throw new InvalidColorSchemaException("Schema must contain one of these two columns: value, name");
+          }
 
-				} else {
-					ColorSchema schema = new GenericColorSchema();
-					if (nameColumn != null) {
-						schema.setName(row.getCell(nameColumn).getStringCellValue());
-					}
-					if (valueColumn != null) {
-						try {
-							cell = row.getCell(valueColumn);
-							cell.setCellType(Cell.CELL_TYPE_STRING);
-							schema.setValue(Double.parseDouble(cell.getStringCellValue().replace(",", ".")));
-						} catch (Exception e) {
-							throw new InvalidColorSchemaException("[Line " + lineIndex + "] Problem with parsing value for value column. Cell value" + cell);
-						}
-						if (schema.getValue() > 1 + Configuration.EPSILON || schema.getValue() < -1 - Configuration.EPSILON) {
-							throw new InvalidColorSchemaException(
-									"[Line " + lineIndex + "] Value " + schema.getValue() + " out of range. Only values between -1 and 1 are allowed.");
-						}
-					}
-					if (compartmentColumn != null) {
-						String value = row.getCell(compartmentColumn).getStringCellValue();
-						if (value != null) {
-							String[] compartments = value.split(",");
-							schema.addCompartments(compartments);
-						}
-					}
-					if (typeColumn != null) {
-						String value = row.getCell(typeColumn).getStringCellValue();
-						if (value != null) {
-							String[] types = value.split(",");
-							for (String string : types) {
-								SpeciesMapping mapping = SpeciesMapping.getMappingByString(string);
-								if (mapping != null) {
-									schema.addType(mapping.getModelClazz());
-								} else {
-									throw new InvalidColorSchemaException("Unknown class type: " + string + ".");
-								}
-							}
-						}
-					}
-					if (colorColumn != null) {
-						schema.setColor(colorParser.parse(row.getCell(colorColumn).getStringCellValue()));
-					}
-					if (reactionIdentifierColumn != null) {
-						schema.setReactionIdentifier(row.getCell(reactionIdentifierColumn).getStringCellValue());
-					}
-					if (lineWidthColumn != null) {
-						cell = row.getCell(lineWidthColumn);
-						cell.setCellType(Cell.CELL_TYPE_STRING);
-						String value = cell.getStringCellValue();
-						if (value != null && !value.trim().isEmpty()) {
-							try {
-								schema.setLineWidth(Double.parseDouble(value.replace(",", ".")));
-							} catch (NumberFormatException e) {
-								throw new InvalidColorSchemaException("[Line " + lineIndex + "] Problem with parsing value: \"" + value + "\"");
-							}
-						}
-					}
-					if (reverseReactionColumn != null) {
-						cell = row.getCell(reverseReactionColumn);
-						if (cell != null) {
-							cell.setCellType(Cell.CELL_TYPE_STRING);
-							schema.setReverseReaction("true".equalsIgnoreCase(cell.getStringCellValue()));
-						}
-					}
-					if (identifierColumn != null) {
-						cell = row.getCell(identifierColumn);
-						if (cell != null && !cell.getStringCellValue().trim().isEmpty()) {
-							MiriamConnector miriamConnector = new MiriamConnector();
-							String value = cell.getStringCellValue().trim();
-							if (miriamConnector.isValidIdentifier(value)) {
-								schema.setGeneralIdentifier(value);
-							} else {
-								throw new InvalidColorSchemaException("[Line " + lineIndex + "]" + " Invalid identifier: " + value);
-							}
-						}
-					}
-					for (Pair<MiriamType, Integer> pair : foundCustomIdentifiers) {
-						cell = row.getCell(pair.getRight());
-						if (cell != null) {
-							schema.addIdentifierColumn(new Pair<MiriamType, String>(pair.getLeft(), cell.getStringCellValue()));
-						}
-					}
+        } else {
+          ColorSchema schema = new GenericColorSchema();
+          if (nameColumn != null) {
+            schema.setName(row.getCell(nameColumn).getStringCellValue());
+          }
+          if (modelNameColumn != null) {
+            schema.setModelName(row.getCell(modelNameColumn).getStringCellValue());
+          }
+          if (valueColumn != null) {
+            try {
+              cell = row.getCell(valueColumn);
+              cell.setCellType(Cell.CELL_TYPE_STRING);
+              schema.setValue(Double.parseDouble(cell.getStringCellValue().replace(",", ".")));
+            } catch (Exception e) {
+              throw new InvalidColorSchemaException(
+                  "[Line " + lineIndex + "] Problem with parsing value for value column. Cell value" + cell);
+            }
+            if (schema.getValue() > 1 + Configuration.EPSILON || schema.getValue() < -1 - Configuration.EPSILON) {
+              throw new InvalidColorSchemaException("[Line " + lineIndex + "] Value " + schema.getValue()
+                  + " out of range. Only values between -1 and 1 are allowed.");
+            }
+          }
+          if (compartmentColumn != null) {
+            String value = row.getCell(compartmentColumn).getStringCellValue();
+            if (value != null) {
+              String[] compartments = value.split(",");
+              schema.addCompartments(compartments);
+            }
+          }
+          if (typeColumn != null) {
+            String value = row.getCell(typeColumn).getStringCellValue();
+            if (value != null) {
+              String[] types = value.split(",");
+              for (String string : types) {
+                SpeciesMapping mapping = SpeciesMapping.getMappingByString(string);
+                if (mapping != null) {
+                  schema.addType(mapping.getModelClazz());
+                } else {
+                  throw new InvalidColorSchemaException("Unknown class type: " + string + ".");
+                }
+              }
+            }
+          }
+          if (colorColumn != null) {
+            schema.setColor(colorParser.parse(row.getCell(colorColumn).getStringCellValue()));
+          }
+          if (reactionIdentifierColumn != null) {
+            schema.setReactionIdentifier(row.getCell(reactionIdentifierColumn).getStringCellValue());
+          }
+          if (lineWidthColumn != null) {
+            cell = row.getCell(lineWidthColumn);
+            cell.setCellType(Cell.CELL_TYPE_STRING);
+            String value = cell.getStringCellValue();
+            if (value != null && !value.trim().isEmpty()) {
+              try {
+                schema.setLineWidth(Double.parseDouble(value.replace(",", ".")));
+              } catch (NumberFormatException e) {
+                throw new InvalidColorSchemaException(
+                    "[Line " + lineIndex + "] Problem with parsing value: \"" + value + "\"");
+              }
+            }
+          }
+          if (reverseReactionColumn != null) {
+            cell = row.getCell(reverseReactionColumn);
+            if (cell != null) {
+              cell.setCellType(Cell.CELL_TYPE_STRING);
+              schema.setReverseReaction("true".equalsIgnoreCase(cell.getStringCellValue()));
+            }
+          }
+          if (identifierColumn != null) {
+            cell = row.getCell(identifierColumn);
+            if (cell != null && !cell.getStringCellValue().trim().isEmpty()) {
+              MiriamConnector miriamConnector = new MiriamConnector();
+              String value = cell.getStringCellValue().trim();
+              if (miriamConnector.isValidIdentifier(value)) {
+                schema.setGeneralIdentifier(value);
+              } else {
+                throw new InvalidColorSchemaException("[Line " + lineIndex + "]" + " Invalid identifier: " + value);
+              }
+            }
+          }
+          for (Pair<MiriamType, Integer> pair : foundCustomIdentifiers) {
+            cell = row.getCell(pair.getRight());
+            if (cell != null) {
+              schema.addIdentifierColumn(new Pair<MiriamType, String>(pair.getLeft(), cell.getStringCellValue()));
+            }
+          }
 
-					if ((schema.getValue() != null && schema.getColor() != null) || (schema.getValue() == null && schema.getColor() == null)) {
-						throw new InvalidColorSchemaException("Value or Color is needed not both");
-					}
+          if ((schema.getValue() != null && schema.getColor() != null)
+              || (schema.getValue() == null && schema.getColor() == null)) {
+            throw new InvalidColorSchemaException("Value or Color is needed not both");
+          }
 
-					if (schema.getName() == null && schema.getGeneralIdentifier() == null && foundCustomIdentifiers.size() == 0
-							&& schema.getReactionIdentifier() == null) {
-						throw new InvalidColorSchemaException("One of these columns values is obligatory: name, identifier, reactionIdentifier");
-					}
-					result.add(schema);
-				}
-			}
-		} finally {
-			try {
-				if (file != null) {
-					file.close();
-				}
-				if (workbook != null) {
-					workbook.close();
-				}
-			} catch (Exception e) {
+          if (schema.getName() == null && schema.getGeneralIdentifier() == null && foundCustomIdentifiers.size() == 0
+              && schema.getReactionIdentifier() == null) {
+            throw new InvalidColorSchemaException(
+                "One of these columns values is obligatory: name, identifier, reactionIdentifier");
+          }
+          result.add(schema);
+        }
+      }
+    } finally {
+      try {
+        if (file != null) {
+          file.close();
+        }
+        if (workbook != null) {
+          workbook.close();
+        }
+      } catch (Exception e) {
 
-			}
-		}
-		return result;
+      }
+    }
+    return result;
 
-	}
+  }
 
-	/**
-	 * Returns list of columns that should be printed for given coloring schemas.
-	 * 
-	 * @param schemas
-	 *          list of schemas
-	 * @return list of columns that should be printed (were set in the coloring
-	 *         schemas)
-	 */
-	public Collection<ColorSchemaColumn> getSetColorSchemaColumns(Collection<ColorSchema> schemas) {
-		Set<ColorSchemaColumn> result = new HashSet<ColorSchemaColumn>();
-		for (ColorSchema schema : schemas) {
-			if (schema.getColor() != null) {
-				result.add(ColorSchemaColumn.COLOR);
-			}
-			if (schema.getCompartments().size() > 0) {
-				result.add(ColorSchemaColumn.COMPARTMENT);
-			}
-			if (schema.getGeneralIdentifier() != null || schema.getIdentifierColumns().size() > 0) {
-				result.add(ColorSchemaColumn.IDENTIFIER);
-			}
-			if (schema.getLineWidth() != null) {
-				result.add(ColorSchemaColumn.LINE_WIDTH);
-			}
-			if (schema.getName() != null) {
-				result.add(ColorSchemaColumn.NAME);
-			}
-			if (schema.getReactionIdentifier() != null) {
-				result.add(ColorSchemaColumn.REACTION_IDENTIFIER);
-			}
-			if (schema.getReverseReaction() != null) {
-				result.add(ColorSchemaColumn.REVERSE_REACTION);
-			}
-			if (schema.getTypes().size() > 0) {
-				result.add(ColorSchemaColumn.TYPE);
-			}
-			if (schema.getValue() != null) {
-				result.add(ColorSchemaColumn.VALUE);
-			}
-		}
-		return result;
-	}
+  /**
+   * Returns list of columns that should be printed for given coloring schemas.
+   * 
+   * @param schemas
+   *          list of schemas
+   * @return list of columns that should be printed (were set in the coloring
+   *         schemas)
+   */
+  public Collection<ColorSchemaColumn> getSetColorSchemaColumns(Collection<ColorSchema> schemas) {
+    Set<ColorSchemaColumn> result = new HashSet<ColorSchemaColumn>();
+    for (ColorSchema schema : schemas) {
+      if (schema.getColor() != null) {
+        result.add(ColorSchemaColumn.COLOR);
+      }
+      if (schema.getCompartments().size() > 0) {
+        result.add(ColorSchemaColumn.COMPARTMENT);
+      }
+      if (schema.getGeneralIdentifier() != null || schema.getIdentifierColumns().size() > 0) {
+        result.add(ColorSchemaColumn.IDENTIFIER);
+      }
+      if (schema.getLineWidth() != null) {
+        result.add(ColorSchemaColumn.LINE_WIDTH);
+      }
+      if (schema.getName() != null) {
+        result.add(ColorSchemaColumn.NAME);
+      }
+      if (schema.getModelName() != null) {
+        result.add(ColorSchemaColumn.MODEL_NAME);
+      }
+      if (schema.getReactionIdentifier() != null) {
+        result.add(ColorSchemaColumn.REACTION_IDENTIFIER);
+      }
+      if (schema.getReverseReaction() != null) {
+        result.add(ColorSchemaColumn.REVERSE_REACTION);
+      }
+      if (schema.getTypes().size() > 0) {
+        result.add(ColorSchemaColumn.TYPE);
+      }
+      if (schema.getValue() != null) {
+        result.add(ColorSchemaColumn.VALUE);
+      }
+    }
+    return result;
+  }
 
 }
diff --git a/service/src/main/java/lcsb/mapviewer/services/utils/data/ColorSchemaColumn.java b/service/src/main/java/lcsb/mapviewer/services/utils/data/ColorSchemaColumn.java
index 6792e10ef5b0ebff44da960be6ad99a953e9ab1f..a5a4025546064af5b3c53c2b64941f900d7408b5 100644
--- a/service/src/main/java/lcsb/mapviewer/services/utils/data/ColorSchemaColumn.java
+++ b/service/src/main/java/lcsb/mapviewer/services/utils/data/ColorSchemaColumn.java
@@ -3,7 +3,6 @@ package lcsb.mapviewer.services.utils.data;
 import java.util.HashSet;
 import java.util.Set;
 
-
 import lcsb.mapviewer.model.map.layout.ReferenceGenome;
 import lcsb.mapviewer.model.map.layout.ReferenceGenomeType;
 
@@ -16,136 +15,141 @@ import lcsb.mapviewer.model.map.layout.ReferenceGenomeType;
  */
 public enum ColorSchemaColumn {
 
-	/**
-	 * Name of the element.
-	 */
-	NAME("name", new ColorSchemaType[] { ColorSchemaType.GENERIC, ColorSchemaType.GENETIC_VARIANT }), //
-
-	/**
-	 * Value that will be transformed into new color.
-	 * 
-	 * @see ColorSchemaColumn#COLOR
-	 */
-	VALUE("value", new ColorSchemaType[] { ColorSchemaType.GENERIC }), //
-
-	/**
-	 * In which compartment the element should be located.
-	 */
-	COMPARTMENT("compartment", new ColorSchemaType[] { ColorSchemaType.GENERIC, ColorSchemaType.GENETIC_VARIANT }), //
-
-	/**
-	 * Class type of the element.
-	 */
-	TYPE("type", new ColorSchemaType[] { ColorSchemaType.GENERIC, ColorSchemaType.GENETIC_VARIANT }), //
-
-	/**
-	 * New element/reaction color.
-	 */
-	COLOR("color", new ColorSchemaType[] { ColorSchemaType.GENERIC, ColorSchemaType.GENETIC_VARIANT }), //
-
-	/**
-	 * Identifier of the element.
-	 */
-	IDENTIFIER("identifier", new ColorSchemaType[] { ColorSchemaType.GENERIC, ColorSchemaType.GENETIC_VARIANT }), //
-
-	/**
-	 * Reaction identifier.
-	 */
-	REACTION_IDENTIFIER("reactionIdentifier", new ColorSchemaType[] { ColorSchemaType.GENERIC }), //
-
-	/**
-	 * New line width of the reaction.
-	 */
-	LINE_WIDTH("lineWidth", new ColorSchemaType[] { ColorSchemaType.GENERIC }), //
-
-	/**
-	 * Position where gene variants starts.
-	 */
-	POSITION("position", new ColorSchemaType[] { ColorSchemaType.GENETIC_VARIANT }), //
-
-	/**
-	 * Original DNA of the variant.
-	 */
-	ORIGINAL_DNA("original_dna", new ColorSchemaType[] { ColorSchemaType.GENETIC_VARIANT }), //
-
-	/**
-	 * Alternative DNA of the variant.
-	 */
-	ALTERNATIVE_DNA("alternative_dna", new ColorSchemaType[] { ColorSchemaType.GENETIC_VARIANT }), //
-
-	/**
-	 * Short description of the entry.
-	 */
-	DESCRIPTION("description", new ColorSchemaType[] { ColorSchemaType.GENETIC_VARIANT, ColorSchemaType.GENERIC }), //
-
-	/**
-	 * Variant references.
-	 */
-	REFERENCES("references", new ColorSchemaType[] { ColorSchemaType.GENETIC_VARIANT }), //
-
-	/**
-	 * What's the {@link ReferenceGenomeType}.
-	 */
-	REFERENCE_GENOME_TYPE("reference_genome_type", new ColorSchemaType[] { ColorSchemaType.GENETIC_VARIANT }), //
-
-	/**
-	 * {@link ReferenceGenome#version Version} of the reference genome.
-	 */
-	REFERENCE_GENOME_VERSION("reference_genome_version", new ColorSchemaType[] { ColorSchemaType.GENETIC_VARIANT }), //
-
-	/**
-	 * Contig where variant was observed.
-	 */
-	CONTIG("contig", new ColorSchemaType[] { ColorSchemaType.GENETIC_VARIANT }), //
-	
-	ALLEL_FREQUENCY("allel_frequency", new ColorSchemaType[] { ColorSchemaType.GENETIC_VARIANT }), //
-	
-	VARIANT_IDENTIFIER("variant_identifier", new ColorSchemaType[] { ColorSchemaType.GENETIC_VARIANT }), //
-
-	/**
-	 * Should the direction of reaction be reversed.
-	 */
-	REVERSE_REACTION("reverseReaction", new ColorSchemaType[] { ColorSchemaType.GENERIC }); //
-
-	/**
-	 * Default constructor that creates enum entry.
-	 * 
-	 * @param title
-	 *          {@link #title}
-	 * @param types
-	 *          list of {@link ColumnType types} where this column is allowed
-	 */
-	ColorSchemaColumn(String title, ColorSchemaType[] types) {
-		this.title = title;
-		for (ColorSchemaType colorSchemaType : types) {
-			this.types.add(colorSchemaType);
-		}
-	}
-
-	/**
-	 * Human readable title used in input file.
-	 */
-	private String							 title;
-
-	/**
-	 * Set of types where column is allowed.
-	 */
-	private Set<ColorSchemaType> types = new HashSet<>();
-
-	/**
-	 * 
-	 * @return {@link #title}
-	 */
-	public String getTitle() {
-		return title;
-	}
-
-	/**
-	 * @return the types
-	 * @see #types
-	 */
-	public Set<ColorSchemaType> getTypes() {
-		return types;
-	}
+  /**
+   * Name of the element.
+   */
+  NAME("name", new ColorSchemaType[] { ColorSchemaType.GENERIC, ColorSchemaType.GENETIC_VARIANT }), //
+
+  /**
+   * Name of the element.
+   */
+  MODEL_NAME("model_name", new ColorSchemaType[] { ColorSchemaType.GENERIC, ColorSchemaType.GENETIC_VARIANT }), //
+
+  /**
+   * Value that will be transformed into new color.
+   * 
+   * @see ColorSchemaColumn#COLOR
+   */
+  VALUE("value", new ColorSchemaType[] { ColorSchemaType.GENERIC }), //
+
+  /**
+   * In which compartment the element should be located.
+   */
+  COMPARTMENT("compartment", new ColorSchemaType[] { ColorSchemaType.GENERIC, ColorSchemaType.GENETIC_VARIANT }), //
+
+  /**
+   * Class type of the element.
+   */
+  TYPE("type", new ColorSchemaType[] { ColorSchemaType.GENERIC, ColorSchemaType.GENETIC_VARIANT }), //
+
+  /**
+   * New element/reaction color.
+   */
+  COLOR("color", new ColorSchemaType[] { ColorSchemaType.GENERIC, ColorSchemaType.GENETIC_VARIANT }), //
+
+  /**
+   * Identifier of the element.
+   */
+  IDENTIFIER("identifier", new ColorSchemaType[] { ColorSchemaType.GENERIC, ColorSchemaType.GENETIC_VARIANT }), //
+
+  /**
+   * Reaction identifier.
+   */
+  REACTION_IDENTIFIER("reactionIdentifier", new ColorSchemaType[] { ColorSchemaType.GENERIC }), //
+
+  /**
+   * New line width of the reaction.
+   */
+  LINE_WIDTH("lineWidth", new ColorSchemaType[] { ColorSchemaType.GENERIC }), //
+
+  /**
+   * Position where gene variants starts.
+   */
+  POSITION("position", new ColorSchemaType[] { ColorSchemaType.GENETIC_VARIANT }), //
+
+  /**
+   * Original DNA of the variant.
+   */
+  ORIGINAL_DNA("original_dna", new ColorSchemaType[] { ColorSchemaType.GENETIC_VARIANT }), //
+
+  /**
+   * Alternative DNA of the variant.
+   */
+  ALTERNATIVE_DNA("alternative_dna", new ColorSchemaType[] { ColorSchemaType.GENETIC_VARIANT }), //
+
+  /**
+   * Short description of the entry.
+   */
+  DESCRIPTION("description", new ColorSchemaType[] { ColorSchemaType.GENETIC_VARIANT, ColorSchemaType.GENERIC }), //
+
+  /**
+   * Variant references.
+   */
+  REFERENCES("references", new ColorSchemaType[] { ColorSchemaType.GENETIC_VARIANT }), //
+
+  /**
+   * What's the {@link ReferenceGenomeType}.
+   */
+  REFERENCE_GENOME_TYPE("reference_genome_type", new ColorSchemaType[] { ColorSchemaType.GENETIC_VARIANT }), //
+
+  /**
+   * {@link ReferenceGenome#version Version} of the reference genome.
+   */
+  REFERENCE_GENOME_VERSION("reference_genome_version", new ColorSchemaType[] { ColorSchemaType.GENETIC_VARIANT }), //
+
+  /**
+   * Contig where variant was observed.
+   */
+  CONTIG("contig", new ColorSchemaType[] { ColorSchemaType.GENETIC_VARIANT }), //
+
+  ALLEL_FREQUENCY("allel_frequency", new ColorSchemaType[] { ColorSchemaType.GENETIC_VARIANT }), //
+
+  VARIANT_IDENTIFIER("variant_identifier", new ColorSchemaType[] { ColorSchemaType.GENETIC_VARIANT }), //
+
+  /**
+   * Should the direction of reaction be reversed.
+   */
+  REVERSE_REACTION("reverseReaction", new ColorSchemaType[] { ColorSchemaType.GENERIC }); //
+
+  /**
+   * Default constructor that creates enum entry.
+   * 
+   * @param title
+   *          {@link #title}
+   * @param types
+   *          list of {@link ColumnType types} where this column is allowed
+   */
+  ColorSchemaColumn(String title, ColorSchemaType[] types) {
+    this.title = title;
+    for (ColorSchemaType colorSchemaType : types) {
+      this.types.add(colorSchemaType);
+    }
+  }
+
+  /**
+   * Human readable title used in input file.
+   */
+  private String title;
+
+  /**
+   * Set of types where column is allowed.
+   */
+  private Set<ColorSchemaType> types = new HashSet<>();
+
+  /**
+   * 
+   * @return {@link #title}
+   */
+  public String getTitle() {
+    return title;
+  }
+
+  /**
+   * @return the types
+   * @see #types
+   */
+  public Set<ColorSchemaType> getTypes() {
+    return types;
+  }
 
 }