diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/base/workflow/ActionController.java b/src/main/java/com/googlesource/gerrit/plugins/its/base/workflow/ActionController.java
index 4af8f1b..879cae8 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/its/base/workflow/ActionController.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/base/workflow/ActionController.java
@@ -57,6 +57,7 @@
   public void onEvent(Event event) {
     if (event instanceof RefEvent) {
       RefEvent refEvent = (RefEvent) event;
+      ItsConfig.setCurrentProjectName(refEvent.getProjectNameKey());
       if (itsConfig.isEnabled(refEvent)) {
         handleEvent(refEvent);
       }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/its/base/workflow/ActionControllerTest.java b/src/test/java/com/googlesource/gerrit/plugins/its/base/workflow/ActionControllerTest.java
index bd32089..b7a0aad 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/its/base/workflow/ActionControllerTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/its/base/workflow/ActionControllerTest.java
@@ -20,6 +20,7 @@
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.gerrit.extensions.config.FactoryModule;
+import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.server.events.ChangeEvent;
 import com.google.gerrit.server.events.RefEvent;
 import com.google.inject.Guice;
@@ -34,6 +35,7 @@
 import java.util.Set;
 
 public class ActionControllerTest extends LoggingMockingTestCase {
+  private static Project.NameKey testProjectName = new Project.NameKey("test-project");
   private Injector injector;
 
   private PropertyExtractor propertyExtractor;
@@ -50,6 +52,7 @@
     expect(propertyExtractor.extractFrom(event))
         .andReturn(new RefEventProperties(Collections.emptyMap(), propertySets))
         .anyTimes();
+    expect(event.getProjectNameKey()).andReturn(testProjectName).once();
 
     replayMocks();
 
@@ -68,6 +71,7 @@
     expect(propertyExtractor.extractFrom(event))
         .andReturn(new RefEventProperties(properties, propertySets))
         .anyTimes();
+    expect(event.getProjectNameKey()).andReturn(testProjectName).once();
 
     // When no issues are found in the commit message, the list of actions is empty
     // as there are no matchs with an empty map of properties.
@@ -97,6 +101,7 @@
     expect(propertyExtractor.extractFrom(event))
         .andReturn(new RefEventProperties(projectProperties, propertySets))
         .anyTimes();
+    expect(event.getProjectNameKey()).andReturn(testProjectName).once();
 
     ActionRequest issueActionRequest1 = createMock(ActionRequest.class);
     Collection<ActionRequest> issueActionRequests = ImmutableList.of(issueActionRequest1);
@@ -127,6 +132,7 @@
     expect(propertyExtractor.extractFrom(event))
         .andReturn(new RefEventProperties(Collections.emptyMap(), propertySets))
         .anyTimes();
+    expect(event.getProjectNameKey()).andReturn(testProjectName).once();
 
     ActionRequest actionRequest1 = createMock(ActionRequest.class);
     Collection<ActionRequest> actionRequests1 = ImmutableList.of(actionRequest1);
