diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..dc4fc0a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+.idea
+.classpath
+.project
+/.settings
+/bazel-*
diff --git a/BUILD b/BUILD
new file mode 100644
index 0000000..68ab242
--- /dev/null
+++ b/BUILD
@@ -0,0 +1,36 @@
+load("//tools/bzl:junit.bzl", "junit_tests")
+load(
+    "//tools/bzl:plugin.bzl",
+    "gerrit_plugin",
+    "PLUGIN_DEPS",
+    "PLUGIN_TEST_DEPS",
+)
+
+gerrit_plugin(
+    name = "its-redmine",
+    srcs = glob(["src/main/java/**/*.java"]),
+    resources = glob(["src/main/resources/**/*"]),
+    manifest_entries = [
+        "Gerrit-PluginName: its-redmine",
+        "Gerrit-Module: com.googlesource.gerrit.plugins.its.redmine.RedmineModule",
+        "Gerrit-InitStep: com.googlesource.gerrit.plugins.its.redmine.InitRedmine",
+        "Gerrit-ReloadMode: reload",
+        "Implementation-Title: Redmine ITS Plugin",
+    ],
+    deps = [
+        "//plugins/its-base",
+        "@redmineapi//jar",
+    ],
+)
+
+junit_tests(
+    name = "its_redmine_tests",
+    srcs = glob(["src/test/java/**/*.java"]),
+    tags = ["its-redmine"],
+    deps = PLUGIN_DEPS + PLUGIN_TEST_DEPS + [
+         "@redmineapi//jar",
+        ":its-redmine__plugin",
+        "//plugins/its-base:its-base",
+        "//plugins/its-base:its-base_tests-utils",
+    ],
+)
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..11069ed
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,201 @@
+                              Apache License
+                        Version 2.0, January 2004
+                     http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+   "License" shall mean the terms and conditions for use, reproduction,
+   and distribution as defined by Sections 1 through 9 of this document.
+
+   "Licensor" shall mean the copyright owner or entity authorized by
+   the copyright owner that is granting the License.
+
+   "Legal Entity" shall mean the union of the acting entity and all
+   other entities that control, are controlled by, or are under common
+   control with that entity. For the purposes of this definition,
+   "control" means (i) the power, direct or indirect, to cause the
+   direction or management of such entity, whether by contract or
+   otherwise, or (ii) ownership of fifty percent (50%) or more of the
+   outstanding shares, or (iii) beneficial ownership of such entity.
+
+   "You" (or "Your") shall mean an individual or Legal Entity
+   exercising permissions granted by this License.
+
+   "Source" form shall mean the preferred form for making modifications,
+   including but not limited to software source code, documentation
+   source, and configuration files.
+
+   "Object" form shall mean any form resulting from mechanical
+   transformation or translation of a Source form, including but
+   not limited to compiled object code, generated documentation,
+   and conversions to other media types.
+
+   "Work" shall mean the work of authorship, whether in Source or
+   Object form, made available under the License, as indicated by a
+   copyright notice that is included in or attached to the work
+   (an example is provided in the Appendix below).
+
+   "Derivative Works" shall mean any work, whether in Source or Object
+   form, that is based on (or derived from) the Work and for which the
+   editorial revisions, annotations, elaborations, or other modifications
+   represent, as a whole, an original work of authorship. For the purposes
+   of this License, Derivative Works shall not include works that remain
+   separable from, or merely link (or bind by name) to the interfaces of,
+   the Work and Derivative Works thereof.
+
+   "Contribution" shall mean any work of authorship, including
+   the original version of the Work and any modifications or additions
+   to that Work or Derivative Works thereof, that is intentionally
+   submitted to Licensor for inclusion in the Work by the copyright owner
+   or by an individual or Legal Entity authorized to submit on behalf of
+   the copyright owner. For the purposes of this definition, "submitted"
+   means any form of electronic, verbal, or written communication sent
+   to the Licensor or its representatives, including but not limited to
+   communication on electronic mailing lists, source code control systems,
+   and issue tracking systems that are managed by, or on behalf of, the
+   Licensor for the purpose of discussing and improving the Work, but
+   excluding communication that is conspicuously marked or otherwise
+   designated in writing by the copyright owner as "Not a Contribution."
+
+   "Contributor" shall mean Licensor and any individual or Legal Entity
+   on behalf of whom a Contribution has been received by Licensor and
+   subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+   this License, each Contributor hereby grants to You a perpetual,
+   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+   copyright license to reproduce, prepare Derivative Works of,
+   publicly display, publicly perform, sublicense, and distribute the
+   Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+   this License, each Contributor hereby grants to You a perpetual,
+   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+   (except as stated in this section) patent license to make, have made,
+   use, offer to sell, sell, import, and otherwise transfer the Work,
+   where such license applies only to those patent claims licensable
+   by such Contributor that are necessarily infringed by their
+   Contribution(s) alone or by combination of their Contribution(s)
+   with the Work to which such Contribution(s) was submitted. If You
+   institute patent litigation against any entity (including a
+   cross-claim or counterclaim in a lawsuit) alleging that the Work
+   or a Contribution incorporated within the Work constitutes direct
+   or contributory patent infringement, then any patent licenses
+   granted to You under this License for that Work shall terminate
+   as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+   Work or Derivative Works thereof in any medium, with or without
+   modifications, and in Source or Object form, provided that You
+   meet the following conditions:
+
+   (a) You must give any other recipients of the Work or
+       Derivative Works a copy of this License; and
+
+   (b) You must cause any modified files to carry prominent notices
+       stating that You changed the files; and
+
+   (c) You must retain, in the Source form of any Derivative Works
+       that You distribute, all copyright, patent, trademark, and
+       attribution notices from the Source form of the Work,
+       excluding those notices that do not pertain to any part of
+       the Derivative Works; and
+
+   (d) If the Work includes a "NOTICE" text file as part of its
+       distribution, then any Derivative Works that You distribute must
+       include a readable copy of the attribution notices contained
+       within such NOTICE file, excluding those notices that do not
+       pertain to any part of the Derivative Works, in at least one
+       of the following places: within a NOTICE text file distributed
+       as part of the Derivative Works; within the Source form or
+       documentation, if provided along with the Derivative Works; or,
+       within a display generated by the Derivative Works, if and
+       wherever such third-party notices normally appear. The contents
+       of the NOTICE file are for informational purposes only and
+       do not modify the License. You may add Your own attribution
+       notices within Derivative Works that You distribute, alongside
+       or as an addendum to the NOTICE text from the Work, provided
+       that such additional attribution notices cannot be construed
+       as modifying the License.
+
+   You may add Your own copyright statement to Your modifications and
+   may provide additional or different license terms and conditions
+   for use, reproduction, or distribution of Your modifications, or
+   for any such Derivative Works as a whole, provided Your use,
+   reproduction, and distribution of the Work otherwise complies with
+   the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+   any Contribution intentionally submitted for inclusion in the Work
+   by You to the Licensor shall be under the terms and conditions of
+   this License, without any additional terms or conditions.
+   Notwithstanding the above, nothing herein shall supersede or modify
+   the terms of any separate license agreement you may have executed
+   with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+   names, trademarks, service marks, or product names of the Licensor,
+   except as required for reasonable and customary use in describing the
+   origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+   agreed to in writing, Licensor provides the Work (and each
+   Contributor provides its Contributions) on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+   implied, including, without limitation, any warranties or conditions
+   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+   PARTICULAR PURPOSE. You are solely responsible for determining the
+   appropriateness of using or redistributing the Work and assume any
+   risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+   whether in tort (including negligence), contract, or otherwise,
+   unless required by applicable law (such as deliberate and grossly
+   negligent acts) or agreed to in writing, shall any Contributor be
+   liable to You for damages, including any direct, indirect, special,
+   incidental, or consequential damages of any character arising as a
+   result of this License or out of the use or inability to use the
+   Work (including but not limited to damages for loss of goodwill,
+   work stoppage, computer failure or malfunction, or any and all
+   other commercial damages or losses), even if such Contributor
+   has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+   the Work or Derivative Works thereof, You may choose to offer,
+   and charge a fee for, acceptance of support, warranty, indemnity,
+   or other liability obligations and/or rights consistent with this
+   License. However, in accepting such obligations, You may act only
+   on Your own behalf and on Your sole responsibility, not on behalf
+   of any other Contributor, and only if You agree to indemnify,
+   defend, and hold each Contributor harmless for any liability
+   incurred by, or claims asserted against, such Contributor by reason
+   of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+   To apply the Apache License to your work, attach the following
+   boilerplate notice, with the fields enclosed by brackets "[]"
+   replaced with your own identifying information. (Don't include
+   the brackets!)  The text should be enclosed in the appropriate
+   comment syntax for the file format. We also recommend that a
+   file or class name and description of purpose be included on the
+   same "printed page" as the copyright notice for easier
+   identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/external_plugin_deps.bzl b/external_plugin_deps.bzl
new file mode 100644
index 0000000..d62f260
--- /dev/null
+++ b/external_plugin_deps.bzl
@@ -0,0 +1,8 @@
+load("//tools/bzl:maven_jar.bzl", "maven_jar")
+
+def external_plugin_deps():
+  maven_jar(
+    name = 'redmineapi',
+    artifact = 'com.taskadapter:redmine-java-api:3.0.1',
+    sha1 = 'd315913ccb7d4ee7bcb853a0c8f11c442e30e331',
+  )
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/redmine/InitRedmine.java b/src/main/java/com/googlesource/gerrit/plugins/its/redmine/InitRedmine.java
new file mode 100644
index 0000000..31c0c87
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/redmine/InitRedmine.java
@@ -0,0 +1,105 @@
+// Copyright (C) 2017 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.googlesource.gerrit.plugins.its.redmine;
+
+import com.google.gerrit.extensions.annotations.PluginName;
+import com.google.gerrit.pgm.init.api.AllProjectsConfig;
+import com.google.gerrit.pgm.init.api.AllProjectsNameOnInitProvider;
+import com.google.gerrit.pgm.init.api.ConsoleUI;
+import com.google.gerrit.pgm.init.api.InitFlags;
+import com.google.gerrit.pgm.init.api.Section;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import com.googlesource.gerrit.plugins.its.base.its.InitIts;
+import com.googlesource.gerrit.plugins.its.base.validation.ItsAssociationPolicy;
+import java.io.IOException;
+import org.eclipse.jgit.errors.ConfigInvalidException;
+
+/** Initialize the GitRepositoryManager configuration section. */
+@Singleton
+class InitRedmine extends InitIts {
+  private final String pluginName;
+  private final Section.Factory sections;
+  private final InitFlags flags;
+  private Section redmine;
+  private Section redmineComment;
+  private String redmineUrl;
+  private String redmineUsername;
+  private String redmineApiKey;
+
+  @Inject
+  InitRedmine(
+      @PluginName String pluginName,
+      ConsoleUI ui,
+      Section.Factory sections,
+      AllProjectsConfig allProjectsConfig,
+      AllProjectsNameOnInitProvider allProjects,
+      InitFlags flags) {
+    super(pluginName, "Redmine", ui, allProjectsConfig, allProjects);
+    this.pluginName = pluginName;
+    this.sections = sections;
+    this.flags = flags;
+  }
+
+  @Override
+  public void run() throws IOException, ConfigInvalidException {
+    super.run();
+
+    ui.message("\n");
+    ui.header("Redmine connectivity");
+
+    init();
+  }
+
+  private void init() {
+    this.redmine = sections.get(pluginName, null);
+    this.redmineComment = sections.get(COMMENT_LINK_SECTION, pluginName);
+
+    do {
+      enterRedmineConnectivity();
+    } while (redmineUrl != null
+        && (isConnectivityRequested(redmineUrl) && !isRedmineConnectSuccessful()));
+
+    if (redmineUrl == null) {
+      return;
+    }
+
+    ui.header("Redmine issue-tracking association");
+    redmineComment.string("Redmine issue number regex", "match", "#([1-9][0-9]*)");
+    redmineComment.set("html", String.format("<a href=\"%s/issues/$1\">#$1</a>", redmineUrl));
+    redmineComment.select(
+        "Issue number enforced in commit message", "association", ItsAssociationPolicy.SUGGESTED);
+  }
+
+  public void enterRedmineConnectivity() {
+    redmineUrl = redmine.string("Redmine URL (empty to skip)", "url", null);
+    if (redmineUrl != null) {
+      redmineApiKey = redmine.string("Redmine api_key", "apiKey", "");
+    }
+  }
+
+  private boolean isRedmineConnectSuccessful() {
+    ui.message("Checking Redmine connectivity ... ");
+    try {
+      RedmineClient client = new RedmineClient(redmineUrl, redmineApiKey);
+      client.isRedmineConnectSuccessful();
+      ui.message("[OK]\n");
+      return true;
+    } catch (Exception e) {
+      ui.message("*FAILED* (%s)\n", e.toString());
+      return false;
+    }
+  }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/redmine/RedmineClient.java b/src/main/java/com/googlesource/gerrit/plugins/its/redmine/RedmineClient.java
new file mode 100644
index 0000000..c263c9c
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/redmine/RedmineClient.java
@@ -0,0 +1,128 @@
+// Copyright (C) 2017 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+package com.googlesource.gerrit.plugins.its.redmine;
+
+import com.taskadapter.redmineapi.NotFoundException;
+import com.taskadapter.redmineapi.RedmineException;
+import com.taskadapter.redmineapi.RedmineManager;
+import com.taskadapter.redmineapi.RedmineManagerFactory;
+import com.taskadapter.redmineapi.bean.Issue;
+import com.taskadapter.redmineapi.bean.IssueFactory;
+import com.taskadapter.redmineapi.bean.IssueStatus;
+import com.taskadapter.redmineapi.bean.User;
+import java.io.IOException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class RedmineClient {
+  private static final String GERRIT_CONFIG_URL = "url";
+  private static final String GERRIT_CONFIG_API_KEY = "apiKey";
+  private RedmineManager mgr;
+
+  private Logger log = LoggerFactory.getLogger(RedmineClient.class);
+
+  private RedmineClient() {
+    throw new UnsupportedOperationException();
+  }
+
+  public RedmineClient(final String url, String apiAccessKey) {
+    mgr = RedmineManagerFactory.createWithApiKey(url, apiAccessKey);
+  }
+
+  public void isRedmineConnectSuccessful() throws RedmineException {
+    mgr.getUserManager().getCurrentUser();
+  }
+
+  public void updateIssue(final String issueId, final String comment) throws IOException {
+    try {
+      Issue issue = IssueFactory.create(convertIssueId(issueId));
+      issue.setNotes(comment);
+      mgr.getIssueManager().update(issue);
+    } catch (Exception e) {
+      throw new IOException(e);
+    }
+  }
+
+  public boolean exists(final String issueId) throws IOException {
+    try {
+      return mgr.getIssueManager().getIssueById(convertIssueId(issueId)) != null;
+    } catch (NotFoundException e) {
+      if (log.isDebugEnabled()) {
+        log.debug("Issue {} doesn't exit: {}", issueId, e.getMessage(), e);
+      }
+      return false;
+    } catch (RedmineException e) {
+      log.error(e.getMessage(), e);
+      throw new IOException(e);
+    }
+  }
+
+  public void doPerformAction(final String issueKey, final String actionName)
+      throws IOException, RedmineException {
+    Integer statusId = getStatusId(actionName);
+    if (statusId != null) {
+      log.debug("Executing action {} on issue {}", actionName, issueKey);
+      Issue issue = IssueFactory.create(convertIssueId(issueKey));
+      issue.setStatusId(statusId);
+      mgr.getIssueManager().update(issue);
+    } else {
+      log.error("Action {} not found within available actions", actionName);
+      throw new RedmineException("Action " + actionName + " not executable on issue " + issueKey);
+    }
+  }
+
+  public String healthCheckAccess() throws IOException {
+    try {
+      User user = mgr.getUserManager().getCurrentUser();
+      final String result = "{\"status\"=\"ok\",\"username\"=\"" + user.getLogin() + "\"}";
+      log.debug("Healtheck on access result: {}", result);
+      return result;
+    } catch (RedmineException e) {
+      throw new IOException(e);
+    }
+  }
+
+  public String healthCheckSysinfo(final String url) throws IOException {
+    try {
+      mgr.getUserManager().getCurrentUser();
+      final String result = "{\"status\"=\"ok\",\"system\"=\"Redmine\",\"url\"=\"" + url + "\"}";
+      log.debug("Healtheck on sysinfo result: {}", result);
+      return result;
+    } catch (RedmineException e) {
+      throw new IOException(e);
+    }
+  }
+
+  private Integer getStatusId(String actionName) throws RedmineException {
+    for (IssueStatus issueStatus : mgr.getIssueManager().getStatuses()) {
+      if (issueStatus.getName().equalsIgnoreCase(actionName)) {
+        return issueStatus.getId();
+      }
+    }
+    return null;
+  }
+
+  private Integer convertIssueId(String issueId) throws IOException {
+    if (!issueIdIsValid(issueId)) {
+      log.warn("Issue {} is not a valid issue id", issueId);
+      throw new IOException("Issue " + issueId + " is not a valid issue id");
+    }
+    return Integer.valueOf(issueId);
+  }
+
+  private boolean issueIdIsValid(String issueId) {
+    return issueId != null && issueId.matches("^\\d+$");
+  }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/redmine/RedmineItsFacade.java b/src/main/java/com/googlesource/gerrit/plugins/its/redmine/RedmineItsFacade.java
new file mode 100644
index 0000000..7831eb2
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/redmine/RedmineItsFacade.java
@@ -0,0 +1,197 @@
+// Copyright (C) 2017 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.googlesource.gerrit.plugins.its.redmine;
+
+import com.google.gerrit.extensions.annotations.PluginName;
+import com.google.gerrit.server.config.GerritServerConfig;
+import com.google.inject.Inject;
+import com.googlesource.gerrit.plugins.its.base.its.ItsFacade;
+import com.taskadapter.redmineapi.RedmineException;
+import java.io.IOException;
+import java.net.URL;
+import java.util.concurrent.Callable;
+import org.eclipse.jgit.lib.Config;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class RedmineItsFacade implements ItsFacade {
+  private static final int MAX_ATTEMPTS = 3;
+  private static final String GERRIT_CONFIG_URL = "url";
+  private static final String GERRIT_CONFIG_API_KEY = "apiKey";
+
+  private Logger log = LoggerFactory.getLogger(RedmineItsFacade.class);
+
+  private final String pluginName;
+  private Config gerritConfig;
+  private RedmineClient client;
+
+  @Inject
+  public RedmineItsFacade(@PluginName String pluginName, @GerritServerConfig Config gerritConfig) {
+    this.pluginName = pluginName;
+    this.gerritConfig = gerritConfig;
+    log.trace("Initialize its-redmine to {} host", getUrl());
+    try {
+      client();
+    } catch (Exception e) {
+      log.error("Unable to connect to its-redmine: {}", e.getMessage());
+    }
+  }
+
+  @Override
+  public String healthCheck(final Check check) throws IOException {
+    return execute(
+        new Callable<String>() {
+          @Override
+          public String call() throws Exception {
+            if (check.equals(Check.ACCESS)) return healthCheckAccess();
+            else return healthCheckSysinfo();
+          }
+        });
+  }
+
+  @Override
+  public void addComment(final String issueId, final String comment) throws IOException {
+    if (comment == null || comment.trim().isEmpty()) {
+      return;
+    }
+    execute(
+        new Callable<String>() {
+          @Override
+          public String call() throws Exception {
+            try {
+              client().updateIssue(issueId, comment);
+            } catch (Exception e) {
+              log.error("Error in add comment: {}", e.getMessage(), e);
+              throw e;
+            }
+            return issueId;
+          }
+        });
+  }
+
+  @Override
+  public void addRelatedLink(final String issueKey, final URL relatedUrl, String description)
+      throws IOException {
+    addComment(
+        issueKey, "Related URL: " + createLinkForWebui(relatedUrl.toExternalForm(), description));
+  }
+
+  @Override
+  public String createLinkForWebui(String url, String text) {
+    String ret = url;
+    if (text != null && !text.equals(url)) {
+      ret += " (" + text + ")";
+    }
+    return ret;
+  }
+
+  @Override
+  public boolean exists(final String issueId) throws IOException {
+    return execute(
+        new Callable<Boolean>() {
+          @Override
+          public Boolean call() throws Exception {
+            return client().exists(issueId);
+          }
+        });
+  }
+
+  /**
+   * @see com.googlesource.gerrit.plugins.hooks.its.ItsFacade#performAction(java.lang.String,
+   *     java.lang.String)
+   */
+  @Override
+  public void performAction(final String issueId, final String actionName) throws IOException {
+    execute(
+        new Callable<String>() {
+          @Override
+          public String call() throws RedmineException, IOException {
+            doPerformAction(issueId, actionName);
+            return issueId;
+          }
+        });
+  }
+
+  private void doPerformAction(final String issueKey, final String actionName)
+      throws IOException, RedmineException {
+    client().doPerformAction(issueKey, actionName);
+  }
+
+  private RedmineClient client() throws IOException {
+    if (client == null) {
+      try {
+        log.debug("Connecting to redmine at URL " + getUrl());
+        client = new RedmineClient(getUrl(), getApiKey());
+      } catch (Exception e) {
+        log.info("Unable to connect to " + getUrl());
+        throw new IOException(e);
+      }
+    }
+    return client;
+  }
+
+  private String getUrl() {
+    final String url = gerritConfig.getString(pluginName, null, GERRIT_CONFIG_URL);
+    return url;
+  }
+
+  private String getApiKey() {
+    final String apiKey = gerritConfig.getString(pluginName, null, GERRIT_CONFIG_API_KEY);
+    return apiKey;
+  }
+
+  private String healthCheckAccess() throws IOException {
+    return execute(
+        new Callable<String>() {
+          @Override
+          public String call() throws IOException {
+            return client().healthCheckAccess();
+          }
+        });
+  }
+
+  private String healthCheckSysinfo() throws IOException {
+    return execute(
+        new Callable<String>() {
+          @Override
+          public String call() throws IOException {
+            return client().healthCheckSysinfo(getUrl());
+          }
+        });
+  }
+
+  private <P> P execute(Callable<P> function) throws IOException {
+    int attempt = 0;
+    while (true) {
+      try {
+        return function.call();
+      } catch (Exception ex) {
+        if (isRecoverable(ex) && ++attempt < MAX_ATTEMPTS) {
+          log.debug("Call failed - retrying, attempt {} of {}", attempt, MAX_ATTEMPTS);
+          continue;
+        }
+
+        if (ex instanceof IOException) {
+          throw ((IOException) ex);
+        }
+        throw new IOException(ex);
+      }
+    }
+  }
+
+  private boolean isRecoverable(Exception ex) {
+    return true;
+  }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/redmine/RedmineModule.java b/src/main/java/com/googlesource/gerrit/plugins/its/redmine/RedmineModule.java
new file mode 100644
index 0000000..930c2f0
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/redmine/RedmineModule.java
@@ -0,0 +1,55 @@
+// Copyright (C) 2017 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.googlesource.gerrit.plugins.its.redmine;
+
+import com.google.gerrit.extensions.annotations.PluginName;
+import com.google.gerrit.server.config.GerritServerConfig;
+import com.google.gerrit.server.config.PluginConfigFactory;
+import com.google.inject.AbstractModule;
+import com.google.inject.Inject;
+import com.googlesource.gerrit.plugins.its.base.ItsHookModule;
+import com.googlesource.gerrit.plugins.its.base.its.ItsFacade;
+import org.eclipse.jgit.lib.Config;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class RedmineModule extends AbstractModule {
+
+  private static final Logger log = LoggerFactory.getLogger(RedmineModule.class);
+
+  private final String pluginName;
+  private final Config gerritConfig;
+  private final PluginConfigFactory pluginCfgFactory;
+
+  @Inject
+  public RedmineModule(
+      @PluginName final String pluginName,
+      @GerritServerConfig final Config config,
+      PluginConfigFactory pluginCfgFactory) {
+    this.pluginName = pluginName;
+    this.gerritConfig = config;
+    this.pluginCfgFactory = pluginCfgFactory;
+  }
+
+  @Override
+  protected void configure() {
+    if (gerritConfig.getString(pluginName, null, "url") != null) {
+      log.info("Redmine is configured as ITS");
+      bind(ItsFacade.class).toInstance(new RedmineItsFacade(pluginName, gerritConfig));
+
+      install(new ItsHookModule(pluginName, pluginCfgFactory));
+    }
+  }
+}
diff --git a/src/main/resources/Documentation/.gitignore b/src/main/resources/Documentation/.gitignore
new file mode 100644
index 0000000..2d19fc7
--- /dev/null
+++ b/src/main/resources/Documentation/.gitignore
@@ -0,0 +1 @@
+*.html
diff --git a/src/main/resources/Documentation/about.md b/src/main/resources/Documentation/about.md
new file mode 100644
index 0000000..24d8799
--- /dev/null
+++ b/src/main/resources/Documentation/about.md
@@ -0,0 +1,5 @@
+`@PLUGIN@` is an [`its-base`][its-base] based plugin that (based on
+events in Gerrit) allows to take actions in Redmine. For example, it
+can add comments to bugs.
+
+[its-base]: https://gerrit-review.googlesource.com/#/admin/projects/plugins/its-base
diff --git a/src/main/resources/Documentation/build.md b/src/main/resources/Documentation/build.md
new file mode 100644
index 0000000..c8736df
--- /dev/null
+++ b/src/main/resources/Documentation/build.md
@@ -0,0 +1,49 @@
+Build
+=====
+
+This @PLUGIN@ plugin is built with Bazel.
+
+Clone (or link) both this plugin and also
+[plugins/its-base](https://gerrit-review.googlesource.com/#/admin/projects/plugins/its-base)
+to the `plugins` directory of Gerrit's source tree.
+
+Put the external dependency Bazel build file into the Gerrit /plugins directory,
+replacing the existing empty one.
+
+```
+  cd gerrit/plugins
+  rm external_plugin_deps.bzl
+  ln -s @PLUGIN@/external_plugin_deps.bzl .
+```
+
+Then issue
+
+```
+  bazel build plugins/@PLUGIN@
+```
+
+in the root of Gerrit's source tree to build
+
+The output is created in
+
+```
+  bazel-genfiles/plugins/@PLUGIN@/@PLUGIN@.jar
+```
+
+This project can be imported into the Eclipse IDE.
+Add the plugin name to the `CUSTOM_PLUGINS` set in
+Gerrit core in `tools/bzl/plugins.bzl`, and execute:
+
+```
+  ./tools/eclipse/project.py
+```
+
+To execute the tests run:
+
+```
+  bazel test plugins/@PLUGIN@
+```
+
+[Back to @PLUGIN@ documentation index][index]
+
+[index]: index.html
\ No newline at end of file
diff --git a/src/main/resources/Documentation/config-connectivity.md b/src/main/resources/Documentation/config-connectivity.md
new file mode 100644
index 0000000..daa947a
--- /dev/null
+++ b/src/main/resources/Documentation/config-connectivity.md
@@ -0,0 +1,21 @@
+Phabricator connectivity
+========================
+
+In order for @PLUGIN@ to connect to your Phabricator instance, url (without
+trailing “/api”, “/conduit” or some such), user, and certificate are required in
+your site's `etc/gerrit.config` or `etc/secure.config` under the `@PLUGIN@`
+section.
+
+Example:
+
+```
+[@PLUGIN@]
+  url = http://my.phabricator.instance.example.org
+  token = TOKEN_FOR_ABOVE_USERNAME
+```
+
+You can get your token by going to http://my.phabricator.instance.example.org/conduit/login/
+
+[Back to @PLUGIN@ documentation index][index]
+
+[index]: index.html
diff --git a/src/main/resources/Documentation/config-rulebase-plugin-actions.md b/src/main/resources/Documentation/config-rulebase-plugin-actions.md
new file mode 100644
index 0000000..9fb7bf7
--- /dev/null
+++ b/src/main/resources/Documentation/config-rulebase-plugin-actions.md
@@ -0,0 +1,42 @@
+@PLUGIN@-specific actions
+=========================
+
+In addition to the [basic actions][basic-actions], @PLUGIN@ also
+provides:
+
+[`add-project`][action-add-project]
+: adds a project to the task
+
+[`remove-project`][action-remove-project]
+: removes a project from the task
+
+[basic-actions]: config-rulebase-common.html#actions
+
+[action-add-project]: #action-add-project
+### <a name="action-add-project">Action: add-project</a>
+
+The `add-project` action adds a project to the task. The first
+parameter is the project name to add. So for example
+
+```
+  action = add-project MyCoolProject
+```
+
+adds the project `MyCoolProject` to the task.
+
+[action-remove-project]: #action-remove-project
+### <a name="action-remove-project">Action: remove-project</a>
+
+The `remove-project` action removes a project from the task. The first
+parameter is the project name to remove. So for example
+
+```
+  action = remove-project MyCoolProject
+```
+
+removes the project `MyCoolProject` from the task.
+
+
+[Back to @PLUGIN@ documentation index][index]
+
+[index]: index.html
\ No newline at end of file
