diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/config/EiffelConfig.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/config/EiffelConfig.java
index 5224a50..e04401a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/config/EiffelConfig.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/config/EiffelConfig.java
@@ -43,19 +43,19 @@
     }
   }
 
-  private final Optional<String> nameSpace;
+  private final Optional<String> namespace;
 
-  public EiffelConfig(String nameSpace) {
-    if (nameSpace == null) {
-      this.nameSpace = Optional.empty();
+  public EiffelConfig(String namespace) {
+    if (namespace == null) {
+      this.namespace = Optional.empty();
       logger.atInfo().log("namespace is not set in the config");
     } else {
-      this.nameSpace = Optional.of(nameSpace);
-      logger.atInfo().log("namespace is set to: %d", nameSpace);
+      this.namespace = Optional.of(namespace);
+      logger.atInfo().log("namespace is set to: %d", namespace);
     }
   }
 
-  public Optional<String> nameSpace() {
-    return nameSpace;
+  public Optional<String> namespace() {
+    return namespace;
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EiffelEventFactory.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EiffelEventFactory.java
index dc7eb92..addae54 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EiffelEventFactory.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EiffelEventFactory.java
@@ -62,7 +62,7 @@
     private final String webUrl;
     private final String pluginName;
     private final String sshAddress;
-    private final Optional<String> nameSpace;
+    private final Optional<String> namespace;
 
     @Inject
     public Provider(
@@ -75,7 +75,7 @@
       this.webUrl = webUrl;
       this.pluginName = pluginName;
       this.sshAddress = sshAddresses.isEmpty() ? "" : sshAddresses.get(0);
-      this.nameSpace = config.nameSpace();
+      this.namespace = config.namespace();
     }
 
     @Override
@@ -83,7 +83,7 @@
       if (eventFactory == null) {
         eventFactory =
             new EiffelEventFactory(
-                pluginName, getPluginVersion(gApi, pluginName), webUrl, sshAddress, nameSpace);
+                pluginName, getPluginVersion(gApi, pluginName), webUrl, sshAddress, namespace);
       }
       return eventFactory;
     }
@@ -97,7 +97,7 @@
   private final String host;
   private final String pluginName;
   private final String packageUrl;
-  private final String nameSpace;
+  private final String namespace;
   private final String tagPURLTemplate;
 
   @VisibleForTesting
@@ -106,7 +106,7 @@
       String pluginVersion,
       String webUrl,
       String configuredSshAddress,
-      Optional<String> nameSpace) {
+      Optional<String> namespace) {
     StringBuilder purl = new StringBuilder(PURL_BASE + pluginName);
     if (pluginVersion != null) {
       purl.append("@" + pluginVersion);
@@ -114,7 +114,7 @@
     this.packageUrl = purl.toString();
     this.host = URI.create(webUrl).getHost();
     this.pluginName = pluginName;
-    this.nameSpace = nameSpace.orElse(host);
+    this.namespace = namespace.orElse(host);
 
     StringBuilder commitEndpoint = new StringBuilder();
     commitEndpoint.append(webUrl);
@@ -133,7 +133,7 @@
     }
     cloneUrl.append("%s");
     projectCloneUrl = cloneUrl.toString();
-    tagPURLTemplate = "pkg:generic/" + this.nameSpace + "/%s@%s?vcs_url=git%%2B%s%%40%s";
+    tagPURLTemplate = "pkg:generic/" + this.namespace + "/%s@%s?vcs_url=git%%2B%s%%40%s";
   }
 
   private String parseSshAddress(String webUrl, String configuredSshAddress) {
@@ -249,7 +249,7 @@
   }
 
   public String tagCompositionName(String projectName) {
-    return "scmtag/git/" + nameSpace + "/" + URLEncoder.encode(projectName, StandardCharsets.UTF_8);
+    return "scmtag/git/" + namespace + "/" + URLEncoder.encode(projectName, StandardCharsets.UTF_8);
   }
 
   private EiffelMetaInfo.Builder getMeta(Long epochMillisCreated) {
diff --git a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParserIT.java b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParserIT.java
index 4fcdb78..3afa5ff 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParserIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParserIT.java
@@ -281,14 +281,14 @@
     assertArtcQueuedScsHandled(annotated, "localhost");
   }
 
-  private void assertArtcQueuedScsHandled(boolean annotated, String nameSpace) throws Exception {
+  private void assertArtcQueuedScsHandled(boolean annotated, String namespace) throws Exception {
     setScsHandled();
     String ref =
         createTagRef(getHead(repo(), "HEAD").getName(), annotated)
             .substring(Constants.R_TAGS.length());
-    ArtifactEventKey artc = ArtifactEventKey.create(tagPURL(project.get(), ref, nameSpace));
+    ArtifactEventKey artc = ArtifactEventKey.create(tagPURL(project.get(), ref, namespace));
     CompositionDefinedEventKey cd =
-        CompositionDefinedEventKey.create(tagCompositionName(project.get(), nameSpace), ref);
+        CompositionDefinedEventKey.create(tagCompositionName(project.get(), namespace), ref);
 
     eventParser.createAndScheduleArtc(project.get(), ref, EPOCH_MILLIS, false);
     assertEquals(2, TestEventHub.EVENTS.size());
@@ -317,18 +317,18 @@
     return tagCompositionName(projectName, "localhost");
   }
 
-  protected static String tagCompositionName(String projectName, String nameSpace) {
-    return "scmtag/git/" + nameSpace + "/" + URLEncoder.encode(projectName, StandardCharsets.UTF_8);
+  protected static String tagCompositionName(String projectName, String namespace) {
+    return "scmtag/git/" + namespace + "/" + URLEncoder.encode(projectName, StandardCharsets.UTF_8);
   }
 
   protected static String tagPURL(String projectName, String tagName) {
     return tagPURL(projectName, tagName, "localhost");
   }
 
-  protected static String tagPURL(String projectName, String tagName, String nameSpace) {
+  protected static String tagPURL(String projectName, String tagName, String namespace) {
     return String.format(
         TAG_PURL_TEMPLATE,
-        nameSpace,
+        namespace,
         projectName,
         tagName,
         String.format("ssh://%s/%s", HOST_NAME, projectName),
