diff --git a/Navigation.jrag b/Navigation.jrag
index 4d9f923844949ab64985c914ff59f00a74d4a2b4..c481f772a7a7074891ca6fbb61889b8cb0aaf30a 100644
--- a/Navigation.jrag
+++ b/Navigation.jrag
@@ -1,6 +1,27 @@
 aspect Navigation {
-  syn boolean Element.isComplex() = false;
-  eq ComplexElement.isComplex() = true;
+  syn boolean Element.isComplexElement() = false;
+  eq ComplexElement.isComplexElement() = true;
+
+  syn ComplexElement Element.asComplexElement() = null;
+  eq ComplexElement.asComplexElement() = this;
+
+  syn boolean Element.isMappingElement() = false;
+  eq MappingElement.isMappingElement() = true;
+
+  syn MappingElement Element.asMappingElement() = null;
+  eq MappingElement.asMappingElement() = this;
+
+  syn boolean Element.isListElement() = false;
+  eq ListElement.isListElement() = true;
+
+  syn ListElement Element.asListElement() = null;
+  eq ListElement.asListElement() = this;
+
+  syn boolean Element.isSimpleElement() = false;
+  eq SimpleElement.isSimpleElement() = true;
+
+  syn SimpleElement Element.asSimpleElement() = null;
+  eq SimpleElement.asSimpleElement() = this;
 
   syn boolean Element.isEmpty() = false;
   eq MappingElement.isEmpty() = getNumKeyValuePair() == 0;
diff --git a/Printing.jrag b/Printing.jrag
index 856e42a9b927970c44a966a15dc9a2226e49f06c..2b93aa2b87162bef2766b5d5e263d774a86cf06c 100644
--- a/Printing.jrag
+++ b/Printing.jrag
@@ -60,7 +60,7 @@ aspect Printing {
   protected StringBuilder KeyValuePair.prettyPrint(StringBuilder sb, boolean printIndent, String indent) {
     if (printIndent) sb.append(indent);
     sb.append(getKey()).append(":");
-    if (getValue().isComplex() && !getValue().isEmpty()) {
+    if (getValue().isComplexElement() && !getValue().isEmpty()) {
       sb.append("\n");
       getValue().prettyPrint(sb, true, indent + PRINT_INDENT);
     } else {