diff a/bots/mlbridge/src/main/java/org/openjdk/skara/bots/mlbridge/ArchiveMessages.java b/bots/mlbridge/src/main/java/org/openjdk/skara/bots/mlbridge/ArchiveMessages.java
--- a/bots/mlbridge/src/main/java/org/openjdk/skara/bots/mlbridge/ArchiveMessages.java
+++ b/bots/mlbridge/src/main/java/org/openjdk/skara/bots/mlbridge/ArchiveMessages.java
@@ -57,47 +57,53 @@
         var commitMessages = prInstance.formatCommitMessages(prInstance.baseHash(), prInstance.headHash(), ArchiveMessages::formatCommit);
         var filteredBody = filterComments(prInstance.pr().getBody());
         if (filteredBody.isEmpty()) {
             filteredBody = prInstance.pr().getTitle().strip();
         }
+        var issueString = prInstance.issueUrl().map(url -> "  Issue: " + url + "\n").orElse("");
         return filteredBody + "\n\n" +
                 infoSeparator + "\n\n" +
                 "Commits:\n" +
                 commitMessages + "\n\n" +
                 "Changes: " + prInstance.changeUrl() + "\n" +
+                issueString +
                 "  Stats: " + prInstance.stats(prInstance.baseHash(), prInstance.headHash()) + "\n" +
                 "  Patch: " + prInstance.diffUrl() + "\n" +
                 "  Fetch: " + prInstance.fetchCommand() + "\n\n" +
                 replyFooter(prInstance);
     }
+        var issueString = prInstance.issueUrl().map(url -> "  Issue: " + url + "\n").orElse("");
         return "The pull request has been updated with a complete new set of changes (possibly due to a rebase).\n\n" +
                 infoSeparator + "\n\n" +
                 "Commits:\n" +
                 commitMessages + "\n\n" +
                 "Changes: " + prInstance.changeUrl() + "\n" +
+                issueString +
                 "  Stats: " + prInstance.stats(prInstance.baseHash(), prInstance.headHash()) + "\n" +
                 "  Patch: " + prInstance.diffUrl() + "\n" +
                 "  Fetch: " + prInstance.fetchCommand() + "\n\n" +
                 replyFooter(prInstance);    }
 
+        var issueString = prInstance.issueUrl().map(url -> "  Issue: " + url + "\n").orElse("");
         return "The pull request has been updated with additional changes.\n\n" +
                 infoSeparator + "\n\n" +
                 "Added commits:\n" +
                 newCommitMessages + "\n\n" +
                 "Changes:\n" +
+                issueString +
                 "  Stats: " + prInstance.stats(lastHead, prInstance.headHash()) + "\n" +
                 "  Patch: " + prInstance.diffUrl() + "\n" +
                 "  Fetch: " + prInstance.fetchCommand() + "\n\n" +
                 replyFooter(prInstance);
     }
diff a/bots/mlbridge/src/main/java/org/openjdk/skara/bots/mlbridge/ArchiveWorkItem.java b/bots/mlbridge/src/main/java/org/openjdk/skara/bots/mlbridge/ArchiveWorkItem.java
--- a/bots/mlbridge/src/main/java/org/openjdk/skara/bots/mlbridge/ArchiveWorkItem.java
+++ b/bots/mlbridge/src/main/java/org/openjdk/skara/bots/mlbridge/ArchiveWorkItem.java
@@ -225,11 +225,16 @@
                 }
             }
         }
 
         var census = CensusInstance.create(bot.censusRepo(), bot.censusRef(), scratchPath.resolve("census"), pr);
-        var prInstance = new PullRequestInstance(scratchPath.resolve("mlbridge-mergebase"), pr);
+        var jbs = census.configuration().general().jbs();
+        if (jbs == null) {
+            jbs = census.configuration().general().project();
+        }
+        var prInstance = new PullRequestInstance(scratchPath.resolve("mlbridge-mergebase"), pr, bot.issueTracker(),
+                                                 jbs.toUpperCase());
         var reviewArchive = new ReviewArchive(bot.emailAddress(), prInstance, census, sentMails);
         var webrevPath = scratchPath.resolve("mlbridge-webrevs");
         var listServer = MailingListServerFactory.createMailmanServer(bot.listArchive(), bot.smtpServer());
         var list = listServer.getList(bot.listAddress().address());
 
diff a/bots/mlbridge/src/main/java/org/openjdk/skara/bots/mlbridge/MailingListBridgeBot.java b/bots/mlbridge/src/main/java/org/openjdk/skara/bots/mlbridge/MailingListBridgeBot.java
--- a/bots/mlbridge/src/main/java/org/openjdk/skara/bots/mlbridge/MailingListBridgeBot.java
+++ b/bots/mlbridge/src/main/java/org/openjdk/skara/bots/mlbridge/MailingListBridgeBot.java
@@ -43,18 +43,19 @@
     private final URI listArchive;
     private final String smtpServer;
     private final WebrevStorage webrevStorage;
     private final Set<String> readyLabels;
     private final Map<String, Pattern> readyComments;
+    private final URI issueTracker;
     private final PullRequestUpdateCache updateCache;
 
     MailingListBridgeBot(EmailAddress from, HostedRepository repo, HostedRepository archive,
                          HostedRepository censusRepo, String censusRef, EmailAddress list,
                          Set<String> ignoredUsers, Set<Pattern> ignoredComments, URI listArchive, String smtpServer,
                          HostedRepository webrevStorageRepository, String webrevStorageRef,
                          Path webrevStorageBase, URI webrevStorageBaseUri, Set<String> readyLabels,
-                         Map<String, Pattern> readyComments) {
+                         Map<String, Pattern> readyComments, URI issueTracker) {
         emailAddress = from;
         codeRepo = repo;
         archiveRepo = archive;
         this.censusRepo = censusRepo;
         this.censusRef = censusRef;
@@ -63,10 +64,11 @@
         this.ignoredComments = ignoredComments;
         this.listArchive = listArchive;
         this.smtpServer = smtpServer;
         this.readyLabels = readyLabels;
         this.readyComments = readyComments;
+        this.issueTracker = issueTracker;
 
         this.webrevStorage = new WebrevStorage(webrevStorageRepository, webrevStorageRef, webrevStorageBase,
                                                webrevStorageBaseUri, from);
         this.updateCache = new PullRequestUpdateCache();
     }
@@ -121,10 +123,14 @@
 
     Map<String, Pattern> readyComments() {
         return readyComments;
     }
 
+    URI issueTracker() {
+        return issueTracker;
+    }
+
     @Override
     public List<WorkItem> getPeriodicItems() {
         List<WorkItem> ret = new LinkedList<>();
 
         for (var pr : codeRepo.getPullRequests()) {
diff a/bots/mlbridge/src/main/java/org/openjdk/skara/bots/mlbridge/MailingListBridgeBotFactory.java b/bots/mlbridge/src/main/java/org/openjdk/skara/bots/mlbridge/MailingListBridgeBotFactory.java
--- a/bots/mlbridge/src/main/java/org/openjdk/skara/bots/mlbridge/MailingListBridgeBotFactory.java
+++ b/bots/mlbridge/src/main/java/org/openjdk/skara/bots/mlbridge/MailingListBridgeBotFactory.java
@@ -59,10 +59,11 @@
         var webrevRepo = configuration.repository(specific.get("webrevs").get("repository").asString());
         var webrevRef = configuration.repositoryRef(specific.get("webrevs").get("repository").asString());
         var webrevWeb = specific.get("webrevs").get("web").asString();
 
         var archiveRepo = configuration.repository(specific.get("archive").asString());
+        var issueTracker = URIBuilder.base(specific.get("issues").asString()).build();
 
         var allListNames = new HashSet<EmailAddress>();
         var allRepositories = new HashSet<HostedRepository>();
 
         var readyLabels = specific.get("ready").get("labels").stream()
@@ -82,11 +83,12 @@
             var folder = repoConfig.contains("folder") ? repoConfig.get("folder").asString() : configuration.repositoryName(repo);
             var bot = new MailingListBridgeBot(from, configuration.repository(repo), archiveRepo,
                                                censusRepo, censusRef,
                                                list, ignoredUsers, ignoredComments, listArchive, listSmtp,
                                                webrevRepo, webrevRef, Path.of(folder),
-                                               URIBuilder.base(webrevWeb).build(), readyLabels, readyComments);
+                                               URIBuilder.base(webrevWeb).build(), readyLabels, readyComments,
+                                               issueTracker);
             ret.add(bot);
 
             allListNames.add(list);
             allRepositories.add(configuration.repository(repo));
         }
diff a/bots/mlbridge/src/main/java/org/openjdk/skara/bots/mlbridge/PullRequestInstance.java b/bots/mlbridge/src/main/java/org/openjdk/skara/bots/mlbridge/PullRequestInstance.java
--- a/bots/mlbridge/src/main/java/org/openjdk/skara/bots/mlbridge/PullRequestInstance.java
+++ b/bots/mlbridge/src/main/java/org/openjdk/skara/bots/mlbridge/PullRequestInstance.java
@@ -21,25 +21,33 @@
  * questions.
  */
 package org.openjdk.skara.bots.mlbridge;
 
 import org.openjdk.skara.host.PullRequest;
+import org.openjdk.skara.host.network.URIBuilder;
 import org.openjdk.skara.vcs.*;
+import org.openjdk.skara.vcs.openjdk.Issue;
 
 import java.io.*;
+import java.net.URI;
 import java.nio.file.Path;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 class PullRequestInstance {
     private final PullRequest pr;
     private final Repository localRepo;
     private final Hash targetHash;
     private final Hash headHash;
     private final Hash baseHash;
+    private final URI issueTracker;
+    private final String projectPrefix;
 
-    PullRequestInstance(Path localRepoPath, PullRequest pr) {
+    PullRequestInstance(Path localRepoPath, PullRequest pr, URI issueTracker, String projectPrefix) {
         this.pr = pr;
+        this.issueTracker = issueTracker;
+        this.projectPrefix = projectPrefix;
 
         // Materialize the PR's target ref
         try {
             var repository = pr.repository();
             localRepo = Repository.materialize(localRepoPath, repository.getUrl(), pr.getTargetRef());
@@ -99,10 +107,15 @@
         } catch (IOException e) {
             throw new UncheckedIOException(e);
         }
     }
 
+    Optional<String> issueUrl() {
+        var issue = Issue.fromString(pr.getTitle());
+        return issue.map(value -> URIBuilder.base(issueTracker).appendPath(projectPrefix + "-" + value.id()).build().toString());
+    }
+
     @FunctionalInterface
     interface CommitFormatter {
         String format(Commit commit);
     }
 
diff a/bots/mlbridge/src/test/java/org/openjdk/skara/bots/mlbridge/MailingListArchiveReaderBotTests.java b/bots/mlbridge/src/test/java/org/openjdk/skara/bots/mlbridge/MailingListArchiveReaderBotTests.java
--- a/bots/mlbridge/src/test/java/org/openjdk/skara/bots/mlbridge/MailingListArchiveReaderBotTests.java
+++ b/bots/mlbridge/src/test/java/org/openjdk/skara/bots/mlbridge/MailingListArchiveReaderBotTests.java
@@ -69,11 +69,12 @@
                                                  Set.of(ignored.host().getCurrentUserDetails().userName()),
                                                  Set.of(),
                                                  listServer.getArchive(), listServer.getSMTP(),
                                                  archive, "webrev", Path.of("test"),
                                                  URIBuilder.base("http://www.test.test/").build(),
-                                                 Set.of(), Map.of());
+                                                 Set.of(), Map.of(),
+                                                 URIBuilder.base("http://issues.test/browse/").build());
 
             // The mailing list as well
             var mailmanServer = MailingListServerFactory.createMailmanServer(listServer.getArchive(), listServer.getSMTP());
             var mailmanList = mailmanServer.getList(listAddress.address());
             var readerBot = new MailingListArchiveReaderBot(from, Set.of(mailmanList), Set.of(archive));
@@ -132,11 +133,12 @@
                                                  Set.of(ignored.host().getCurrentUserDetails().userName()),
                                                  Set.of(),
                                                  listServer.getArchive(), listServer.getSMTP(),
                                                  archive, "webrev", Path.of("test"),
                                                  URIBuilder.base("http://www.test.test/").build(),
-                                                 Set.of(), Map.of());
+                                                 Set.of(), Map.of(),
+                                                 URIBuilder.base("http://issues.test/browse/").build());
 
             // The mailing list as well
             var mailmanServer = MailingListServerFactory.createMailmanServer(listServer.getArchive(), listServer.getSMTP());
             var mailmanList = mailmanServer.getList(listAddress.address());
             var readerBot = new MailingListArchiveReaderBot(from, Set.of(mailmanList), Set.of(archive));
diff a/bots/mlbridge/src/test/java/org/openjdk/skara/bots/mlbridge/MailingListBridgeBotTests.java b/bots/mlbridge/src/test/java/org/openjdk/skara/bots/mlbridge/MailingListBridgeBotTests.java
--- a/bots/mlbridge/src/test/java/org/openjdk/skara/bots/mlbridge/MailingListBridgeBotTests.java
+++ b/bots/mlbridge/src/test/java/org/openjdk/skara/bots/mlbridge/MailingListBridgeBotTests.java
@@ -109,11 +109,12 @@
                                                  Set.of(),
                                                  listServer.getArchive(), listServer.getSMTP(),
                                                  archive, "webrev", Path.of("test"),
                                                  URIBuilder.base("http://www.test.test/").build(),
                                                  Set.of("rfr"), Map.of(ignored.host().getCurrentUserDetails().userName(),
-                                                                       Pattern.compile("ready")));
+                                                                       Pattern.compile("ready")),
+                                                 URIBuilder.base("http://issues.test/browse/").build());
 
             // Populate the projects repository
             var localRepo = CheckableRepository.init(tempFolder.path(), author.getRepositoryType());
             var masterHash = localRepo.resolve("master").orElseThrow();
             localRepo.push(masterHash, author.getUrl(), "master", true);
@@ -121,11 +122,11 @@
 
             // Make a change with a corresponding PR
             var editHash = CheckableRepository.appendAndCommit(localRepo, "A simple change",
                                                                "Change msg\n\nWith several lines");
             localRepo.push(editHash, author.getUrl(), "edit", true);
-            var pr = credentials.createPullRequest(archive, "master", "edit", "This is a pull request");
+            var pr = credentials.createPullRequest(archive, "master", "edit", "1234: This is a pull request");
             pr.setBody("This should not be ready");
 
             // Run an archive pass
             TestBotRunner.runPeriodicItems(mlBot);
 
@@ -168,10 +169,12 @@
             assertTrue(archiveContains(archiveFolder.path(), "Patch:"));
             assertTrue(archiveContains(archiveFolder.path(), "Changes:"));
             assertTrue(archiveContains(archiveFolder.path(), "Webrev:"));
             assertTrue(archiveContains(archiveFolder.path(), "http://www.test.test/"));
             assertTrue(archiveContains(archiveFolder.path(), "webrev.00"));
+            assertTrue(archiveContains(archiveFolder.path(), "Issue:"));
+            assertTrue(archiveContains(archiveFolder.path(), "http://issues.test/browse/TSTPRJ-1234"));
             assertTrue(archiveContains(archiveFolder.path(), "Fetch:"));
             assertTrue(archiveContains(archiveFolder.path(), "^ - " + editHash.abbreviate() + ": Change msg"));
             assertFalse(archiveContains(archiveFolder.path(), "With several lines"));
 
             // The mailing list as well
@@ -179,11 +182,11 @@
             var mailmanServer = MailingListServerFactory.createMailmanServer(listServer.getArchive(), listServer.getSMTP());
             var mailmanList = mailmanServer.getList(listAddress.address());
             var conversations = mailmanList.conversations(Duration.ofDays(1));
             assertEquals(1, conversations.size());
             var mail = conversations.get(0).first();
-            assertEquals("RFR: This is a pull request", mail.subject());
+            assertEquals("RFR: 1234: This is a pull request", mail.subject());
             assertEquals(pr.getAuthor().fullName(), mail.author().fullName().orElseThrow());
             assertEquals(noreplyAddress(archive), mail.author().address());
             assertEquals(from, mail.sender());
 
             // And there should be a webrev
@@ -258,11 +261,12 @@
                                                  Set.of(ignored.host().getCurrentUserDetails().userName()),
                                                  Set.of(),
                                                  listServer.getArchive(), listServer.getSMTP(),
                                                  archive, "webrev", Path.of("test"),
                                                  URIBuilder.base("http://www.test.test/").build(),
-                                                 Set.of(), Map.of());
+                                                 Set.of(), Map.of(),
+                                                 URIBuilder.base("http://issues.test/browse/").build());
 
             // Populate the projects repository
             var reviewFile = Path.of("reviewfile.txt");
             var localRepo = CheckableRepository.init(tempFolder.path(), author.getRepositoryType(), reviewFile);
             var masterHash = localRepo.resolve("master").orElseThrow();
@@ -344,11 +348,12 @@
                                                  listAddress, Set.of(), Set.of(),
                                                  listServer.getArchive(),
                                                  listServer.getSMTP(),
                                                  archive, "webrev", Path.of("test"),
                                                  URIBuilder.base("http://www.test.test/").build(),
-                                                 Set.of(), Map.of());
+                                                 Set.of(), Map.of(),
+                                                 URIBuilder.base("http://issues.test/browse/").build());
 
             // Populate the projects repository
             var reviewFile = Path.of("reviewfile.txt");
             var localRepo = CheckableRepository.init(tempFolder.path(), author.getRepositoryType(), reviewFile);
             var masterHash = localRepo.resolve("master").orElseThrow();
@@ -416,11 +421,12 @@
                                                  listAddress, Set.of(), Set.of(),
                                                  listServer.getArchive(),
                                                  listServer.getSMTP(),
                                                  archive, "webrev", Path.of("test"),
                                                  URIBuilder.base("http://www.test.test/").build(),
-                                                 Set.of(), Map.of());
+                                                 Set.of(), Map.of(),
+                                                 URIBuilder.base("http://issues.test/browse/").build());
 
             // Populate the projects repository
             var reviewFile = Path.of("reviewfile.txt");
             var localRepo = CheckableRepository.init(tempFolder.path(), author.getRepositoryType(), reviewFile);
             var masterHash = localRepo.resolve("master").orElseThrow();
@@ -524,11 +530,12 @@
                                                  listAddress, Set.of(), Set.of(),
                                                  listServer.getArchive(),
                                                  listServer.getSMTP(),
                                                  archive, "webrev", Path.of("test"),
                                                  URIBuilder.base("http://www.test.test/").build(),
-                                                 Set.of(), Map.of());
+                                                 Set.of(), Map.of(),
+                                                 URIBuilder.base("http://issues.test/browse/").build());
 
             // Populate the projects repository
             var reviewFile = Path.of("reviewfile.txt");
             var localRepo = CheckableRepository.init(tempFolder.path(), author.getRepositoryType(), reviewFile);
             var masterHash = localRepo.resolve("master").orElseThrow();
@@ -573,11 +580,12 @@
                                                  listAddress, Set.of(), Set.of(),
                                                  listServer.getArchive(),
                                                  listServer.getSMTP(),
                                                  archive, "webrev", Path.of("test"),
                                                  URIBuilder.base("http://www.test.test/").build(),
-                                                 Set.of(), Map.of());
+                                                 Set.of(), Map.of(),
+                                                 URIBuilder.base("http://issues.test/browse/").build());
 
             // Populate the projects repository
             var reviewFile = Path.of("reviewfile.txt");
             var localRepo = CheckableRepository.init(tempFolder.path(), author.getRepositoryType(), reviewFile);
             var masterHash = localRepo.resolve("master").orElseThrow();
@@ -640,11 +648,12 @@
             var mlBot = new MailingListBridgeBot(from, author, archive, censusBuilder.build(), "master",
                                                  listAddress, Set.of(), Set.of(),
                                                  listServer.getArchive(), listServer.getSMTP(),
                                                  archive, "webrev", Path.of("test"),
                                                  URIBuilder.base("http://www.test.test/").build(),
-                                                 Set.of(), Map.of());
+                                                 Set.of(), Map.of(),
+                                                 URIBuilder.base("http://issues.test/browse/").build());
 
             // Populate the projects repository
             var reviewFile = Path.of("reviewfile.txt");
             var localRepo = CheckableRepository.init(tempFolder.path(), author.getRepositoryType(), reviewFile);
             var masterHash = localRepo.resolve("master").orElseThrow();
@@ -697,11 +706,12 @@
             var mlBot = new MailingListBridgeBot(from, author, archive, censusBuilder.build(), "master",
                                                  listAddress, Set.of(), Set.of(),
                                                  listServer.getArchive(), listServer.getSMTP(),
                                                  archive, "webrev", Path.of("test"),
                                                  URIBuilder.base("http://www.test.test/").build(),
-                                                 Set.of(), Map.of());
+                                                 Set.of(), Map.of(),
+                                                 URIBuilder.base("http://issues.test/browse/").build());
 
             // Populate the projects repository
             var reviewFile = Path.of("reviewfile.txt");
             var localRepo = CheckableRepository.init(tempFolder.path(), author.getRepositoryType(), reviewFile);
             var masterHash = localRepo.resolve("master").orElseThrow();
@@ -816,11 +826,12 @@
             var mlBot = new MailingListBridgeBot(sender, author, archive, censusBuilder.build(), "master",
                                                  listAddress, Set.of(), Set.of(),
                                                  listServer.getArchive(), listServer.getSMTP(),
                                                  archive, "webrev", Path.of("test"),
                                                  URIBuilder.base("http://www.test.test/").build(),
-                                                 Set.of(), Map.of());
+                                                 Set.of(), Map.of(),
+                                                 URIBuilder.base("http://issues.test/browse/").build());
 
             // Populate the projects repository
             var reviewFile = Path.of("reviewfile.txt");
             var localRepo = CheckableRepository.init(tempFolder.path().resolve("first"), author.getRepositoryType(), reviewFile);
             var masterHash = localRepo.resolve("master").orElseThrow();
@@ -907,11 +918,12 @@
                                                  Set.of(ignored.host().getCurrentUserDetails().userName()),
                                                  Set.of(),
                                                  listServer.getArchive(), listServer.getSMTP(),
                                                  archive, "webrev", Path.of("test"),
                                                  URIBuilder.base("http://www.test.test/").build(),
-                                                 Set.of(), Map.of());
+                                                 Set.of(), Map.of(),
+                                                 URIBuilder.base("http://issues.test/browse/").build());
 
             // Populate the projects repository
             var localRepo = CheckableRepository.init(tempFolder.path(), author.getRepositoryType());
             var masterHash = localRepo.resolve("master").orElseThrow();
             localRepo.push(masterHash, author.getUrl(), "master", true);
@@ -978,11 +990,12 @@
             var mlBot = new MailingListBridgeBot(from, author, archive, censusBuilder.build(), "master",
                                                  listAddress, Set.of(), Set.of(),
                                                  listServer.getArchive(), listServer.getSMTP(),
                                                  archive, "webrev", Path.of("test"),
                                                  URIBuilder.base("http://www.test.test/").build(),
-                                                 Set.of(), Map.of());
+                                                 Set.of(), Map.of(),
+                                                 URIBuilder.base("http://issues.test/browse/").build());
 
             // Populate the projects repository
             var reviewFile = Path.of("reviewfile.txt");
             var localRepo = CheckableRepository.init(tempFolder.path(), author.getRepositoryType(), reviewFile);
             var masterHash = localRepo.resolve("master").orElseThrow();
@@ -1060,11 +1073,12 @@
                                                  Set.of(ignored.host().getCurrentUserDetails().userName()),
                                                  Set.of(Pattern.compile("ignore this comment", Pattern.MULTILINE | Pattern.DOTALL)),
                                                  listServer.getArchive(), listServer.getSMTP(),
                                                  archive, "webrev", Path.of("test"),
                                                  URIBuilder.base("http://www.test.test/").build(),
-                                                 Set.of(), Map.of());
+                                                 Set.of(), Map.of(),
+                                                 URIBuilder.base("http://issues.test/browse/").build());
 
             // Populate the projects repository
             var reviewFile = Path.of("reviewfile.txt");
             var localRepo = CheckableRepository.init(tempFolder.path(), author.getRepositoryType(), reviewFile);
             var masterHash = localRepo.resolve("master").orElseThrow();
diff a/bots/mlbridge/src/test/java/org/openjdk/skara/bots/mlbridge/WebrevStorageTests.java b/bots/mlbridge/src/test/java/org/openjdk/skara/bots/mlbridge/WebrevStorageTests.java
--- a/bots/mlbridge/src/test/java/org/openjdk/skara/bots/mlbridge/WebrevStorageTests.java
+++ b/bots/mlbridge/src/test/java/org/openjdk/skara/bots/mlbridge/WebrevStorageTests.java
@@ -60,11 +60,11 @@
             var from = EmailAddress.from("test", "test@test.mail");
             var storage = new WebrevStorage(archive, "webrev", Path.of("test"),
                                             URIBuilder.base("http://www.test.test/").build(), from);
 
             var prFolder = tempFolder.path().resolve("pr");
-            var prInstance = new PullRequestInstance(prFolder, pr);
+            var prInstance = new PullRequestInstance(prFolder, pr, URIBuilder.base("http://issues.test/browse/").build(), "TEST");
             var scratchFolder = tempFolder.path().resolve("scratch");
             storage.createAndArchive(prInstance, scratchFolder, masterHash, editHash, "00");
 
             // Update the local repository and check that the webrev has been generated
             Repository.materialize(repoFolder, archive.getUrl(), "webrev");
diff a/jcheck/src/main/java/org/openjdk/skara/jcheck/GeneralConfiguration.java b/jcheck/src/main/java/org/openjdk/skara/jcheck/GeneralConfiguration.java
--- a/jcheck/src/main/java/org/openjdk/skara/jcheck/GeneralConfiguration.java
+++ b/jcheck/src/main/java/org/openjdk/skara/jcheck/GeneralConfiguration.java
@@ -23,28 +23,34 @@
 package org.openjdk.skara.jcheck;
 
 import org.openjdk.skara.ini.Section;
 
 public class GeneralConfiguration {
-    private static final GeneralConfiguration DEFAULT = new GeneralConfiguration(null, null);
+    private static final GeneralConfiguration DEFAULT = new GeneralConfiguration(null, null, null);
 
     private final String project;
     private final String repository;
+    private final String jbs;
 
-    GeneralConfiguration(String project, String repository) {
+    private GeneralConfiguration(String project, String repository, String jbs) {
         this.project = project;
         this.repository = repository;
+        this.jbs = jbs;
     }
 
     public String project() {
         return project;
     }
+    public String jbs() {
+        return jbs;
+    }
+
     static String name() {
         return "general";
     }
 
     static GeneralConfiguration parse(Section s) {
@@ -52,8 +58,9 @@
             return DEFAULT;
         }
 
         var project = s.get("project", DEFAULT.project());
         var repository = s.get("repository", DEFAULT.repository());
-        return new GeneralConfiguration(project, repository);
+        var jbs = s.get("jbs", DEFAULT.jbs());
+        return new GeneralConfiguration(project, repository, jbs);
     }
 }
diff a/jcheck/src/main/java/org/openjdk/skara/jcheck/JCheckConfiguration.java b/jcheck/src/main/java/org/openjdk/skara/jcheck/JCheckConfiguration.java
--- a/jcheck/src/main/java/org/openjdk/skara/jcheck/JCheckConfiguration.java
+++ b/jcheck/src/main/java/org/openjdk/skara/jcheck/JCheckConfiguration.java
@@ -68,27 +68,28 @@
         }
 
         var config = new ArrayList<String>();
         config.add("[general]");
         config.add("project=" + project);
+        config.add("jbs=JDK");
 
         config.add("[checks]");
         var error = "error=blacklist,author,committer,reviewers,merge,hg-tag,message,issues,executable";
         var shouldCheckWhitespace = false;
         var checkWhitespace = old.get("whitespace");
-        if (checkWhitespace == null || !checkWhitespace.equals("lax")) {
+        if (checkWhitespace == null || !checkWhitespace.asString().equals("lax")) {
             error += ",whitespace";
             shouldCheckWhitespace = true;
         }
         config.add(error);
 
         if (project.startsWith("jdk")) {
             config.add("[repository]");
 
             var tags = "tags=";
             var checkTags = old.get("tags");
-            if (checkTags == null || !checkTags.equals("lax")) {
+            if (checkTags == null || !checkTags.asString().equals("lax")) {
                 var jdkTag = "(?:jdk-(?:[1-9]([0-9]*)(?:\\.(?:0|[1-9][0-9]*)){0,4})(?:\\+(?:(?:[0-9]+))|(?:-ga)))";
                 var jdkuTag = "(?:jdk[4-9](?:u\\d{1,3})?-(?:(?:b\\d{2,3})|(?:ga)))";
                 var hsTag = "(?:hs\\d\\d(?:\\.\\d{1,2})?-b\\d\\d)";
                 tags += jdkTag + "|" + jdkuTag + "|" + hsTag;
             } else {
@@ -96,11 +97,11 @@
             }
             config.add(tags);
 
             var branches = "branches=";
             var checkBranches = old.get("branches");
-            if (checkBranches != null && checkBranches.equals("lax")) {
+            if (checkBranches != null && checkBranches.asString().equals("lax")) {
                 branches += ".*\n";
             }
             config.add(branches);
         }
 
diff a/test/src/main/java/org/openjdk/skara/test/CheckableRepository.java b/test/src/main/java/org/openjdk/skara/test/CheckableRepository.java
--- a/test/src/main/java/org/openjdk/skara/test/CheckableRepository.java
+++ b/test/src/main/java/org/openjdk/skara/test/CheckableRepository.java
@@ -56,10 +56,11 @@
         Files.createDirectories(path.resolve(".jcheck"));
         var checkConf = path.resolve(".jcheck/conf");
         try (var output = Files.newBufferedWriter(checkConf)) {
             output.append("[general]\n");
             output.append("project=test\n");
+            output.append("jbs=tstprj\n");
             output.append("\n");
             output.append("[checks]\n");
             output.append("error=author,reviewers,whitespace\n");
             output.append("\n");
             output.append("[census]\n");
