diff --git a/src/main/java/com/googlesource/gerrit/plugins/task/Properties.java b/src/main/java/com/googlesource/gerrit/plugins/task/Properties.java
index 57c12ee..3568eb8 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/task/Properties.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/task/Properties.java
@@ -58,17 +58,8 @@
 
   /** Use to expand properties specifically for Tasks. */
   public Task getTask(ChangeData changeData) throws OrmException {
-    if (loader != null && loader.isNonTaskDefinedPropertyLoaded()) {
-      // To detect NamesFactories dependent on non task defined properties, the checking must be
-      // done after subnodes are fully loaded, which unfortunately happens after getTask() is
-      // called. However, these non task property uses from the last change are still detectable
-      // here before we replace the old Loader with a new one.
-      isSubNodeReloadRequired = true;
-    }
-
     loader = new Loader(changeData);
     expander = new Expander(n -> loader.load(n));
-
     if (isTaskRefreshNeeded || init) {
       Map<String, String> exported = expander.expand(origTask.exported);
       if (exported != origTask.exported) {
@@ -85,6 +76,13 @@
     return task.getForRead();
   }
 
+  // To detect NamesFactories dependent on non task defined properties, the checking must be
+  // done after subnodes are fully loaded, which unfortunately happens after getTask() is
+  // called, therefore this must be called after all subnodes have been loaded.
+  public void expansionComplete() {
+    isSubNodeReloadRequired = loader.isNonTaskDefinedPropertyLoaded();
+  }
+
   public boolean isSubNodeReloadRequired() {
     return isSubNodeReloadRequired;
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/task/TaskTree.java b/src/main/java/com/googlesource/gerrit/plugins/task/TaskTree.java
index d51f5bb..6df4b9d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/task/TaskTree.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/task/TaskTree.java
@@ -114,15 +114,14 @@
 
     public List<Node> getSubNodes() throws ConfigInvalidException, IOException, OrmException {
       if (cachedNodes == null) {
-        cachedNodes = createAdder().getSubNodes();
-      } else {
-        refreshSubNodes();
+        return loadSubNodes();
       }
+      refreshSubNodes();
       return cachedNodes;
     }
 
-    protected SubNodeAdder createAdder() {
-      return new SubNodeAdder();
+    protected List<Node> loadSubNodes() throws ConfigInvalidException, IOException, OrmException {
+      return cachedNodes = new SubNodeAdder().getSubNodes();
     }
 
     public void refreshSubNodes() throws ConfigInvalidException, OrmException {
@@ -219,8 +218,10 @@
     }
 
     @Override
-    protected SubNodeAdder createAdder() {
-      return new SubNodeAdder();
+    protected List<Node> loadSubNodes() throws ConfigInvalidException, IOException, OrmException {
+      cachedNodes = new SubNodeAdder().getSubNodes();
+      properties.expansionComplete();
+      return cachedNodes;
     }
 
     /* The task needs to be refreshed before a node is used, however
