diff --git a/dumpAst/src/main/jastadd/GenerationBackend.jadd b/dumpAst/src/main/jastadd/GenerationBackend.jadd
index 06be2080f4539fbdcecbcd1762c79ce28f93d73f..ce550ca7fc0cdc85e7326a649635b7cba8a1698f 100644
--- a/dumpAst/src/main/jastadd/GenerationBackend.jadd
+++ b/dumpAst/src/main/jastadd/GenerationBackend.jadd
@@ -413,12 +413,9 @@ aspect GenerationBackend {
   // --- isAstNode ---
   syn boolean DumpNode.isAstNode() {
     Class<?> clazz = getObject().getClass();
-    for (java.lang.reflect.Constructor<?> constructor : clazz.getConstructors()) {
-      for (java.lang.annotation.Annotation annotation : constructor.getAnnotations()) {
-        if (annotation.annotationType().getCanonicalName().startsWith(astNodeAnnotationPrefix()) &&
-              annotation.annotationType().getSimpleName().equals("Constructor")) {
-          return true;
-        }
+    for (java.lang.reflect.Method method : clazz.getMethods()) {
+      if ("init$Children".equals(method.getName()) && method.getParameterCount() == 0) {
+        return true;
       }
     }
     return false;
@@ -554,9 +551,11 @@ aspect GenerationBackend {
     }
 
     @Override
-    public void flush() {}
+    public void flush() {
+    }
 
     @Override
-    public void close() {}
+    public void close() {
+    }
   }
 }
diff --git a/testDumper/src/main/jastadd/testDumper.relast b/testDumper/src/main/jastadd/testDumper.relast
index cd7321f17afb9ef78770946df842bf1ce12072d0..7b66cc96e3e0af88dd7c124928fca2ae86fa5e53 100644
--- a/testDumper/src/main/jastadd/testDumper.relast
+++ b/testDumper/src/main/jastadd/testDumper.relast
@@ -1,10 +1,11 @@
 // testcases with global inclusion/exclusion
 Nameable ::= <Name> ;
-Root : Nameable ::= A B* [C] ;
-A : Nameable ::= B MyC:C ;
+Root : Nameable ::= A B* [C];
+A : Nameable ::= B MyC:C D;
 B : Nameable ::= <OtherValue> ;
 C : Nameable ::= [A] <Unwanted:int> <RawReference:A> /Calculated:A/ /AlsoCalculated:B*/ ;
 SubC : C ::= <RawReference:A> <Unwanted:int> [A] /Calculated:A/ /AlsoCalculated:B*/ ;
+D;
 
 rel B.oneA -> A ;
 rel B.maybeC? -> C ;
diff --git a/testDumper/src/test/java/de/tudresden/inf/st/jastadd/testDumper/TestSimple.java b/testDumper/src/test/java/de/tudresden/inf/st/jastadd/testDumper/TestSimple.java
index f4742747a7040dddd5b775c5a889dabaf4effdad..507250f1e1dc2b74c794f8b1980a550d105913d5 100644
--- a/testDumper/src/test/java/de/tudresden/inf/st/jastadd/testDumper/TestSimple.java
+++ b/testDumper/src/test/java/de/tudresden/inf/st/jastadd/testDumper/TestSimple.java
@@ -2,15 +2,18 @@ package de.tudresden.inf.st.jastadd.testDumper;
 
 import de.tudresden.inf.st.jastadd.dumpAst.ast.DumpNode;
 import org.jastadd.testDumper.ast.C;
+import org.jastadd.testDumper.ast.D;
 import org.jastadd.testDumper.ast.Root;
 import org.jastadd.testDumper.ast.SubC;
 import org.junit.jupiter.api.Test;
 
 import java.util.List;
+import java.util.Optional;
 
 import static de.tudresden.inf.st.jastadd.testDumper.TestUtils.*;
 import static org.assertj.core.api.Assertions.*;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class TestSimple {
 
@@ -26,6 +29,14 @@ public class TestSimple {
     assertEquals(0, actualRoot.getNumDumpRelation());
   }
 
+  @Test void testChildlessNonterminal() {
+    Root root = createRoot(createA(A_NAME, a -> a.setD(new D())), null);
+    List<DumpNode> nodes = TestUtils.dumpModel(root);
+    Optional<DumpNode> optionalCDumpNode = nodes.stream().filter(n -> n.getObject() instanceof D).findFirst();
+    assertTrue(optionalCDumpNode.isPresent());
+    assertTrue(optionalCDumpNode.get().isAstNode());
+  }
+
   @Test
   public void testOneNormalChild() {
     Root root = createRoot(createA(A_NAME), null);