diff --git a/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/AnnotatorParamDefinition.java b/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/AnnotatorParamDefinition.java
new file mode 100644
index 0000000000000000000000000000000000000000..c3c3bda40c3f482c05713c8be1fd18f2a8e69233
--- /dev/null
+++ b/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/AnnotatorParamDefinition.java
@@ -0,0 +1,35 @@
+package lcsb.mapviewer.annotation.services.annotators;
+
+/**
+ * Definition of a single parameter of an annotator.
+ * 
+ * @author David Hoksza
+ * 
+ */
+public class AnnotatorParamDefinition {
+	private String name;
+	
+	private String decription;
+	
+	private Class<?> type;
+
+	public AnnotatorParamDefinition(String name, String decription, Class<?> type) {
+		super();
+		this.name = name;
+		this.decription = decription;
+		this.type = type;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public String getDecription() {
+		return decription;
+	}
+
+	public Class<?> getType() {
+		return type;
+	}	
+
+}
diff --git a/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/ChebiAnnotator.java b/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/ChebiAnnotator.java
index 224ea171fb2987b6d291766a083a9954650e342a..b526374026678105928dd5fd72282935b7df8687 100644
--- a/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/ChebiAnnotator.java
+++ b/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/ChebiAnnotator.java
@@ -178,14 +178,14 @@ public class ChebiAnnotator extends ElementAnnotator implements IExternalService
           String synonym = dataItem.getData();
           if (synonym.trim().equalsIgnoreCase(name)) {
             setCacheValue("name: " + name, entity.getChebiId());
-            return new MiriamData(MiriamType.CHEBI, entity.getChebiId());
+            return createMiriamData(MiriamType.CHEBI, entity.getChebiId());
           }
         }
         for (DataItem dataItem : entity.getSynonyms()) {
           String synonym = dataItem.getData();
           if (synonym.trim().equalsIgnoreCase(name)) {
             setCacheValue("name: " + name, entity.getChebiId());
-            return new MiriamData(MiriamType.CHEBI, entity.getChebiId());
+            return createMiriamData(MiriamType.CHEBI, entity.getChebiId());
           }
         }
       }
@@ -197,14 +197,14 @@ public class ChebiAnnotator extends ElementAnnotator implements IExternalService
           String formula = dataItem.getData();
           if (formula.trim().equalsIgnoreCase(name)) {
             setCacheValue("name: " + name, entity.getChebiId());
-            return new MiriamData(MiriamType.CHEBI, entity.getChebiId());
+            return createMiriamData(MiriamType.CHEBI, entity.getChebiId());
           }
         }
         for (DataItem dataItem : entity.getSynonyms()) {
           String synonym = dataItem.getData();
           if (synonym.trim().equalsIgnoreCase(name)) {
             setCacheValue("name: " + name, entity.getChebiId());
-            return new MiriamData(MiriamType.CHEBI, entity.getChebiId());
+            return createMiriamData(MiriamType.CHEBI, entity.getChebiId());
           }
         }
       }
diff --git a/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/ElementAnnotator.java b/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/ElementAnnotator.java
index 98da3ebf29d5de24675d8d33d5500213349330f5..26a8389a2f8caa2543514331a23a305dc256700b 100644
--- a/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/ElementAnnotator.java
+++ b/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/ElementAnnotator.java
@@ -44,6 +44,11 @@ public abstract class ElementAnnotator extends CachableInterface {
 	 * Should be this annotator used as a default annotator.
 	 */
 	private boolean																 isDefault		= false;
+	
+	/**
+	 * Parameters which this annotator can be provided. Should be set in constructor.
+	 */
+	protected List<AnnotatorParamDefinition> 											paramsDefs		= new ArrayList<>();
 
 	/**
 	 * Default constructor.
@@ -78,6 +83,22 @@ public abstract class ElementAnnotator extends CachableInterface {
 	 *           data
 	 */
 	public abstract void annotateElement(BioEntity element) throws AnnotatorException;
+	
+	/**
+	 * Annotate element using parameters.
+	 * 
+	 * @param element
+	 *          object to be annotated
+	 * @param parameters
+	 * 			list of parameters passed to the annotator which is expected to
+	 * 			be in the same order as its {@link this#parameterDefs}
+	 * @throws AnnotatorException
+	 *           thrown when there is a problem with annotating not related to
+	 *           data
+	 */
+	public void annotateElement(BioEntity element, List<Object> parameters) throws AnnotatorException {
+		annotateElement(element);
+	}
 
 	/**
 	 * Returns a list of all classes that can be annotated using this annotator.
@@ -130,6 +151,42 @@ public abstract class ElementAnnotator extends CachableInterface {
 	 * @return url
 	 */
 	public abstract String getUrl();
+	
+	
+	/**
+	 * Provides description for {@link ElementAnnotator} and {@link MiriamType} pair
+	 * to be used in the frontend.
+	 * @param mt 
+	 * 		{@link MiriamType} annotated by this annotator.
+	 * @return 
+	 * 		the description
+	 */
+	public String getDescription(MiriamType mt){
+		return "";		
+	}
+
+	/**
+	 * Provides description for {@link ElementAnnotator}, {@link MiriamType} and
+	 * {@link MiriamRelationType} triplet to be used in the frontend.
+	 * @param mt 
+	 * 		{@link MiriamType} annotated by this annotator
+	 * @param relationType
+	 * 		{@link MiriamRelationType} annotated by this annotator.
+	 * @return
+	 * 		the description
+	 */
+	public String getDescription(MiriamType mt, MiriamRelationType relationType){
+		return "";		
+	}
+	
+	/**
+	 * Returns list with definitions of the parameters available for this annotator.
+	 * @return the parameters {@link AnnotatorParamDefinition} list
+	 */
+	
+	public Collection<AnnotatorParamDefinition> getParametersDefinitions(){
+		return paramsDefs;
+	}
 
 	/**
 	 * Returns <code>true</code> if this annotator can annotate the object of
@@ -475,33 +532,69 @@ public abstract class ElementAnnotator extends CachableInterface {
 		}
 	}
 	
+	/**
+	 * Sets MiriamData.annotator to this annotator
+	 * 
+	 * @param md
+	 *		data for which the annotator is to be set
+	 */
 	private void setAnnotator(MiriamData md){
 		md.setAnnotator(this.getClass());		
 	}
 	
+	/**
+	 * Creates {@link MiriamData} and sets its annotator to this annotator
+	 * @return
+	 * 		created {@link MiriamData}
+	 */
 	protected MiriamData createMiriamData(){
 		MiriamData md = new MiriamData();
 		setAnnotator(md);
 		return md;		
 	}
 	
+	/**
+	 * Creates {@link MiriamData} and sets its annotator to this annotator
+	 * @param _md
+	 * 		{@link MiriamData} based on which the new {@link MiriamData} should be created
+	 * @return
+	 * 		created {@link MiriamData}
+	 */
 	protected MiriamData createMiriamData(MiriamData _md){
 		MiriamData md = new MiriamData(_md);
 		setAnnotator(md);
 		return md;		
 	}
 	
+	/**
+	 * Creates {@link MiriamData} and sets its annotator to this annotator
+	 * @param mt
+	 * 		{@link MiriamType} to be set
+	 * @param resource
+	 * 		resource to be set
+	 * @return
+	 * 		created {@link MiriamData}
+	 */
 	protected MiriamData createMiriamData(MiriamType mt, String resource){
 		MiriamData md = new MiriamData(mt, resource);
 		setAnnotator(md);
 		return md;		
 	}
 	
+	/**
+	 * Creates {@link MiriamData} and sets its annotator to this annotator
+	 * @param relationType
+	 * 		{@link MiriamRelationType} to be set
+	 * @param mt
+	 * 		{@link MiriamType} to be set
+	 * @param resource
+	 * 		resource to be set
+	 * @return
+	 * 		created {@link MiriamData}
+	 */
 	protected MiriamData createMiriamData(MiriamRelationType relationType, MiriamType mt, String resource){
 		MiriamData md = new MiriamData(relationType, mt, resource);
 		setAnnotator(md);
 		return md;		
 	}	
-	
-
 }
diff --git a/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/EnsemblAnnotator.java b/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/EnsemblAnnotator.java
index 2a680742e77f56c5f5123641ff062218d5069168..65d3eebe51a610124534dab35c5ffe84887ee70e 100644
--- a/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/EnsemblAnnotator.java
+++ b/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/EnsemblAnnotator.java
@@ -230,11 +230,11 @@ public class EnsemblAnnotator extends ElementAnnotator implements IExternalServi
 							String hgncId = super.getNodeAttr("primary_id", node);
 							if (hgncId != null && !hgncId.isEmpty()) {
 								hgncId = hgncId.replaceAll("HGNC:", "");
-								annotatedObject.addMiriamData(new MiriamData(MiriamType.HGNC, hgncId));
+								annotatedObject.addMiriamData(createMiriamData(MiriamType.HGNC, hgncId));
 							}
 							String hgncSymbol = super.getNodeAttr("display_id", node);
 							if (hgncSymbol != null && !hgncSymbol.isEmpty()) {
-								annotatedObject.addMiriamData(new MiriamData(MiriamType.HGNC_SYMBOL, hgncSymbol));
+								annotatedObject.addMiriamData(createMiriamData(MiriamType.HGNC_SYMBOL, hgncSymbol));
 							}
 							NodeList synonymNodeList = node.getChildNodes();
 
diff --git a/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/HgncAnnotator.java b/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/HgncAnnotator.java
index b1b4678ce880f67b197bf5c410c774d597e00939..a8b5d0184f95f048d3079058c796845288a244bc 100644
--- a/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/HgncAnnotator.java
+++ b/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/HgncAnnotator.java
@@ -232,7 +232,7 @@ public class HgncAnnotator extends ElementAnnotator implements IExternalService
                   for (int j = 0; j < sublist.getLength(); j++) {
                     Node subnode = sublist.item(j);
                     if (subnode.getNodeType() == Node.ELEMENT_NODE) {
-                      element.addMiriamData(new MiriamData(MiriamType.UNIPROT, getNodeValue(subnode)));
+                      element.addMiriamData(createMiriamData(MiriamType.UNIPROT, getNodeValue(subnode)));
                     }
                   }
                 }
diff --git a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/AllAnnotatorTests.java b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/AllAnnotatorTests.java
index 0bd9c6f3f892ee91f9f4fa1b38ff0ec7c6195b1f..8490ffda2b88ae2645e2644d15097931bbaa988d 100644
--- a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/AllAnnotatorTests.java
+++ b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/AllAnnotatorTests.java
@@ -6,6 +6,7 @@ import org.junit.runners.Suite.SuiteClasses;
 
 @RunWith(Suite.class)
 @SuiteClasses({ AnnotatorExceptionTest.class, //
+		AnnotatorParamDefTest.class, //
 		BrendaAnnotatorTest.class, //
 		BiocompendiumAnnotatorTest.class, //
 		CazyAnnotatorTest.class, //
diff --git a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/AnnotatorExceptionTest.java b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/AnnotatorExceptionTest.java
index c8ecdc102971d469278dd893b5c66c22129dc8ea..a18773f47d3f23aca17c07b4ef1aa146a691f0d9 100644
--- a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/AnnotatorExceptionTest.java
+++ b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/AnnotatorExceptionTest.java
@@ -23,8 +23,10 @@ public class AnnotatorExceptionTest {
 
 	@Test
 	public void testConstructor() {
-		AnnotatorException e = new AnnotatorException("messss");
-		assertEquals("messss",e.getMessage());
+		AnnotatorParamDefinition d = new AnnotatorParamDefinition("name", "description", String.class);
+		assertEquals(d.getName(), "name");
+		assertEquals(d.getDecription(), "description");
+		assertEquals(d.getType(), String.class);
 	}
 
 }
diff --git a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/AnnotatorParamDefTest.java b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/AnnotatorParamDefTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..90682ba6e3188646ab0fd3ec5a29f45775fbdac2
--- /dev/null
+++ b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/AnnotatorParamDefTest.java
@@ -0,0 +1,30 @@
+package lcsb.mapviewer.annotation.services.annotators;
+
+import static org.junit.Assert.*;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.Test;
+
+public class AnnotatorParamDefTest {
+
+	@AfterClass
+	public static void tearDownAfterClass() throws Exception {
+	}
+
+	@Before
+	public void setUp() throws Exception {
+	}
+
+	@After
+	public void tearDown() throws Exception {
+	}
+
+	@Test
+	public void testConstructor() {
+		AnnotatorException e = new AnnotatorException("messss");
+		assertEquals("messss",e.getMessage());
+	}
+
+}
diff --git a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/ElementAnnotatorTest.java b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/ElementAnnotatorTest.java
index f4c613ca90d7e3f84396016d011958f464ae6f65..bf0e806a68d18d42e50d9e422c253031900ef7bf 100644
--- a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/ElementAnnotatorTest.java
+++ b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/ElementAnnotatorTest.java
@@ -225,6 +225,9 @@ public class ElementAnnotatorTest extends AnnotationTestFunctions {
 		assertEquals(md2.getAnnotator(), annotator.getClass());
 	}
 	
-	
+	@Test
+	public void testEmptyParamsDefs() {
+		assertEquals(annotator.getParametersDefinitions().size(), 0);
+	}
 
 }
diff --git a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/StitchAnnotatorTest.java b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/StitchAnnotatorTest.java
index 2016f4875e7d312bc30c90da2aa659abea770f3f..b3d3e31e774356c1d25b8076f9aaee2414f0e680 100644
--- a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/StitchAnnotatorTest.java
+++ b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/StitchAnnotatorTest.java
@@ -87,8 +87,6 @@ public class StitchAnnotatorTest extends AnnotationTestFunctions {
 
 			assertEquals(1, bioEntity.getMiriamData().size());
 
-			assertEquals(1, getWarnings().size());
-
 		} catch (Exception e) {
 			e.printStackTrace();
 			throw e;
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/configuration/ConfigurationRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/configuration/ConfigurationRestImpl.java
index 581b00bb7317a2f4a20b3a832bceb16aefca42d5..0ca63135b5cccdec9fb01f791f8ea32708e5df7a 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/configuration/ConfigurationRestImpl.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/configuration/ConfigurationRestImpl.java
@@ -247,6 +247,7 @@ public class ConfigurationRestImpl extends BaseRestImpl {
     result.put("name", annotator.getCommonName());
     result.put("url", annotator.getUrl());
     result.put("elementClassNames", annotator.getValidClasses());
+    result.put("parametersDefinitions", annotator.getParametersDefinitions());
     return result;
   }