DiffCommandRequest - incorrect equals & hashcode 
DiffCommandRequest has additional fields comparing to its superclass ("format" and "ancestorChangeset"), but doesn't overwrite equals and hashcode methods.
(upd. actually not an issue for now, since it's not used as key for caching)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2747e98d3..6b7c731eb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 - Removed the `requires` attribute on the `@Extension` annotation and instead create a new `@Requires` annotation ([#1097](https://github.com/scm-manager/scm-manager/pull/1097))
 - Use os specific locations for scm home directory ([#1109](https://github.com/scm-manager/scm-manager/pull/1109))
 - Use Library/Logs/SCM-Manager on OSX for logging ([#1109](https://github.com/scm-manager/scm-manager/pull/1109))
+- Cleanup outdated jaxb annotation in scm-core ([#1136](https://github.com/scm-manager/scm-manager/pull/1136))
 
 ### Fixed
 - Protocol URI for git commands under windows ([#1108](https://github.com/scm-manager/scm-manager/pull/1108))
diff --git a/scm-core/src/main/java/sonia/scm/repository/BlameResult.java b/scm-core/src/main/java/sonia/scm/repository/BlameResult.java
index 5002dfc34..8a997041f 100644
--- a/scm-core/src/main/java/sonia/scm/repository/BlameResult.java
+++ b/scm-core/src/main/java/sonia/scm/repository/BlameResult.java
@@ -21,216 +21,58 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-    
-package sonia.scm.repository;
 
-//~--- non-JDK imports --------------------------------------------------------
+package sonia.scm.repository;
 
-import com.google.common.base.MoreObjects;
-import com.google.common.base.Objects;
 import com.google.common.collect.Lists;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
 
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementWrapper;
-import javax.xml.bind.annotation.XmlRootElement;
 import java.io.Serializable;
 import java.util.Iterator;
 import java.util.List;
 
-//~--- JDK imports ------------------------------------------------------------
-
 /**
  * Changeset information by line for a given file.
  *
  * @author Sebastian Sdorra
  * @since 1.8
  */
-@XmlRootElement(name = "blame-result")
-@XmlAccessorType(XmlAccessType.FIELD)
-public class BlameResult implements Serializable, Iterable<BlameLine>
-{
+@EqualsAndHashCode
+@ToString
+public class BlameResult implements Serializable, Iterable<BlameLine> {
 
-  /** Field description */
   private static final long serialVersionUID = -8606237881465520606L;
 
-  //~--- constructors ---------------------------------------------------------
-
-  /**
-   * Constructs ...
-   *
-   */
-  public BlameResult() {}
+  private List<BlameLine> blameLines;
+  private int total;
 
-  /**
-   * Constructs ...
-   *
-   *
-   * @param blameLines
-   */
-  public BlameResult(List<BlameLine> blameLines)
-  {
-    this.blameLines = blameLines;
-    this.total = blameLines.size();
+  public BlameResult(List<BlameLine> blameLines) {
+    this(blameLines.size(), blameLines);
   }
 
-  /**
-   * Constructs ...
-   *
-   *
-   * @param total
-   * @param blameLines
-   */
-  public BlameResult(int total, List<BlameLine> blameLines)
-  {
+  public BlameResult(int total, List<BlameLine> blameLines) {
     this.total = total;
     this.blameLines = blameLines;
   }
 
-  //~--- methods --------------------------------------------------------------
-
-  /**
-   * {@inheritDoc}
-   *
-   *
-   * @param obj
-   *
-   * @return
-   */
-  @Override
-  public boolean equals(Object obj)
-  {
-    if (obj == null)
-    {
-      return false;
-    }
-
-    if (getClass() != obj.getClass())
-    {
-      return false;
-    }
-
-    final BlameResult other = (BlameResult) obj;
-
-    return Objects.equal(total, other.total)
-           && Objects.equal(blameLines, other.blameLines);
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   *
-   * @return
-   */
   @Override
-  public int hashCode()
-  {
-    return Objects.hashCode(total, blameLines);
-  }
-
-  /**
-   * Method description
-   *
-   *
-   * @return
-   * 
-   * @since 1.17
-   */
-  @Override
-  public Iterator<BlameLine> iterator()
-  {
+  public Iterator<BlameLine> iterator() {
     return getBlameLines().iterator();
   }
 
-  /**
-   * {@inheritDoc}
-   *
-   *
-   * @return
-   */
-  @Override
-  public String toString()
-  {
-    //J-
-    return MoreObjects.toStringHelper(this)
-            .add("total", total)
-            .add("blameLines", blameLines)
-            .toString();
-    //J+
-  }
-
-  //~--- get methods ----------------------------------------------------------
-
-  /**
-   * Method description
-   *
-   *
-   * @return
-   */
-  public List<BlameLine> getBlameLines()
-  {
-    if ( blameLines == null ){
+  public List<BlameLine> getBlameLines() {
+    if (blameLines == null) {
       blameLines = Lists.newArrayList();
     }
     return blameLines;
   }
 
-  /**
-   * Method description
-   *
-   *
-   * @param i
-   *
-   * @return
-   */
-  public BlameLine getLine(int i)
-  {
+  public BlameLine getLine(int i) {
     return blameLines.get(i);
   }
 
-  /**
-   * Method description
-   *
-   *
-   * @return
-   */
-  public int getTotal()
-  {
+  public int getTotal() {
     return total;
   }
-
-  //~--- set methods ----------------------------------------------------------
-
-  /**
-   * Method description
-   *
-   *
-   * @param blameLines
-   */
-  public void setBlameLines(List<BlameLine> blameLines)
-  {
-    this.blameLines = blameLines;
-  }
-
-  /**
-   * Method description
-   *
-   *
-   * @param total
-   */
-  public void setTotal(int total)
-  {
-    this.total = total;
-  }
-
-  //~--- fields ---------------------------------------------------------------
-
-  /** Field description */
-  @XmlElement(name = "blameline")
-  @XmlElementWrapper(name = "blamelines")
-  private List<BlameLine> blameLines;
-
-  /** Field description */
-  private int total;
 }
diff --git a/scm-core/src/main/java/sonia/scm/repository/Branches.java b/scm-core/src/main/java/sonia/scm/repository/Branches.java
index 54b285d14..ed4ead7dc 100644
--- a/scm-core/src/main/java/sonia/scm/repository/Branches.java
+++ b/scm-core/src/main/java/sonia/scm/repository/Branches.java
@@ -21,166 +21,55 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-    
-package sonia.scm.repository;
 
-//~--- non-JDK imports --------------------------------------------------------
+package sonia.scm.repository;
 
-import com.google.common.base.MoreObjects;
-import com.google.common.base.Objects;
 import com.google.common.collect.Lists;
+import lombok.EqualsAndHashCode;
+import lombok.Setter;
+import lombok.ToString;
 
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
 import java.util.Iterator;
 import java.util.List;
 
-//~--- JDK imports ------------------------------------------------------------
-
 /**
  * Represents all branches of a repository.
  *
  * @author Sebastian Sdorra
  * @since 1.18
  */
-@XmlRootElement(name="branches")
-@XmlAccessorType(XmlAccessType.FIELD)
-public final class Branches implements Iterable<Branch>
-{
+@EqualsAndHashCode
+@ToString
+@Setter
+public final class Branches implements Iterable<Branch> {
 
-  /**
-   * Constructs a new instance of branches.
-   * This constructor should only be called from JAXB.
-   *
-   */
-  public Branches() {}
+  private List<Branch> branches;
 
-  /**
-   * Constructs a new instance of branches.
-   *
-   *
-   * @param branches list of branches.
-   */
-  public Branches(Branch... branches)
-  {
-    this.branches = Lists.newArrayList(branches);
+  public Branches() {
   }
 
-  /**
-   * Constructs a new instance of branches.
-   *
-   *
-   * @param branches list of branches.
-   */
-  public Branches(List<Branch> branches)
-  {
-    this.branches = branches;
-  }
-
-  //~--- methods --------------------------------------------------------------
-
-  /**
-   * {@inheritDoc}
-   *
-   *
-   * @param obj
-   *
-   * @return
-   */
-  @Override
-  public boolean equals(Object obj)
-  {
-    if (obj == null)
-    {
-      return false;
-    }
-
-    if (getClass() != obj.getClass())
-    {
-      return false;
-    }
-
-    final Branches other = (Branches) obj;
-
-    return Objects.equal(branches, other.branches);
+  public Branches(Branch... branches) {
+    this.branches = Lists.newArrayList(branches);
   }
 
-  /**
-   * {@inheritDoc}
-   *
-   *
-   * @return
-   */
-  @Override
-  public int hashCode()
-  {
-    return Objects.hashCode(branches);
+  public Branches(List<Branch> branches) {
+    this.branches = branches;
   }
 
-  /**
-   * Method description
-   *
-   *
-   * @return
-   */
   @Override
-  public Iterator<Branch> iterator()
-  {
+  public Iterator<Branch> iterator() {
     return getBranches().iterator();
   }
 
-  /**
-   * {@inheritDoc}
-   *
-   *
-   * @return
-   */
-  @Override
-  public String toString()
-  {
-    //J-
-    return MoreObjects.toStringHelper(this)
-                  .add("branches", branches)
-                  .toString();
-    //J+
-  }
-
-  //~--- get methods ----------------------------------------------------------
-
-  /**
-   * Returns all branches of a repository.
-   *
-   *
-   * @return all branches
-   */
-  public List<Branch> getBranches()
-  {
-    if (branches == null)
-    {
+  public List<Branch> getBranches() {
+    if (branches == null) {
       branches = Lists.newArrayList();
     }
 
     return branches;
   }
 
-  //~--- set methods ----------------------------------------------------------
-
-  /**
-   * Sets all branches.
-   *
-   *
-   * @param branches branches
-   */
-  public void setBranches(List<Branch> branches)
-  {
+  public void setBranches(List<Branch> branches) {
     this.branches = branches;
   }
-
-  //~--- fields ---------------------------------------------------------------
-
-  /** branches */
-  @XmlElement(name="branch")
-  private List<Branch> branches;
 }
diff --git a/scm-core/src/main/java/sonia/scm/repository/BrowserResult.java b/scm-core/src/main/java/sonia/scm/repository/BrowserResult.java
index 2c5a04118..afd77b562 100644
--- a/scm-core/src/main/java/sonia/scm/repository/BrowserResult.java
+++ b/scm-core/src/main/java/sonia/scm/repository/BrowserResult.java
@@ -21,28 +21,16 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-    
-package sonia.scm.repository;
 
-//~--- non-JDK imports --------------------------------------------------------
+package sonia.scm.repository;
 
-import com.google.common.base.MoreObjects;
-import com.google.common.base.Objects;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
 
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlRootElement;
 import java.io.Serializable;
 
-//~--- JDK imports ------------------------------------------------------------
-
-/**
- *
- * @author Sebastian Sdorra
- * @since 1.5
- */
-@XmlAccessorType(XmlAccessType.FIELD)
-@XmlRootElement(name = "browser-result")
+@EqualsAndHashCode
+@ToString
 public class BrowserResult implements Serializable {
 
   private String revision;
@@ -73,36 +61,4 @@ public class BrowserResult implements Serializable {
   public FileObject getFile() {
     return file;
   }
-
-  @Override
-  public boolean equals(Object obj) {
-    if (obj == null) {
-      return false;
-    }
-
-    if (getClass() != obj.getClass()) {
-      return false;
-    }
-
-    final BrowserResult other = (BrowserResult) obj;
-
-    return Objects.equal(revision, other.revision)
-      && Objects.equal(file, other.file);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hashCode(revision, file);
-  }
-
-
-  @Override
-  public String toString() {
-    return MoreObjects.toStringHelper(this)
-      .add("revision", revision)
-      .add("files", file)
-      .toString();
-  }
-
-
 }
diff --git a/scm-core/src/main/java/sonia/scm/repository/Changeset.java b/scm-core/src/main/java/sonia/scm/repository/Changeset.java
index 654739fa2..6e770139d 100644
--- a/scm-core/src/main/java/sonia/scm/repository/Changeset.java
+++ b/scm-core/src/main/java/sonia/scm/repository/Changeset.java
@@ -21,30 +21,25 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-    
+
 package sonia.scm.repository;
 
-import com.google.common.base.Objects;
+import lombok.EqualsAndHashCode;
 import sonia.scm.BasicPropertiesAware;
 import sonia.scm.ModelObject;
 import sonia.scm.util.Util;
 import sonia.scm.util.ValidationUtil;
 
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlRootElement;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
-
 /**
  * Represents a changeset/commit of a repository.
  *
  * @author Sebastian Sdorra
  */
-@XmlRootElement(name = "changeset")
-@XmlAccessorType(XmlAccessType.FIELD)
+@EqualsAndHashCode(callSuper = true)
 public class Changeset extends BasicPropertiesAware implements ModelObject {
 
   private static final long serialVersionUID = -8373308448928993039L;
@@ -91,8 +86,7 @@ public class Changeset extends BasicPropertiesAware implements ModelObject {
     this(id, date, author, null);
   }
 
-  public Changeset(String id, Long date, Person author, String description)
-  {
+  public Changeset(String id, Long date, Person author, String description) {
     this.id = id;
     this.date = date;
     this.author = author;
@@ -100,66 +94,18 @@ public class Changeset extends BasicPropertiesAware implements ModelObject {
   }
 
   @Override
-  public boolean equals(Object obj)
-  {
-    if (obj == null)
-    {
-      return false;
-    }
-
-    if (getClass() != obj.getClass()) {
-      return false;
-    }
-
-    final Changeset other = (Changeset) obj;
-
-    //J-
-    return Objects.equal(id, other.id)
-           && Objects.equal(date, other.date)
-           && Objects.equal(author, other.author)
-           && Objects.equal(description, other.description)
-           && Objects.equal(parents, other.parents)
-           && Objects.equal(tags, other.tags)
-           && Objects.equal(branches, other.branches)
-           && Objects.equal(properties, other.properties);
-    //J+
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   *
-   * @return
-   */
-  @Override
-  public int hashCode()
-  {
-    return Objects.hashCode(id, date, author, description, parents, tags,
-                            branches,  properties);
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   *
-   * @return
-   */
-  @Override
-  public String toString()
-  {
+  public String toString() {
     StringBuilder out = new StringBuilder("changeset: ");
 
     out.append(id).append("\n");
 
-    if (parents != null)
-    {
+    if (parents != null) {
       out.append("parents: ").append(Util.toString(parents)).append("\n");
     }
 
     out.append("author: ").append(author).append("\n");
 
-    if (date != null)
-    {
+    if (date != null) {
       out.append("date: ").append(Util.formatDate(new Date(date))).append("\n");
     }
 
@@ -170,7 +116,6 @@ public class Changeset extends BasicPropertiesAware implements ModelObject {
     return out.toString();
   }
 
-
   /**
    * Returns a timestamp of the creation date of the {@link Changeset}.
    *
@@ -185,11 +130,9 @@ public class Changeset extends BasicPropertiesAware implements ModelObject {
     this.setDate(timestamp);
   }
 
-
   /**
    * Returns the author of the changeset.
    *
-   *
    * @return author of the changeset
    */
   public Person getAuthor() {
@@ -201,14 +144,11 @@ public class Changeset extends BasicPropertiesAware implements ModelObject {
    * only related to one branch, but in the case of receive hooks it is possible
    * that a changeset is related to more than a branch.
    *
-   *
    * @return branches of the changeset
    */
-  public List<String> getBranches()
-  {
-    if (branches == null)
-    {
-      branches = new ArrayList<String>();
+  public List<String> getBranches() {
+    if (branches == null) {
+      branches = new ArrayList<>();
     }
 
     return branches;
@@ -217,29 +157,24 @@ public class Changeset extends BasicPropertiesAware implements ModelObject {
   /**
    * Returns the creation date of the changeset.
    *
-   *
    * @return date of the changeset
    */
-  public Long getDate()
-  {
+  public Long getDate() {
     return date;
   }
 
   /**
    * Return the description (commit message) of the changeset.
    *
-   *
    * @return description of the changeset
    */
-  public String getDescription()
-  {
+  public String getDescription() {
     return description;
   }
 
   /**
    * Returns the id of the changeset.
    *
-   *
    * @return id of the changeset
    */
   @Override
@@ -263,19 +198,15 @@ public class Changeset extends BasicPropertiesAware implements ModelObject {
   }
 
 
-
   /**
    * Return the ids of the parent changesets.
    *
-   *
    * @return
    * @since 1.11
    */
-  public List<String> getParents()
-  {
-    if (parents == null)
-    {
-      parents = new ArrayList<String>();
+  public List<String> getParents() {
+    if (parents == null) {
+      parents = new ArrayList<>();
     }
 
     return parents;
@@ -284,14 +215,11 @@ public class Changeset extends BasicPropertiesAware implements ModelObject {
   /**
    * Returns tags associated with this changeset.
    *
-   *
    * @return tags of the changeset
    */
-  public List<String> getTags()
-  {
-    if (tags == null)
-    {
-      tags = new ArrayList<String>();
+  public List<String> getTags() {
+    if (tags == null) {
+      tags = new ArrayList<>();
     }
 
     return tags;
@@ -300,91 +228,75 @@ public class Changeset extends BasicPropertiesAware implements ModelObject {
   /**
    * Returns true if the changeset is valid.
    *
-   *
    * @return true if the changeset is valid
    */
   @Override
-  public boolean isValid()
-  {
+  public boolean isValid() {
     return Util.isNotEmpty(id) && ValidationUtil.isValid(author)
-           && (date != null);
+      && (date != null);
   }
 
   /**
    * Sets the author of the changeset.
    *
-   *
    * @param author author of the changeset
    */
-  public void setAuthor(Person author)
-  {
+  public void setAuthor(Person author) {
     this.author = author;
   }
 
   /**
    * Sets the branches of the changeset.
    *
-   *
    * @param branches branches of the changeset
    */
-  public void setBranches(List<String> branches)
-  {
+  public void setBranches(List<String> branches) {
     this.branches = branches;
   }
 
   /**
    * Sets the date of the changeset.
    *
-   *
    * @param date date of the changeset
    */
-  public void setDate(Long date)
-  {
+  public void setDate(Long date) {
     this.date = date;
   }
 
   /**
    * Sets the description (commit message) of the changeset.
    *
-   *
    * @param description description of the changeset
    */
-  public void setDescription(String description)
-  {
+  public void setDescription(String description) {
     this.description = description;
   }
 
   /**
    * Sets the id of the changeset.
    *
-   *
    * @param id id of the changeset
    */
-  public void setId(String id)
-  {
+  public void setId(String id) {
     this.id = id;
   }
 
   /**
    * Sets the parents of the changeset.
    *
-   *
    * @param parents parents of the changeset
    * @since 1.11
    */
-  public void setParents(List<String> parents)
-  {
+  public void setParents(List<String> parents) {
     this.parents = parents;
   }
 
   /**
    * Sets the tags of the changeset
    *
-   *
    * @param tags tags of the changeset
    */
-  public void setTags(List<String> tags)
-  {
+  public void setTags(List<String> tags) {
     this.tags = tags;
   }
 
diff --git a/scm-core/src/main/java/sonia/scm/repository/ChangesetPagingResult.java b/scm-core/src/main/java/sonia/scm/repository/ChangesetPagingResult.java
index 4bbe54ba5..ca74b7dac 100644
--- a/scm-core/src/main/java/sonia/scm/repository/ChangesetPagingResult.java
+++ b/scm-core/src/main/java/sonia/scm/repository/ChangesetPagingResult.java
@@ -21,56 +21,39 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-    
-package sonia.scm.repository;
 
-//~--- non-JDK imports --------------------------------------------------------
+package sonia.scm.repository;
 
-import com.google.common.base.MoreObjects;
-import com.google.common.base.Objects;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
 
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementWrapper;
-import javax.xml.bind.annotation.XmlRootElement;
 import java.io.Serializable;
 import java.util.Iterator;
 import java.util.List;
 
-//~--- JDK imports ------------------------------------------------------------
-
 /**
  * The changeset paging result is used to do a paging over the
  * {@link Changeset}s of a {@link Repository}.
  *
  * @author Sebastian Sdorra
  */
-@XmlRootElement(name = "changeset-paging")
-@XmlAccessorType(XmlAccessType.FIELD)
-public class ChangesetPagingResult implements Iterable<Changeset>, Serializable
-{
+@EqualsAndHashCode
+@ToString
+public class ChangesetPagingResult implements Iterable<Changeset>, Serializable {
 
-  /** Field description */
   private static final long serialVersionUID = -8678755403658841733L;
 
-  //~--- constructors ---------------------------------------------------------
-
-  /**
-   * Constructs a new changeset paging result.
-   *
-   */
-  public ChangesetPagingResult() {}
+  private List<Changeset> changesets;
+  private int total;
+  private String branchName;
 
   /**
    * Constructs a new changeset paging result.
    *
-   *
-   * @param total total number of changesets
+   * @param total      total number of changesets
    * @param changesets current list of fetched changesets
    */
-  public ChangesetPagingResult(int total, List<Changeset> changesets)
-  {
+  public ChangesetPagingResult(int total, List<Changeset> changesets) {
     this.total = total;
     this.changesets = changesets;
     this.branchName = null;
@@ -79,121 +62,59 @@ public class ChangesetPagingResult implements Iterable<Changeset>, Serializable
   /**
    * Constructs a new changeset paging result for a specific branch.
    *
-   *
-   * @param total total number of changesets
+   * @param total      total number of changesets
    * @param changesets current list of fetched changesets
    * @param branchName branch name this result was created for
    */
-  public ChangesetPagingResult(int total, List<Changeset> changesets, String branchName)
-  {
+  public ChangesetPagingResult(int total, List<Changeset> changesets, String branchName) {
     this.total = total;
     this.changesets = changesets;
     this.branchName = branchName;
   }
 
-  //~--- methods --------------------------------------------------------------
-
-  /**
-   * Method description
-   *
-   *
-   * @param obj
-   *
-   * @return
-   */
-  @Override
-  public boolean equals(Object obj)
-  {
-    if (obj == null)
-    {
-      return false;
-    }
-
-    if (getClass() != obj.getClass())
-    {
-      return false;
-    }
-
-    final ChangesetPagingResult other = (ChangesetPagingResult) obj;
-
-    return Objects.equal(changesets, other.changesets)
-      && Objects.equal(total, other.total);
-  }
-
-  /**
-   * Method description
-   *
-   *
-   * @return
-   */
-  @Override
-  public int hashCode()
-  {
-    return Objects.hashCode(changesets, total);
-  }
-
   /**
    * Returns an iterator which can iterate over the current list of changesets.
    *
-   *
    * @return iterator for current list of changesets
    * @since 1.8
    */
   @Override
-  public Iterator<Changeset> iterator()
-  {
+  public Iterator<Changeset> iterator() {
     Iterator<Changeset> it = null;
 
-    if (changesets != null)
-    {
+    if (changesets != null) {
       it = changesets.iterator();
     }
 
     return it;
   }
 
-  /**
-   * Method description
-   *
-   *
-   * @return
-   */
-  @Override
-  public String toString()
-  {
-    //J-
-    return MoreObjects.toStringHelper(this)
-                  .add("changesets", changesets)
-                  .add("total", total)
-                  .add("branch", branchName)
-                  .toString();
-    //J+
-  }
-
-  //~--- get methods ----------------------------------------------------------
-
   /**
    * Returns the current list of changesets.
    *
-   *
    * @return current list of changesets
    */
-  public List<Changeset> getChangesets()
-  {
+  public List<Changeset> getChangesets() {
     return changesets;
   }
 
   /**
    * Returns the total number of changesets.
    *
-   *
    * @return total number of changesets
    */
-  public int getTotal()
-  {
+  public int getTotal() {
     return total;
   }
 
+  /**
+   * Returns the branch name this result was created for. This can either be an explicit branch ("give me all
+   * changesets for branch xyz") or an implicit one ("give me the changesets for the default").
+   */
+  public String getBranchName() {
+    return branchName;
+  }
+
   void setChangesets(List<Changeset> changesets)
   {
     this.changesets = changesets;
@@ -208,21 +129,4 @@ public class ChangesetPagingResult implements Iterable<Changeset>, Serializable
     this.branchName = branchName;
   }
 
-  /**
-   * Returns the branch name this result was created for. This can either be an explicit branch ("give me all
-   * changesets for branch xyz") or an implicit one ("give me the changesets for the default").
-   */
-  public String getBranchName() {
-    return branchName;
-  }
-
-  //~--- fields ---------------------------------------------------------------
-
-  @XmlElement(name = "changeset")
-  @XmlElementWrapper(name = "changesets")
-  private List<Changeset> changesets;
-
-  private int total;
-
-  private String branchName;
 }
diff --git a/scm-core/src/main/java/sonia/scm/repository/FileObject.java b/scm-core/src/main/java/sonia/scm/repository/FileObject.java
index 6cc65d69e..82d6bed20 100644
--- a/scm-core/src/main/java/sonia/scm/repository/FileObject.java
+++ b/scm-core/src/main/java/sonia/scm/repository/FileObject.java
@@ -21,18 +21,15 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-    
+
 package sonia.scm.repository;
 
-import com.google.common.base.MoreObjects;
-import com.google.common.base.Objects;
 import com.google.common.base.Strings;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
 import sonia.scm.LastModifiedAware;
 
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -49,98 +46,70 @@ import static java.util.Optional.ofNullable;
  * @author Sebastian Sdorra
  * @since 1.5
  */
-@XmlRootElement(name = "file")
-@XmlAccessorType(XmlAccessType.FIELD)
-public class FileObject implements LastModifiedAware, Serializable
-{
+@EqualsAndHashCode
+@ToString
+public class FileObject implements LastModifiedAware, Serializable {
 
-  /** serial version uid */
   private static final long serialVersionUID = -5562537629609891499L;
 
-  //~--- methods --------------------------------------------------------------
+  private String description;
 
   /**
-   * {@inheritDoc}
+   * directory indicator
    */
-  @Override
-  public boolean equals(Object obj)
-  {
-    if (obj == null)
-    {
-      return false;
-    }
+  private boolean directory;
 
-    if (getClass() != obj.getClass())
-    {
-      return false;
-    }
+  /**
+   * commit date
+   */
+  private Long commitDate;
 
-    final FileObject other = (FileObject) obj;
-
-    //J-
-    return Objects.equal(name, other.name)
-           && Objects.equal(path, other.path)
-           && Objects.equal(directory, other.directory)
-           && Objects.equal(description, other.description)
-           && Objects.equal(length, other.length)
-           && Objects.equal(subRepository, other.subRepository)
-           && Objects.equal(commitDate, other.commitDate)
-           && Objects.equal(partialResult, other.partialResult)
-           && Objects.equal(computationAborted, other.computationAborted);
-    //J+
-  }
+  /**
+   * file length
+   */
+  private Long length;
 
   /**
-   * {@inheritDoc}
+   * filename
    */
-  @Override
-  public int hashCode()
-  {
-    return Objects.hashCode(
-      name,
-      path,
-      directory,
-      description,
-      length,
-      subRepository,
-      commitDate,
-      partialResult,
-      computationAborted);
-  }
+  private String name;
 
   /**
-   * {@inheritDoc}
+   * file path
    */
-  @Override
-  public String toString()
-  {
-    //J-
-    return MoreObjects.toStringHelper(this)
-            .add("name", name)
-            .add("path", path)
-            .add("directory", directory)
-            .add("description", description)
-            .add("length", length)
-            .add("subRepository", subRepository)
-            .add("commitDate", commitDate)
-            .add("partialResult", partialResult)
-            .add("computationAborted", computationAborted)
-            .toString();
-    //J+
-  }
+  private String path;
 
-  //~--- get methods ----------------------------------------------------------
+  /**
+   * Marker for partial result.
+   */
+  private boolean partialResult = false;
+
+  /**
+   * Marker for aborted computation.
+   */
+  private boolean computationAborted = false;
+
+  /**
+   * sub repository informations
+   */
+  @XmlElement(name = "subrepository")
+  private SubRepository subRepository;
+
+  /**
+   * Children of this file (aka directory).
+   */
+  private Collection<FileObject> children = new ArrayList<>();
+
+  private boolean truncated;
 
   /**
    * Returns the last commit message for this file. The method will return null,
    * if the repository provider is not able to get the last commit for the path.
    *
-   *
    * @return Last commit message or <code>null</code>, when this value has not been computed
    * (see {@link #isPartialResult()}).
    */
-  public Optional<String> getDescription()
-  {
+  public Optional<String> getDescription() {
     return ofNullable(description);
   }
 
@@ -149,12 +118,11 @@ public class FileObject implements LastModifiedAware, Serializable
    * if the repository provider is not able to get the last commit for the path
    * or it has not been computed.
    *
-   *
    * @return last commit date
    */
   @Override
   public Long getLastModified() {
-    return this.isPartialResult()? null: this.commitDate;
+    return this.isPartialResult() ? null : this.commitDate;
   }
 
   /**
@@ -162,39 +130,33 @@ public class FileObject implements LastModifiedAware, Serializable
    * if the repository provider is not able to get the last commit for the path or if this value has not been computed
    * (see {@link #isPartialResult()} and {@link #isComputationAborted()}).
    */
-  public OptionalLong getCommitDate()
-  {
-    return commitDate == null? OptionalLong.empty(): OptionalLong.of(commitDate);
+  public OptionalLong getCommitDate() {
+    return commitDate == null ? OptionalLong.empty() : OptionalLong.of(commitDate);
   }
 
   /**
    * Returns the length of the file or {@link OptionalLong#empty()}, when this value has not been computed
    * (see {@link #isPartialResult()} and {@link #isComputationAborted()}).
    */
-  public OptionalLong getLength()
-  {
-    return length == null? OptionalLong.empty(): OptionalLong.of(length);
+  public OptionalLong getLength() {
+    return length == null ? OptionalLong.empty() : OptionalLong.of(length);
   }
 
   /**
    * Returns the name of the file.
    *
-   *
    * @return name of file
    */
-  public String getName()
-  {
+  public String getName() {
     return name;
   }
 
   /**
    * Returns the path of the file.
    *
-   *
    * @return path of file
    */
-  public String getPath()
-  {
+  public String getPath() {
     return path;
   }
 
@@ -218,22 +180,19 @@ public class FileObject implements LastModifiedAware, Serializable
    * Return sub repository information or null if the file is not
    * sub repository.
    *
-   * @since 1.10
    * @return sub repository informations or null
+   * @since 1.10
    */
-  public SubRepository getSubRepository()
-  {
+  public SubRepository getSubRepository() {
     return subRepository;
   }
 
   /**
    * Returns true if the file is a directory.
    *
-   *
    * @return true if file is a directory
    */
-  public boolean isDirectory()
-  {
+  public boolean isDirectory() {
     return directory;
   }
 
@@ -243,7 +202,7 @@ public class FileObject implements LastModifiedAware, Serializable
    * @return The children of this file if it is a directory.
    */
   public Collection<FileObject> getChildren() {
-    return children == null? null: unmodifiableCollection(children);
+    return children == null ? null : unmodifiableCollection(children);
   }
 
   /**
@@ -252,9 +211,8 @@ public class FileObject implements LastModifiedAware, Serializable
    * will return {@link Optional#empty()} (or {@link OptionalLong#empty()} respectively), unless they are computed.
    * There may be an asynchronous task running, that will set these values in the future.
    *
-   * @since 2.0.0
-   *
    * @return <code>true</code>, whenever some values of this object have not been computed, yet.
+   * @since 2.0.0
    */
   public boolean isPartialResult() {
     return partialResult;
@@ -265,9 +223,8 @@ public class FileObject implements LastModifiedAware, Serializable
    * values (like {@link #getLength()}, {@link #getDescription()} or {@link #getCommitDate()})
    * will return {@link Optional#empty()} (or {@link OptionalLong#empty()} respectively), unless they are computed.
    *
-   * @since 2.0.0
-   *
    * @return <code>true</code>, whenever some values of this object finally are not computed.
+   * @since 2.0.0
    */
   public boolean isComputationAborted() {
     return computationAborted;
@@ -282,87 +239,72 @@ public class FileObject implements LastModifiedAware, Serializable
   /**
    * Sets the description of the file.
    *
-   *
    * @param description description of file
    */
-  public void setDescription(String description)
-  {
+  public void setDescription(String description) {
     this.description = description;
   }
 
   /**
    * Set to true to indicate that the file is a directory.
    *
-   *
    * @param directory true for directory
    */
-  public void setDirectory(boolean directory)
-  {
+  public void setDirectory(boolean directory) {
     this.directory = directory;
   }
 
   /**
    * Sets the commit date of the file.
    *
-   *
    * @param commitDate commit date
    */
-  public void setCommitDate(Long commitDate)
-  {
+  public void setCommitDate(Long commitDate) {
     this.commitDate = commitDate;
   }
 
   /**
    * Sets the length of the file.
    *
-   *
    * @param length file length
    */
-  public void setLength(Long length)
-  {
+  public void setLength(Long length) {
     this.length = length;
   }
 
   /**
    * Sets the name of the file.
    *
-   *
    * @param name filename
    */
-  public void setName(String name)
-  {
+  public void setName(String name) {
     this.name = name;
   }
 
   /**
    * Sets the path of the file.
    *
-   *
    * @param path file path
    */
-  public void setPath(String path)
-  {
+  public void setPath(String path) {
     this.path = path;
   }
 
   /**
    * Set sub repository information for the file.
    *
-   * @since 1.10
-   *
    * @param subRepository sub repository informations
+   * @since 1.10
    */
-  public void setSubRepository(SubRepository subRepository)
-  {
+  public void setSubRepository(SubRepository subRepository) {
     this.subRepository = subRepository;
   }
 
   /**
    * Set marker, that some values for this object are not computed, yet.
    *
-   * @since 2.0.0
-   *
    * @param partialResult Set this to <code>true</code>, whenever some values of this object are not computed, yet.
+   * @since 2.0.0
    */
   public void setPartialResult(boolean partialResult) {
     this.partialResult = partialResult;
@@ -371,10 +313,9 @@ public class FileObject implements LastModifiedAware, Serializable
   /**
    * Set marker, that computation of some values for this object has been aborted.
    *
-   * @since 2.0.0
-   *
    * @param computationAborted Set this to <code>true</code>, whenever some values of this object are not computed and
    *                           will not be computed in the future.
+   * @since 2.0.0
    */
   public void setComputationAborted(boolean computationAborted) {
     this.computationAborted = computationAborted;
@@ -401,39 +342,4 @@ public class FileObject implements LastModifiedAware, Serializable
   public void setTruncated(boolean truncated) {
     this.truncated = truncated;
   }
-
-  //~--- fields ---------------------------------------------------------------
-
-  /** file description */
-  private String description;
-
-  /** directory indicator */
-  private boolean directory;
-
-  /** commit date */
-  private Long commitDate;
-
-  /** file length */
-  private Long length;
-
-  /** filename */
-  private String name;
-
-  /** file path */
-  private String path;
-
-  /** Marker for partial result. */
-  private boolean partialResult = false;
-
-  /** Marker for aborted computation. */
-  private boolean computationAborted = false;
-
-  /** sub repository informations */
-  @XmlElement(name = "subrepository")
-  private SubRepository subRepository;
-
-  /** Children of this file (aka directory). */
-  private Collection<FileObject> children = new ArrayList<>();
-
-  private boolean truncated;
 }
diff --git a/scm-core/src/main/java/sonia/scm/repository/ImportResult.java b/scm-core/src/main/java/sonia/scm/repository/ImportResult.java
index 39c102959..d86c4b4e9 100644
--- a/scm-core/src/main/java/sonia/scm/repository/ImportResult.java
+++ b/scm-core/src/main/java/sonia/scm/repository/ImportResult.java
@@ -21,166 +21,74 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-    
-package sonia.scm.repository;
 
-//~--- non-JDK imports --------------------------------------------------------
+package sonia.scm.repository;
 
-import com.google.common.base.MoreObjects;
-import com.google.common.base.Objects;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.ToString;
 
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlRootElement;
 import java.util.List;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
-//~--- JDK imports ------------------------------------------------------------
-
 /**
  * Import result of the {@link AdvancedImportHandler}.
  *
  * @author Sebastian Sdorra
  * @since 1.43
  */
-@XmlAccessorType(XmlAccessType.FIELD)
-@XmlRootElement(name = "import-result")
-public final class ImportResult
-{
+@EqualsAndHashCode
+@ToString
+@Getter
+public final class ImportResult {
 
   /**
-   * Constructs ...
-   *
+   * failed directories
    */
-  ImportResult() {}
+  private List<String> failedDirectories;
 
   /**
-   * Constructs a new import result.
-   *
-   *
-   * @param importedDirectories imported directories
-   * @param failedDirectories failed directories
+   * successfully imported directories
    */
+  private List<String> importedDirectories;
+
   public ImportResult(List<String> importedDirectories,
-    List<String> failedDirectories)
-  {
+                      List<String> failedDirectories) {
     this.importedDirectories = checkNotNull(importedDirectories,
       "list of imported directories is required");
     this.failedDirectories = checkNotNull(failedDirectories,
       "list of failed directories is required");
   }
 
-  //~--- methods --------------------------------------------------------------
-
-  /**
-   * Returns a import result builder.
-   *
-   *
-   * @return import result builder
-   */
-  public static Builder builder()
-  {
+  public static Builder builder() {
     return new Builder();
   }
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public boolean equals(Object obj)
-  {
-    if (obj == null)
-    {
-      return false;
-    }
-
-    if (getClass() != obj.getClass())
-    {
-      return false;
-    }
-
-    final ImportResult other = (ImportResult) obj;
-
-    return Objects.equal(importedDirectories, other.importedDirectories)
-      && Objects.equal(failedDirectories, other.failedDirectories);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public int hashCode()
-  {
-    return Objects.hashCode(importedDirectories, failedDirectories);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public String toString()
-  {
-    //J-
-    return MoreObjects.toStringHelper(this)
-                  .add("importedDirectories", importedDirectories)
-                  .add("failedDirectories", failedDirectories)
-                  .toString();
-    //J+
-  }
-
-  //~--- get methods ----------------------------------------------------------
-
-  /**
-   * Returns list of failed directories.
-   *
-   *
-   * @return list of failed directories
-   */
-  public List<String> getFailedDirectories()
-  {
-    return failedDirectories;
-  }
-
-  /**
-   * Returns list of successfully imported directories.
-   *
-   *
-   * @return list of successfully imported directories
-   */
-  public List<String> getImportedDirectories()
-  {
-    return importedDirectories;
-  }
-
-  //~--- inner classes --------------------------------------------------------
-
   /**
    * Builder for {@link ImportResult}.
    */
-  public static class Builder
-  {
+  public static class Builder {
 
     /**
-     * Constructs ...
-     *
+     * successfully imported directories
      */
-    private Builder() {}
+    private final List<String> importedDirectories = Lists.newArrayList();
 
-    //~--- methods ------------------------------------------------------------
+    /**
+     * failed directories
+     */
+    private final List<String> failedDirectories = Lists.newArrayList();
 
     /**
      * Adds a failed directory to the import result.
      *
-     *
      * @param name name of the directory
-     *
      * @return {@code this}
      */
-    public Builder addFailedDirectory(String name)
-    {
+    public Builder addFailedDirectory(String name) {
       this.failedDirectories.add(name);
 
       return this;
@@ -189,13 +97,10 @@ public final class ImportResult
     /**
      * Adds a successfully imported directory to the import result.
      *
-     *
      * @param name name of the directory
-     *
      * @return {@code this}
      */
-    public Builder addImportedDirectory(String name)
-    {
+    public Builder addImportedDirectory(String name) {
       this.importedDirectories.add(name);
 
       return this;
@@ -204,30 +109,11 @@ public final class ImportResult
     /**
      * Builds the final import result.
      *
-     *
      * @return final import result
      */
-    public ImportResult build()
-    {
+    public ImportResult build() {
       return new ImportResult(ImmutableList.copyOf(importedDirectories),
         ImmutableList.copyOf(failedDirectories));
     }
-
-    //~--- fields -------------------------------------------------------------
-
-    /** successfully imported directories */
-    private final List<String> importedDirectories = Lists.newArrayList();
-
-    /** failed directories */
-    private final List<String> failedDirectories = Lists.newArrayList();
   }
-
-
-  //~--- fields ---------------------------------------------------------------
-
-  /** failed directories */
-  private List<String> failedDirectories;
-
-  /** successfully imported directories */
-  private List<String> importedDirectories;
 }
diff --git a/scm-core/src/main/java/sonia/scm/repository/Modifications.java b/scm-core/src/main/java/sonia/scm/repository/Modifications.java
index f2e08048e..999f103d2 100644
--- a/scm-core/src/main/java/sonia/scm/repository/Modifications.java
+++ b/scm-core/src/main/java/sonia/scm/repository/Modifications.java
@@ -21,189 +21,67 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-    
-package sonia.scm.repository;
 
-//~--- non-JDK imports --------------------------------------------------------
+package sonia.scm.repository;
 
-import com.google.common.base.Objects;
 import com.google.common.collect.Lists;
-import sonia.scm.util.Util;
+import lombok.EqualsAndHashCode;
+import lombok.Setter;
+import lombok.ToString;
 
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementWrapper;
-import javax.xml.bind.annotation.XmlRootElement;
 import java.io.Serializable;
 import java.util.List;
 
-//~--- JDK imports ------------------------------------------------------------
-
-/**
- *
- * @author Sebastian Sdorra
- */
-@XmlAccessorType(XmlAccessType.FIELD)
-@XmlRootElement(name = "modifications")
-public class Modifications implements Serializable
-{
+@EqualsAndHashCode
+@ToString
+@Setter
+public class Modifications implements Serializable {
 
-  /** Field description */
   private static final long serialVersionUID = -8902033326668658140L;
-
-  //~--- constructors ---------------------------------------------------------
+  private String revision;
 
   /**
-   * Constructs ...
-   *
+   * lists of changed files
    */
+  private List<String> added;
+  private List<String> modified;
+  private List<String> removed;
+
   public Modifications() {
   }
 
-  /**
-   * Constructs ...
-   *
-   *
-   * @param added
-   */
-  public Modifications(List<String> added)
-  {
+  public Modifications(List<String> added) {
     this(added, null, null);
   }
 
-  /**
-   * Constructs ...
-   *
-   *
-   * @param added
-   * @param modified
-   */
-  public Modifications(List<String> added, List<String> modified)
-  {
+  public Modifications(List<String> added, List<String> modified) {
     this(added, modified, null);
   }
 
-  /**
-   * Constructs ...
-   *
-   *
-   * @param added
-   * @param modified
-   * @param removed
-   */
-  public Modifications(List<String> added, List<String> modified,
-    List<String> removed)
-  {
+  public Modifications(List<String> added, List<String> modified, List<String> removed) {
     this.added = added;
     this.modified = modified;
     this.removed = removed;
   }
 
-  //~--- methods --------------------------------------------------------------
-
-  /**
-   * {@inheritDoc}
-   *
-   *
-   * @param obj
-   *
-   * @return
-   */
-  @Override
-  public boolean equals(Object obj)
-  {
-    if (obj == null)
-    {
-      return false;
-    }
-
-    if (getClass() != obj.getClass())
-    {
-      return false;
-    }
-
-    final Modifications other = (Modifications) obj;
-
-    return Objects.equal(added, other.added)
-      && Objects.equal(modified, other.modified)
-      && Objects.equal(removed, other.removed);
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   *
-   * @return
-   */
-  @Override
-  public int hashCode()
-  {
-    return Objects.hashCode(added, modified, removed);
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   *
-   * @return
-   */
-  @Override
-  public String toString()
-  {
-    StringBuilder out = new StringBuilder();
-
-    out.append("added:").append(Util.toString(added)).append("\n");
-    out.append("modified:").append(Util.toString(modified)).append("\n");
-    out.append("removed:").append(Util.toString(removed)).append("\n");
-
-    return out.toString();
-  }
-
-  //~--- get methods ----------------------------------------------------------
-
-  /**
-   * Method description
-   *
-   *
-   * @return
-   */
-  public List<String> getAdded()
-  {
-    if (added == null)
-    {
+  public List<String> getAdded() {
+    if (added == null) {
       added = Lists.newArrayList();
     }
 
     return added;
   }
 
-  /**
-   * Method description
-   *
-   *
-   * @return
-   */
-  public List<String> getModified()
-  {
-    if (modified == null)
-    {
+  public List<String> getModified() {
+    if (modified == null) {
       modified = Lists.newArrayList();
     }
 
     return modified;
   }
 
-  /**
-   * Method description
-   *
-   *
-   * @return
-   */
-  public List<String> getRemoved()
-  {
-    if (removed == null)
-    {
+  public List<String> getRemoved() {
+    if (removed == null) {
       removed = Lists.newArrayList();
     }
 
@@ -213,62 +91,4 @@ public class Modifications implements Serializable
   public String getRevision() {
     return revision;
   }
-
-  //~--- set methods ----------------------------------------------------------
-
-  /**
-   * Method description
-   *
-   *
-   * @param added
-   */
-  public void setAdded(List<String> added)
-  {
-    this.added = added;
-  }
-
-  /**
-   * Method description
-   *
-   *
-   * @param modified
-   */
-  public void setModified(List<String> modified)
-  {
-    this.modified = modified;
-  }
-
-  /**
-   * Method description
-   *
-   *
-   * @param removed
-   */
-  public void setRemoved(List<String> removed)
-  {
-    this.removed = removed;
-  }
-
-  public void setRevision(String revision) {
-    this.revision = revision;
-  }
-
-  //~--- fields ---------------------------------------------------------------
-
-  private String revision;
-
-  /** list of added files */
-  @XmlElement(name = "added")
-  @XmlElementWrapper(name = "added")
-  private List<String> added;
-
-  /** list of modified files */
-  @XmlElement(name = "modified")
-  @XmlElementWrapper(name = "modified")
-  private List<String> modified;
-
-  /** list of removed files */
-  @XmlElement(name = "removed")
-  @XmlElementWrapper(name = "removed")
-  private List<String> removed;
 }
diff --git a/scm-core/src/main/java/sonia/scm/repository/Person.java b/scm-core/src/main/java/sonia/scm/repository/Person.java
index 7068271e0..503108e07 100644
--- a/scm-core/src/main/java/sonia/scm/repository/Person.java
+++ b/scm-core/src/main/java/sonia/scm/repository/Person.java
@@ -21,94 +21,70 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-    
-package sonia.scm.repository;
 
-//~--- non-JDK imports --------------------------------------------------------
+package sonia.scm.repository;
 
-import com.google.common.base.Objects;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
 import sonia.scm.Validateable;
 import sonia.scm.util.Util;
 import sonia.scm.util.ValidationUtil;
 
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlRootElement;
 import java.io.Serializable;
 
-//~--- JDK imports ------------------------------------------------------------
-
 /**
  * The {@link Person} (author) of a changeset.
  *
  * @person Sebastian Sdorra
  */
-@XmlRootElement(name = "person")
-@XmlAccessorType(XmlAccessType.FIELD)
-public class Person implements Validateable, Serializable
-{
+@EqualsAndHashCode
+@Getter
+@Setter
+public class Person implements Validateable, Serializable {
 
-  /** Field description */
   private static final long serialVersionUID = -4675080650527063196L;
 
-  //~--- constructors ---------------------------------------------------------
-
   /**
-   * Constructs a new {@link Person}.
-   * This constructor is used by JAXB.
-   *
+   * mail address of the person
    */
-  public Person() {}
+  private String mail;
 
   /**
-   * Constructs a new {@link Person}.
-   *
-   *
-   * @param name name of {@link Person}
+   * name of the person
    */
-  public Person(String name)
-  {
+  private String name;
+
+  public Person() {
+  }
+
+  public Person(String name) {
     this.name = name;
   }
 
-  /**
-   * Constructs a new {@link Person} with name and mail address.
-   *
-   *
-   * @param name name of the {@link Person}
-   * @param mail mail address of the {@link Person}
-   */
-  public Person(String name, String mail)
-  {
+  public Person(String name, String mail) {
     this.name = name;
     this.mail = mail;
   }
 
-  //~--- methods --------------------------------------------------------------
-
   /**
    * Parses the given string and returns a {@link Person} object. The string
    * should be in the format "name &gt;mail&lt;". if the string contains no
    * "&gt;&lt;" the whole string is handled as the name of the {@link Person}.
    *
-   *
    * @param value string representation of a {@link Person} object
-   *
    * @return {@link Person} object which is generated from the given string
    */
-  public static Person toPerson(String value)
-  {
+  public static Person toPerson(String value) {
     Person person = null;
 
-    if (Util.isNotEmpty(value))
-    {
+    if (Util.isNotEmpty(value)) {
       String name = value;
       String mail = null;
       int s = value.indexOf('<');
       int e = value.indexOf('>');
 
-      if ((s > 0) && (e > 0))
-      {
+      if ((s > 0) && (e > 0)) {
         name = value.substring(0, s).trim();
         mail = value.substring(s + 1, e).trim();
       }
@@ -119,56 +95,17 @@ public class Person implements Validateable, Serializable
     return person;
   }
 
-  /**
-   * {@inheritDoc}
-   *
-   * @param obj
-   *
-   * @return
-   */
-  @Override
-  public boolean equals(Object obj)
-  {
-    if (obj == null)
-    {
-      return false;
-    }
-
-    if (getClass() != obj.getClass())
-    {
-      return false;
-    }
-
-    Person other = (Person) obj;
-
-    return Objects.equal(name, other.name) && Objects.equal(mail, other.mail);
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   * @return
-   */
-  @Override
-  public int hashCode()
-  {
-    return Objects.hashCode(name, mail);
-  }
-
   /**
    * Returns a string representation of the {@link Person} object,
    * in the format "name &gt;mail&lt;".
    *
-   *
    * @return string representation of {@link Person} object
    */
   @Override
-  public String toString()
-  {
+  public String toString() {
     String out = name;
 
-    if (mail != null)
-    {
+    if (mail != null) {
       out = out.concat(" <").concat(mail).concat(">");
     }
 
@@ -180,71 +117,30 @@ public class Person implements Validateable, Serializable
   /**
    * Returns the mail address of the changeset author.
    *
-   *
-   * @return mail address of the changeset author
-   *
    * @return
    */
-  public String getMail()
-  {
+  public String getMail() {
     return mail;
   }
 
   /**
    * Returns the name of the changeset author.
    *
-   *
    * @return name of the changeset person
    */
-  public String getName()
-  {
+  public String getName() {
     return name;
   }
 
+
   /**
    * Returns true if the person is valid.
    *
-   *
    * @return true if the person is valid
    */
   @Override
-  public boolean isValid()
-  {
+  public boolean isValid() {
     return Util.isNotEmpty(name)
-           && (Util.isEmpty(mail) || ValidationUtil.isMailAddressValid(mail));
-  }
-
-  //~--- set methods ----------------------------------------------------------
-
-  /**
-   * Sets the mail address of the changeset author.
-   *
-   *
-   * @param mail mail address of the author
-   */
-  public void setMail(String mail)
-  {
-    this.mail = mail;
-  }
-
-  /**
-   * Sets the name of the changeset author.
-   *
-   *
-   * @param name name of the author
-   */
-  public void setName(String name)
-  {
-    this.name = name;
+      && (Util.isEmpty(mail) || ValidationUtil.isMailAddressValid(mail));
   }
-
-  //~--- fields ---------------------------------------------------------------
-
-  /** mail address of the person */
-  private String mail;
-
-  /**
-   * name of the person
-   */
-  private String name;
 }
diff --git a/scm-core/src/main/java/sonia/scm/repository/SubRepository.java b/scm-core/src/main/java/sonia/scm/repository/SubRepository.java
index e9ee839e2..1c0622dad 100644
--- a/scm-core/src/main/java/sonia/scm/repository/SubRepository.java
+++ b/scm-core/src/main/java/sonia/scm/repository/SubRepository.java
@@ -21,221 +21,43 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-    
-package sonia.scm.repository;
 
-//~--- non-JDK imports --------------------------------------------------------
+package sonia.scm.repository;
 
-import com.google.common.base.MoreObjects;
-import com.google.common.base.Objects;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
 
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
 import java.io.Serializable;
 
-//~--- JDK imports ------------------------------------------------------------
-
-/**
- * @since 1.10
- * @author Sebastian Sdorra
- */
-@XmlRootElement(name = "subrepository")
-@XmlAccessorType(XmlAccessType.FIELD)
-public class SubRepository implements Serializable
-{
+@EqualsAndHashCode
+@ToString
+@Getter
+@Setter
+public class SubRepository implements Serializable {
 
-  /** Field description */
   private static final long serialVersionUID = 6960065820378492531L;
 
-  //~--- constructors ---------------------------------------------------------
-
-  /**
-   * Constructs ...
-   *
-   */
-  public SubRepository() {}
+  private String browserUrl;
+  private String repositoryUrl;
+  private String revision;
 
-  /**
-   * Constructs ...
-   *
-   *
-   * @param repositoryUrl
-   */
-  public SubRepository(String repositoryUrl)
-  {
-    this.repositoryUrl = repositoryUrl;
+  public SubRepository() {
   }
 
-  /**
-   * Constructs ...
-   *
-   *
-   * @param revision
-   * @param repositoryUrl
-   */
-  public SubRepository(String repositoryUrl, String revision)
-  {
+  public SubRepository(String repositoryUrl) {
     this.repositoryUrl = repositoryUrl;
-    this.revision = revision;
   }
 
-  /**
-   * Constructs ...
-   *
-   *
-   * @param revision
-   * @param repositoryUrl
-   * @param browserUrl
-   */
-  public SubRepository(String repositoryUrl, String browserUrl, String revision)
-  {
+  public SubRepository(String repositoryUrl, String revision) {
     this.repositoryUrl = repositoryUrl;
-    this.browserUrl = browserUrl;
     this.revision = revision;
   }
 
-  //~--- methods --------------------------------------------------------------
-
-  /**
-   * {@inheritDoc}
-   *
-   *
-   * @param obj
-   *
-   * @return
-   */
-  @Override
-  public boolean equals(Object obj)
-  {
-    if (obj == null)
-    {
-      return false;
-    }
-
-    if (getClass() != obj.getClass())
-    {
-      return false;
-    }
-
-    SubRepository other = (SubRepository) obj;
-
-    return Objects.equal(repositoryUrl, other.repositoryUrl)
-           && Objects.equal(browserUrl, other.browserUrl)
-           && Objects.equal(revision, other.revision);
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   *
-   * @return
-   */
-  @Override
-  public int hashCode()
-  {
-    return Objects.hashCode(repositoryUrl, browserUrl, revision);
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   *
-   * @return
-   */
-  @Override
-  public String toString()
-  {
-    //J-
-    return MoreObjects.toStringHelper(this)
-            .add("repositoryUrl", repositoryUrl)
-            .add("browserUrl", browserUrl)
-            .add("revision", revision)
-            .toString();
-    //J+
-  }
-
-  //~--- get methods ----------------------------------------------------------
-
-  /**
-   * Method description
-   *
-   *
-   * @return
-   */
-  public String getBrowserUrl()
-  {
-    return browserUrl;
-  }
-
-  /**
-   * Method description
-   *
-   *
-   * @return
-   */
-  public String getRepositoryUrl()
-  {
-    return repositoryUrl;
-  }
-
-  /**
-   * Method description
-   *
-   *
-   * @return
-   */
-  public String getRevision()
-  {
-    return revision;
-  }
-
-  //~--- set methods ----------------------------------------------------------
-
-  /**
-   * Method description
-   *
-   *
-   * @param browserUrl
-   */
-  public void setBrowserUrl(String browserUrl)
-  {
-    this.browserUrl = browserUrl;
-  }
-
-  /**
-   * Method description
-   *
-   *
-   * @param repositoryUrl
-   */
-  public void setRepositoryUrl(String repositoryUrl)
-  {
+  public SubRepository(String repositoryUrl, String browserUrl, String revision) {
     this.repositoryUrl = repositoryUrl;
-  }
-
-  /**
-   * Method description
-   *
-   *
-   * @param revision
-   */
-  public void setRevision(String revision)
-  {
+    this.browserUrl = browserUrl;
     this.revision = revision;
   }
-
-  //~--- fields ---------------------------------------------------------------
-
-  /** Field description */
-  @XmlElement(name = "browser-url")
-  private String browserUrl;
-
-  /** Field description */
-  @XmlElement(name = "repository-url")
-  private String repositoryUrl;
-
-  /** Field description */
-  private String revision;
 }
diff --git a/scm-core/src/main/java/sonia/scm/repository/Tag.java b/scm-core/src/main/java/sonia/scm/repository/Tag.java
index c66876d0c..3c40c2f38 100644
--- a/scm-core/src/main/java/sonia/scm/repository/Tag.java
+++ b/scm-core/src/main/java/sonia/scm/repository/Tag.java
@@ -21,19 +21,12 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-    
-package sonia.scm.repository;
-
-//~--- non-JDK imports --------------------------------------------------------
-
-import com.google.common.base.MoreObjects;
-import com.google.common.base.Objects;
 
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlRootElement;
+package sonia.scm.repository;
 
-//~--- JDK imports ------------------------------------------------------------
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.ToString;
 
 /**
  * Represents a tag in a repository.
@@ -41,118 +34,22 @@ import javax.xml.bind.annotation.XmlRootElement;
  * @author Sebastian Sdorra
  * @since 1.18
  */
-@XmlRootElement(name = "tag")
-@XmlAccessorType(XmlAccessType.FIELD)
-public final class Tag
-{
+@EqualsAndHashCode
+@ToString
+@Getter
+public final class Tag {
 
-  /**
-   * Constructs a new instance of tag.
-   * This constructor should only be called from JAXB.
-   *
-   */
-  public Tag() {}
+  private final String name;
+  private final String revision;
 
   /**
    * Constructs a new tag.
    *
-   *
-   * @param name name of the tag
+   * @param name     name of the tag
    * @param revision tagged revision
    */
-  public Tag(String name, String revision)
-  {
+  public Tag(String name, String revision) {
     this.name = name;
     this.revision = revision;
   }
-
-  //~--- methods --------------------------------------------------------------
-
-  /**
-   * {@inheritDoc}
-   *
-   *
-   * @param obj
-   *
-   * @return
-   */
-  @Override
-  public boolean equals(Object obj)
-  {
-    if (obj == null)
-    {
-      return false;
-    }
-
-    if (getClass() != obj.getClass())
-    {
-      return false;
-    }
-
-    final Tag other = (Tag) obj;
-
-    return Objects.equal(name, other.name)
-      && Objects.equal(revision, other.revision);
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   *
-   * @return
-   */
-  @Override
-  public int hashCode()
-  {
-    return Objects.hashCode(name, revision);
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   *
-   * @return
-   */
-  @Override
-  public String toString()
-  {
-    //J-
-    return MoreObjects.toStringHelper(this)
-                  .add("name", name)
-                  .add("revision", revision)
-                  .toString();
-    //J+
-  }
-
-  //~--- get methods ----------------------------------------------------------
-
-  /**
-   * Returns the name of the tag.
-   *
-   *
-   * @return name of the tag
-   */
-  public String getName()
-  {
-    return name;
-  }
-
-  /**
-   * Id of the tagged revision.
-   *
-   *
-   * @return tagged revision id
-   */
-  public String getRevision()
-  {
-    return revision;
-  }
-
-  //~--- fields ---------------------------------------------------------------
-
-  /** Field description */
-  private String name;
-
-  /** Field description */
-  private String revision;
 }
diff --git a/scm-core/src/main/java/sonia/scm/repository/Tags.java b/scm-core/src/main/java/sonia/scm/repository/Tags.java
index 85642eb40..d1be764c2 100644
--- a/scm-core/src/main/java/sonia/scm/repository/Tags.java
+++ b/scm-core/src/main/java/sonia/scm/repository/Tags.java
@@ -21,139 +21,53 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-    
-package sonia.scm.repository;
 
-//~--- non-JDK imports --------------------------------------------------------
+package sonia.scm.repository;
 
-import com.google.common.base.MoreObjects;
-import com.google.common.base.Objects;
 import com.google.common.collect.Lists;
+import lombok.EqualsAndHashCode;
+import lombok.Setter;
+import lombok.ToString;
 
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
 import java.util.Iterator;
 import java.util.List;
 
-//~--- JDK imports ------------------------------------------------------------
-
 /**
  * Represents all tags of a repository.
  *
  * @author Sebastian Sdorra
  * @since 1.18
  */
-@XmlRootElement(name = "tags")
-@XmlAccessorType(XmlAccessType.FIELD)
-public final class Tags implements Iterable<Tag>
-{
-
-  /**
-   * Constructs a new instance of tags.
-   * This constructor should only be called from JAXB.
-   *
-   */
-  public Tags() {}
-
-  /**
-   * Constructs a new instance of tags.
-   *
-   *
-   * @param tags list of tags.
-   */
-  public Tags(List<Tag> tags)
-  {
-    this.tags = tags;
-  }
-
-  //~--- methods --------------------------------------------------------------
+@EqualsAndHashCode
+@ToString
+@Setter
+public final class Tags implements Iterable<Tag> {
 
-  /**
-   * {@inheritDoc}
-   *
-   *
-   * @param obj
-   *
-   * @return
-   */
-  @Override
-  public boolean equals(Object obj)
-  {
-    if (obj == null)
-    {
-      return false;
-    }
-
-    if (getClass() != obj.getClass())
-    {
-      return false;
-    }
-
-    final Tags other = (Tags) obj;
+  private List<Tag> tags;
 
-    return Objects.equal(tags, other.tags);
+  public Tags() {
   }
 
-  /**
-   * {@inheritDoc}
-   *
-   *
-   * @return
-   */
-  @Override
-  public int hashCode()
-  {
-    return Objects.hashCode(tags);
+  public Tags(List<Tag> tags) {
+    this.tags = tags;
   }
 
-  /**
-   * {@inheritDoc}
-   *
-   *
-   * @return
-   */
   @Override
-  public Iterator<Tag> iterator()
-  {
+  public Iterator<Tag> iterator() {
     return getTags().iterator();
   }
 
-  /**
-   * {@inheritDoc}
-   *
-   *
-   * @return
-   */
-  @Override
-  public String toString()
-  {
-    //J-
-    return MoreObjects.toStringHelper(this)
-                  .add("tags", tags)
-                  .toString();
-    //J+
-  }
-
-  //~--- get methods ----------------------------------------------------------
-
   /**
    * Returns the {@link Tag} with the given name or null.
    *
-   *
    * @param name name of the tag
-   *
    * @return {@link Tag} with the given name or null
    */
-  public Tag getTagByName(String name)
-  {
+  public Tag getTagByName(String name) {
     Tag tag = null;
 
-    for (Tag t : getTags())
-    {
-      if (name.equals(t.getName()))
-      {
+    for (Tag t : getTags()) {
+      if (name.equals(t.getName())) {
         tag = t;
 
         break;
@@ -166,19 +80,14 @@ public final class Tags implements Iterable<Tag>
   /**
    * Returns the {@link Tag} with the given revision or null.
    *
-   *
    * @param revision revision of the tag
-   *
    * @return {@link Tag} with the given revision or null
    */
-  public Tag getTagByRevision(String revision)
-  {
+  public Tag getTagByRevision(String revision) {
     Tag tag = null;
 
-    for (Tag t : getTags())
-    {
-      if (revision.equals(t.getRevision()))
-      {
+    for (Tag t : getTags()) {
+      if (revision.equals(t.getRevision())) {
         tag = t;
 
         break;
@@ -191,35 +100,13 @@ public final class Tags implements Iterable<Tag>
   /**
    * Returns all tags of a repository.
    *
-   *
    * @return all tags
    */
-  public List<Tag> getTags()
-  {
-    if (tags == null)
-    {
+  public List<Tag> getTags() {
+    if (tags == null) {
       tags = Lists.newArrayList();
     }
 
     return tags;
   }
-
-  //~--- set methods ----------------------------------------------------------
-
-  /**
-   * Sets all tags.
-   *
-   *
-   * @param tags tags
-   */
-  public void setTags(List<Tag> tags)
-  {
-    this.tags = tags;
-  }
-
-  //~--- fields ---------------------------------------------------------------
-
-  /** Field description */
-  @XmlElement(name = "tag")
-  private List<Tag> tags;
 }
diff --git a/scm-core/src/main/java/sonia/scm/repository/api/PushResponse.java b/scm-core/src/main/java/sonia/scm/repository/api/PushResponse.java
index 077225b1e..e639748cc 100644
--- a/scm-core/src/main/java/sonia/scm/repository/api/PushResponse.java
+++ b/scm-core/src/main/java/sonia/scm/repository/api/PushResponse.java
@@ -21,39 +21,25 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-    
-package sonia.scm.repository.api;
-
-//~--- JDK imports ------------------------------------------------------------
 
-import javax.xml.bind.annotation.XmlRootElement;
+package sonia.scm.repository.api;
 
 /**
- * The {@link PushResponse} is the result of the 
+ * The {@link PushResponse} is the result of the
  * {@link PushCommandBuilder#push(sonia.scm.repository.Repository)} method and
  * contains informations over the executed push command.
- * 
+ *
  * @author Sebastian Sdorra
  * @since 1.31
  */
-@XmlRootElement(name = "push-response")
-public final class PushResponse extends AbstractPushOrPullResponse
-{
-
-  /**
-   * Constructs a new PushResponse.
-   *
-   */
-  public PushResponse() {}
+public final class PushResponse extends AbstractPushOrPullResponse {
 
   /**
    * Constructs a new PushResponse.
    *
-   *
    * @param changesetCount count of pushed changesets
    */
-  public PushResponse(long changesetCount)
-  {
+  public PushResponse(long changesetCount) {
     super(changesetCount);
   }
 }
diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/BlameCommandRequest.java b/scm-core/src/main/java/sonia/scm/repository/spi/BlameCommandRequest.java
index ce215fa52..e208e3256 100644
--- a/scm-core/src/main/java/sonia/scm/repository/spi/BlameCommandRequest.java
+++ b/scm-core/src/main/java/sonia/scm/repository/spi/BlameCommandRequest.java
@@ -21,14 +21,17 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-    
+
 package sonia.scm.repository.spi;
 
+import lombok.EqualsAndHashCode;
+
 /**
  *
  * @author Sebastian Sdorra
  * @since 1.17
  */
+@EqualsAndHashCode(callSuper = true)
 public final class BlameCommandRequest extends FileBaseCommandRequest
 {
 
diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/BrowseCommandRequest.java b/scm-core/src/main/java/sonia/scm/repository/spi/BrowseCommandRequest.java
index 5075e83fe..c27400970 100644
--- a/scm-core/src/main/java/sonia/scm/repository/spi/BrowseCommandRequest.java
+++ b/scm-core/src/main/java/sonia/scm/repository/spi/BrowseCommandRequest.java
@@ -21,13 +21,11 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-    
-package sonia.scm.repository.spi;
 
-//~--- non-JDK imports --------------------------------------------------------
+package sonia.scm.repository.spi;
 
-import com.google.common.base.MoreObjects;
-import com.google.common.base.Objects;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
 import sonia.scm.repository.BrowserResult;
 
 import java.util.function.Consumer;
@@ -37,6 +35,8 @@ import java.util.function.Consumer;
  * @author Sebastian Sdorra
  * @since 1.17
  */
+@EqualsAndHashCode(callSuper = true)
+@ToString
 public final class BrowseCommandRequest extends FileBaseCommandRequest
 {
 
@@ -53,14 +53,6 @@ public final class BrowseCommandRequest extends FileBaseCommandRequest
     this.updater = updater;
   }
 
-  //~--- methods --------------------------------------------------------------
-
-  /**
-   * {@inheritDoc}
-   *
-   *
-   * @return
-   */
   @Override
   public BrowseCommandRequest clone()
   {
@@ -80,74 +72,6 @@ public final class BrowseCommandRequest extends FileBaseCommandRequest
     return clone;
   }
 
-  /**
-   * {@inheritDoc}
-   *
-   *
-   * @param obj
-   *
-   * @return
-   */
-  @Override
-  public boolean equals(Object obj)
-  {
-    if (obj == null)
-    {
-      return false;
-    }
-
-    if (getClass() != obj.getClass())
-    {
-      return false;
-    }
-
-    final BrowseCommandRequest other = (BrowseCommandRequest) obj;
-
-    return super.equals(obj)
-      && Objects.equal(recursive, other.recursive)
-      && Objects.equal(disableLastCommit, other.disableLastCommit)
-      && Objects.equal(disableSubRepositoryDetection, other.disableSubRepositoryDetection)
-      && Objects.equal(offset, other.offset)
-      && Objects.equal(limit, other.limit);
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   *
-   * @return
-   */
-  @Override
-  public int hashCode()
-  {
-    return Objects.hashCode(super.hashCode(), recursive, disableLastCommit,
-      disableSubRepositoryDetection, offset, limit);
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   *
-   * @return
-   */
-  @Override
-  public String toString()
-  {
-    //J-
-    return MoreObjects.toStringHelper(this)
-                  .add("path", getPath())
-                  .add("revision", getRevision())
-                  .add("recursive", recursive)
-                  .add("disableLastCommit", disableLastCommit)
-                  .add("disableSubRepositoryDetection", disableSubRepositoryDetection)
-                  .add("limit", limit)
-                  .add("offset", offset)
-                  .toString();
-    //J+
-  }
-
-  //~--- set methods ----------------------------------------------------------
-
   /**
    * True to disable the last commit.
    *
@@ -292,5 +216,6 @@ public final class BrowseCommandRequest extends FileBaseCommandRequest
 
   // WARNING / TODO: This field creates a reverse channel from the implementation to the API. This will break
   // whenever the API runs in a different process than the SPI (for example to run explicit hosts for git repositories).
+  @EqualsAndHashCode.Exclude
   private final transient Consumer<BrowserResult> updater;
 }
diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/CatCommandRequest.java b/scm-core/src/main/java/sonia/scm/repository/spi/CatCommandRequest.java
index 5c96c237c..ed8424cfc 100644
--- a/scm-core/src/main/java/sonia/scm/repository/spi/CatCommandRequest.java
+++ b/scm-core/src/main/java/sonia/scm/repository/spi/CatCommandRequest.java
@@ -21,14 +21,17 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-    
+
 package sonia.scm.repository.spi;
 
+import lombok.EqualsAndHashCode;
+
 /**
  *
  * @author Sebastian Sdorra
  * @since 1.17
  */
+@EqualsAndHashCode(callSuper = true)
 public final class CatCommandRequest extends FileBaseCommandRequest
 {
 
diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/DiffCommandRequest.java b/scm-core/src/main/java/sonia/scm/repository/spi/DiffCommandRequest.java
index 58cea9bdb..6f6443b83 100644
--- a/scm-core/src/main/java/sonia/scm/repository/spi/DiffCommandRequest.java
+++ b/scm-core/src/main/java/sonia/scm/repository/spi/DiffCommandRequest.java
@@ -21,13 +21,13 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-    
+
 package sonia.scm.repository.spi;
 
 //~--- non-JDK imports --------------------------------------------------------
 
 import com.google.common.base.Strings;
-
+import lombok.EqualsAndHashCode;
 import sonia.scm.Validateable;
 import sonia.scm.repository.api.DiffFormat;
 
@@ -36,21 +36,12 @@ import sonia.scm.repository.api.DiffFormat;
  * @author Sebastian Sdorra
  * @since 1.17
  */
+@EqualsAndHashCode(callSuper = true)
 public final class DiffCommandRequest extends FileBaseCommandRequest
-  implements Validateable
-{
+  implements Validateable {
 
-  /** Field description */
   private static final long serialVersionUID = 4026911212676859626L;
 
-  //~--- methods --------------------------------------------------------------
-
-  /**
-   * Method description
-   *
-   *
-   * @return
-   */
   @Override
   public DiffCommandRequest clone()
   {
@@ -70,14 +61,6 @@ public final class DiffCommandRequest extends FileBaseCommandRequest
     return clone;
   }
 
-  //~--- get methods ----------------------------------------------------------
-
-  /**
-   * Method description
-   *
-   *
-   * @return
-   */
   @Override
   public boolean isValid()
   {
@@ -85,8 +68,6 @@ public final class DiffCommandRequest extends FileBaseCommandRequest
       ||!Strings.isNullOrEmpty(getRevision());
   }
 
-  //~--- set methods ----------------------------------------------------------
-
   /**
    * Sets the diff format which should be used for the output.
    *
@@ -103,7 +84,6 @@ public final class DiffCommandRequest extends FileBaseCommandRequest
   public void setAncestorChangeset(String ancestorChangeset) {
     this.ancestorChangeset = ancestorChangeset;
   }
-//~--- get methods ----------------------------------------------------------
 
   /**
    * Return the output format of the diff command.
@@ -121,7 +101,6 @@ public final class DiffCommandRequest extends FileBaseCommandRequest
   public String getAncestorChangeset() {
     return ancestorChangeset;
   }
-//~--- fields ---------------------------------------------------------------
 
   /** diff format */
   private DiffFormat format = DiffFormat.NATIVE;
diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/FileBaseCommandRequest.java b/scm-core/src/main/java/sonia/scm/repository/spi/FileBaseCommandRequest.java
index 8994db75a..457c52869 100644
--- a/scm-core/src/main/java/sonia/scm/repository/spi/FileBaseCommandRequest.java
+++ b/scm-core/src/main/java/sonia/scm/repository/spi/FileBaseCommandRequest.java
@@ -21,13 +21,13 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-    
+
 package sonia.scm.repository.spi;
 
 //~--- non-JDK imports --------------------------------------------------------
 
-import com.google.common.base.MoreObjects;
-import com.google.common.base.Objects;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
 
 import java.io.Serializable;
 
@@ -38,54 +38,14 @@ import java.io.Serializable;
  * @author Sebastian Sdorra
  * @since 1.17
  */
+@EqualsAndHashCode
+@ToString
 public abstract class FileBaseCommandRequest
-  implements Resetable, Serializable, Cloneable
-{
+  implements Resetable, Serializable, Cloneable {
 
   /** Field description */
   private static final long serialVersionUID = -3442101119408346165L;
 
-  //~--- methods --------------------------------------------------------------
-
-  /**
-   * Method description
-   *
-   *
-   * @param obj
-   *
-   * @return
-   */
-  @Override
-  public boolean equals(Object obj)
-  {
-    if (obj == null)
-    {
-      return false;
-    }
-
-    if (getClass() != obj.getClass())
-    {
-      return false;
-    }
-
-    final FileBaseCommandRequest other = (FileBaseCommandRequest) obj;
-
-    return Objects.equal(path, other.path)
-      && Objects.equal(revision, other.revision);
-  }
-
-  /**
-   * Method description
-   *
-   *
-   * @return
-   */
-  @Override
-  public int hashCode()
-  {
-    return Objects.hashCode(path, revision);
-  }
-
   /**
    * Method description
    *
@@ -97,81 +57,26 @@ public abstract class FileBaseCommandRequest
     revision = null;
   }
 
-  /**
-   * Method description
-   *
-   *
-   * @return
-   */
-  @Override
-  public String toString()
-  {
-    //J-
-    return MoreObjects.toStringHelper(this)
-                  .add("path", path)
-                  .add("revision", revision)
-                  .toString();
-    //J+
-  }
-
-  //~--- set methods ----------------------------------------------------------
-
-  /**
-   * Method description
-   *
-   *
-   * @param path
-   */
   public void setPath(String path)
   {
     this.path = path;
   }
 
-  /**
-   * Method description
-   *
-   *
-   * @param revision
-   */
   public void setRevision(String revision)
   {
     this.revision = revision;
   }
 
-  //~--- get methods ----------------------------------------------------------
-
-  /**
-   * Method description
-   *
-   *
-   * @return
-   */
   public String getPath()
   {
     return path;
   }
 
-  /**
-   * Method description
-   *
-   *
-   * @return
-   */
   public String getRevision()
   {
     return revision;
   }
 
-  //~--- methods --------------------------------------------------------------
-
-  /**
-   * Method description
-   *
-   *
-   * @return
-   *
-   * @throws CloneNotSupportedException
-   */
   @Override
   protected FileBaseCommandRequest clone() throws CloneNotSupportedException
   {
@@ -192,11 +97,7 @@ public abstract class FileBaseCommandRequest
     return clone;
   }
 
-  //~--- fields ---------------------------------------------------------------
-
-  /** Field description */
   private String path;
 
-  /** Field description */
   private String revision;
 }
diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHandler.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHandler.java
index 60ec6f324..386483a43 100644
--- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHandler.java
+++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHandler.java
@@ -21,7 +21,7 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-    
+
 package sonia.scm.repository;
 
 //~--- non-JDK imports --------------------------------------------------------
@@ -56,55 +56,37 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.text.MessageFormat;
 
-//~--- JDK imports ------------------------------------------------------------
-
-/**
- *
- * @author Sebastian Sdorra
- */
 @Singleton
 @Extension
 public class HgRepositoryHandler
-  extends AbstractSimpleRepositoryHandler<HgConfig>
-{
+  extends AbstractSimpleRepositoryHandler<HgConfig> {
 
-  /** Field description */
   public static final String PATH_HOOK = ".hook-1.8";
-
-  /** Field description */
-  public static final String RESOURCE_VERSION =
-    "sonia/scm/version/scm-hg-plugin";
-
-  /** Field description */
+  public static final String RESOURCE_VERSION = "sonia/scm/version/scm-hg-plugin";
   public static final String TYPE_DISPLAYNAME = "Mercurial";
-
-  /** Field description */
   public static final String TYPE_NAME = "hg";
-
-  /** Field description */
   public static final RepositoryType TYPE = new RepositoryType(TYPE_NAME,
-                                    TYPE_DISPLAYNAME,
-                                    HgRepositoryServiceProvider.COMMANDS,
-                                    HgRepositoryServiceProvider.FEATURES);
+    TYPE_DISPLAYNAME,
+    HgRepositoryServiceProvider.COMMANDS,
+    HgRepositoryServiceProvider.FEATURES);
 
-  /** the logger for HgRepositoryHandler */
-  private static final Logger logger =
-    LoggerFactory.getLogger(HgRepositoryHandler.class);
+  private static final Logger logger = LoggerFactory.getLogger(HgRepositoryHandler.class);
 
-  /** Field description */
-  public static final String PATH_HGRC =
-    ".hg".concat(File.separator).concat("hgrc");
+  public static final String PATH_HGRC = ".hg".concat(File.separator).concat("hgrc");
   private static final String CONFIG_SECTION_SCMM = "scmm";
   private static final String CONFIG_KEY_REPOSITORY_ID = "repositoryid";
 
-  //~--- constructors ---------------------------------------------------------
+  private final Provider<HgContext> hgContextProvider;
+
+  private final HgWorkdirFactory workdirFactory;
+
+  private final JAXBContext jaxbContext;
 
   @Inject
   public HgRepositoryHandler(ConfigurationStoreFactory storeFactory,
                              Provider<HgContext> hgContextProvider,
                              RepositoryLocationResolver repositoryLocationResolver,
-                             PluginLoader pluginLoader, HgWorkdirFactory workdirFactory)
-  {
+                             PluginLoader pluginLoader, HgWorkdirFactory workdirFactory) {
     super(storeFactory, repositoryLocationResolver, pluginLoader);
     this.hgContextProvider = hgContextProvider;
     this.workdirFactory = workdirFactory;
@@ -121,22 +103,11 @@ public class HgRepositoryHandler
     }
   }
 
-  //~--- methods --------------------------------------------------------------
-
-  /**
-   * Method description
-   *
-   *
-   * @param autoConfig
-   */
-  public void doAutoConfiguration(HgConfig autoConfig)
-  {
+  public void doAutoConfiguration(HgConfig autoConfig) {
     HgInstaller installer = HgInstallerFactory.createInstaller();
 
-    try
-    {
-      if (logger.isDebugEnabled())
-      {
+    try {
+      if (logger.isDebugEnabled()) {
         logger.debug("installing mercurial with {}",
           installer.getClass().getName());
       }
@@ -144,161 +115,85 @@ public class HgRepositoryHandler
       installer.install(baseDirectory, autoConfig);
       config = autoConfig;
       storeConfig();
-    }
-    catch (IOException ioe)
-    {
-      if (logger.isErrorEnabled())
-      {
+    } catch (IOException ioe) {
+      if (logger.isErrorEnabled()) {
         logger.error("Could not write Hg CGI for inital config.  "
           + "HgWeb may not function until a new Hg config is set", ioe);
       }
     }
   }
 
-  /**
-   * Method description
-   *
-   *
-   * @param context
-   */
   @Override
-  public void init(SCMContextProvider context)
-  {
+  public void init(SCMContextProvider context) {
     super.init(context);
     writePythonScripts(context);
 
     // fix wrong hg.bat from package installation
-    if (SystemUtil.isWindows())
-    {
+    if (SystemUtil.isWindows()) {
       HgWindowsPackageFix.fixHgPackage(context, getConfig());
     }
   }
 
-  /**
-   * Method description
-   *
-   */
   @Override
-  public void loadConfig()
-  {
+  public void loadConfig() {
     super.loadConfig();
 
-    if (config == null)
-    {
+    if (config == null) {
       doAutoConfiguration(new HgConfig());
     }
   }
 
-  //~--- get methods ----------------------------------------------------------
-
-  /**
-   * Method description
-   *
-   *
-   * @return
-   */
-  public HgContext getHgContext()
-  {
+  public HgContext getHgContext() {
     HgContext context = hgContextProvider.get();
 
-    if (context == null)
-    {
+    if (context == null) {
       context = new HgContext();
     }
 
     return context;
   }
 
-  /**
-   * Method description
-   *
-   *
-   * @return
-   */
   @Override
-  public ImportHandler getImportHandler()
-  {
+  public ImportHandler getImportHandler() {
     return new HgImportHandler(this);
   }
 
-  /**
-   * Method description
-   *
-   *
-   * @return
-   */
-  public JAXBContext getJaxbContext()
-  {
-    return jaxbContext;
-  }
-
-  /**
-   * Method description
-   *
-   *
-   * @return
-   */
   @Override
-  public RepositoryType getType()
-  {
+  public RepositoryType getType() {
     return TYPE;
   }
 
-  /**
-   * Method description
-   *
-   *
-   * @return
-   */
   @Override
-  public String getVersionInformation()
-  {
+  public String getVersionInformation() {
     String version = getStringFromResource(RESOURCE_VERSION,
-                       DEFAULT_VERSION_INFORMATION);
+      DEFAULT_VERSION_INFORMATION);
 
-    try
-    {
+    try {
       HgVersion hgVersion = new HgVersionHandler(this, hgContextProvider.get(),
-                              baseDirectory).getVersion();
+        baseDirectory).getVersion();
 
-      if (hgVersion != null)
-      {
-        if (logger.isDebugEnabled())
-        {
+      if (hgVersion != null) {
+        if (logger.isDebugEnabled()) {
           logger.debug("mercurial/python informations: {}", hgVersion);
         }
 
         version = MessageFormat.format(version, hgVersion.getPython(),
           hgVersion.getMercurial());
-      }
-      else if (logger.isWarnEnabled())
-      {
+      } else if (logger.isWarnEnabled()) {
         logger.warn("could not retrieve version informations");
       }
-    }
-    catch (Exception ex)
-    {
+    } catch (Exception ex) {
       logger.error("could not read version informations", ex);
     }
 
     return version;
   }
 
-  /**
-   * Method description
-   *
-   *
-   * @param repository
-   * @param directory
-   *
-   * @return
-   */
   @Override
   protected ExtendedCommand buildCreateCommand(Repository repository,
-    File directory)
-  {
+                                               File directory) {
     ExtendedCommand cmd = new ExtendedCommand(config.getHgBinary(), "init",
-                            directory.getAbsolutePath());
+      directory.getAbsolutePath());
 
     // copy system environment, because of the PATH variable
     cmd.setUseSystemEnvironment(true);
@@ -315,13 +210,11 @@ public class HgRepositoryHandler
    *
    * @param repository
    * @param directory
-   *
    * @throws IOException
    */
   @Override
   protected void postCreate(Repository repository, File directory)
-    throws IOException
-  {
+    throws IOException {
     File hgrcFile = new File(directory, PATH_HGRC);
     INIConfiguration hgrc = new INIConfiguration();
 
@@ -336,55 +229,30 @@ public class HgRepositoryHandler
     writer.write(hgrc, hgrcFile);
   }
 
-  //~--- get methods ----------------------------------------------------------
-
-  /**
-   * Method description
-   *
-   *
-   * @return
-   */
   @Override
-  protected Class<HgConfig> getConfigClass()
-  {
+  protected Class<HgConfig> getConfigClass() {
     return HgConfig.class;
   }
 
-  //~--- methods --------------------------------------------------------------
-
-  /**
-   * Method description
-   *
-   *
-   * @param context
-   */
-  private void writePythonScripts(SCMContextProvider context)
-  {
+  private void writePythonScripts(SCMContextProvider context) {
     IOUtil.mkdirs(HgPythonScript.getScriptDirectory(context));
 
-    for (HgPythonScript script : HgPythonScript.values())
-    {
-      if (logger.isDebugEnabled())
-      {
+    for (HgPythonScript script : HgPythonScript.values()) {
+      if (logger.isDebugEnabled()) {
         logger.debug("write python script {}", script.getName());
       }
 
       InputStream content = null;
       OutputStream output = null;
 
-      try
-      {
+      try {
         content = HgRepositoryHandler.class.getResourceAsStream(
           script.getResourcePath());
         output = new FileOutputStream(script.getFile(context));
         IOUtil.copy(content, output);
-      }
-      catch (IOException ex)
-      {
+      } catch (IOException ex) {
         logger.error("could not write script", ex);
-      }
-      finally
-      {
+      } finally {
         IOUtil.close(content);
         IOUtil.close(output);
       }
@@ -395,13 +263,7 @@ public class HgRepositoryHandler
     return workdirFactory;
   }
 
-  //~--- fields ---------------------------------------------------------------
-
-  /** Field description */
-  private final Provider<HgContext> hgContextProvider;
-
-  /** Field description */
-  private JAXBContext jaxbContext;
-
-  private final HgWorkdirFactory workdirFactory;
+  public JAXBContext getJaxbContext() {
+    return jaxbContext;
+  }
 }
diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgVersion.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgVersion.java
index 7c35f91a2..36bd6abfa 100644
--- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgVersion.java
+++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgVersion.java
@@ -21,138 +21,29 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-    
-package sonia.scm.repository;
 
-//~--- non-JDK imports --------------------------------------------------------
+package sonia.scm.repository;
 
-import com.google.common.base.MoreObjects;
-import com.google.common.base.Objects;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
 
-//~--- JDK imports ------------------------------------------------------------
-
 /**
  *
  * @author Sebastian Sdorra
  */
 @XmlRootElement(name = "version")
 @XmlAccessorType(XmlAccessType.FIELD)
-public class HgVersion
-{
-
-  /**
-   * Method description
-   *
-   *
-   * @param obj
-   *
-   * @return
-   */
-  @Override
-  public boolean equals(Object obj)
-  {
-    if (obj == null)
-    {
-      return false;
-    }
-
-    if (getClass() != obj.getClass())
-    {
-      return false;
-    }
-
-    final HgVersion other = (HgVersion) obj;
-
-    return Objects.equal(mercurial, other.mercurial)
-           && Objects.equal(python, other.python);
-  }
-
-  /**
-   * Method description
-   *
-   *
-   * @return
-   */
-  @Override
-  public int hashCode()
-  {
-    return Objects.hashCode(mercurial, python);
-  }
-
-  /**
-   * Method description
-   *
-   *
-   * @return
-   */
-  @Override
-  public String toString()
-  {
-    //J-
-    return MoreObjects.toStringHelper(this)
-                  .add("mercurial", mercurial)
-                  .add("python", python)
-                  .toString();
-    //J+
-  }
-
-  //~--- get methods ----------------------------------------------------------
-
-  /**
-   * Method description
-   *
-   *
-   * @return
-   */
-  public String getMercurial()
-  {
-    return mercurial;
-  }
-
-  /**
-   * Method description
-   *
-   *
-   * @return
-   */
-  public String getPython()
-  {
-    return python;
-  }
-
-  //~--- set methods ----------------------------------------------------------
-
-  /**
-   * Method description
-   *
-   *
-   * @param mercurial
-   */
-  public void setMercurial(String mercurial)
-  {
-    this.mercurial = mercurial;
-  }
-
-  /**
-   * Method description
-   *
-   *
-   * @param python
-   */
-  public void setPython(String python)
-  {
-    this.python = python;
-  }
-
-  //~--- fields ---------------------------------------------------------------
-
-  /** Field description */
+@EqualsAndHashCode
+@Getter
+@Setter
+@ToString
+public class HgVersion {
   private String mercurial;
-
-  /** Field description */
   private String python;
 }
diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/IncomingOutgoingTestBase.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/IncomingOutgoingTestBase.java
index fb026163a..616235114 100644
--- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/IncomingOutgoingTestBase.java
+++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/IncomingOutgoingTestBase.java
@@ -42,7 +42,6 @@ import sonia.scm.repository.HgConfig;
 import sonia.scm.repository.HgContext;
 import sonia.scm.repository.HgRepositoryHandler;
 import sonia.scm.repository.HgTestUtil;
-import sonia.scm.repository.RepositoryPathNotFoundException;
 import sonia.scm.user.User;
 import sonia.scm.user.UserTestData;
 import sonia.scm.util.MockUtil;
@@ -66,11 +65,10 @@ public abstract class IncomingOutgoingTestBase extends AbstractTestBase
   /**
    * Method description
    *
-   *
    * @throws IOException
    */
   @Before
-  public void initHgHandler() throws IOException, RepositoryPathNotFoundException {
+  public void initHgHandler() throws IOException {
     HgRepositoryHandler temp = HgTestUtil.createHandler(tempFolder.newFolder());
 
     HgTestUtil.checkForSkip(temp);
['scm-core/src/main/java/sonia/scm/repository/Person.java', 'scm-core/src/main/java/sonia/scm/repository/spi/BlameCommandRequest.java', 'scm-core/src/main/java/sonia/scm/repository/Modifications.java', 'scm-core/src/main/java/sonia/scm/repository/ImportResult.java', 'scm-core/src/main/java/sonia/scm/repository/spi/FileBaseCommandRequest.java', 'scm-core/src/main/java/sonia/scm/repository/Branches.java', 'scm-core/src/main/java/sonia/scm/repository/ChangesetPagingResult.java', 'scm-core/src/main/java/sonia/scm/repository/FileObject.java', 'scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgVersion.java', 'scm-core/src/main/java/sonia/scm/repository/BlameResult.java', 'scm-core/src/main/java/sonia/scm/repository/SubRepository.java', 'scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHandler.java', 'CHANGELOG.md', 'scm-core/src/main/java/sonia/scm/repository/spi/BrowseCommandRequest.java', 'scm-core/src/main/java/sonia/scm/repository/Tag.java', 'scm-core/src/main/java/sonia/scm/repository/spi/DiffCommandRequest.java', 'scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/IncomingOutgoingTestBase.java', 'scm-core/src/main/java/sonia/scm/repository/Changeset.java', 'scm-core/src/main/java/sonia/scm/repository/spi/CatCommandRequest.java', 'scm-core/src/main/java/sonia/scm/repository/api/PushResponse.java', 'scm-core/src/main/java/sonia/scm/repository/Tags.java', 'scm-core/src/main/java/sonia/scm/repository/BrowserResult.java']