diff --git a/model/src/main/java/lcsb/mapviewer/model/map/model/AuthorComparator.java b/model/src/main/java/lcsb/mapviewer/model/map/model/AuthorComparator.java
new file mode 100644
index 0000000000000000000000000000000000000000..0d9a5041c87718f0fd31bf857ff2725ef60efd77
--- /dev/null
+++ b/model/src/main/java/lcsb/mapviewer/model/map/model/AuthorComparator.java
@@ -0,0 +1,54 @@
+package lcsb.mapviewer.model.map.model;
+
+import org.apache.log4j.Logger;
+
+import lcsb.mapviewer.common.Comparator;
+import lcsb.mapviewer.common.comparator.StringComparator;
+
+/**
+ * This class implements comparator interface for {@link Author}.
+ * 
+ * @author Piotr Gawron
+ * 
+ */
+public class AuthorComparator extends Comparator<Author> {
+
+  /**
+   * Default class logger.
+   */
+  private static Logger logger = Logger.getLogger(AuthorComparator.class);
+
+  /**
+   * Default constructor.
+   */
+  public AuthorComparator() {
+    super(Author.class);
+  }
+
+  @Override
+  protected int internalCompare(Author arg0, Author arg1) {
+    StringComparator stringComparator = new StringComparator();
+    int status = stringComparator.compare(arg0.getEmail(), arg1.getEmail());
+    if (status != 0) {
+      logger.debug("email different: " + arg0.getEmail() + ", " + arg1.getEmail());
+      return status;
+    }
+    status = stringComparator.compare(arg0.getFirstName(), arg1.getFirstName());
+    if (status != 0) {
+      logger.debug("first name different: " + arg0.getFirstName() + ", " + arg1.getFirstName());
+      return status;
+    }
+    status = stringComparator.compare(arg0.getLastName(), arg1.getLastName());
+    if (status != 0) {
+      logger.debug("last name different: " + arg0.getLastName() + ", " + arg1.getLastName());
+      return status;
+    }
+    status = stringComparator.compare(arg0.getOrganisation(), arg1.getOrganisation());
+    if (status != 0) {
+      logger.debug("organisation different: " + arg0.getOrganisation() + ", " + arg1.getOrganisation());
+      return status;
+    }
+    return 0;
+  }
+
+}
diff --git a/model/src/main/java/lcsb/mapviewer/model/map/model/ModelComparator.java b/model/src/main/java/lcsb/mapviewer/model/map/model/ModelComparator.java
index 8295ce7a1587454b694caa77a7aa99a76fe086f1..7f3e94ba4aa3226f5feca8ef16f4bd6c41a44148 100644
--- a/model/src/main/java/lcsb/mapviewer/model/map/model/ModelComparator.java
+++ b/model/src/main/java/lcsb/mapviewer/model/map/model/ModelComparator.java
@@ -161,6 +161,14 @@ public class ModelComparator extends Comparator<Model> {
       return status;
     }
 
+    SetComparator<Author> authorSetComparator = new SetComparator<>(new AuthorComparator());
+
+    status = authorSetComparator.compare(arg0.getAuthors(), arg1.getAuthors());
+    if (status != 0) {
+      logger.debug("authors different");
+      return status;
+    }
+
     return 0;
   }
 
diff --git a/model/src/test/java/lcsb/mapviewer/model/map/model/ModelComparatorTest.java b/model/src/test/java/lcsb/mapviewer/model/map/model/ModelComparatorTest.java
index 878adb6632dc51e8a98e1667bd437468c509d746..7513748badb39df467eaa32a72455ec047d3a822 100644
--- a/model/src/test/java/lcsb/mapviewer/model/map/model/ModelComparatorTest.java
+++ b/model/src/test/java/lcsb/mapviewer/model/map/model/ModelComparatorTest.java
@@ -432,4 +432,21 @@ public class ModelComparatorTest {
     }
   }
 
+  @Test
+  public void testCompareAuthors() throws Exception {
+    try {
+      Model model1 = getModel();
+      Model model2 = getModel();
+      model1.addAuthor(new Author("x", "y"));
+      assertTrue("Models have different authors", comparator.compare(model1, model2) != 0);
+      assertTrue(comparator.compare(model2, model1) != 0);
+      model2.addAuthor(new Author(model1.getAuthors().iterator().next()));
+      assertEquals(0, comparator.compare(model1, model2));
+      assertEquals(0, comparator.compare(model2, model1));
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
+
 }