diff --git a/scope/src/main/jastadd/ScopeTree.relast b/scope/src/main/jastadd/ScopeTree.relast
index 3da708098f1cdcc38ff9eb5e5470f2242883970c..9b561c69f66a081f6b681b1203a52b81d85f580f 100644
--- a/scope/src/main/jastadd/ScopeTree.relast
+++ b/scope/src/main/jastadd/ScopeTree.relast
@@ -1,4 +1,4 @@
-ScopeTree : Scope;
+RootScope : Scope;
 abstract Element;
 Declaration:Element ::= <Name:String>;
 Scope:Element ::= Element*;
diff --git a/scope/src/main/jastadd/Shadowing.jrag b/scope/src/main/jastadd/Shadowing.jrag
index 56a1a218138b579846dbab4cb04d0a7616aa1d11..45f7e1dfeb39e1c556e6358d4c43e3b65cb44fc3 100644
--- a/scope/src/main/jastadd/Shadowing.jrag
+++ b/scope/src/main/jastadd/Shadowing.jrag
@@ -1,8 +1,8 @@
 aspect Shadowing {
-  coll Set<AbstractFinding> ScopeTree.variableShadowings() [new HashSet<>()] with add root ScopeTree;
+  coll Set<AbstractFinding> RootScope.variableShadowings() [new HashSet<>()] with add root RootScope;
 
-  Declaration contributes new VariableShadowFinding(shadowed(), this) when isShadowing() to ScopeTree.variableShadowings();
-  Declaration contributes new MultipleDeclarationFinding(this) when isShadowingInSameScope() to ScopeTree.variableShadowings();
+  Declaration contributes new VariableShadowFinding(shadowed(), this) when isShadowing() to RootScope.variableShadowings();
+  Declaration contributes new MultipleDeclarationFinding(this) when isShadowingInSameScope() to RootScope.variableShadowings();
 
   syn Declaration Declaration.shadowed()= shadowed(asDeclaration());
 
@@ -25,7 +25,7 @@ aspect Shadowing {
         }
       }
     }
-    return (this instanceof ScopeTree) ? null : shadowed(shadower);
+    return (this instanceof RootScope) ? null : shadowed(shadower);
   }
 
   inh Declaration Declaration.shadowedInSameScope();
@@ -43,7 +43,7 @@ aspect Shadowing {
   syn boolean Declaration.isShadowingInSameScope() = shadowedInSameScope() != null;
 
   syn boolean Scope.isSuperScopeOf(Scope subScope) = (this==subScope) || isSuperScopeInh(subScope);
-  eq ScopeTree.isSuperScopeOf(Scope subScope) = this==subScope;
+  eq RootScope.isSuperScopeOf(Scope subScope) = this==subScope;
   inh boolean Scope.isSuperScopeInh(Scope subScope);
   eq Scope.getElement().isSuperScopeInh(Scope subScope) = isSuperScopeOf(subScope);
 
diff --git a/scope4j/src/main/jastadd/ProgramToScopeTree.jrag b/scope4j/src/main/jastadd/ProgramToScopeTree.jrag
index b1dc8e2586d5d76cbcfe93de04f5ecc821a2fe47..02041022078e8116b16cadc2f68e4305c574c6ea 100644
--- a/scope4j/src/main/jastadd/ProgramToScopeTree.jrag
+++ b/scope4j/src/main/jastadd/ProgramToScopeTree.jrag
@@ -1,7 +1,7 @@
 aspect ProgramToScopeTree {
   /** a relational nta collection attribute to compute the scope tree */
-  syn lazy ScopeTree Program.scopeTree() {
-    ScopeTree tree = asScopeTree();
+  syn lazy RootScope Program.scopeTree() {
+    RootScope tree = asRootScope();
 
     // add all classes
     for (CompilationUnit cu : getCompilationUnitList()) {
@@ -73,8 +73,8 @@ aspect ProgramToScopeTree {
  */
 aspect ScopeTreeConstructors {
 
-  syn lazy ScopeTree Program.asScopeTree() {
-    ScopeTree tree = new ScopeTree();
+  syn lazy RootScope Program.asRootScope() {
+    RootScope tree = new RootScope();
     tree.setProgram(this);
     return tree;
   }
diff --git a/scope4j/src/main/jastadd/ProgramToScopeTree.relast b/scope4j/src/main/jastadd/ProgramToScopeTree.relast
index e799ab9c6afe7e2f5ae561fcad0fa48e6be2ea31..2f1d3b1250ae46a1e2c437138d2bf0db12ae227e 100644
--- a/scope4j/src/main/jastadd/ProgramToScopeTree.relast
+++ b/scope4j/src/main/jastadd/ProgramToScopeTree.relast
@@ -1,5 +1,5 @@
 // glue relation for the Java-based variable shadowing analysis
-rel ScopeTree.Program -> Program;
+rel RootScope.Program -> Program;
 
 abstract JavaScope : Scope;
 abstract TypeDeclScope : JavaScope;
diff --git a/scope4j/src/main/java/org/extendj/ScopeAnalysis.java b/scope4j/src/main/java/org/extendj/ScopeAnalysis.java
index 603bb69259676a78383c9746395d35aa55d239cf..fc284c99ff0db063d282c9c0f6c24573624946ea 100644
--- a/scope4j/src/main/java/org/extendj/ScopeAnalysis.java
+++ b/scope4j/src/main/java/org/extendj/ScopeAnalysis.java
@@ -76,7 +76,7 @@ public class ScopeAnalysis extends Frontend {
       // measure the time (without parsing) from here
       long startGenerationTime = System.nanoTime();
 
-      ScopeTree scopeTree = program.scopeTree();
+      RootScope scopeTree = program.scopeTree();
       DrAST_root_node = scopeTree;
 
       long startAnalysisTime = System.nanoTime();
@@ -118,7 +118,7 @@ public class ScopeAnalysis extends Frontend {
 
       program = readProgram(files);
 
-      ScopeTree scopeTree = program.scopeTree();
+      RootScope scopeTree = program.scopeTree();
 
       if (tree) {
         scopeTree.printAST();
diff --git a/scope4m/src/main/jastadd/ModelicaToScopeTree.jrag b/scope4m/src/main/jastadd/ModelicaToScopeTree.jrag
index 4643764e63cb4575a69cabef026f56bf22523b15..1a7a8e0315e8f0fad0ce5df6316d1e14290751bc 100644
--- a/scope4m/src/main/jastadd/ModelicaToScopeTree.jrag
+++ b/scope4m/src/main/jastadd/ModelicaToScopeTree.jrag
@@ -1,7 +1,7 @@
 aspect ModelicaToScopeTree {
   /** a relational nta attribute to compute the scope tree */
-  syn lazy ScopeTree SourceRoot.scopeTree() {
-    ScopeTree tree = (ScopeTree) scope();
+  syn lazy RootScope SourceRoot.scopeTree() {
+    RootScope tree = (RootScope) scope();
 
     // add all top-level classes
     for (SrcClassDecl classDecl : topLevelClasses()) {
@@ -53,8 +53,8 @@ aspect ModelicaToScopeTree {
  */
 aspect ScopeTreeConstructors {
 
-  syn lazy ScopeTree SourceRoot.asScope() {
-    ScopeTree tree = new ScopeTree();
+  syn lazy RootScope SourceRoot.asScope() {
+    RootScope tree = new RootScope();
     tree.setSourceRoot(this);
     return tree;
   }
diff --git a/scope4m/src/main/jastadd/ModelicaToScopeTree.relast b/scope4m/src/main/jastadd/ModelicaToScopeTree.relast
index 082b97dcdbab81c65ce7836df9653a1821aa3537..1852e359a3d47cb3c07d8d53aed17fb231c6cff5 100644
--- a/scope4m/src/main/jastadd/ModelicaToScopeTree.relast
+++ b/scope4m/src/main/jastadd/ModelicaToScopeTree.relast
@@ -1,5 +1,5 @@
 // glue relation for the Java-based variable shadowing analysis
-rel ScopeTree.SourceRoot -> SourceRoot;
+rel RootScope.SourceRoot -> SourceRoot;
 
 // scopes
 
diff --git a/scope4m/src/main/java/org/jmodelica/ScopeAnalysis.java b/scope4m/src/main/java/org/jmodelica/ScopeAnalysis.java
index ec82dd1e5ca3b78e56f06d66c3570a0db32b2076..fe1cefa1d043ff04cbc0809c3a234eeae7fab5af 100644
--- a/scope4m/src/main/java/org/jmodelica/ScopeAnalysis.java
+++ b/scope4m/src/main/java/org/jmodelica/ScopeAnalysis.java
@@ -65,7 +65,7 @@ public class ScopeAnalysis {
       // measure the time (without parsing) from here
       long startGenerationTime = System.nanoTime();
 
-      ScopeTree scopeTree = sourceRoot.scopeTree();
+      RootScope scopeTree = sourceRoot.scopeTree();
 
       long startAnalysisTime = System.nanoTime();
 
@@ -109,7 +109,7 @@ public class ScopeAnalysis {
 
       sourceRoot = readProgram(files);
 
-      ScopeTree scopeTree = sourceRoot.scopeTree();
+      RootScope scopeTree = sourceRoot.scopeTree();
 
       if (tree) {
         scopeTree.printAST();