diff --git a/.gradle/6.8/executionHistory/executionHistory.bin b/.gradle/6.8/executionHistory/executionHistory.bin
index b0f8fa06d7042159b56b76923ed39f37999d6cf1..567b9475ced1e91ffc14457422e1b68c71b94191 100644
Binary files a/.gradle/6.8/executionHistory/executionHistory.bin and b/.gradle/6.8/executionHistory/executionHistory.bin differ
diff --git a/.gradle/6.8/executionHistory/executionHistory.lock b/.gradle/6.8/executionHistory/executionHistory.lock
index 75759160706ccfca8842ae6881f3863616c9ea9a..f82e7b15d4341af21b9edf049452ee38747f9be5 100644
Binary files a/.gradle/6.8/executionHistory/executionHistory.lock and b/.gradle/6.8/executionHistory/executionHistory.lock differ
diff --git a/.gradle/6.8/fileHashes/fileHashes.bin b/.gradle/6.8/fileHashes/fileHashes.bin
index 40f07f5b8fbdb1e4512cc7884c9d78ffc785e502..c4ed14887785e82d091e10e394c0f99baacaefc0 100644
Binary files a/.gradle/6.8/fileHashes/fileHashes.bin and b/.gradle/6.8/fileHashes/fileHashes.bin differ
diff --git a/.gradle/6.8/fileHashes/fileHashes.lock b/.gradle/6.8/fileHashes/fileHashes.lock
index 097def7561c010211d4f6826f2e401c600b66db5..38de8f6dee95cb023e0818f9007a830136aeedf0 100644
Binary files a/.gradle/6.8/fileHashes/fileHashes.lock and b/.gradle/6.8/fileHashes/fileHashes.lock differ
diff --git a/.gradle/6.8/fileHashes/resourceHashesCache.bin b/.gradle/6.8/fileHashes/resourceHashesCache.bin
index 86ece78beeff721703fd037a2818542065894c56..df89e0dc0836dec9d4e86d3d5a71b45b28b1d736 100644
Binary files a/.gradle/6.8/fileHashes/resourceHashesCache.bin and b/.gradle/6.8/fileHashes/resourceHashesCache.bin differ
diff --git a/.gradle/6.8/javaCompile/classAnalysis.bin b/.gradle/6.8/javaCompile/classAnalysis.bin
index 2b82f0d61aaaf6bf44cdf3e74edcc22d88d1ff73..22c44c0448d6ba672e8350d60b2c8834bad4d24f 100644
Binary files a/.gradle/6.8/javaCompile/classAnalysis.bin and b/.gradle/6.8/javaCompile/classAnalysis.bin differ
diff --git a/.gradle/6.8/javaCompile/jarAnalysis.bin b/.gradle/6.8/javaCompile/jarAnalysis.bin
index 59f3e3ab4df52fc1808273d20b044c790b47b8ff..cbbc1d48efbff39848ae0ae08f7d668cfe919904 100644
Binary files a/.gradle/6.8/javaCompile/jarAnalysis.bin and b/.gradle/6.8/javaCompile/jarAnalysis.bin differ
diff --git a/.gradle/6.8/javaCompile/javaCompile.lock b/.gradle/6.8/javaCompile/javaCompile.lock
index 1fb439195f6356ffeadf2e3beab2ad3cba98388c..2d468154463985b80707fdbd7350b5b56142298e 100644
Binary files a/.gradle/6.8/javaCompile/javaCompile.lock and b/.gradle/6.8/javaCompile/javaCompile.lock differ
diff --git a/.gradle/6.8/javaCompile/taskHistory.bin b/.gradle/6.8/javaCompile/taskHistory.bin
index d54deb4b355c86a3f63401bda63cb7760d93734b..d465bbe99eff90bb40dd5de033d5aade3a5550b4 100644
Binary files a/.gradle/6.8/javaCompile/taskHistory.bin and b/.gradle/6.8/javaCompile/taskHistory.bin differ
diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index 6d1fb7eb8fade5cb127e36213b7fb427ced07581..c75ce7abd36e9c113e2c9299648023fff6aa9989 100644
Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/OpenAPIMain.class b/build/classes/java/main/de/tudresden/inf/st/openapi/OpenAPIMain.class
index 0af7def6717cd6a2a817e016e4d6c64e2c343649..b0c4303d8642ede6332692e6859d50f0a97d8376 100644
Binary files a/build/classes/java/main/de/tudresden/inf/st/openapi/OpenAPIMain.class and b/build/classes/java/main/de/tudresden/inf/st/openapi/OpenAPIMain.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation$Attribute.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation$Attribute.class
new file mode 100644
index 0000000000000000000000000000000000000000..89345c98f3c9e8bd060d71a10874505721b969af
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation$Attribute.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation$Child.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation$Child.class
new file mode 100644
index 0000000000000000000000000000000000000000..0f514c8c80823f53dabfda990276f38e36526884
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation$Child.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation$Constructor.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation$Constructor.class
new file mode 100644
index 0000000000000000000000000000000000000000..90ad906b470cca1df61cbcd152ff4633c4e6a930
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation$Constructor.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation$Kind.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation$Kind.class
new file mode 100644
index 0000000000000000000000000000000000000000..6174300b7919c6de937f1d509b8951196f9038a6
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation$Kind.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation$ListChild.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation$ListChild.class
new file mode 100644
index 0000000000000000000000000000000000000000..6af23ae6b4ccadd6579eac17b84e70ca99c3b498
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation$ListChild.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation$OptChild.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation$OptChild.class
new file mode 100644
index 0000000000000000000000000000000000000000..d30eb6b958bf0bce354f3bcf92a2d0254e3f1682
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation$OptChild.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation$Source.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation$Source.class
new file mode 100644
index 0000000000000000000000000000000000000000..7b34741fc83d181099b1515de84dc5fa24544487
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation$Source.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation$Token.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation$Token.class
new file mode 100644
index 0000000000000000000000000000000000000000..27ba154bd8fbb6183beb6ada07313df9b407f806
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation$Token.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation.class
new file mode 100644
index 0000000000000000000000000000000000000000..3f1b78730828169c64c7d190a3f127af4d89dde9
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTState$CircleState.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTState$CircleState.class
new file mode 100644
index 0000000000000000000000000000000000000000..8767e0986079f90f0e3dcefb2e0428ceb03b8a15
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTState$CircleState.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTState$CircularValue.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTState$CircularValue.class
new file mode 100644
index 0000000000000000000000000000000000000000..e6a6e5982e4a729ef0387a2107dac15054c60eff
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTState$CircularValue.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTState$Cycle.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTState$Cycle.class
new file mode 100644
index 0000000000000000000000000000000000000000..cc3876bfb3c8b85c2ec98b731cf2ff106b9b6ba7
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTState$Cycle.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTState.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTState.class
new file mode 100644
index 0000000000000000000000000000000000000000..0befc72dd95a63482ef1ca0ea232f4dea0946006
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTState.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/AllOfSchema.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/AllOfSchema.class
new file mode 100644
index 0000000000000000000000000000000000000000..5e925f51f878c74a554d9b2edb995a35ad33f622
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/AllOfSchema.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/AnyOfSchema.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/AnyOfSchema.class
new file mode 100644
index 0000000000000000000000000000000000000000..1523089899da17e3d906bba97e6cea6cc7e037e4
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/AnyOfSchema.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/AttributeValue.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/AttributeValue.class
new file mode 100644
index 0000000000000000000000000000000000000000..ebac92482c9179070b16dedc13d012e1979d23bc
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/AttributeValue.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/AuthorizationCode.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/AuthorizationCode.class
new file mode 100644
index 0000000000000000000000000000000000000000..9ceba40b2469a0bf017f5a1e93211d89c86c051a
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/AuthorizationCode.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/CallbackOb.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/CallbackOb.class
new file mode 100644
index 0000000000000000000000000000000000000000..970bc58f6aadfd5c4838b4d383005cf37b9dc275
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/CallbackOb.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/CallbackObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/CallbackObject.class
new file mode 100644
index 0000000000000000000000000000000000000000..63648a04e1487fe2241a4024a8b93ca08045e62c
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/CallbackObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/CallbackReference.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/CallbackReference.class
new file mode 100644
index 0000000000000000000000000000000000000000..b541234003fbc9665af4870396f6798cfd21bed1
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/CallbackReference.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/CallbackTuple.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/CallbackTuple.class
new file mode 100644
index 0000000000000000000000000000000000000000..6baa683417f96c1f11d1cd37f816976ea7dd8a95
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/CallbackTuple.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ClientCredentials.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ClientCredentials.class
new file mode 100644
index 0000000000000000000000000000000000000000..b6c0ce9e44ea69a74f3b5e7d0378ccf67ddffe50
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ClientCredentials.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ComponentsObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ComponentsObject.class
new file mode 100644
index 0000000000000000000000000000000000000000..8c38d5ba1e6e464009869f02329fb2b769bf4692
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ComponentsObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ContactObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ContactObject.class
new file mode 100644
index 0000000000000000000000000000000000000000..1ec670e4c50d0b588b1841ab6fb020ad4e30380e
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ContactObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ContentTuple.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ContentTuple.class
new file mode 100644
index 0000000000000000000000000000000000000000..69a60b96bfe44dd47c7de52721ef5632ca49e515
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ContentTuple.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Delete.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Delete.class
new file mode 100644
index 0000000000000000000000000000000000000000..34b03cd82fb4962347b9e5dbe288a3a4d7f3babe
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Delete.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/DiscriminatorObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/DiscriminatorObject.class
new file mode 100644
index 0000000000000000000000000000000000000000..f5e8bdb4d0f8f6f43745036d5e9e27ba2b6944a4
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/DiscriminatorObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/EncodingObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/EncodingObject.class
new file mode 100644
index 0000000000000000000000000000000000000000..4989da0795a8e0c7b37ab5b51179185e18df1352
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/EncodingObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/EncodingTuple.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/EncodingTuple.class
new file mode 100644
index 0000000000000000000000000000000000000000..d2611a18ac60bd0c20b148b1086fc3d99a9b77aa
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/EncodingTuple.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Enum.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Enum.class
new file mode 100644
index 0000000000000000000000000000000000000000..3420fe4b532c0b0ffa02156d77e137f51c285d92
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Enum.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/EnumObj.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/EnumObj.class
new file mode 100644
index 0000000000000000000000000000000000000000..115f9ea4c64240bf5363d7775bff8cf6af9109fb
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/EnumObj.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ExampleObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ExampleObject.class
new file mode 100644
index 0000000000000000000000000000000000000000..659351d7e01a4ec979a2b48366116e7bbc58978c
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ExampleObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ExampleTuple.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ExampleTuple.class
new file mode 100644
index 0000000000000000000000000000000000000000..1f882a77cee7eb20ecf3d2a6fd6c1f03f5291d56
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ExampleTuple.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Expression.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Expression.class
new file mode 100644
index 0000000000000000000000000000000000000000..b310022591c4653aeee9b6bcdc54e0944262d033
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Expression.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Extension.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Extension.class
new file mode 100644
index 0000000000000000000000000000000000000000..ba40763b0a3fcbcb0111a419cd1ec372c96b7c16
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Extension.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ExternalDocObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ExternalDocObject.class
new file mode 100644
index 0000000000000000000000000000000000000000..e36b08670e23e695429574e710f5024859da54b7
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ExternalDocObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Get.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Get.class
new file mode 100644
index 0000000000000000000000000000000000000000..91c49cad19eda1d0958d4eb1dbbdb65fc025588f
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Get.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Head.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Head.class
new file mode 100644
index 0000000000000000000000000000000000000000..38699f9818c6599576e106ce1a65cba0395df9fb
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Head.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/HeaderOb.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/HeaderOb.class
new file mode 100644
index 0000000000000000000000000000000000000000..c7a7bfac54442721d5ac25060bdbe5bbb16382bd
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/HeaderOb.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/HeaderObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/HeaderObject.class
new file mode 100644
index 0000000000000000000000000000000000000000..47d5553f8ef848a098a427c485b23b042885cba6
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/HeaderObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/HeaderReference.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/HeaderReference.class
new file mode 100644
index 0000000000000000000000000000000000000000..44cc8ba44f4ca5b61ad9bfc0e88ba24d01d18310
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/HeaderReference.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/HeaderTuple.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/HeaderTuple.class
new file mode 100644
index 0000000000000000000000000000000000000000..8705260ea74cb981669e140875ff9f15d150aaf9
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/HeaderTuple.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Implicit.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Implicit.class
new file mode 100644
index 0000000000000000000000000000000000000000..be7d9da14cef49a592a48aa789a3eaad245ab365
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Implicit.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/InfoObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/InfoObject.class
new file mode 100644
index 0000000000000000000000000000000000000000..90dce2ae27eb846b6f0f8bcd828a9eba31cfcd16
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/InfoObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ItemsSchema.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ItemsSchema.class
new file mode 100644
index 0000000000000000000000000000000000000000..5d1c5f7cfb5953e196759dc691f207c44652a7f7
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ItemsSchema.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/JastAddList.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/JastAddList.class
new file mode 100644
index 0000000000000000000000000000000000000000..a750bbf87a493052886d3e9631cf6ff6f767f1d1
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/JastAddList.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/LicenseObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/LicenseObject.class
new file mode 100644
index 0000000000000000000000000000000000000000..c696b5c333bf53955b311f953aec4e7062af1e6f
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/LicenseObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/LinkOb.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/LinkOb.class
new file mode 100644
index 0000000000000000000000000000000000000000..ac3e3806fae0e434239c86fb114bd75e6395fbbe
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/LinkOb.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/LinkObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/LinkObject.class
new file mode 100644
index 0000000000000000000000000000000000000000..d231d19fb9a85018159c7e46d9054f1a5632ba8f
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/LinkObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/LinkParameterTuple.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/LinkParameterTuple.class
new file mode 100644
index 0000000000000000000000000000000000000000..84d7580f6ebdf9778c4f803fadbfa78990700521
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/LinkParameterTuple.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/LinkReference.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/LinkReference.class
new file mode 100644
index 0000000000000000000000000000000000000000..84a411a03be5cc5fa444860d36e3cc261e01b415
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/LinkReference.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/LinkTuple.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/LinkTuple.class
new file mode 100644
index 0000000000000000000000000000000000000000..ef21dee3c3fd21e1c2bda02f5bd8ae1c4dd2f18e
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/LinkTuple.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/MappingTuple.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/MappingTuple.class
new file mode 100644
index 0000000000000000000000000000000000000000..d2d11d70e8a6c81d2ded337e8ac6c85437021e56
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/MappingTuple.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/MediaTypeObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/MediaTypeObject.class
new file mode 100644
index 0000000000000000000000000000000000000000..174cc473eb6e6e00702fa23cc9246f9c607b9784
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/MediaTypeObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/NotSchema.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/NotSchema.class
new file mode 100644
index 0000000000000000000000000000000000000000..1f4621b30600402ff5532014f2db277d14ec6f89
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/NotSchema.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OAuthFlowObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OAuthFlowObject.class
new file mode 100644
index 0000000000000000000000000000000000000000..c8b5524193698a08b08f772a98c56759053c08f6
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OAuthFlowObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OAuthFlowsObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OAuthFlowsObject.class
new file mode 100644
index 0000000000000000000000000000000000000000..02411e9a3e5537dcb304fa780068306b9169d83f
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OAuthFlowsObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OneOfSchema.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OneOfSchema.class
new file mode 100644
index 0000000000000000000000000000000000000000..98e28811d1f50bfd0e8d1e560564df1ad4da5211
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OneOfSchema.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OpenAPIObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OpenAPIObject.class
new file mode 100644
index 0000000000000000000000000000000000000000..1c0a1292980234b98a82ddf953c369b43940b884
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OpenAPIObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OperationOb.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OperationOb.class
new file mode 100644
index 0000000000000000000000000000000000000000..a6c728c9c15828b106aa6221f38b5e244167c871
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OperationOb.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OperationObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OperationObject.class
new file mode 100644
index 0000000000000000000000000000000000000000..6d10d5025ca5415cebb505c27efd1e254ccdb327
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OperationObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Opt.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Opt.class
new file mode 100644
index 0000000000000000000000000000000000000000..af24371584571e17008b878d857def0297aaf35c
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Opt.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Options.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Options.class
new file mode 100644
index 0000000000000000000000000000000000000000..11912d6a57b1fc5acd2fd12e24aa86f45584379a
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Options.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ParameterOb.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ParameterOb.class
new file mode 100644
index 0000000000000000000000000000000000000000..895df8efdd1f5f07adc31121763daa422aba05de
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ParameterOb.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ParameterObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ParameterObject.class
new file mode 100644
index 0000000000000000000000000000000000000000..dde8ec33959d68a73e43c1fb0ba0faff7e53f93c
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ParameterObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ParameterReference.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ParameterReference.class
new file mode 100644
index 0000000000000000000000000000000000000000..319274631499fc467fd6c00a41edbd01d7bc0924
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ParameterReference.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ParameterTuple.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ParameterTuple.class
new file mode 100644
index 0000000000000000000000000000000000000000..bf0737db712657b384c0184ab6405e3e0f9ef2d7
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ParameterTuple.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Password.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Password.class
new file mode 100644
index 0000000000000000000000000000000000000000..a27cd5673b420207f9a09a1001469b9efdfe919a
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Password.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Patch.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Patch.class
new file mode 100644
index 0000000000000000000000000000000000000000..0d02ec49c24d987f06bc8bdcaed0ba57da3b3451
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Patch.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/PathItemOb.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/PathItemOb.class
new file mode 100644
index 0000000000000000000000000000000000000000..9dce10ddeb59a2757e2751cfbd4be475eab58ec9
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/PathItemOb.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/PathItemObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/PathItemObject.class
new file mode 100644
index 0000000000000000000000000000000000000000..78f3b5435aacef52d343466010f63c6539362710
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/PathItemObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/PathItemReference.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/PathItemReference.class
new file mode 100644
index 0000000000000000000000000000000000000000..ccaeb653bc82e5cc54fc843c316addb4e0869ff8
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/PathItemReference.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/PathsObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/PathsObject.class
new file mode 100644
index 0000000000000000000000000000000000000000..900bb7d01db895eb4383ae4be63cb2631db41a4b
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/PathsObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Post.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Post.class
new file mode 100644
index 0000000000000000000000000000000000000000..1ad28193ff5d6932d506db186a91a1acc50c7a12
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Post.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/PropertyItem.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/PropertyItem.class
new file mode 100644
index 0000000000000000000000000000000000000000..d981c163e11b8a2c1cd2752ba1c325a664cf173a
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/PropertyItem.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Put.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Put.class
new file mode 100644
index 0000000000000000000000000000000000000000..7af25c1140c7f7d8448cfe6ba0aa11c2f3e796e6
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Put.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/RequestBodyOb.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/RequestBodyOb.class
new file mode 100644
index 0000000000000000000000000000000000000000..90824535898c8675642db7912302cb08c77cebc2
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/RequestBodyOb.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/RequestBodyObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/RequestBodyObject.class
new file mode 100644
index 0000000000000000000000000000000000000000..d1ac1030ba2ed93cf7e92f95dc96790f84a7ce03
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/RequestBodyObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/RequestBodyReference.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/RequestBodyReference.class
new file mode 100644
index 0000000000000000000000000000000000000000..24a550ffc69350f3d869371bca89ab486c8d4c69
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/RequestBodyReference.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/RequestBodyTuple.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/RequestBodyTuple.class
new file mode 100644
index 0000000000000000000000000000000000000000..985f2a3246d53b0b2fc9124ff00558cd3abc4176
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/RequestBodyTuple.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/RequiredField.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/RequiredField.class
new file mode 100644
index 0000000000000000000000000000000000000000..57c0201f320b44a49685f4e21131d41948d70a05
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/RequiredField.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ResponseOb.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ResponseOb.class
new file mode 100644
index 0000000000000000000000000000000000000000..1209e2d2e676d75d5b5f233dc580120108a82f8f
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ResponseOb.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ResponseObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ResponseObject.class
new file mode 100644
index 0000000000000000000000000000000000000000..6d17e85c513cc58b0c7d3b4c7128031b105eb7a1
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ResponseObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ResponseReference.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ResponseReference.class
new file mode 100644
index 0000000000000000000000000000000000000000..38e64be118b5643ca7426e21b821999384f87617
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ResponseReference.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ResponseTuple.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ResponseTuple.class
new file mode 100644
index 0000000000000000000000000000000000000000..beaad7ffd3e6b6441c40ba74c759df7381de6dda
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ResponseTuple.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SchemaOb.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SchemaOb.class
new file mode 100644
index 0000000000000000000000000000000000000000..464086fdf5908fe889be7fdc4e994f51eb9e0c65
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SchemaOb.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SchemaObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SchemaObject.class
new file mode 100644
index 0000000000000000000000000000000000000000..326194d12dfd468baa77929deb00aa4731cd2dae
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SchemaObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SchemaReference.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SchemaReference.class
new file mode 100644
index 0000000000000000000000000000000000000000..5eff814b32dd7e311983f1b983674e3323738fae
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SchemaReference.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SchemaTuple.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SchemaTuple.class
new file mode 100644
index 0000000000000000000000000000000000000000..630614ff492f35406af5c248a4d7700b60596275
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SchemaTuple.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ScopesTuple.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ScopesTuple.class
new file mode 100644
index 0000000000000000000000000000000000000000..3b734e82ab5d2ad00f0bf1372756e1e0e693b2cf
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ScopesTuple.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SecurityRequirementObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SecurityRequirementObject.class
new file mode 100644
index 0000000000000000000000000000000000000000..40245e5a2152bb1df6a844161241c2eeb9020347
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SecurityRequirementObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SecurityRequirementTuple.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SecurityRequirementTuple.class
new file mode 100644
index 0000000000000000000000000000000000000000..bd40c25ab01899cb67f45232a7f1579c60192b1d
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SecurityRequirementTuple.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SecurityRequirementValue.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SecurityRequirementValue.class
new file mode 100644
index 0000000000000000000000000000000000000000..59c9af6c5c2816a27d8b0efb4467d3f5012a34f3
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SecurityRequirementValue.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SecuritySchemeOb.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SecuritySchemeOb.class
new file mode 100644
index 0000000000000000000000000000000000000000..4f726c24cf188f7d5f640ff67e62fcb57ce34a31
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SecuritySchemeOb.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SecuritySchemeObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SecuritySchemeObject.class
new file mode 100644
index 0000000000000000000000000000000000000000..07c696931a034c4ff683957fcfc0154ff58408fa
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SecuritySchemeObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SecuritySchemeReference.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SecuritySchemeReference.class
new file mode 100644
index 0000000000000000000000000000000000000000..f393b7d254ce8fb166781c5c5be4f2e2fcf08619
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SecuritySchemeReference.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SecuritySchemeTuple.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SecuritySchemeTuple.class
new file mode 100644
index 0000000000000000000000000000000000000000..fc981036f7ebc07ba272bc536f7a3b8e696c2df3
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SecuritySchemeTuple.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ServerObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ServerObject.class
new file mode 100644
index 0000000000000000000000000000000000000000..611c37b29e2d6c73528f74e5da588de9dc028a34
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ServerObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ServerVariableObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ServerVariableObject.class
new file mode 100644
index 0000000000000000000000000000000000000000..e48cc5f7e219052148141aca51ee820e9dcea851
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ServerVariableObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ServerVariablesTuple.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ServerVariablesTuple.class
new file mode 100644
index 0000000000000000000000000000000000000000..a84d7b1be5b7c75266467a3760dfe156fc1e97e1
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ServerVariablesTuple.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Tag.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Tag.class
new file mode 100644
index 0000000000000000000000000000000000000000..6931ce2492a0feff2afde253b2fd88e0d9ae51be
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Tag.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/TagObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/TagObject.class
new file mode 100644
index 0000000000000000000000000000000000000000..cb336da10990f80c4669ea4b6b5673675259c9cf
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/TagObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Trace.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Trace.class
new file mode 100644
index 0000000000000000000000000000000000000000..c075be5ee6cef999f67394049a505c0ef71b55f2
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Trace.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/XmlObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/XmlObject.class
new file mode 100644
index 0000000000000000000000000000000000000000..8988bc5dc6f163b29460098019b0c3c30e4b3f4d
Binary files /dev/null and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/XmlObject.class differ
diff --git a/build/classes/java/test/openapi/OpenAPIMain_test.class b/build/classes/java/test/openapi/OpenAPIMain_test.class
index 04775ae8ce77223a231a3e39668a9611e0b4b92a..35ecb72048ec09e359f5caff6592ed689a9fd214 100644
Binary files a/build/classes/java/test/openapi/OpenAPIMain_test.class and b/build/classes/java/test/openapi/OpenAPIMain_test.class differ
diff --git a/build/reports/tests/test/classes/openapi.OpenAPIMain_test.html b/build/reports/tests/test/classes/openapi.OpenAPIMain_test.html
index 54f3c15e604bfe6457f07d0a251d5a855e9d8e83..09cf38a3173ac2bb07de7cb050ef9cb16ea2d318 100644
--- a/build/reports/tests/test/classes/openapi.OpenAPIMain_test.html
+++ b/build/reports/tests/test/classes/openapi.OpenAPIMain_test.html
@@ -41,7 +41,7 @@
 </td>
 <td>
 <div class="infoBox" id="duration">
-<div class="counter">11.952s</div>
+<div class="counter">0.620s</div>
 <p>duration</p>
 </div>
 </td>
@@ -79,7 +79,7 @@
 </thead>
 <tr>
 <td class="success">test()</td>
-<td class="success">11.952s</td>
+<td class="success">0.620s</td>
 <td class="success">passed</td>
 </tr>
 </table>
@@ -87,108 +87,12 @@
 <div id="tab1" class="tab">
 <h2>Standard output</h2>
 <span class="code">
-<pre>101
+<pre>5
 Loading expression DSL file '1password.com-events-1.0.0.json'.
-Loading expression DSL file '1password.local-connect-1.3.0.json'.
 Loading expression DSL file '6-dot-authentiqio.appspot.com-6.json'.
 Loading expression DSL file 'abstractapi.com-geolocation-1.0.0.json'.
-Loading expression DSL file 'adyen.com-AccountService-6.json'.
-Loading expression DSL file 'adyen.com-BalancePlatformService-1.json'.
-Loading expression DSL file 'adyen.com-BinLookupService-50.json'.
-Loading expression DSL file 'adyen.com-CheckoutService-67.json'.
 Loading expression DSL file 'adyen.com-CheckoutUtilityService-1.json'.
-Loading expression DSL file 'adyen.com-FundService-6.json'.
-Loading expression DSL file 'adyen.com-HopService-6.json'.
-Loading expression DSL file 'adyen.com-NotificationConfigurationService-6.json'.
-Loading expression DSL file 'adyen.com-PaymentService-64.json'.
-Loading expression DSL file 'adyen.com-PayoutService-64.json'.
-Loading expression DSL file 'amazonaws.com-accessanalyzer-2019-11-01.json'.
-Loading expression DSL file 'amazonaws.com-acm-2015-12-08.json'.
-Loading expression DSL file 'amazonaws.com-acm-pca-2017-08-22.json'.
-Loading expression DSL file 'amazonaws.com-alexaforbusiness-2017-11-09.json'.
-Loading expression DSL file 'amazonaws.com-amp-2020-08-01.json'.
-Loading expression DSL file 'amazonaws.com-amplify-2017-07-25.json'.
-Loading expression DSL file 'amazonaws.com-amplifybackend-2020-08-11.json'.
-Loading expression DSL file 'amazonaws.com-apigateway-2015-07-09.json'.
-Loading expression DSL file 'amazonaws.com-apigatewaymanagementapi-2018-11-29.json'.
-Loading expression DSL file 'amazonaws.com-apigatewayv2-2018-11-29.json'.
-Loading expression DSL file 'amazonaws.com-appconfig-2019-10-09.json'.
-Loading expression DSL file 'amazonaws.com-appflow-2020-08-23.json'.
-Loading expression DSL file 'amazonaws.com-appintegration-2020-07-29.json'.
-Loading expression DSL file 'amazonaws.com-application-autoscaling-2016-02-06.json'.
-Loading expression DSL file 'amazonaws.com-application-insights-2018-11-25.json'.
-Loading expression DSL file 'amazonaws.com-applicationcostprofiler-2020-09-10.json'.
-Loading expression DSL file 'amazonaws.com-appmesh-2019-01-25.json'.
-Loading expression DSL file 'amazonaws.com-apprunner-2020-05-15.json'.
-Loading expression DSL file 'amazonaws.com-appstream-2016-12-01.json'.
-Loading expression DSL file 'amazonaws.com-appsync-2017-07-25.json'.
-Loading expression DSL file 'amazonaws.com-athena-2017-05-18.json'.
-Loading expression DSL file 'amazonaws.com-auditmanager-2017-07-25.json'.
-Loading expression DSL file 'amazonaws.com-autoscaling-2011-01-01.json'.
-Loading expression DSL file 'amazonaws.com-autoscaling-plans-2018-01-06.json'.
-Loading expression DSL file 'amazonaws.com-AWSMigrationHub-2017-05-31.json'.
-Loading expression DSL file 'amazonaws.com-backup-2018-11-15.json'.
-Loading expression DSL file 'amazonaws.com-batch-2016-08-10.json'.
-Loading expression DSL file 'amazonaws.com-braket-2019-09-01.json'.
-Loading expression DSL file 'amazonaws.com-budgets-2016-10-20.json'.
-Loading expression DSL file 'amazonaws.com-ce-2017-10-25.json'.
-Loading expression DSL file 'amazonaws.com-chime-2018-05-01.json'.
-Loading expression DSL file 'amazonaws.com-cloud9-2017-09-23.json'.
-Loading expression DSL file 'amazonaws.com-cloudformation-2010-05-15.json'.
-Loading expression DSL file 'amazonaws.com-cloudfront-2020-05-31.json'.
-Loading expression DSL file 'amazonaws.com-cloudhsm-2014-05-30.json'.
-Loading expression DSL file 'amazonaws.com-cloudhsmv2-2017-04-28.json'.
-Loading expression DSL file 'amazonaws.com-cloudsearch-2013-01-01.json'.
-Loading expression DSL file 'amazonaws.com-cloudsearchdomain-2013-01-01.json'.
-Loading expression DSL file 'amazonaws.com-cloudtrail-2013-11-01.json'.
-Loading expression DSL file 'amazonaws.com-codeartifcat-2018-09-22.json'.
-Loading expression DSL file 'amazonaws.com-codebuild-2016-10-06.json'.
-Loading expression DSL file 'amazonaws.com-codecommit-2015-04-13.json'.
-Loading expression DSL file 'amazonaws.com-codedelpoy-2014-10-06.json'.
-Loading expression DSL file 'amazonaws.com-codeguru-reviewer-2019-09-19.json'.
-Loading expression DSL file 'amazonaws.com-codeguruprofiler-2019-07-18.json'.
-Loading expression DSL file 'amazonaws.com-codepipeline-2015-07-09.json'.
-Loading expression DSL file 'amazonaws.com-codestar-2017-04-19.json'.
-Loading expression DSL file 'amazonaws.com-codestar-connections-2019-12-01.json'.
-Loading expression DSL file 'amazonaws.com-codestar-notifications-2019-10-15.json'.
-Loading expression DSL file 'amazonaws.com-cognito-identity-2014-06-30.json'.
-Loading expression DSL file 'amazonaws.com-cognito-idp-2016-04-18.json'.
-Loading expression DSL file 'amazonaws.com-cognito-sync-2014-06-30.json'.
-Loading expression DSL file 'amazonaws.com-comprehend-2017-11-27.json'.
-Loading expression DSL file 'amazonaws.com-comprehendmedical-2018-10-30.json'.
-Loading expression DSL file 'amazonaws.com-compute-optimizer-2019-11-01.json'.
-Loading expression DSL file 'amazonaws.com-config-2014-11-12.json'.
-Loading expression DSL file 'amazonaws.com-connect-2017-08-08.json'.
-Loading expression DSL file 'amazonaws.com-connect-contact-lens-2020-08-21.json'.
-Loading expression DSL file 'amazonaws.com-connectparticipant-2018-09-07.json'.
-Loading expression DSL file 'amazonaws.com-cur-2017-01-06.json'.
-Loading expression DSL file 'amazonaws.com-customer-profiles-2020-08-15.json'.
-Loading expression DSL file 'amazonaws.com-databrew-2017-07-25.json'.
-Loading expression DSL file 'amazonaws.com-dataexchange-2017-07-25.json'.
-Loading expression DSL file 'amazonaws.com-datapipeline-2012-10-29.json'.
-Loading expression DSL file 'amazonaws.com-datasync-2018-11-09.json'.
-Loading expression DSL file 'amazonaws.com-dax-2017-04-19.json'.
-Loading expression DSL file 'amazonaws.com-detective-2018-10-26.json'.
-Loading expression DSL file 'amazonaws.com-devicefarm-2015-06-23.json'.
-Loading expression DSL file 'amazonaws.com-devops-guru-2020-12-01.json'.
-Loading expression DSL file 'amazonaws.com-directconnect-2012-10-25.json'.
-Loading expression DSL file 'amazonaws.com-discovery-2015-11-01.json'.
-Loading expression DSL file 'amazonaws.com-dlm-2018-01-12.json'.
-Loading expression DSL file 'amazonaws.com-dms-2016-01-01.json'.
-Loading expression DSL file 'amazonaws.com-docdb-2014-10-31.json'.
-Loading expression DSL file 'amazonaws.com-ds-2015-04-16.json'.
-Loading expression DSL file 'amazonaws.com-dynamodb.json'.
-Loading expression DSL file 'amazonaws.com-ebs-2019-11-02.json'.
-Loading expression DSL file 'amazonaws.com-ec2-2016-11-15.json'.
-Loading expression DSL file 'amazonaws.com-ec2-instance-connect-2018-04-02.json'.
-Loading expression DSL file 'amazonaws.com-ecr-2015-09-21.json'.
-Loading expression DSL file 'callback-example.json'.
-Loading expression DSL file 'link-example.json'.
-Loading expression DSL file 'petstore-expanded.json'.
 Loading expression DSL file 'petstore-v2.yaml'.
-Loading expression DSL file 'petstore.json'.
-Loading expression DSL file 'richard_mueller4-MatchinitAPI-1-swagger.json'.
-Loading expression DSL file 'uspto.json'.
 </pre>
 </span>
 </div>
@@ -200,7 +104,7 @@ Loading expression DSL file 'uspto.json'.
 <input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
 </label>
 </div>Generated by 
-<a href="http://www.gradle.org">Gradle 6.8</a> at 2021. 9. 4. 오후 11:23:32</p>
+<a href="http://www.gradle.org">Gradle 6.8</a> at 2021. 9. 17. 오후 11:23:39</p>
 </div>
 </div>
 </body>
diff --git a/build/reports/tests/test/index.html b/build/reports/tests/test/index.html
index b1a9aea69fde8a02bdc186e4776eb2dc23359735..86e8ab55914626200149e4892694790bf9eb5dfa 100644
--- a/build/reports/tests/test/index.html
+++ b/build/reports/tests/test/index.html
@@ -38,7 +38,7 @@
 </td>
 <td>
 <div class="infoBox" id="duration">
-<div class="counter">11.952s</div>
+<div class="counter">0.620s</div>
 <p>duration</p>
 </div>
 </td>
@@ -85,7 +85,7 @@
 <td>1</td>
 <td>0</td>
 <td>0</td>
-<td>11.952s</td>
+<td>0.620s</td>
 <td class="success">100%</td>
 </tr>
 </tbody>
@@ -112,7 +112,7 @@
 <td>1</td>
 <td>0</td>
 <td>0</td>
-<td>11.952s</td>
+<td>0.620s</td>
 <td class="success">100%</td>
 </tr>
 </tbody>
@@ -126,7 +126,7 @@
 <input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
 </label>
 </div>Generated by 
-<a href="http://www.gradle.org">Gradle 6.8</a> at 2021. 9. 4. 오후 11:23:32</p>
+<a href="http://www.gradle.org">Gradle 6.8</a> at 2021. 9. 17. 오후 11:23:39</p>
 </div>
 </div>
 </body>
diff --git a/build/reports/tests/test/packages/openapi.html b/build/reports/tests/test/packages/openapi.html
index 2c9b0c30e681d25968166d41f3afc4b6ff40a1ef..956d2ad3e51709762f09da8a93e0f273c4b26e00 100644
--- a/build/reports/tests/test/packages/openapi.html
+++ b/build/reports/tests/test/packages/openapi.html
@@ -40,7 +40,7 @@
 </td>
 <td>
 <div class="infoBox" id="duration">
-<div class="counter">11.952s</div>
+<div class="counter">0.620s</div>
 <p>duration</p>
 </div>
 </td>
@@ -83,7 +83,7 @@
 <td>1</td>
 <td>0</td>
 <td>0</td>
-<td>11.952s</td>
+<td>0.620s</td>
 <td class="success">100%</td>
 </tr>
 </table>
@@ -96,7 +96,7 @@
 <input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
 </label>
 </div>Generated by 
-<a href="http://www.gradle.org">Gradle 6.8</a> at 2021. 9. 4. 오후 11:23:32</p>
+<a href="http://www.gradle.org">Gradle 6.8</a> at 2021. 9. 17. 오후 11:23:39</p>
 </div>
 </div>
 </body>
diff --git a/build/test-results/test/TEST-openapi.OpenAPIMain_test.xml b/build/test-results/test/TEST-openapi.OpenAPIMain_test.xml
index 60b5b8b9efec1f756e0ecfb13557b1872679701c..4203a4d758f98ed0fb137551c357a0cbdfa5a6b7 100644
--- a/build/test-results/test/TEST-openapi.OpenAPIMain_test.xml
+++ b/build/test-results/test/TEST-openapi.OpenAPIMain_test.xml
@@ -1,109 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<testsuite name="openapi.OpenAPIMain_test" tests="1" skipped="0" failures="0" errors="0" timestamp="2021-09-04T14:23:20" hostname="DESKTOP-RAH69DT" time="11.952">
+<testsuite name="openapi.OpenAPIMain_test" tests="1" skipped="0" failures="0" errors="0" timestamp="2021-09-17T14:23:38" hostname="DESKTOP-RAH69DT" time="0.62">
   <properties/>
-  <testcase name="test()" classname="openapi.OpenAPIMain_test" time="11.952"/>
-  <system-out><![CDATA[101
+  <testcase name="test()" classname="openapi.OpenAPIMain_test" time="0.62"/>
+  <system-out><![CDATA[5
 Loading expression DSL file '1password.com-events-1.0.0.json'.
-Loading expression DSL file '1password.local-connect-1.3.0.json'.
 Loading expression DSL file '6-dot-authentiqio.appspot.com-6.json'.
 Loading expression DSL file 'abstractapi.com-geolocation-1.0.0.json'.
-Loading expression DSL file 'adyen.com-AccountService-6.json'.
-Loading expression DSL file 'adyen.com-BalancePlatformService-1.json'.
-Loading expression DSL file 'adyen.com-BinLookupService-50.json'.
-Loading expression DSL file 'adyen.com-CheckoutService-67.json'.
 Loading expression DSL file 'adyen.com-CheckoutUtilityService-1.json'.
-Loading expression DSL file 'adyen.com-FundService-6.json'.
-Loading expression DSL file 'adyen.com-HopService-6.json'.
-Loading expression DSL file 'adyen.com-NotificationConfigurationService-6.json'.
-Loading expression DSL file 'adyen.com-PaymentService-64.json'.
-Loading expression DSL file 'adyen.com-PayoutService-64.json'.
-Loading expression DSL file 'amazonaws.com-accessanalyzer-2019-11-01.json'.
-Loading expression DSL file 'amazonaws.com-acm-2015-12-08.json'.
-Loading expression DSL file 'amazonaws.com-acm-pca-2017-08-22.json'.
-Loading expression DSL file 'amazonaws.com-alexaforbusiness-2017-11-09.json'.
-Loading expression DSL file 'amazonaws.com-amp-2020-08-01.json'.
-Loading expression DSL file 'amazonaws.com-amplify-2017-07-25.json'.
-Loading expression DSL file 'amazonaws.com-amplifybackend-2020-08-11.json'.
-Loading expression DSL file 'amazonaws.com-apigateway-2015-07-09.json'.
-Loading expression DSL file 'amazonaws.com-apigatewaymanagementapi-2018-11-29.json'.
-Loading expression DSL file 'amazonaws.com-apigatewayv2-2018-11-29.json'.
-Loading expression DSL file 'amazonaws.com-appconfig-2019-10-09.json'.
-Loading expression DSL file 'amazonaws.com-appflow-2020-08-23.json'.
-Loading expression DSL file 'amazonaws.com-appintegration-2020-07-29.json'.
-Loading expression DSL file 'amazonaws.com-application-autoscaling-2016-02-06.json'.
-Loading expression DSL file 'amazonaws.com-application-insights-2018-11-25.json'.
-Loading expression DSL file 'amazonaws.com-applicationcostprofiler-2020-09-10.json'.
-Loading expression DSL file 'amazonaws.com-appmesh-2019-01-25.json'.
-Loading expression DSL file 'amazonaws.com-apprunner-2020-05-15.json'.
-Loading expression DSL file 'amazonaws.com-appstream-2016-12-01.json'.
-Loading expression DSL file 'amazonaws.com-appsync-2017-07-25.json'.
-Loading expression DSL file 'amazonaws.com-athena-2017-05-18.json'.
-Loading expression DSL file 'amazonaws.com-auditmanager-2017-07-25.json'.
-Loading expression DSL file 'amazonaws.com-autoscaling-2011-01-01.json'.
-Loading expression DSL file 'amazonaws.com-autoscaling-plans-2018-01-06.json'.
-Loading expression DSL file 'amazonaws.com-AWSMigrationHub-2017-05-31.json'.
-Loading expression DSL file 'amazonaws.com-backup-2018-11-15.json'.
-Loading expression DSL file 'amazonaws.com-batch-2016-08-10.json'.
-Loading expression DSL file 'amazonaws.com-braket-2019-09-01.json'.
-Loading expression DSL file 'amazonaws.com-budgets-2016-10-20.json'.
-Loading expression DSL file 'amazonaws.com-ce-2017-10-25.json'.
-Loading expression DSL file 'amazonaws.com-chime-2018-05-01.json'.
-Loading expression DSL file 'amazonaws.com-cloud9-2017-09-23.json'.
-Loading expression DSL file 'amazonaws.com-cloudformation-2010-05-15.json'.
-Loading expression DSL file 'amazonaws.com-cloudfront-2020-05-31.json'.
-Loading expression DSL file 'amazonaws.com-cloudhsm-2014-05-30.json'.
-Loading expression DSL file 'amazonaws.com-cloudhsmv2-2017-04-28.json'.
-Loading expression DSL file 'amazonaws.com-cloudsearch-2013-01-01.json'.
-Loading expression DSL file 'amazonaws.com-cloudsearchdomain-2013-01-01.json'.
-Loading expression DSL file 'amazonaws.com-cloudtrail-2013-11-01.json'.
-Loading expression DSL file 'amazonaws.com-codeartifcat-2018-09-22.json'.
-Loading expression DSL file 'amazonaws.com-codebuild-2016-10-06.json'.
-Loading expression DSL file 'amazonaws.com-codecommit-2015-04-13.json'.
-Loading expression DSL file 'amazonaws.com-codedelpoy-2014-10-06.json'.
-Loading expression DSL file 'amazonaws.com-codeguru-reviewer-2019-09-19.json'.
-Loading expression DSL file 'amazonaws.com-codeguruprofiler-2019-07-18.json'.
-Loading expression DSL file 'amazonaws.com-codepipeline-2015-07-09.json'.
-Loading expression DSL file 'amazonaws.com-codestar-2017-04-19.json'.
-Loading expression DSL file 'amazonaws.com-codestar-connections-2019-12-01.json'.
-Loading expression DSL file 'amazonaws.com-codestar-notifications-2019-10-15.json'.
-Loading expression DSL file 'amazonaws.com-cognito-identity-2014-06-30.json'.
-Loading expression DSL file 'amazonaws.com-cognito-idp-2016-04-18.json'.
-Loading expression DSL file 'amazonaws.com-cognito-sync-2014-06-30.json'.
-Loading expression DSL file 'amazonaws.com-comprehend-2017-11-27.json'.
-Loading expression DSL file 'amazonaws.com-comprehendmedical-2018-10-30.json'.
-Loading expression DSL file 'amazonaws.com-compute-optimizer-2019-11-01.json'.
-Loading expression DSL file 'amazonaws.com-config-2014-11-12.json'.
-Loading expression DSL file 'amazonaws.com-connect-2017-08-08.json'.
-Loading expression DSL file 'amazonaws.com-connect-contact-lens-2020-08-21.json'.
-Loading expression DSL file 'amazonaws.com-connectparticipant-2018-09-07.json'.
-Loading expression DSL file 'amazonaws.com-cur-2017-01-06.json'.
-Loading expression DSL file 'amazonaws.com-customer-profiles-2020-08-15.json'.
-Loading expression DSL file 'amazonaws.com-databrew-2017-07-25.json'.
-Loading expression DSL file 'amazonaws.com-dataexchange-2017-07-25.json'.
-Loading expression DSL file 'amazonaws.com-datapipeline-2012-10-29.json'.
-Loading expression DSL file 'amazonaws.com-datasync-2018-11-09.json'.
-Loading expression DSL file 'amazonaws.com-dax-2017-04-19.json'.
-Loading expression DSL file 'amazonaws.com-detective-2018-10-26.json'.
-Loading expression DSL file 'amazonaws.com-devicefarm-2015-06-23.json'.
-Loading expression DSL file 'amazonaws.com-devops-guru-2020-12-01.json'.
-Loading expression DSL file 'amazonaws.com-directconnect-2012-10-25.json'.
-Loading expression DSL file 'amazonaws.com-discovery-2015-11-01.json'.
-Loading expression DSL file 'amazonaws.com-dlm-2018-01-12.json'.
-Loading expression DSL file 'amazonaws.com-dms-2016-01-01.json'.
-Loading expression DSL file 'amazonaws.com-docdb-2014-10-31.json'.
-Loading expression DSL file 'amazonaws.com-ds-2015-04-16.json'.
-Loading expression DSL file 'amazonaws.com-dynamodb.json'.
-Loading expression DSL file 'amazonaws.com-ebs-2019-11-02.json'.
-Loading expression DSL file 'amazonaws.com-ec2-2016-11-15.json'.
-Loading expression DSL file 'amazonaws.com-ec2-instance-connect-2018-04-02.json'.
-Loading expression DSL file 'amazonaws.com-ecr-2015-09-21.json'.
-Loading expression DSL file 'callback-example.json'.
-Loading expression DSL file 'link-example.json'.
-Loading expression DSL file 'petstore-expanded.json'.
 Loading expression DSL file 'petstore-v2.yaml'.
-Loading expression DSL file 'petstore.json'.
-Loading expression DSL file 'richard_mueller4-MatchinitAPI-1-swagger.json'.
-Loading expression DSL file 'uspto.json'.
 ]]></system-out>
   <system-err><![CDATA[]]></system-err>
 </testsuite>
diff --git a/build/test-results/test/binary/output.bin b/build/test-results/test/binary/output.bin
index 7733d79747166478cde470020ef23336413bf8fa..bceca37f94bc52ad4780ec096d8c86c45c973a5a 100644
--- a/build/test-results/test/binary/output.bin
+++ b/build/test-results/test/binary/output.bin
@@ -1,102 +1,6 @@
-101
+5
 @Loading expression DSL file '1password.com-events-1.0.0.json'.
-CLoading expression DSL file '1password.local-connect-1.3.0.json'.
 ELoading expression DSL file '6-dot-authentiqio.appspot.com-6.json'.
 GLoading expression DSL file 'abstractapi.com-geolocation-1.0.0.json'.
-@Loading expression DSL file 'adyen.com-AccountService-6.json'.
-HLoading expression DSL file 'adyen.com-BalancePlatformService-1.json'.
-CLoading expression DSL file 'adyen.com-BinLookupService-50.json'.
-BLoading expression DSL file 'adyen.com-CheckoutService-67.json'.
 HLoading expression DSL file 'adyen.com-CheckoutUtilityService-1.json'.
-=Loading expression DSL file 'adyen.com-FundService-6.json'.
-<Loading expression DSL file 'adyen.com-HopService-6.json'.
-RLoading expression DSL file 'adyen.com-NotificationConfigurationService-6.json'.
-ALoading expression DSL file 'adyen.com-PaymentService-64.json'.
-@Loading expression DSL file 'adyen.com-PayoutService-64.json'.
-MLoading expression DSL file 'amazonaws.com-accessanalyzer-2019-11-01.json'.
-BLoading expression DSL file 'amazonaws.com-acm-2015-12-08.json'.
-FLoading expression DSL file 'amazonaws.com-acm-pca-2017-08-22.json'.
-OLoading expression DSL file 'amazonaws.com-alexaforbusiness-2017-11-09.json'.
-BLoading expression DSL file 'amazonaws.com-amp-2020-08-01.json'.
-FLoading expression DSL file 'amazonaws.com-amplify-2017-07-25.json'.
-MLoading expression DSL file 'amazonaws.com-amplifybackend-2020-08-11.json'.
-ILoading expression DSL file 'amazonaws.com-apigateway-2015-07-09.json'.
-VLoading expression DSL file 'amazonaws.com-apigatewaymanagementapi-2018-11-29.json'.
-KLoading expression DSL file 'amazonaws.com-apigatewayv2-2018-11-29.json'.
-HLoading expression DSL file 'amazonaws.com-appconfig-2019-10-09.json'.
-FLoading expression DSL file 'amazonaws.com-appflow-2020-08-23.json'.
-MLoading expression DSL file 'amazonaws.com-appintegration-2020-07-29.json'.
-VLoading expression DSL file 'amazonaws.com-application-autoscaling-2016-02-06.json'.
-SLoading expression DSL file 'amazonaws.com-application-insights-2018-11-25.json'.
-VLoading expression DSL file 'amazonaws.com-applicationcostprofiler-2020-09-10.json'.
-FLoading expression DSL file 'amazonaws.com-appmesh-2019-01-25.json'.
-HLoading expression DSL file 'amazonaws.com-apprunner-2020-05-15.json'.
-HLoading expression DSL file 'amazonaws.com-appstream-2016-12-01.json'.
-FLoading expression DSL file 'amazonaws.com-appsync-2017-07-25.json'.
-ELoading expression DSL file 'amazonaws.com-athena-2017-05-18.json'.
-KLoading expression DSL file 'amazonaws.com-auditmanager-2017-07-25.json'.
-JLoading expression DSL file 'amazonaws.com-autoscaling-2011-01-01.json'.
-PLoading expression DSL file 'amazonaws.com-autoscaling-plans-2018-01-06.json'.
-NLoading expression DSL file 'amazonaws.com-AWSMigrationHub-2017-05-31.json'.
-ELoading expression DSL file 'amazonaws.com-backup-2018-11-15.json'.
-DLoading expression DSL file 'amazonaws.com-batch-2016-08-10.json'.
-ELoading expression DSL file 'amazonaws.com-braket-2019-09-01.json'.
-FLoading expression DSL file 'amazonaws.com-budgets-2016-10-20.json'.
-ALoading expression DSL file 'amazonaws.com-ce-2017-10-25.json'.
-DLoading expression DSL file 'amazonaws.com-chime-2018-05-01.json'.
-ELoading expression DSL file 'amazonaws.com-cloud9-2017-09-23.json'.
-MLoading expression DSL file 'amazonaws.com-cloudformation-2010-05-15.json'.
-ILoading expression DSL file 'amazonaws.com-cloudfront-2020-05-31.json'.
-GLoading expression DSL file 'amazonaws.com-cloudhsm-2014-05-30.json'.
-ILoading expression DSL file 'amazonaws.com-cloudhsmv2-2017-04-28.json'.
-JLoading expression DSL file 'amazonaws.com-cloudsearch-2013-01-01.json'.
-PLoading expression DSL file 'amazonaws.com-cloudsearchdomain-2013-01-01.json'.
-ILoading expression DSL file 'amazonaws.com-cloudtrail-2013-11-01.json'.
-KLoading expression DSL file 'amazonaws.com-codeartifcat-2018-09-22.json'.
-HLoading expression DSL file 'amazonaws.com-codebuild-2016-10-06.json'.
-ILoading expression DSL file 'amazonaws.com-codecommit-2015-04-13.json'.
-ILoading expression DSL file 'amazonaws.com-codedelpoy-2014-10-06.json'.
-PLoading expression DSL file 'amazonaws.com-codeguru-reviewer-2019-09-19.json'.
-OLoading expression DSL file 'amazonaws.com-codeguruprofiler-2019-07-18.json'.
-KLoading expression DSL file 'amazonaws.com-codepipeline-2015-07-09.json'.
-GLoading expression DSL file 'amazonaws.com-codestar-2017-04-19.json'.
-SLoading expression DSL file 'amazonaws.com-codestar-connections-2019-12-01.json'.
-ULoading expression DSL file 'amazonaws.com-codestar-notifications-2019-10-15.json'.
-OLoading expression DSL file 'amazonaws.com-cognito-identity-2014-06-30.json'.
-JLoading expression DSL file 'amazonaws.com-cognito-idp-2016-04-18.json'.
-KLoading expression DSL file 'amazonaws.com-cognito-sync-2014-06-30.json'.
-ILoading expression DSL file 'amazonaws.com-comprehend-2017-11-27.json'.
-PLoading expression DSL file 'amazonaws.com-comprehendmedical-2018-10-30.json'.
-PLoading expression DSL file 'amazonaws.com-compute-optimizer-2019-11-01.json'.
-ELoading expression DSL file 'amazonaws.com-config-2014-11-12.json'.
-FLoading expression DSL file 'amazonaws.com-connect-2017-08-08.json'.
-SLoading expression DSL file 'amazonaws.com-connect-contact-lens-2020-08-21.json'.
-QLoading expression DSL file 'amazonaws.com-connectparticipant-2018-09-07.json'.
-BLoading expression DSL file 'amazonaws.com-cur-2017-01-06.json'.
-PLoading expression DSL file 'amazonaws.com-customer-profiles-2020-08-15.json'.
-GLoading expression DSL file 'amazonaws.com-databrew-2017-07-25.json'.
-KLoading expression DSL file 'amazonaws.com-dataexchange-2017-07-25.json'.
-KLoading expression DSL file 'amazonaws.com-datapipeline-2012-10-29.json'.
-GLoading expression DSL file 'amazonaws.com-datasync-2018-11-09.json'.
-BLoading expression DSL file 'amazonaws.com-dax-2017-04-19.json'.
-HLoading expression DSL file 'amazonaws.com-detective-2018-10-26.json'.
-ILoading expression DSL file 'amazonaws.com-devicefarm-2015-06-23.json'.
-JLoading expression DSL file 'amazonaws.com-devops-guru-2020-12-01.json'.
-LLoading expression DSL file 'amazonaws.com-directconnect-2012-10-25.json'.
-HLoading expression DSL file 'amazonaws.com-discovery-2015-11-01.json'.
-BLoading expression DSL file 'amazonaws.com-dlm-2018-01-12.json'.
-BLoading expression DSL file 'amazonaws.com-dms-2016-01-01.json'.
-DLoading expression DSL file 'amazonaws.com-docdb-2014-10-31.json'.
-ALoading expression DSL file 'amazonaws.com-ds-2015-04-16.json'.
-<Loading expression DSL file 'amazonaws.com-dynamodb.json'.
-BLoading expression DSL file 'amazonaws.com-ebs-2019-11-02.json'.
-BLoading expression DSL file 'amazonaws.com-ec2-2016-11-15.json'.
-SLoading expression DSL file 'amazonaws.com-ec2-instance-connect-2018-04-02.json'.
-BLoading expression DSL file 'amazonaws.com-ecr-2015-09-21.json'.
-6Loading expression DSL file 'callback-example.json'.
-2Loading expression DSL file 'link-example.json'.
-7Loading expression DSL file 'petstore-expanded.json'.
 1Loading expression DSL file 'petstore-v2.yaml'.
-.Loading expression DSL file 'petstore.json'.
-MLoading expression DSL file 'richard_mueller4-MatchinitAPI-1-swagger.json'.
-+Loading expression DSL file 'uspto.json'.
diff --git a/build/test-results/test/binary/output.bin.idx b/build/test-results/test/binary/output.bin.idx
index 4f5d5e86f3c326acf82407bd4c63696bcd6da902..75802f971af7f4f8a18ea7f2f23e65d594486cbf 100644
Binary files a/build/test-results/test/binary/output.bin.idx and b/build/test-results/test/binary/output.bin.idx differ
diff --git a/build/test-results/test/binary/results.bin b/build/test-results/test/binary/results.bin
index 478d4760456864b81712d1923848a1406ea31f19..ac68dcd16cad203c123299193c693b74ea4e1537 100644
Binary files a/build/test-results/test/binary/results.bin and b/build/test-results/test/binary/results.bin differ
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ASTNode.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ASTNode.java
index 9696828e0205362584f7b57fa45c7e47bed31a5b..27be982686283a8fd8ba61a72e95de617b3f9a51 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ASTNode.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ASTNode.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,7 +16,6 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
  * @astdecl ASTNode;
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation.java
index 5b30111d8687a3eb044a0097b145af3526c32542..e5b762c97fb83504f26a3e9978d5409d6b5c1025 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ASTNodeAnnotation.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,7 +16,6 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast class
  * @declaredat ASTNode:221
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ASTState.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ASTState.java
index 5d3191d769d2598e12eb4a8a6b3470b83838710f..5c6d56119397b77b61a9b0ad03782695e14a2cfe 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ASTState.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ASTState.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,7 +16,6 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /** @apilevel internal 
  * @ast class
  * @declaredat ASTState:34
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/AdditionalProperties.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/AdditionalProperties.java
index f3e5604cedf4b3f07d3d57b2ff99efaeef80fc4f..33c0d6feafa4610e2c2199b1d28db0f668c16e75 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/AdditionalProperties.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/AdditionalProperties.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:108
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:109
  * @astdecl AdditionalProperties : ASTNode ::= SchemaOb;
  * @production AdditionalProperties : {@link ASTNode} ::= <span class="component">{@link SchemaOb}</span>;
 
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/AllOfSchema.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/AllOfSchema.java
index 7245edfbdfffebb0921cf84d58bd493d0fb3dd63..5a39a789afbdd1aac66039267f62198429ec175a 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/AllOfSchema.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/AllOfSchema.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:114
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:115
  * @astdecl AllOfSchema : ASTNode ::= SchemaOb;
  * @production AllOfSchema : {@link ASTNode} ::= <span class="component">{@link SchemaOb}</span>;
 
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/AnyOfSchema.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/AnyOfSchema.java
index 83bcbd0425ca9bc3fbbf5355db9f7b389bd7e7d6..4ac5ae8d10b4f810e97187da4c4fd39aa82b2736 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/AnyOfSchema.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/AnyOfSchema.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:115
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:116
  * @astdecl AnyOfSchema : ASTNode ::= SchemaOb;
  * @production AnyOfSchema : {@link ASTNode} ::= <span class="component">{@link SchemaOb}</span>;
 
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/AttributeValue.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/AttributeValue.java
index 7bf0478a2d9c0822378d791329471e446382abea..69e53dc8656c697ab4bbb34f1b9bb06644b8029d 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/AttributeValue.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/AttributeValue.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,7 +16,6 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /** Wrapper class for storing nullable attribute values. 
  * @ast class
  * @declaredat ASTState:2
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/AuthorizationCode.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/AuthorizationCode.java
index d7a817ffa8f19358b42e14852ed37d1640194c9a..adec7a03dc9bf14885cdfd3e8b740e7d104abdd9 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/AuthorizationCode.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/AuthorizationCode.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:135
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:136
  * @astdecl AuthorizationCode : ASTNode ::= OAuthFlowObject;
  * @production AuthorizationCode : {@link ASTNode} ::= <span class="component">{@link OAuthFlowObject}</span>;
 
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/CallbackOb.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/CallbackOb.java
index 1b795f1461465d80abd0ef3de1cd885afab6a125..a158a1667015e43dbec7f21b622fe34ddd7147e6 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/CallbackOb.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/CallbackOb.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,34 +16,17 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:81
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:82
  * @astdecl CallbackOb : ASTNode;
  * @production CallbackOb : {@link ASTNode};
 
  */
 public abstract class CallbackOb extends ASTNode<ASTNode> implements Cloneable {
-  /**
-   * @aspect Composer
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jadd:504
-   */
-  public static Callback composeCallback (CallbackObject callbackObject, Map<Object, ASTNode> map){
-        Callback callback = new Callback();
-
-        if( callbackObject.getNumExpression() != 0 ){
-        Map<String, Path> paths = new HashMap<>();
-        for( Expression e : callbackObject.getExpressions() )
-        paths.put( e.getName(), PathItem.composePath( e.getPathItem() ));
-        callback.setCallbackPaths(paths);
-        }
-
-        return callback;
-        }
   /**
    * @aspect Parser
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:509
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:482
    */
   public static CallbackOb parseCallback(Callback callback, OAIContext context, Map<Object, ASTNode> map) throws DecodeException {
         CallbackObject callbackObject = new CallbackObject();
@@ -140,6 +124,14 @@ public abstract class CallbackOb extends ASTNode<ASTNode> implements Cloneable {
    * @declaredat ASTNode:58
    */
   public abstract CallbackOb treeCopy();
+  /**
+   * @attribute syn
+   * @aspect Composer
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:558
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="Composer", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:558")
+  public abstract Callback composeCallback(CallbackOb callbackOb, Map<Object, ASTNode> map);
   /** @apilevel internal */
   public ASTNode rewriteTo() {
     return super.rewriteTo();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/CallbackObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/CallbackObject.java
index f647a7a2875054445ab1953297c293a82c1e2557..4e287ced018f9d35a74b3ea2dd701b73554efe94 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/CallbackObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/CallbackObject.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:83
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:84
  * @astdecl CallbackObject : CallbackOb ::= Expression* Extension*;
  * @production CallbackObject : {@link CallbackOb} ::= <span class="component">{@link Expression}*</span> <span class="component">{@link Extension}*</span>;
 
@@ -380,6 +380,44 @@ public class CallbackObject extends CallbackOb implements Cloneable {
   public JastAddList<Extension> getExtensionsNoTransform() {
     return getExtensionListNoTransform();
   }
+/** @apilevel internal */
+protected java.util.Set composeCallback_CallbackOb_Map_Object__ASTNode__visited;
+  /**
+   * @attribute syn
+   * @aspect Composer
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:558
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="Composer", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:558")
+  public Callback composeCallback(CallbackOb callbackOb, Map<Object, ASTNode> map) {
+    java.util.List _parameters = new java.util.ArrayList(2);
+    _parameters.add(callbackOb);
+    _parameters.add(map);
+    if (composeCallback_CallbackOb_Map_Object__ASTNode__visited == null) composeCallback_CallbackOb_Map_Object__ASTNode__visited = new java.util.HashSet(4);
+    if (composeCallback_CallbackOb_Map_Object__ASTNode__visited.contains(_parameters)) {
+      throw new RuntimeException("Circular definition of attribute CallbackOb.composeCallback(CallbackOb,Map_Object__ASTNode_).");
+    }
+    composeCallback_CallbackOb_Map_Object__ASTNode__visited.add(_parameters);
+    try {
+            Callback callback = new Callback();
+            CallbackObject c = (CallbackObject) callbackOb;
+    
+            if( c.getNumExpression() != 0 ){
+            Map<String, Path> paths = new HashMap<>();
+            PathItemOb p;
+            for( Expression e : c.getExpressions() ) {
+            p = e.getPathItemOb();
+            paths.put(e.getName(), p.composePath(p, map));
+            }
+            callback.setCallbackPaths(paths);
+            }
+    
+            return callback;
+            }
+    finally {
+      composeCallback_CallbackOb_Map_Object__ASTNode__visited.remove(_parameters);
+    }
+  }
   /** @apilevel internal */
   public ASTNode rewriteTo() {
     return super.rewriteTo();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/CallbackReference.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/CallbackReference.java
index 857ee09f76969b971736c7dfd80d390474dc10e5..fbe5a083118c538fae2be9f4466fd0992529c716 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/CallbackReference.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/CallbackReference.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:82
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:83
  * @astdecl CallbackReference : CallbackOb ::= <Ref:String> <CallbackOb:CallbackOb>;
  * @production CallbackReference : {@link CallbackOb} ::= <span class="component">&lt;Ref:String&gt;</span> <span class="component">&lt;CallbackOb:CallbackOb&gt;</span>;
 
@@ -197,6 +197,37 @@ public class CallbackReference extends CallbackOb implements Cloneable {
   public CallbackOb getCallbackOb() {
     return tokenCallbackOb_CallbackOb;
   }
+/** @apilevel internal */
+protected java.util.Set composeCallback_CallbackOb_Map_Object__ASTNode__visited;
+  /**
+   * @attribute syn
+   * @aspect Composer
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:558
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="Composer", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:558")
+  public Callback composeCallback(CallbackOb callbackOb, Map<Object, ASTNode> map) {
+    java.util.List _parameters = new java.util.ArrayList(2);
+    _parameters.add(callbackOb);
+    _parameters.add(map);
+    if (composeCallback_CallbackOb_Map_Object__ASTNode__visited == null) composeCallback_CallbackOb_Map_Object__ASTNode__visited = new java.util.HashSet(4);
+    if (composeCallback_CallbackOb_Map_Object__ASTNode__visited.contains(_parameters)) {
+      throw new RuntimeException("Circular definition of attribute CallbackOb.composeCallback(CallbackOb,Map_Object__ASTNode_).");
+    }
+    composeCallback_CallbackOb_Map_Object__ASTNode__visited.add(_parameters);
+    try {
+            Callback callback = new Callback();
+            CallbackReference c = (CallbackReference) callbackOb;
+    
+            if( !c.getRef().isEmpty() )
+            callback.setRef(c.getRef());
+    
+            return callback;
+            }
+    finally {
+      composeCallback_CallbackOb_Map_Object__ASTNode__visited.remove(_parameters);
+    }
+  }
   /** @apilevel internal */
   public ASTNode rewriteTo() {
     return super.rewriteTo();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/CallbackTuple.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/CallbackTuple.java
index 94eac9edd255a794779fb4276869948d21be4bb7..7035a5e139264fb632caa36794ea5dee956e9af7 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/CallbackTuple.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/CallbackTuple.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,7 +16,6 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
  * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:31
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ClientCredentials.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ClientCredentials.java
index cf339e64ac5590a0aaa090e51289630f9a3be4c9..adbc890b2e41664fbaaa1e283d93869b827e1f1d 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ClientCredentials.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ClientCredentials.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:134
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:135
  * @astdecl ClientCredentials : ASTNode ::= OAuthFlowObject;
  * @production ClientCredentials : {@link ASTNode} ::= <span class="component">{@link OAuthFlowObject}</span>;
 
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ComponentsObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ComponentsObject.java
index 34be42e3e520e2acaacea32d8d72fcadb981c701..7dc5938f86894e054f17d62f94b4d3c3536ae01a 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ComponentsObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ComponentsObject.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,7 +16,6 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
  * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:22
@@ -26,27 +26,39 @@ import org.openapi4j.core.exception.DecodeException;
 public class ComponentsObject extends ASTNode<ASTNode> implements Cloneable {
   /**
    * @aspect Composer
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jadd:173
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:173
    */
   public static Components composeComponents (ComponentsObject componentsObject, Map<Object, ASTNode> map){
         Components components = new Components();
 
         if( componentsObject.getNumSchemaTuple() != 0 ){
         Map<String, org.openapi4j.parser.model.v3.Schema> schemaMap = new HashMap<>();
-        for( SchemaTuple t : componentsObject.getSchemaTuples() )
-        schemaMap.put(t.getKey(), SchemaOb.composeSchema(t.getSchemaOb(), map));
+        SchemaOb s;
+        for( SchemaTuple t : componentsObject.getSchemaTuples() ){
+        s = t.getSchemaOb();
+        if( s instanceof SchemaObject )
+        schemaMap.put(t.getKey(), ((SchemaObject)s).composeSchema(s, map));
+        else
+        schemaMap.put(t.getKey(), ((SchemaReference)s).composeSchema(s, map));
+        }
         components.setSchemas(schemaMap);
         }
         if( componentsObject.getNumResponseTuple() != 0 ){
         Map<String, Response> responseMap = new HashMap<>();
-        for( ResponseTuple t : componentsObject.getResponseTuples() )
-        responseMap.put(t.getKey(), ResponseOb.composeResponse(t.getResponseOb(), map));
+        ResponseOb r;
+        for( ResponseTuple t : componentsObject.getResponseTuples() ) {
+        r = t.getResponseOb();
+        responseMap.put(t.getKey(), r.composeResponse(r, map));
+        }
         components.setResponses(responseMap);
         }
         if( componentsObject.getNumParameterTuple() != 0 ){
         Map<String, Parameter> parameterMap = new HashMap<>();
-        for( ParameterTuple t : componentsObject.getParameterTuples() )
-        parameterMap.put(t.getKey(), ParameterOb.composeParameter(t.getParameterOb(), map));
+        ParameterOb p;
+        for( ParameterTuple t : componentsObject.getParameterTuples() ) {
+        p = t.getParameterOb();
+        parameterMap.put(t.getKey(), p.composeParameter(p, map));
+        }
         components.setParameters(parameterMap);
         }
         if( componentsObject.getNumExampleTuple() != 0 ){
@@ -57,33 +69,43 @@ public class ComponentsObject extends ASTNode<ASTNode> implements Cloneable {
         }
         if( componentsObject.getNumRequestBodyTuple() != 0 ){
         Map<String, RequestBody> requestBodyMap = new HashMap<>();
-        for( RequestBodyTuple t : componentsObject.getRequestBodyTuples() )
-        requestBodyMap.put(t.getKey(), RequestBodyOb.composeRequestBody(t.getRequestBodyOb(), map));
-        components.setRequestBodies(requestBodyMap);
+        RequestBodyOb r;
+        for( RequestBodyTuple t : componentsObject.getRequestBodyTuples() ) {
+        r = t.getRequestBodyOb();
+        requestBodyMap.put(t.getKey(), r.composeRequestBody(r, map));
+        }        components.setRequestBodies(requestBodyMap);
         }
         if( componentsObject.getNumHeaderTuple() != 0 ){
         Map<String, Header> headerMap = new HashMap<>();
-        for( HeaderTuple t : componentsObject.getHeaderTuples() )
-        headerMap.put(t.getKey(), HeaderOb.composeHeader(t.getHeaderOb(), map));
-        components.setHeaders(headerMap);
+        HeaderOb h;
+        for( HeaderTuple t : componentsObject.getHeaderTuples() ) {
+        h = t.getHeaderOb();
+        headerMap.put(t.getKey(), h.composeHeader(h, map));
+        }        components.setHeaders(headerMap);
         }
         if( componentsObject.getNumSecuritySchemeTuple() != 0 ){
         Map<String, SecurityScheme> securitySchemeMap = new HashMap<>();
-        for( SecuritySchemeTuple t : componentsObject.getSecuritySchemeTuples() )
-        securitySchemeMap.put(t.getKey(), SecuritySchemeOb.composeSecurityScheme(t.getSecuritySchemeOb(), map));
-        components.setSecuritySchemes(securitySchemeMap);
+        SecuritySchemeOb s;
+        for( SecuritySchemeTuple t : componentsObject.getSecuritySchemeTuples() ) {
+        s = t.getSecuritySchemeOb();
+        securitySchemeMap.put(t.getKey(), s.composeSecurityScheme(s, map));
+        }        components.setSecuritySchemes(securitySchemeMap);
         }
         if( componentsObject.getNumLinkTuple() != 0 ){
         Map<String, Link> linkMap = new HashMap<>();
-        for( LinkTuple t : componentsObject.getLinkTuples() )
-        linkMap.put(t.getKey(), LinkOb.composeLink(t.getLinkOb(), map));
-        components.setLinks(linkMap);
+        LinkOb l;
+        for( LinkTuple t : componentsObject.getLinkTuples() ) {
+        l = t.getLinkOb();
+        linkMap.put(t.getKey(), l.composeLink(l, map));
+        }        components.setLinks(linkMap);
         }
         if( componentsObject.getNumCallbackTuple() != 0 ){
         Map<String, Callback> callbackMap = new HashMap<>();
-        for( CallbackTuple t : componentsObject.getCallbackTuples() )
-        callbackMap.put(t.getKey(), CallbackOb.composeCallback(t.getCallbackOb(), map));
-        components.setCallbacks(callbackMap);
+        CallbackOb c;
+        for( CallbackTuple t : componentsObject.getCallbackTuples() ) {
+        c = t.getCallbackOb();
+        callbackMap.put(t.getKey(), c.composeCallback(c, map));
+        }        components.setCallbacks(callbackMap);
         }
         if( componentsObject.getNumExtension() != 0 ){
         Map<String, Object> extensions = new HashMap<>();
@@ -102,67 +124,40 @@ public class ComponentsObject extends ASTNode<ASTNode> implements Cloneable {
         ComponentsObject componentsObject = new ComponentsObject();
 
         if( components.getSchemas() != null ){
-        for( String key : components.getSchemas().keySet() ){
-        SchemaTuple schemaTuple = new SchemaTuple();
-        schemaTuple.setKey(key);
-        schemaTuple.setSchemaOb(SchemaOb.parseSchema(components.getSchema(key), context, map));
-        }
+        for( String key : components.getSchemas().keySet() )
+        componentsObject.addSchemaTuple(new SchemaTuple(key, SchemaOb.parseSchema(components.getSchema(key), context, map)));
         }
         if( components.getResponses() != null ){
-        for( String key : components.getResponses().keySet() ){
-        ResponseTuple responseTuple = new ResponseTuple();
-        responseTuple.setKey(key);
-        responseTuple.setResponseOb(ResponseOb.parseResponse(components.getResponse(key), context, map));
-        }
+        for( String key : components.getResponses().keySet() )
+        componentsObject.addResponseTuple(new ResponseTuple(key, ResponseOb.parseResponse(components.getResponse(key), context, map)));
         }
         if( components.getParameters() != null ){
-        for( String key : components.getParameters().keySet() ){
-        ParameterTuple parameterTuple = new ParameterTuple();
-        parameterTuple.setKey(key);
-        parameterTuple.setParameterOb(ParameterOb.parseParameter(components.getParameter(key), context, map));
-        }
+        for( String key : components.getParameters().keySet() )
+        componentsObject.addParameterTuple(new ParameterTuple(key, ParameterOb.parseParameter(components.getParameter(key), context, map)));
         }
         if( components.getExamples() != null ){
-        for( String key : components.getExamples().keySet() ){
-        ExampleTuple exampleTuple = new ExampleTuple();
-        exampleTuple.setKey(key);
-        exampleTuple.setExampleObject(ExampleObject.parseExample(components.getExample(key), context, map));
-        }
+        for( String key : components.getExamples().keySet() )
+        componentsObject.addExampleTuple(new ExampleTuple(key, ExampleObject.parseExample(components.getExample(key), context, map)));
         }
         if( components.getRequestBodies() != null ){
-        for( String key : components.getRequestBodies().keySet() ){
-        RequestBodyTuple requestBodyTuple = new RequestBodyTuple();
-        requestBodyTuple.setKey(key);
-        requestBodyTuple.setRequestBodyOb(RequestBodyOb.parseRequestBody(components.getRequestBody(key), context, map));
-        }
+        for( String key : components.getRequestBodies().keySet() )
+        componentsObject.addRequestBodyTuple(new RequestBodyTuple(key, RequestBodyOb.parseRequestBody(components.getRequestBody(key), context, map)));
         }
         if( components.getHeaders() != null ){
-        for( String key : components.getHeaders().keySet() ){
-        HeaderTuple headerTuple = new HeaderTuple();
-        headerTuple.setKey(key);
-        headerTuple.setHeaderOb(HeaderOb.parseHeader(components.getHeader(key), context, map));
-        }
+        for( String key : components.getHeaders().keySet() )
+        componentsObject.addHeaderTuple(new HeaderTuple(key, HeaderOb.parseHeader(components.getHeader(key), context, map)));
         }
         if( components.getSecuritySchemes() != null ){
-        for( String key : components.getSecuritySchemes().keySet() ){
-        SecuritySchemeTuple securitySchemeTuple = new SecuritySchemeTuple();
-        securitySchemeTuple.setKey(key);
-        securitySchemeTuple.setSecuritySchemeOb(SecuritySchemeOb.parseSecurityScheme(components.getSecurityScheme(key), context, map));
-        }
+        for( String key : components.getSecuritySchemes().keySet() )
+        componentsObject.addSecuritySchemeTuple(new SecuritySchemeTuple(key, SecuritySchemeOb.parseSecurityScheme(components.getSecurityScheme(key), context, map)));
         }
         if( components.getLinks() != null ){
-        for( String key : components.getLinks().keySet() ){
-        LinkTuple linkTuple = new LinkTuple();
-        linkTuple.setKey(key);
-        linkTuple.setLinkOb(LinkOb.parseLink(components.getLink(key), context, map));
-        }
+        for( String key : components.getLinks().keySet() )
+        componentsObject.addLinkTuple(new LinkTuple(key, LinkOb.parseLink(components.getLink(key), context, map)));
         }
         if( components.getCallbacks() != null ){
-        for( String key : components.getCallbacks().keySet() ){
-        CallbackTuple callbackTuple = new CallbackTuple();
-        callbackTuple.setKey(key);
-        callbackTuple.setCallbackOb(CallbackOb.parseCallback(components.getCallback(key), context, map));
-        }
+        for( String key : components.getCallbacks().keySet() )
+        componentsObject.addCallbackTuple(new CallbackTuple(key, CallbackOb.parseCallback(components.getCallback(key), context, map)));
         }
         if( components.getExtensions() != null ){
         for( String key : components.getExtensions().keySet() )
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ContactObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ContactObject.java
index b7dc8f8fa09135269077caa25593bdf0928ac0d5..510b65891fcf856fe8d9bad42e3c417960d1ff26 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ContactObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ContactObject.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,7 +16,6 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
  * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:8
@@ -26,7 +26,7 @@ import org.openapi4j.core.exception.DecodeException;
 public class ContactObject extends ASTNode<ASTNode> implements Cloneable {
   /**
    * @aspect Composer
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jadd:87
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:87
    */
   public static Contact composeContact (ContactObject contactObject, Map<Object, ASTNode> map){
         Contact contact = new Contact();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ContentTuple.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ContentTuple.java
index 79e5d80e98de73851a61f3b03a8e283702010732..16f49cb079da89a2cf9c904ca525b9c5d0a87970 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ContentTuple.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ContentTuple.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:61
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:62
  * @astdecl ContentTuple : ASTNode ::= <Key:String> MediaTypeObject;
  * @production ContentTuple : {@link ASTNode} ::= <span class="component">&lt;Key:String&gt;</span> <span class="component">{@link MediaTypeObject}</span>;
 
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Delete.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Delete.java
index af7e0f42e2b4ff5d24015b15067b59f269ae64c4..bf3baaf8c325968b02c12517391a1b9c590c40f1 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Delete.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Delete.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,15 +16,14 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:44
- * @astdecl Delete : ASTNode ::= OperationObject;
- * @production Delete : {@link ASTNode} ::= <span class="component">{@link OperationObject}</span>;
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:48
+ * @astdecl Delete : OperationOb ::= <OperationObject:OperationObject>;
+ * @production Delete : {@link OperationOb} ::= <span class="component">&lt;OperationObject:OperationObject&gt;</span>;
 
  */
-public class Delete extends ASTNode<ASTNode> implements Cloneable {
+public class Delete extends OperationOb implements Cloneable {
   /**
    * @declaredat ASTNode:1
    */
@@ -38,53 +38,52 @@ public class Delete extends ASTNode<ASTNode> implements Cloneable {
    * @declaredat ASTNode:10
    */
   public void init$Children() {
-    children = new ASTNode[1];
   }
   /**
-   * @declaredat ASTNode:13
+   * @declaredat ASTNode:12
    */
   @ASTNodeAnnotation.Constructor(
     name = {"OperationObject"},
     type = {"OperationObject"},
-    kind = {"Child"}
+    kind = {"Token"}
   )
   public Delete(OperationObject p0) {
-    setChild(p0, 0);
+    setOperationObject(p0);
   }
   /** @apilevel low-level 
-   * @declaredat ASTNode:22
+   * @declaredat ASTNode:21
    */
   protected int numChildren() {
-    return 1;
+    return 0;
   }
   /**
    * @apilevel internal
-   * @declaredat ASTNode:28
+   * @declaredat ASTNode:27
    */
   public boolean mayHaveRewrite() {
     return false;
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:32
+   * @declaredat ASTNode:31
    */
   public void flushAttrCache() {
     super.flushAttrCache();
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:36
+   * @declaredat ASTNode:35
    */
   public void flushCollectionCache() {
     super.flushCollectionCache();
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:40
+   * @declaredat ASTNode:39
    */
   public Delete clone() throws CloneNotSupportedException {
     Delete node = (Delete) super.clone();
     return node;
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:45
+   * @declaredat ASTNode:44
    */
   public Delete copy() {
     try {
@@ -104,7 +103,7 @@ public class Delete extends ASTNode<ASTNode> implements Cloneable {
    * @return dangling copy of the subtree at this node
    * @apilevel low-level
    * @deprecated Please use treeCopy or treeCopyNoTransform instead
-   * @declaredat ASTNode:64
+   * @declaredat ASTNode:63
    */
   @Deprecated
   public Delete fullCopy() {
@@ -115,7 +114,7 @@ public class Delete extends ASTNode<ASTNode> implements Cloneable {
    * The copy is dangling, i.e. has no parent.
    * @return dangling copy of the subtree at this node
    * @apilevel low-level
-   * @declaredat ASTNode:74
+   * @declaredat ASTNode:73
    */
   public Delete treeCopyNoTransform() {
     Delete tree = (Delete) copy();
@@ -136,7 +135,7 @@ public class Delete extends ASTNode<ASTNode> implements Cloneable {
    * The copy is dangling, i.e. has no parent.
    * @return dangling copy of the subtree at this node
    * @apilevel low-level
-   * @declaredat ASTNode:94
+   * @declaredat ASTNode:93
    */
   public Delete treeCopy() {
     Delete tree = (Delete) copy();
@@ -152,36 +151,30 @@ public class Delete extends ASTNode<ASTNode> implements Cloneable {
     return tree;
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:108
+   * @declaredat ASTNode:107
    */
   protected boolean is$Equal(ASTNode node) {
-    return super.is$Equal(node);    
+    return super.is$Equal(node) && (tokenOperationObject_OperationObject == ((Delete) node).tokenOperationObject_OperationObject);    
   }
   /**
-   * Replaces the OperationObject child.
-   * @param node The new node to replace the OperationObject child.
+   * Replaces the lexeme OperationObject.
+   * @param value The new value for the lexeme OperationObject.
    * @apilevel high-level
    */
-  public void setOperationObject(OperationObject node) {
-    setChild(node, 0);
+  public void setOperationObject(OperationObject value) {
+    tokenOperationObject_OperationObject = value;
   }
+  /** @apilevel internal 
+   */
+  protected OperationObject tokenOperationObject_OperationObject;
   /**
-   * Retrieves the OperationObject child.
-   * @return The current node used as the OperationObject child.
+   * Retrieves the value for the lexeme OperationObject.
+   * @return The value for the lexeme OperationObject.
    * @apilevel high-level
    */
-  @ASTNodeAnnotation.Child(name="OperationObject")
+  @ASTNodeAnnotation.Token(name="OperationObject")
   public OperationObject getOperationObject() {
-    return (OperationObject) getChild(0);
-  }
-  /**
-   * Retrieves the OperationObject child.
-   * <p><em>This method does not invoke AST transformations.</em></p>
-   * @return The current node used as the OperationObject child.
-   * @apilevel low-level
-   */
-  public OperationObject getOperationObjectNoTransform() {
-    return (OperationObject) getChildNoTransform(0);
+    return tokenOperationObject_OperationObject;
   }
   /** @apilevel internal */
   public ASTNode rewriteTo() {
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/DiscriminatorObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/DiscriminatorObject.java
index 1d18dc7820f9357c82d1b1ef3bb7ea07e2e571e5..a4fdd64dcd6fa494bf68b788a5a4ade47744468e 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/DiscriminatorObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/DiscriminatorObject.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:119
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:120
  * @astdecl DiscriminatorObject : ASTNode ::= <PropertyName:String> MappingTuple*;
  * @production DiscriminatorObject : {@link ASTNode} ::= <span class="component">&lt;PropertyName:String&gt;</span> <span class="component">{@link MappingTuple}*</span>;
 
@@ -26,7 +26,7 @@ import org.openapi4j.core.exception.DecodeException;
 public class DiscriminatorObject extends ASTNode<ASTNode> implements Cloneable {
   /**
    * @aspect Composer
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jadd:717
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:840
    */
   public static Discriminator composeDiscriminator (DiscriminatorObject discriminatorObject, Map<Object, ASTNode> map) {
         Discriminator discriminator = new Discriminator();
@@ -44,7 +44,7 @@ public class DiscriminatorObject extends ASTNode<ASTNode> implements Cloneable {
         }
   /**
    * @aspect Parser
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:891
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:752
    */
   public static DiscriminatorObject parseDiscriminator (Discriminator discriminator, Map<Object, ASTNode> map) {
         DiscriminatorObject discriminatorObject = new DiscriminatorObject();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/EncodingObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/EncodingObject.java
index 9db9df1476b702176541d5d2ecc95a92a43b76cb..65618cf6050c5793d9c7111e8ccca858bea9cd0c 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/EncodingObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/EncodingObject.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:73
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:74
  * @astdecl EncodingObject : ASTNode ::= <ContentType:String> HeaderTuple* <Style:String> <Explode:Boolean> <AllowReserved:Boolean> Extension*;
  * @production EncodingObject : {@link ASTNode} ::= <span class="component">&lt;ContentType:String&gt;</span> <span class="component">{@link HeaderTuple}*</span> <span class="component">&lt;Style:String&gt;</span> <span class="component">&lt;Explode:Boolean&gt;</span> <span class="component">&lt;AllowReserved:Boolean&gt;</span> <span class="component">{@link Extension}*</span>;
 
@@ -26,18 +26,20 @@ import org.openapi4j.core.exception.DecodeException;
 public class EncodingObject extends ASTNode<ASTNode> implements Cloneable {
   /**
    * @aspect Composer
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jadd:450
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:493
    */
   public static EncodingProperty composeEncodingProperty (EncodingObject encodingObject, Map<Object, ASTNode> map){
         EncodingProperty encodingProperty = new EncodingProperty();
+        HeaderOb h;
 
         if( !encodingObject.getContentType().isEmpty() )
         encodingProperty.setContentType( encodingObject.getContentType() );
         if( encodingObject.getNumHeaderTuple() != 0 ){
         Map<String, Header> headers = new HashMap<>();
-        for( HeaderTuple t : encodingObject.getHeaderTuples() )
-        headers.put(t.getKey(), HeaderObject.composeHeader(t.getHeaderObject()));
-        encodingProperty.setHeaders(headers);
+        for( HeaderTuple t : encodingObject.getHeaderTuples() ) {
+        h = t.getHeaderOb();
+        headers.put(t.getKey(), h.composeHeader(h, map));
+        }        encodingProperty.setHeaders(headers);
         }
         if( !encodingObject.getStyle().isEmpty() )
         encodingProperty.setStyle(encodingObject.getStyle());
@@ -54,7 +56,7 @@ public class EncodingObject extends ASTNode<ASTNode> implements Cloneable {
         }
   /**
    * @aspect Parser
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:454
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:427
    */
   public static EncodingObject parseEncoding(EncodingProperty encodingProperty, OAIContext context, Map<Object, ASTNode> map) throws DecodeException {
         EncodingObject encodingObject = new EncodingObject();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/EncodingTuple.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/EncodingTuple.java
index 637372192be4cc73bced59f7501f24c99223b83d..8404db7eff735a2de92aefe58e639fa69280585c 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/EncodingTuple.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/EncodingTuple.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:70
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:71
  * @astdecl EncodingTuple : ASTNode ::= <Key:String> EncodingObject;
  * @production EncodingTuple : {@link ASTNode} ::= <span class="component">&lt;Key:String&gt;</span> <span class="component">{@link EncodingObject}</span>;
 
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Enum.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Enum.java
index 6638e03f1ec50ec6333e885e706dc7172f7875c9..2f2aead6c403452f0e06dd99c97a9517dae60e99 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Enum.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Enum.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,7 +16,6 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
  * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:19
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/EnumObj.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/EnumObj.java
index f07007b612e9ececbe49807526543616b9e516d6..e6d5bba9532613359943729610f324a036d54c38 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/EnumObj.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/EnumObj.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:109
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:110
  * @astdecl EnumObj : ASTNode ::= <EnumOb:Object>;
  * @production EnumObj : {@link ASTNode} ::= <span class="component">&lt;EnumOb:Object&gt;</span>;
 
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ExampleObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ExampleObject.java
index 4edb2d1c614ef99fa95ff4cfd088e969193e2067..bfa74789c2292227fcb883a313d92520efdb3db0 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ExampleObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ExampleObject.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:88
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:89
  * @astdecl ExampleObject : ASTNode ::= <Summary:String> <Description:String> <Value:Object> <ExternalValue:String> Extension*;
  * @production ExampleObject : {@link ASTNode} ::= <span class="component">&lt;Summary:String&gt;</span> <span class="component">&lt;Description:String&gt;</span> <span class="component">&lt;Value:Object&gt;</span> <span class="component">&lt;ExternalValue:String&gt;</span> <span class="component">{@link Extension}*</span>;
 
@@ -26,7 +26,7 @@ import org.openapi4j.core.exception.DecodeException;
 public class ExampleObject extends ASTNode<ASTNode> implements Cloneable {
   /**
    * @aspect Composer
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jadd:517
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:585
    */
   public static Example composeExample (ExampleObject exampleObject, Map<Object, ASTNode> map){
         Example example = new Example();
@@ -50,7 +50,7 @@ public class ExampleObject extends ASTNode<ASTNode> implements Cloneable {
         }
   /**
    * @aspect Parser
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:532
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:505
    */
   public static ExampleObject parseExample(Example example, OAIContext context, Map<Object, ASTNode> map){
         ExampleObject exampleObject = new ExampleObject();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ExampleTuple.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ExampleTuple.java
index 541c579d3d1467eda78bfa06522777c6460ee1c0..268a8669559d8a9bf7a1d9453c85de9bb148d579 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ExampleTuple.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ExampleTuple.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,7 +16,6 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
  * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:26
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Expression.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Expression.java
index 116984d96a2f718cb88d778249166cb7c2171eaa..f82ffed88240247b700a9b02f9d91e98c898704b 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Expression.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Expression.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:84
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:85
  * @astdecl Expression : ASTNode ::= <Name:String> PathItemOb;
  * @production Expression : {@link ASTNode} ::= <span class="component">&lt;Name:String&gt;</span> <span class="component">{@link PathItemOb}</span>;
 
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Extension.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Extension.java
index 472d55a24e419a69d6888b98546e749013e929b3..3562f3fa87076389afd30433d50b79a9bb4275b3 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Extension.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Extension.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:85
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:86
  * @astdecl Extension : ASTNode ::= <Key:String> <Value:Object>;
  * @production Extension : {@link ASTNode} ::= <span class="component">&lt;Key:String&gt;</span> <span class="component">&lt;Value:Object&gt;</span>;
 
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ExternalDocObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ExternalDocObject.java
index 9fb1a74889206c5274e556c1deeca8c5ee13b625..67056a7f178c0d39e28ad19ec031eb741298b837 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ExternalDocObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ExternalDocObject.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:55
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:56
  * @astdecl ExternalDocObject : ASTNode ::= <Description:String> <Url:String> Extension*;
  * @production ExternalDocObject : {@link ASTNode} ::= <span class="component">&lt;Description:String&gt;</span> <span class="component">&lt;Url:String&gt;</span> <span class="component">{@link Extension}*</span>;
 
@@ -26,7 +26,7 @@ import org.openapi4j.core.exception.DecodeException;
 public class ExternalDocObject extends ASTNode<ASTNode> implements Cloneable {
   /**
    * @aspect Composer
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jadd:342
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:365
    */
   public static ExternalDocs composeExternalDocs (ExternalDocObject externalDocObject, Map<Object, ASTNode> map){
         ExternalDocs externalDocs = new ExternalDocs();
@@ -46,7 +46,7 @@ public class ExternalDocObject extends ASTNode<ASTNode> implements Cloneable {
         }
   /**
    * @aspect Parser
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:339
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:312
    */
   public static ExternalDocObject parseExternalDocs(ExternalDocs externalDocs, Map<Object, ASTNode> map){
         ExternalDocObject externalDocObject = new ExternalDocObject();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Get.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Get.java
index 28b7bc253bc7cfe5983ef1bd83e916ab635d7766..8331ff41cdad9cba8eb55c71c7540e9804fd7fd2 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Get.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Get.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,15 +16,14 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:41
- * @astdecl Get : ASTNode ::= OperationObject;
- * @production Get : {@link ASTNode} ::= <span class="component">{@link OperationObject}</span>;
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:45
+ * @astdecl Get : OperationOb ::= <OperationObject:OperationObject>;
+ * @production Get : {@link OperationOb} ::= <span class="component">&lt;OperationObject:OperationObject&gt;</span>;
 
  */
-public class Get extends ASTNode<ASTNode> implements Cloneable {
+public class Get extends OperationOb implements Cloneable {
   /**
    * @declaredat ASTNode:1
    */
@@ -38,53 +38,52 @@ public class Get extends ASTNode<ASTNode> implements Cloneable {
    * @declaredat ASTNode:10
    */
   public void init$Children() {
-    children = new ASTNode[1];
   }
   /**
-   * @declaredat ASTNode:13
+   * @declaredat ASTNode:12
    */
   @ASTNodeAnnotation.Constructor(
     name = {"OperationObject"},
     type = {"OperationObject"},
-    kind = {"Child"}
+    kind = {"Token"}
   )
   public Get(OperationObject p0) {
-    setChild(p0, 0);
+    setOperationObject(p0);
   }
   /** @apilevel low-level 
-   * @declaredat ASTNode:22
+   * @declaredat ASTNode:21
    */
   protected int numChildren() {
-    return 1;
+    return 0;
   }
   /**
    * @apilevel internal
-   * @declaredat ASTNode:28
+   * @declaredat ASTNode:27
    */
   public boolean mayHaveRewrite() {
     return false;
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:32
+   * @declaredat ASTNode:31
    */
   public void flushAttrCache() {
     super.flushAttrCache();
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:36
+   * @declaredat ASTNode:35
    */
   public void flushCollectionCache() {
     super.flushCollectionCache();
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:40
+   * @declaredat ASTNode:39
    */
   public Get clone() throws CloneNotSupportedException {
     Get node = (Get) super.clone();
     return node;
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:45
+   * @declaredat ASTNode:44
    */
   public Get copy() {
     try {
@@ -104,7 +103,7 @@ public class Get extends ASTNode<ASTNode> implements Cloneable {
    * @return dangling copy of the subtree at this node
    * @apilevel low-level
    * @deprecated Please use treeCopy or treeCopyNoTransform instead
-   * @declaredat ASTNode:64
+   * @declaredat ASTNode:63
    */
   @Deprecated
   public Get fullCopy() {
@@ -115,7 +114,7 @@ public class Get extends ASTNode<ASTNode> implements Cloneable {
    * The copy is dangling, i.e. has no parent.
    * @return dangling copy of the subtree at this node
    * @apilevel low-level
-   * @declaredat ASTNode:74
+   * @declaredat ASTNode:73
    */
   public Get treeCopyNoTransform() {
     Get tree = (Get) copy();
@@ -136,7 +135,7 @@ public class Get extends ASTNode<ASTNode> implements Cloneable {
    * The copy is dangling, i.e. has no parent.
    * @return dangling copy of the subtree at this node
    * @apilevel low-level
-   * @declaredat ASTNode:94
+   * @declaredat ASTNode:93
    */
   public Get treeCopy() {
     Get tree = (Get) copy();
@@ -152,36 +151,30 @@ public class Get extends ASTNode<ASTNode> implements Cloneable {
     return tree;
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:108
+   * @declaredat ASTNode:107
    */
   protected boolean is$Equal(ASTNode node) {
-    return super.is$Equal(node);    
+    return super.is$Equal(node) && (tokenOperationObject_OperationObject == ((Get) node).tokenOperationObject_OperationObject);    
   }
   /**
-   * Replaces the OperationObject child.
-   * @param node The new node to replace the OperationObject child.
+   * Replaces the lexeme OperationObject.
+   * @param value The new value for the lexeme OperationObject.
    * @apilevel high-level
    */
-  public void setOperationObject(OperationObject node) {
-    setChild(node, 0);
+  public void setOperationObject(OperationObject value) {
+    tokenOperationObject_OperationObject = value;
   }
+  /** @apilevel internal 
+   */
+  protected OperationObject tokenOperationObject_OperationObject;
   /**
-   * Retrieves the OperationObject child.
-   * @return The current node used as the OperationObject child.
+   * Retrieves the value for the lexeme OperationObject.
+   * @return The value for the lexeme OperationObject.
    * @apilevel high-level
    */
-  @ASTNodeAnnotation.Child(name="OperationObject")
+  @ASTNodeAnnotation.Token(name="OperationObject")
   public OperationObject getOperationObject() {
-    return (OperationObject) getChild(0);
-  }
-  /**
-   * Retrieves the OperationObject child.
-   * <p><em>This method does not invoke AST transformations.</em></p>
-   * @return The current node used as the OperationObject child.
-   * @apilevel low-level
-   */
-  public OperationObject getOperationObjectNoTransform() {
-    return (OperationObject) getChildNoTransform(0);
+    return tokenOperationObject_OperationObject;
   }
   /** @apilevel internal */
   public ASTNode rewriteTo() {
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Head.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Head.java
index 9c01e39dbf2a7da14bc451c236b7576b22c4a6ef..4f9aafb4dcea6c1401fa8f2c9aa30533ad3c3de0 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Head.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Head.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,15 +16,14 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:46
- * @astdecl Head : ASTNode ::= OperationObject;
- * @production Head : {@link ASTNode} ::= <span class="component">{@link OperationObject}</span>;
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:50
+ * @astdecl Head : OperationOb ::= <OperationObject:OperationObject>;
+ * @production Head : {@link OperationOb} ::= <span class="component">&lt;OperationObject:OperationObject&gt;</span>;
 
  */
-public class Head extends ASTNode<ASTNode> implements Cloneable {
+public class Head extends OperationOb implements Cloneable {
   /**
    * @declaredat ASTNode:1
    */
@@ -38,53 +38,52 @@ public class Head extends ASTNode<ASTNode> implements Cloneable {
    * @declaredat ASTNode:10
    */
   public void init$Children() {
-    children = new ASTNode[1];
   }
   /**
-   * @declaredat ASTNode:13
+   * @declaredat ASTNode:12
    */
   @ASTNodeAnnotation.Constructor(
     name = {"OperationObject"},
     type = {"OperationObject"},
-    kind = {"Child"}
+    kind = {"Token"}
   )
   public Head(OperationObject p0) {
-    setChild(p0, 0);
+    setOperationObject(p0);
   }
   /** @apilevel low-level 
-   * @declaredat ASTNode:22
+   * @declaredat ASTNode:21
    */
   protected int numChildren() {
-    return 1;
+    return 0;
   }
   /**
    * @apilevel internal
-   * @declaredat ASTNode:28
+   * @declaredat ASTNode:27
    */
   public boolean mayHaveRewrite() {
     return false;
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:32
+   * @declaredat ASTNode:31
    */
   public void flushAttrCache() {
     super.flushAttrCache();
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:36
+   * @declaredat ASTNode:35
    */
   public void flushCollectionCache() {
     super.flushCollectionCache();
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:40
+   * @declaredat ASTNode:39
    */
   public Head clone() throws CloneNotSupportedException {
     Head node = (Head) super.clone();
     return node;
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:45
+   * @declaredat ASTNode:44
    */
   public Head copy() {
     try {
@@ -104,7 +103,7 @@ public class Head extends ASTNode<ASTNode> implements Cloneable {
    * @return dangling copy of the subtree at this node
    * @apilevel low-level
    * @deprecated Please use treeCopy or treeCopyNoTransform instead
-   * @declaredat ASTNode:64
+   * @declaredat ASTNode:63
    */
   @Deprecated
   public Head fullCopy() {
@@ -115,7 +114,7 @@ public class Head extends ASTNode<ASTNode> implements Cloneable {
    * The copy is dangling, i.e. has no parent.
    * @return dangling copy of the subtree at this node
    * @apilevel low-level
-   * @declaredat ASTNode:74
+   * @declaredat ASTNode:73
    */
   public Head treeCopyNoTransform() {
     Head tree = (Head) copy();
@@ -136,7 +135,7 @@ public class Head extends ASTNode<ASTNode> implements Cloneable {
    * The copy is dangling, i.e. has no parent.
    * @return dangling copy of the subtree at this node
    * @apilevel low-level
-   * @declaredat ASTNode:94
+   * @declaredat ASTNode:93
    */
   public Head treeCopy() {
     Head tree = (Head) copy();
@@ -152,36 +151,30 @@ public class Head extends ASTNode<ASTNode> implements Cloneable {
     return tree;
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:108
+   * @declaredat ASTNode:107
    */
   protected boolean is$Equal(ASTNode node) {
-    return super.is$Equal(node);    
+    return super.is$Equal(node) && (tokenOperationObject_OperationObject == ((Head) node).tokenOperationObject_OperationObject);    
   }
   /**
-   * Replaces the OperationObject child.
-   * @param node The new node to replace the OperationObject child.
+   * Replaces the lexeme OperationObject.
+   * @param value The new value for the lexeme OperationObject.
    * @apilevel high-level
    */
-  public void setOperationObject(OperationObject node) {
-    setChild(node, 0);
+  public void setOperationObject(OperationObject value) {
+    tokenOperationObject_OperationObject = value;
   }
+  /** @apilevel internal 
+   */
+  protected OperationObject tokenOperationObject_OperationObject;
   /**
-   * Retrieves the OperationObject child.
-   * @return The current node used as the OperationObject child.
+   * Retrieves the value for the lexeme OperationObject.
+   * @return The value for the lexeme OperationObject.
    * @apilevel high-level
    */
-  @ASTNodeAnnotation.Child(name="OperationObject")
+  @ASTNodeAnnotation.Token(name="OperationObject")
   public OperationObject getOperationObject() {
-    return (OperationObject) getChild(0);
-  }
-  /**
-   * Retrieves the OperationObject child.
-   * <p><em>This method does not invoke AST transformations.</em></p>
-   * @return The current node used as the OperationObject child.
-   * @apilevel low-level
-   */
-  public OperationObject getOperationObjectNoTransform() {
-    return (OperationObject) getChildNoTransform(0);
+    return tokenOperationObject_OperationObject;
   }
   /** @apilevel internal */
   public ASTNode rewriteTo() {
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/HeaderOb.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/HeaderOb.java
index 874f7a4fa6eeb964318fde3fe203298790411c34..31756e12dca0515497df80e94323e0faba24e7a5 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/HeaderOb.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/HeaderOb.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,56 +16,17 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:97
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:98
  * @astdecl HeaderOb : ASTNode;
  * @production HeaderOb : {@link ASTNode};
 
  */
 public abstract class HeaderOb extends ASTNode<ASTNode> implements Cloneable {
-  /**
-   * @aspect Composer
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jadd:562
-   */
-  public static Header composeHeader (HeaderObject headerObject, Map<Object, ASTNode> map){
-        Header header = new Header();
-
-        if( !headerObject.getRef().isEmpty() )
-        header.setRef(headerObject.getRef());
-        if( headerObject.getRequired() != null )
-        header.setRequired(headerObject.getRequired());
-        if( !headerObject.getDescription().isEmpty() )
-        header.setDescription( headerObject.getDescription() );
-        if( !headerObject.getStyle().isEmpty() )
-        header.setStyle(headerObject.getStyle());
-        if( headerObject.getExplode() != null )
-        header.setExplode(headerObject.getExplode());
-        if( headerObject.getAllowReserved() != null )
-        header.setAllowReserved(headerObject.getAllowReserved());
-        if( headerObject.getExample() != null )
-        header.setExample(headerObject.getExample());
-        if( headerObject.getNumExampleTuple() != 0 ){
-        Map<String, Example> examples = new HashMap<>();
-        for( ExampleTuple t : headerObject.getExampleTuples() )
-        examples.put(t.getKey(), ExampleObject.composeExample(t.getExampleObject()));
-        header.setExample(examples);
-        }
-        if( headerObject.getNumContentTuple() != 0 ){
-        Map<String, MediaType> contents = new HashMap<>();
-        for( ContentTuple t : headerObject.getContentTuples() )
-        contents.put(t.getKey(), MediaTypeObject.composeMediaType(t.getMediaTypeObject()));
-        header.setContentMediaTypes(contents);
-        }
-        if( headerObject.hasSchemaObject() )
-            header.setSchema(SchemaObject.composeSchema(headerObject.getSchemaObject()));
-
-        return header;
-        }
   /**
    * @aspect Parser
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:588
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:561
    */
   public static HeaderOb parseHeader(Header header, OAIContext context, Map<Object, ASTNode> map) throws DecodeException {
         HeaderObject headerObject = new HeaderObject();
@@ -182,6 +144,14 @@ public abstract class HeaderOb extends ASTNode<ASTNode> implements Cloneable {
    * @declaredat ASTNode:58
    */
   public abstract HeaderOb treeCopy();
+  /**
+   * @attribute syn
+   * @aspect Composer
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:638
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="Composer", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:638")
+  public abstract Header composeHeader(HeaderOb headerOb, Map<Object, ASTNode> map);
   /** @apilevel internal */
   public ASTNode rewriteTo() {
     return super.rewriteTo();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/HeaderObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/HeaderObject.java
index cb262f8640b51a8634ed56ab66ffb2749cf4d166..72f22bdcb7acd114a07ecb102abdd166959329f0 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/HeaderObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/HeaderObject.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:99
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:100
  * @astdecl HeaderObject : HeaderOb ::= <Description:String> <Required:Boolean> <DeprecatedBoolean:Boolean> <AllowEmptyValue:Boolean> <Style:String> <Explode:Boolean> <AllowReserved:Boolean> [SchemaOb] <Example:Object> ExampleTuple* ContentTuple* Extension*;
  * @production HeaderObject : {@link HeaderOb} ::= <span class="component">&lt;Description:String&gt;</span> <span class="component">&lt;Required:Boolean&gt;</span> <span class="component">&lt;DeprecatedBoolean:Boolean&gt;</span> <span class="component">&lt;AllowEmptyValue:Boolean&gt;</span> <span class="component">&lt;Style:String&gt;</span> <span class="component">&lt;Explode:Boolean&gt;</span> <span class="component">&lt;AllowReserved:Boolean&gt;</span> <span class="component">[{@link SchemaOb}]</span> <span class="component">&lt;Example:Object&gt;</span> <span class="component">{@link ExampleTuple}*</span> <span class="component">{@link ContentTuple}*</span> <span class="component">{@link Extension}*</span>;
 
@@ -713,6 +713,61 @@ public class HeaderObject extends HeaderOb implements Cloneable {
   public JastAddList<Extension> getExtensionsNoTransform() {
     return getExtensionListNoTransform();
   }
+/** @apilevel internal */
+protected java.util.Set composeHeader_HeaderOb_Map_Object__ASTNode__visited;
+  /**
+   * @attribute syn
+   * @aspect Composer
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:638
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="Composer", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:638")
+  public Header composeHeader(HeaderOb headerOb, Map<Object, ASTNode> map) {
+    java.util.List _parameters = new java.util.ArrayList(2);
+    _parameters.add(headerOb);
+    _parameters.add(map);
+    if (composeHeader_HeaderOb_Map_Object__ASTNode__visited == null) composeHeader_HeaderOb_Map_Object__ASTNode__visited = new java.util.HashSet(4);
+    if (composeHeader_HeaderOb_Map_Object__ASTNode__visited.contains(_parameters)) {
+      throw new RuntimeException("Circular definition of attribute HeaderOb.composeHeader(HeaderOb,Map_Object__ASTNode_).");
+    }
+    composeHeader_HeaderOb_Map_Object__ASTNode__visited.add(_parameters);
+    try {
+            Header header = new Header();
+            HeaderObject h = (HeaderObject) headerOb;
+    
+            if( h.getRequired() != null )
+            header.setRequired(h.getRequired());
+            if( !h.getDescription().isEmpty() )
+            header.setDescription( h.getDescription() );
+            if( !h.getStyle().isEmpty() )
+            header.setStyle(h.getStyle());
+            if( h.getExplode() != null )
+            header.setExplode(h.getExplode());
+            if( h.getAllowReserved() != null )
+            header.setAllowReserved(h.getAllowReserved());
+            if( h.getExample() != null )
+            header.setExample(h.getExample());
+            if( h.getNumExampleTuple() != 0 ){
+            Map<String, Example> examples = new HashMap<>();
+            for( ExampleTuple t : h.getExampleTuples() )
+            examples.put(t.getKey(), ExampleObject.composeExample(t.getExampleObject(), map));
+            header.setExample(examples);
+            }
+            if( h.getNumContentTuple() != 0 ){
+            Map<String, MediaType> contents = new HashMap<>();
+            for( ContentTuple t : h.getContentTuples() )
+            contents.put(t.getKey(), MediaTypeObject.composeMediaType(t.getMediaTypeObject(), map));
+            header.setContentMediaTypes(contents);
+            }
+            if( h.hasSchemaOb() )
+            header.setSchema(h.getSchemaOb().composeSchema(h.getSchemaOb(), map));
+    
+            return header;
+            }
+    finally {
+      composeHeader_HeaderOb_Map_Object__ASTNode__visited.remove(_parameters);
+    }
+  }
   /** @apilevel internal */
   public ASTNode rewriteTo() {
     return super.rewriteTo();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/HeaderReference.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/HeaderReference.java
index 998cb765cd455bda607527667d4272bee38f2a3f..930c373a05dac758edbefbad00b56cbac397ddda 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/HeaderReference.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/HeaderReference.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:98
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:99
  * @astdecl HeaderReference : HeaderOb ::= <Ref:String> <HeaderOb:HeaderOb>;
  * @production HeaderReference : {@link HeaderOb} ::= <span class="component">&lt;Ref:String&gt;</span> <span class="component">&lt;HeaderOb:HeaderOb&gt;</span>;
 
@@ -197,6 +197,37 @@ public class HeaderReference extends HeaderOb implements Cloneable {
   public HeaderOb getHeaderOb() {
     return tokenHeaderOb_HeaderOb;
   }
+/** @apilevel internal */
+protected java.util.Set composeHeader_HeaderOb_Map_Object__ASTNode__visited;
+  /**
+   * @attribute syn
+   * @aspect Composer
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:638
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="Composer", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:638")
+  public Header composeHeader(HeaderOb headerOb, Map<Object, ASTNode> map) {
+    java.util.List _parameters = new java.util.ArrayList(2);
+    _parameters.add(headerOb);
+    _parameters.add(map);
+    if (composeHeader_HeaderOb_Map_Object__ASTNode__visited == null) composeHeader_HeaderOb_Map_Object__ASTNode__visited = new java.util.HashSet(4);
+    if (composeHeader_HeaderOb_Map_Object__ASTNode__visited.contains(_parameters)) {
+      throw new RuntimeException("Circular definition of attribute HeaderOb.composeHeader(HeaderOb,Map_Object__ASTNode_).");
+    }
+    composeHeader_HeaderOb_Map_Object__ASTNode__visited.add(_parameters);
+    try {
+            Header header = new Header();
+            HeaderReference h = new HeaderReference();
+    
+            if( !h.getRef().isEmpty() )
+            header.setRef(h.getRef());
+    
+            return header;
+            }
+    finally {
+      composeHeader_HeaderOb_Map_Object__ASTNode__visited.remove(_parameters);
+    }
+  }
   /** @apilevel internal */
   public ASTNode rewriteTo() {
     return super.rewriteTo();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/HeaderTuple.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/HeaderTuple.java
index 853e8013aee76dcc526f233224e0bf40ef09f7f6..f42e29120900e5c14e20d24c142fe0e8b309e41f 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/HeaderTuple.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/HeaderTuple.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,7 +16,6 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
  * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:28
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Implicit.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Implicit.java
index b75810f8a1bc4b8887190a680032e0bfc8e92296..b477bbae9b52559357ef52efb127be6b3a5b3147 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Implicit.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Implicit.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:132
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:133
  * @astdecl Implicit : ASTNode ::= OAuthFlowObject;
  * @production Implicit : {@link ASTNode} ::= <span class="component">{@link OAuthFlowObject}</span>;
 
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/InfoObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/InfoObject.java
index 3ae1c0d13c55ebe761fbfd7fa2ba99109b70f17c..981174b22438e4d77cd3fe683fbef23c4c46ca7a 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/InfoObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/InfoObject.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,7 +16,6 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
  * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:5
@@ -26,23 +26,23 @@ import org.openapi4j.core.exception.DecodeException;
 public class InfoObject extends ASTNode<ASTNode> implements Cloneable {
   /**
    * @aspect Composer
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jadd:61
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:61
    */
   public static Info composeInfo (InfoObject infoObject, Map<Object, ASTNode> map){
         Info info = new Info();
 
         if( !infoObject.getTitle().isEmpty() )
-            info.setTitle(infoObject.getTitle());
+        info.setTitle(infoObject.getTitle());
         if( !infoObject.getVersion().isEmpty() )
-            info.setVersion(infoObject.getVersion());
+        info.setVersion(infoObject.getVersion());
         if( !infoObject.getDescription().isEmpty() )
         info.setDescription(infoObject.getDescription());
         if( !infoObject.getTermsOfService().isEmpty() )
         info.setTermsOfService(infoObject.getTermsOfService());
         if( infoObject.hasContactObject() )
-        info.setContact(ContactObject.composeContact(infoObject.getContactObject()));
+        info.setContact(ContactObject.composeContact(infoObject.getContactObject(), map));
         if( infoObject.hasLicenseObject() )
-        info.setLicense(LicenseObject.composeLicense(infoObject.getLicenseObject()));
+        info.setLicense(LicenseObject.composeLicense(infoObject.getLicenseObject(), map));
         if( infoObject.getNumExtension() != 0 ){
         Map<String, Object> extension = new HashMap<>();
         for( Extension e : infoObject.getExtensions() )
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ItemsSchema.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ItemsSchema.java
index 9f8db58d551a5c34304482c22b9305b32e747456..87a3c379e2d0807f83465cdc1b283425e972c53d 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ItemsSchema.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ItemsSchema.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:110
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:111
  * @astdecl ItemsSchema : ASTNode ::= SchemaOb;
  * @production ItemsSchema : {@link ASTNode} ::= <span class="component">{@link SchemaOb}</span>;
 
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/JastAddList.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/JastAddList.java
index a0b94ece68c775488556cb7636439a28c0968146..8c97e780341394c293a60c14f96318ff72dc59e6 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/JastAddList.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/JastAddList.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,7 +16,6 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
  * @astdecl JastAddList : ASTNode;
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/LicenseObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/LicenseObject.java
index 556db9032fbd1b397d7c1cf5d0828904782040ef..000bc13e1d756881b660760c5ff587415a0000ad 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/LicenseObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/LicenseObject.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,7 +16,6 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
  * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:11
@@ -26,7 +26,7 @@ import org.openapi4j.core.exception.DecodeException;
 public class LicenseObject extends ASTNode<ASTNode> implements Cloneable {
   /**
    * @aspect Composer
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jadd:107
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:107
    */
   public static License composeLicense (LicenseObject licenseObject, Map<Object, ASTNode> map){
         License license = new License();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/LinkOb.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/LinkOb.java
index cd44ab261d965f87b27944711811fc659c7fd939..b76ca69f65bb82b1eb951f9fe4d71510b1b30a58 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/LinkOb.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/LinkOb.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,45 +16,17 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:91
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:92
  * @astdecl LinkOb : ASTNode;
  * @production LinkOb : {@link ASTNode};
 
  */
 public abstract class LinkOb extends ASTNode<ASTNode> implements Cloneable {
-  /**
-   * @aspect Composer
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jadd:538
-   */
-  public static Link composeLink (LinkObject linkObject, Map<Object, ASTNode> map){
-        Link link = new Link();
-
-
-        if( !linkObject.getRef().isEmpty() )
-        link.setRef(linkObject.getRef());
-        if( !linkObject.getOperationRef().isEmpty() )
-        link.setOperationRef( linkObject.getOperationRef() );
-        if( !linkObject.getOperationID().isEmpty() )
-        link.setOperationId( linkObject.getOperationID() );
-        if( linkObject.getNumLinkParameterTuple() != 0 ){
-        Map<String, String> parameters = new HashMap<>();
-        for( LinkParameterTuple t : linkObject.getLinkParameterTuples() )
-        parameters.put( t.getLinkParameterKey(), t.getLinkParameterValue() );
-        link.setParameters(parameters);
-        }
-        if( !linkObject.getDescription().isEmpty() )
-        link.setDescription( linkObject.getDescription() );
-        if( linkObject.hasServerObject() )
-        link.setServer( ServerObject.composeServer(linkObject.getServerObject()) );
-
-        return link;
-        }
   /**
    * @aspect Parser
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:557
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:530
    */
   public static LinkOb parseLink(Link link, OAIContext context, Map<Object, ASTNode> map) throws DecodeException {
         LinkObject linkObject = new LinkObject();
@@ -159,6 +132,14 @@ public abstract class LinkOb extends ASTNode<ASTNode> implements Cloneable {
    * @declaredat ASTNode:58
    */
   public abstract LinkOb treeCopy();
+  /**
+   * @attribute syn
+   * @aspect Composer
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:606
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="Composer", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:606")
+  public abstract Link composeLink(LinkOb linkOb, Map<Object, ASTNode> map);
   /** @apilevel internal */
   public ASTNode rewriteTo() {
     return super.rewriteTo();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/LinkObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/LinkObject.java
index f6b0a1fa8328610916e3cb739374c99a5599e340..098bfc36e9e07aafe88ad95daacd9e346ca2057b 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/LinkObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/LinkObject.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:93
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:94
  * @astdecl LinkObject : LinkOb ::= <OperationRef:String> <OperationID:String> LinkParameterTuple* HeaderTuple* <Description:String> [ServerObject] Extension*;
  * @production LinkObject : {@link LinkOb} ::= <span class="component">&lt;OperationRef:String&gt;</span> <span class="component">&lt;OperationID:String&gt;</span> <span class="component">{@link LinkParameterTuple}*</span> <span class="component">{@link HeaderTuple}*</span> <span class="component">&lt;Description:String&gt;</span> <span class="component">[{@link ServerObject}]</span> <span class="component">{@link Extension}*</span>;
 
@@ -608,6 +608,49 @@ public class LinkObject extends LinkOb implements Cloneable {
   public JastAddList<Extension> getExtensionsNoTransform() {
     return getExtensionListNoTransform();
   }
+/** @apilevel internal */
+protected java.util.Set composeLink_LinkOb_Map_Object__ASTNode__visited;
+  /**
+   * @attribute syn
+   * @aspect Composer
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:606
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="Composer", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:606")
+  public Link composeLink(LinkOb linkOb, Map<Object, ASTNode> map) {
+    java.util.List _parameters = new java.util.ArrayList(2);
+    _parameters.add(linkOb);
+    _parameters.add(map);
+    if (composeLink_LinkOb_Map_Object__ASTNode__visited == null) composeLink_LinkOb_Map_Object__ASTNode__visited = new java.util.HashSet(4);
+    if (composeLink_LinkOb_Map_Object__ASTNode__visited.contains(_parameters)) {
+      throw new RuntimeException("Circular definition of attribute LinkOb.composeLink(LinkOb,Map_Object__ASTNode_).");
+    }
+    composeLink_LinkOb_Map_Object__ASTNode__visited.add(_parameters);
+    try {
+            Link link = new Link();
+            LinkObject l = (LinkObject) linkOb;
+    
+            if( !l.getOperationRef().isEmpty() )
+            link.setOperationRef( l.getOperationRef() );
+            if( !l.getOperationID().isEmpty() )
+            link.setOperationId( l.getOperationID() );
+            if( l.getNumLinkParameterTuple() != 0 ){
+            Map<String, String> parameters = new HashMap<>();
+            for( LinkParameterTuple t : l.getLinkParameterTuples() )
+            parameters.put( t.getLinkParameterKey(), t.getLinkParameterValue() );
+            link.setParameters(parameters);
+            }
+            if( !l.getDescription().isEmpty() )
+            link.setDescription( l.getDescription() );
+            if( l.hasServerObject() )
+            link.setServer( ServerObject.composeServer(l.getServerObject(), map) );
+    
+            return link;
+            }
+    finally {
+      composeLink_LinkOb_Map_Object__ASTNode__visited.remove(_parameters);
+    }
+  }
   /** @apilevel internal */
   public ASTNode rewriteTo() {
     return super.rewriteTo();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/LinkParameterTuple.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/LinkParameterTuple.java
index c5ae2f3ef1dd64e7280dac84028136897cca4279..cb7ca6835b9c0dcb834490a857697140425fdca3 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/LinkParameterTuple.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/LinkParameterTuple.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:94
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:95
  * @astdecl LinkParameterTuple : ASTNode ::= <LinkParameterKey:String> <LinkParameterValue:String>;
  * @production LinkParameterTuple : {@link ASTNode} ::= <span class="component">&lt;LinkParameterKey:String&gt;</span> <span class="component">&lt;LinkParameterValue:String&gt;</span>;
 
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/LinkReference.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/LinkReference.java
index 3873f68e216ec7acf4e6aeee4a80b3346044e51c..dce5b148708d762701f4e2f7e76b86f4512787a2 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/LinkReference.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/LinkReference.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:92
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:93
  * @astdecl LinkReference : LinkOb ::= <Ref:String> <LinkOb:LinkOb>;
  * @production LinkReference : {@link LinkOb} ::= <span class="component">&lt;Ref:String&gt;</span> <span class="component">&lt;LinkOb:LinkOb&gt;</span>;
 
@@ -197,6 +197,37 @@ public class LinkReference extends LinkOb implements Cloneable {
   public LinkOb getLinkOb() {
     return tokenLinkOb_LinkOb;
   }
+/** @apilevel internal */
+protected java.util.Set composeLink_LinkOb_Map_Object__ASTNode__visited;
+  /**
+   * @attribute syn
+   * @aspect Composer
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:606
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="Composer", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:606")
+  public Link composeLink(LinkOb linkOb, Map<Object, ASTNode> map) {
+    java.util.List _parameters = new java.util.ArrayList(2);
+    _parameters.add(linkOb);
+    _parameters.add(map);
+    if (composeLink_LinkOb_Map_Object__ASTNode__visited == null) composeLink_LinkOb_Map_Object__ASTNode__visited = new java.util.HashSet(4);
+    if (composeLink_LinkOb_Map_Object__ASTNode__visited.contains(_parameters)) {
+      throw new RuntimeException("Circular definition of attribute LinkOb.composeLink(LinkOb,Map_Object__ASTNode_).");
+    }
+    composeLink_LinkOb_Map_Object__ASTNode__visited.add(_parameters);
+    try {
+            Link link = new Link();
+            LinkReference l = (LinkReference) linkOb;
+    
+            if( !l.getRef().isEmpty() )
+            link.setRef(l.getRef());
+    
+            return link;
+            }
+    finally {
+      composeLink_LinkOb_Map_Object__ASTNode__visited.remove(_parameters);
+    }
+  }
   /** @apilevel internal */
   public ASTNode rewriteTo() {
     return super.rewriteTo();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/LinkTuple.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/LinkTuple.java
index 26e00bf71242c7f09da2c4767b7fd9173c452464..129378c8486cc20738486ab374d6a624cf18498a 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/LinkTuple.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/LinkTuple.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,7 +16,6 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
  * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:30
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/MappingTuple.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/MappingTuple.java
index ec92ee2ec34464378c11a0199a382048d138deb2..8a0c2d31e4906a25296f475b411e5bb4f3b323d0 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/MappingTuple.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/MappingTuple.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:120
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:121
  * @astdecl MappingTuple : ASTNode ::= <Key:String> <Value:String>;
  * @production MappingTuple : {@link ASTNode} ::= <span class="component">&lt;Key:String&gt;</span> <span class="component">&lt;Value:String&gt;</span>;
 
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/MediaTypeObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/MediaTypeObject.java
index b540eecc650b04eb6003cf9a5fad162b4028fbd2..b1d926441ad3a74dbd073a031c0d481f3f3acaaa 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/MediaTypeObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/MediaTypeObject.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:69
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:70
  * @astdecl MediaTypeObject : ASTNode ::= [SchemaOb] <Example:Object> ExampleTuple* EncodingTuple* Extension*;
  * @production MediaTypeObject : {@link ASTNode} ::= <span class="component">[{@link SchemaOb}]</span> <span class="component">&lt;Example:Object&gt;</span> <span class="component">{@link ExampleTuple}*</span> <span class="component">{@link EncodingTuple}*</span> <span class="component">{@link Extension}*</span>;
 
@@ -26,25 +26,27 @@ import org.openapi4j.core.exception.DecodeException;
 public class MediaTypeObject extends ASTNode<ASTNode> implements Cloneable {
   /**
    * @aspect Composer
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jadd:427
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:468
    */
   public static MediaType composeMediaType (MediaTypeObject mediaTypeObject, Map<Object, ASTNode> map){
         MediaType mediaType = new MediaType();
+        SchemaOb s;
 
-        if( mediaTypeObject.getSchemaObject() != null )
-        mediaType.setSchema(SchemaObject.composeSchema(mediaTypeObject.getSchemaObject()));
+        if( mediaTypeObject.getSchemaOb() != null ){
+        s = mediaTypeObject.getSchemaOb();
+        mediaType.setSchema(s.composeSchema(s, map));}
         if( mediaTypeObject.getExample() != null )
         mediaType.setExample(mediaTypeObject.getExample());
         if( mediaTypeObject.getNumExampleTuple() != 0 ){
         Map<String, Example> exampleMap = new HashMap<>();
         for( ExampleTuple t : mediaTypeObject.getExampleTuples() )
-        exampleMap.put(t.getKey(), ExampleObject.composeExample(t.getExampleObject()));
+        exampleMap.put(t.getKey(), ExampleObject.composeExample(t.getExampleObject(), map));
         mediaType.setExamples(exampleMap);
         }
         if( mediaTypeObject.getNumEncodingTuple() != 0 ){
         Map<String, EncodingProperty> encodingMap = new HashMap<>();
         for( EncodingTuple t : mediaTypeObject.getEncodingTuples() )
-        encodingMap.put(t.getKey(), EncodingObject.composeEncodingProperty(t.getEncodingObject()));
+        encodingMap.put(t.getKey(), EncodingObject.composeEncodingProperty(t.getEncodingObject(), map));
         mediaType.setEncodings(encodingMap);
         }
 
@@ -52,7 +54,7 @@ public class MediaTypeObject extends ASTNode<ASTNode> implements Cloneable {
         }
   /**
    * @aspect Parser
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:430
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:403
    */
   public static MediaTypeObject parseMediaType(MediaType mediaType, OAIContext context, Map<Object, ASTNode> map) throws DecodeException {
         MediaTypeObject mediaTypeObject = new MediaTypeObject();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/NotSchema.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/NotSchema.java
index 9604b485c02d9b5e0bee95311a4699a38e306d46..7df53b01f42db2734c560c5dc1bf2dd49188bd03 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/NotSchema.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/NotSchema.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:111
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:112
  * @astdecl NotSchema : ASTNode ::= SchemaOb;
  * @production NotSchema : {@link ASTNode} ::= <span class="component">{@link SchemaOb}</span>;
 
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/OAuthFlowObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/OAuthFlowObject.java
index 5d1c557737f49104173c7597cd0fca6aec086796..0c7cfd0720b9d9a59758951e9f7e6d8563319d52 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/OAuthFlowObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/OAuthFlowObject.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:138
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:139
  * @astdecl OAuthFlowObject : ASTNode ::= <AuthorizationUrl:String> <TokenUrl:String> <RefreshUrl:String> ScopesTuple* <Configuration:String> Extension*;
  * @production OAuthFlowObject : {@link ASTNode} ::= <span class="component">&lt;AuthorizationUrl:String&gt;</span> <span class="component">&lt;TokenUrl:String&gt;</span> <span class="component">&lt;RefreshUrl:String&gt;</span> <span class="component">{@link ScopesTuple}*</span> <span class="component">&lt;Configuration:String&gt;</span> <span class="component">{@link Extension}*</span>;
 
@@ -26,7 +26,7 @@ import org.openapi4j.core.exception.DecodeException;
 public class OAuthFlowObject extends ASTNode<ASTNode> implements Cloneable {
   /**
    * @aspect Composer
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jadd:798
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:927
    */
   public static OAuthFlow composeOAuthFlow (OAuthFlowObject oAuthFlowObject, Map<Object, ASTNode> map){
         OAuthFlow oAuthFlow = new OAuthFlow();
@@ -47,7 +47,7 @@ public class OAuthFlowObject extends ASTNode<ASTNode> implements Cloneable {
         }
   /**
    * @aspect Parser
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:991
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:852
    */
   public static OAuthFlowObject parseOAuthFlow(OAuthFlow oAuthFlow, Map<Object, ASTNode> map){
         OAuthFlowObject oAuthFlowObject = new OAuthFlowObject();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/OAuthFlowsObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/OAuthFlowsObject.java
index f229e734b45c841d23230ad6e04ce247efa7280a..15faf4ab2a0366d858d90324d5802b9543ad2c2b 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/OAuthFlowsObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/OAuthFlowsObject.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:131
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:132
  * @astdecl OAuthFlowsObject : ASTNode ::= [Implicit] [Password] [ClientCredentials] [AuthorizationCode] Extension*;
  * @production OAuthFlowsObject : {@link ASTNode} ::= <span class="component">[{@link Implicit}]</span> <span class="component">[{@link Password}]</span> <span class="component">[{@link ClientCredentials}]</span> <span class="component">[{@link AuthorizationCode}]</span> <span class="component">{@link Extension}*</span>;
 
@@ -26,30 +26,25 @@ import org.openapi4j.core.exception.DecodeException;
 public class OAuthFlowsObject extends ASTNode<ASTNode> implements Cloneable {
   /**
    * @aspect Composer
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jadd:778
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:912
    */
   public static OAuthFlows composeOAuthFlows (OAuthFlowsObject oAuthFlowsObject, Map<Object, ASTNode> map){
         OAuthFlows oAuthFlows = new OAuthFlows();
 
         if( oAuthFlowsObject.hasImplicit() )
-        oAuthFlows.setImplicit( OAuthFlowObject.composeOAuthFlow(oAuthFlowsObject.getImplicit().getOAuthFlowObject()) );
-        if( oAuthFlowsObject.hasPassword() ){
-        System.out.println("Password eingegangen : " + oAuthFlowsObject.getPassword().getOAuthFlowObject().getAuthorizationUrl() );
-        System.out.println("Password eingegangen : " + oAuthFlowsObject.getPassword().getOAuthFlowObject().getConfiguration() );
-        System.out.println("Password eingegangen : " + oAuthFlowsObject.getPassword().getOAuthFlowObject().getTokenUrl() );
-        System.out.println("Password eingegangen : " + oAuthFlowsObject.getPassword().getOAuthFlowObject().getRefreshUrl() );
-        oAuthFlows.setPassword( OAuthFlowObject.composeOAuthFlow(oAuthFlowsObject.getPassword().getOAuthFlowObject()) );
-        }
+        oAuthFlows.setImplicit( OAuthFlowObject.composeOAuthFlow(oAuthFlowsObject.getImplicit().getOAuthFlowObject(), map) );
+        if( oAuthFlowsObject.hasPassword() )
+        oAuthFlows.setPassword( OAuthFlowObject.composeOAuthFlow(oAuthFlowsObject.getPassword().getOAuthFlowObject(), map) );
         if( oAuthFlowsObject.hasClientCredentials() )
-        oAuthFlows.setClientCredentials( OAuthFlowObject.composeOAuthFlow(oAuthFlowsObject.getClientCredentials().getOAuthFlowObject()) );
+        oAuthFlows.setClientCredentials( OAuthFlowObject.composeOAuthFlow(oAuthFlowsObject.getClientCredentials().getOAuthFlowObject(), map) );
         if( oAuthFlowsObject.hasAuthorizationCode() )
-        oAuthFlows.setAuthorizationCode( OAuthFlowObject.composeOAuthFlow(oAuthFlowsObject.getAuthorizationCode().getOAuthFlowObject()) );
+        oAuthFlows.setAuthorizationCode( OAuthFlowObject.composeOAuthFlow(oAuthFlowsObject.getAuthorizationCode().getOAuthFlowObject(), map) );
 
         return oAuthFlows;
         }
   /**
    * @aspect Parser
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:959
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:820
    */
   public static OAuthFlowsObject parseOAuthFlows(OAuthFlows oAuthFlows, Map<Object, ASTNode> map){
         OAuthFlowsObject oAuthFlowsObject = new OAuthFlowsObject();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/OneOfSchema.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/OneOfSchema.java
index dec3b02987171616182f6b9878933a39f4f663cd..c16177ec2b37f554db27e7a8a32dd1175f4129bf 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/OneOfSchema.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/OneOfSchema.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:116
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:117
  * @astdecl OneOfSchema : ASTNode ::= SchemaOb;
  * @production OneOfSchema : {@link ASTNode} ::= <span class="component">{@link SchemaOb}</span>;
 
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/OpenAPIObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/OpenAPIObject.java
index 6cb8aa2ee6fbb7fe2ab56380579dade8b9b95ae2..317efd5bb04ca71bf4e25ec7bef06d84fa335549 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/OpenAPIObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/OpenAPIObject.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,7 +16,6 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
  * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:2
@@ -26,7 +26,7 @@ import org.openapi4j.core.exception.DecodeException;
 public class OpenAPIObject extends ASTNode<ASTNode> implements Cloneable {
   /**
    * @aspect Composer
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jadd:13
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:13
    */
   public static OpenApi3 composeOpenAPI (OpenAPIObject openapi){
         OpenApi3 api3 = new OpenApi3();
@@ -45,7 +45,7 @@ public class OpenAPIObject extends ASTNode<ASTNode> implements Cloneable {
         if( openapi.getNumPathsObject() != 0 ){
         Map<String, Path> paths = new HashMap<>();
         for( PathsObject p : openapi.getPathsObjects() )
-        paths.put( p.getRef(), PathItemOb.composePath(p.getPathItemOb(), map) );
+        paths.put( p.getRef(), p.getPathItemOb().composePath(p.getPathItemOb(), map) );
         api3.setPaths(paths);
         }
         if( openapi.hasComponentsObject() )
@@ -117,6 +117,17 @@ public class OpenAPIObject extends ASTNode<ASTNode> implements Cloneable {
         map.put(api, openapi);
         return openapi;
         }
+  /**
+   * @aspect RandomRequestGenerator
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:25
+   */
+  public String generateRequests() throws Exception {
+        String baseUrl = this.getServerObject(0).getUrl();
+
+        for( PathsObject p : this.getPathsObjects() )
+        p.sendRandomRequests(baseUrl);
+        return "";
+    }
   /**
    * @declaredat ASTNode:1
    */
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/OperationOb.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/OperationOb.java
new file mode 100644
index 0000000000000000000000000000000000000000..bcf7c57ff42c3277c5cfa51060c9a0e3bc9c7d81
--- /dev/null
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/OperationOb.java
@@ -0,0 +1,109 @@
+/* This file was generated with JastAdd2 (http://jastadd.org) version 2.3.2 */
+package de.tudresden.inf.st.openapi.ast;
+import org.openapi4j.core.exception.ResolutionException;
+import org.openapi4j.core.validation.ValidationException;
+import org.openapi4j.parser.model.v3.*;
+import org.openapi4j.core.model.reference.Reference;
+import org.openapi4j.core.model.OAIContext;
+import java.io.IOException;
+import java.util.*;
+import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
+import java.io.BufferedReader;
+import java.io.DataOutputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import javax.net.ssl.HttpsURLConnection;
+import java.util.Random;
+import java.util.stream.IntStream;
+/**
+ * @ast node
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:43
+ * @astdecl OperationOb : ASTNode;
+ * @production OperationOb : {@link ASTNode};
+
+ */
+public abstract class OperationOb extends ASTNode<ASTNode> implements Cloneable {
+  /**
+   * @declaredat ASTNode:1
+   */
+  public OperationOb() {
+    super();
+  }
+  /**
+   * Initializes the child array to the correct size.
+   * Initializes List and Opt nta children.
+   * @apilevel internal
+   * @ast method
+   * @declaredat ASTNode:10
+   */
+  public void init$Children() {
+  }
+  /** @apilevel low-level 
+   * @declaredat ASTNode:13
+   */
+  protected int numChildren() {
+    return 0;
+  }
+  /**
+   * @apilevel internal
+   * @declaredat ASTNode:19
+   */
+  public boolean mayHaveRewrite() {
+    return false;
+  }
+  /** @apilevel internal 
+   * @declaredat ASTNode:23
+   */
+  public void flushAttrCache() {
+    super.flushAttrCache();
+  }
+  /** @apilevel internal 
+   * @declaredat ASTNode:27
+   */
+  public void flushCollectionCache() {
+    super.flushCollectionCache();
+  }
+  /** @apilevel internal 
+   * @declaredat ASTNode:31
+   */
+  public OperationOb clone() throws CloneNotSupportedException {
+    OperationOb node = (OperationOb) super.clone();
+    return node;
+  }
+  /**
+   * Create a deep copy of the AST subtree at this node.
+   * The copy is dangling, i.e. has no parent.
+   * @return dangling copy of the subtree at this node
+   * @apilevel low-level
+   * @deprecated Please use treeCopy or treeCopyNoTransform instead
+   * @declaredat ASTNode:42
+   */
+  @Deprecated
+  public abstract OperationOb fullCopy();
+  /**
+   * Create a deep copy of the AST subtree at this node.
+   * The copy is dangling, i.e. has no parent.
+   * @return dangling copy of the subtree at this node
+   * @apilevel low-level
+   * @declaredat ASTNode:50
+   */
+  public abstract OperationOb treeCopyNoTransform();
+  /**
+   * Create a deep copy of the AST subtree at this node.
+   * The subtree of this node is traversed to trigger rewrites before copy.
+   * The copy is dangling, i.e. has no parent.
+   * @return dangling copy of the subtree at this node
+   * @apilevel low-level
+   * @declaredat ASTNode:58
+   */
+  public abstract OperationOb treeCopy();
+  /** @apilevel internal */
+  public ASTNode rewriteTo() {
+    return super.rewriteTo();
+  }
+  /** @apilevel internal */
+  public boolean canRewrite() {
+    return false;
+  }
+}
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/OperationObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/OperationObject.java
index 91d4aa02ac0d1dba6b068d789055a720869329ec..6a9eebd876e51e8a9b7ac9d6aa2b9a6f3b459b1e 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/OperationObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/OperationObject.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,23 +16,21 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:51
- * @astdecl OperationObject : ASTNode ::= Tag* <Summary:String> <Description:String> [ExternalDocObject] <OperationID:String> ParameterOb* [RequestBodyOb] ResponseTuple* CallbackTuple* <DeprecatedBoolean:Boolean> SecurityRequirementObject* ServerObject* <Required:Boolean> Extension*;
- * @production OperationObject : {@link ASTNode} ::= <span class="component">{@link Tag}*</span> <span class="component">&lt;Summary:String&gt;</span> <span class="component">&lt;Description:String&gt;</span> <span class="component">[{@link ExternalDocObject}]</span> <span class="component">&lt;OperationID:String&gt;</span> <span class="component">{@link ParameterOb}*</span> <span class="component">[{@link RequestBodyOb}]</span> <span class="component">{@link ResponseTuple}*</span> <span class="component">{@link CallbackTuple}*</span> <span class="component">&lt;DeprecatedBoolean:Boolean&gt;</span> <span class="component">{@link SecurityRequirementObject}*</span> <span class="component">{@link ServerObject}*</span> <span class="component">&lt;Required:Boolean&gt;</span> <span class="component">{@link Extension}*</span>;
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:44
+ * @astdecl OperationObject : OperationOb ::= Tag* <Summary:String> <Description:String> [ExternalDocObject] <OperationID:String> ParameterOb* [RequestBodyOb] ResponseTuple* CallbackTuple* <DeprecatedBoolean:Boolean> SecurityRequirementObject* ServerObject* <Required:Boolean> Extension*;
+ * @production OperationObject : {@link OperationOb} ::= <span class="component">{@link Tag}*</span> <span class="component">&lt;Summary:String&gt;</span> <span class="component">&lt;Description:String&gt;</span> <span class="component">[{@link ExternalDocObject}]</span> <span class="component">&lt;OperationID:String&gt;</span> <span class="component">{@link ParameterOb}*</span> <span class="component">[{@link RequestBodyOb}]</span> <span class="component">{@link ResponseTuple}*</span> <span class="component">{@link CallbackTuple}*</span> <span class="component">&lt;DeprecatedBoolean:Boolean&gt;</span> <span class="component">{@link SecurityRequirementObject}*</span> <span class="component">{@link ServerObject}*</span> <span class="component">&lt;Required:Boolean&gt;</span> <span class="component">{@link Extension}*</span>;
 
  */
-public class OperationObject extends ASTNode<ASTNode> implements Cloneable {
+public class OperationObject extends OperationOb implements Cloneable {
   /**
    * @aspect Composer
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jadd:281
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:312
    */
   public static Operation composeOperation (OperationObject operationObject, Map<Object, ASTNode> map){
         Operation operation = new Operation();
 
-
         if( operationObject.getNumTag() != 0 ){
         for( de.tudresden.inf.st.openapi.ast.Tag t : operationObject.getTags() )
         operation.addTag(t.getTag());
@@ -41,43 +40,36 @@ public class OperationObject extends ASTNode<ASTNode> implements Cloneable {
         if( !operationObject.getDescription().isEmpty() )
         operation.setDescription( operationObject.getDescription() );
         if( operationObject.hasExternalDocObject() )
-        operation.setExternalDocs( ExternalDocObject.composeExternalDocs(operationObject.getExternalDocObject()) );
+        operation.setExternalDocs( ExternalDocObject.composeExternalDocs(operationObject.getExternalDocObject(), map) );
         if( !operationObject.getOperationID().isEmpty() )
         operation.setOperationId( operationObject.getOperationID() );
-        if( operationObject.getNumParameterObject() != 0 ){
-        for( ParameterObject p : operationObject.getParameterObjects() )
-        operation.addParameter( ParameterObject.composeParameter(p) );
+        if( operationObject.getNumParameterOb() != 0 ){
+        for( ParameterOb p : operationObject.getParameterObs() )
+        operation.addParameter(p.composeParameter(p, map));
         }
-        if( operationObject.hasRequestBodyObject() )
-        operation.setRequestBody( RequestBodyObject.composeRequestBody(operationObject.getRequestBodyObject()));
+        if( operationObject.hasRequestBodyOb() )
+        operation.setRequestBody(operationObject.getRequestBodyOb().composeRequestBody(operationObject.getRequestBodyOb(), map));
         if( operationObject.getNumResponseTuple() != 0){
         Map<String, Response> responseMap = new HashMap<>();
         for( ResponseTuple t : operationObject.getResponseTuples() )
-        responseMap.put(t.getKey(), ResponseObject.composeResponse(t.getResponseObject()));
+        responseMap.put(t.getKey(), t.getResponseOb().composeResponse(t.getResponseOb(), map));
         operation.setResponses(responseMap);
         }
         if( operationObject.getNumCallbackTuple() != 0 ){
         Map<String, Callback> callbacks = new HashMap<>();
-        for( CallbackTuple t : operationObject.getCallbackTuples() ) {
-        if( !t.getCallbackObject().getRef().isEmpty() ){
-        Callback callback = new Callback();
-        callback.setRef(t.getCallbackObject().getRef());
-        callbacks.put(t.getKey(), callback);
-        }
-        else
-        callbacks.put(t.getKey(), CallbackObject.composeCallback(t.getCallbackObject()));
+        for( CallbackTuple t : operationObject.getCallbackTuples() )
+        callbacks.put(t.getKey(), t.getCallbackOb().composeCallback(t.getCallbackOb(), map));
         operation.setCallbacks(callbacks);
         }
-        }
         if( operationObject.getDeprecatedBoolean() != null )
         operation.setDeprecated(operationObject.getDeprecatedBoolean());
         if( operationObject.getSecurityRequirementObjects() != null ){
         for( SecurityRequirementObject s : operationObject.getSecurityRequirementObjects() )
-        operation.addSecurityRequirement( SecurityRequirementObject.composeSecurityRequirement(s) );
+        operation.addSecurityRequirement( SecurityRequirementObject.composeSecurityRequirement(s, map) );
         }
         if( operationObject.getNumServerObject() != 0 ){
         for( ServerObject s : operationObject.getServerObjects() )
-        operation.addServer( ServerObject.composeServer(s) );
+        operation.addServer( ServerObject.composeServer(s, map) );
         }
         if( operationObject.getNumExtension() != 0 ){
         Map<String, Object> extensionMap = new HashMap<>();
@@ -90,7 +82,7 @@ public class OperationObject extends ASTNode<ASTNode> implements Cloneable {
         }
   /**
    * @aspect Parser
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:288
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:261
    */
   public static OperationObject parseOperation(Operation operation, OAIContext context, Map<Object, ASTNode> map) throws DecodeException{
         OperationObject operationObject = new OperationObject();
@@ -142,6 +134,148 @@ public class OperationObject extends ASTNode<ASTNode> implements Cloneable {
         map.put(operation, operationObject);
         return operationObject;
         }
+  /**
+   * @aspect RandomRequestGenerator
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:53
+   */
+  public void sendRandomGET(String targetUrl) throws Exception {
+        Random rand = new Random();
+
+        for( ParameterOb o : this.getParameterObs() ){
+        ParameterObject p = o.parameterObject();
+        SchemaObject s = p.getSchemaOb().schemaObject();
+        if( p.getIn().equals("path") ){
+        String pathPart = targetUrl.substring(targetUrl.indexOf("{") ,targetUrl.indexOf("}") + 1);
+
+        if( s.getType().equals("string") )
+        targetUrl = targetUrl.replace(pathPart, this.generateRandomString(rand, s.getEnumObjs()));
+        else if( s.getType().equals("integer") )
+        targetUrl = targetUrl.replace(pathPart, this.generateRandomInt( rand,
+        -1, // s.getMinimum() != null ? s.getMinimum().intValue() : -1,
+        10 // s.getMaximum() != null ? s.getMaximum().intValue() : -1
+        ));
+        }
+        else if( p.getIn().equals("query") ){
+
+        if( s.getType().equals("string") )
+        targetUrl = targetUrl + "&" + p.getName() + "=" + this.generateRandomString(rand, s.getEnumObjs());
+        else if( s.getType().equals("integer") )
+        targetUrl = targetUrl + "&" + p.getName() + "=" + this.generateRandomInt(  rand,
+        -1, // s.getMinimum() != null ? s.getMinimum().intValue() : -1,
+        10); // s.getMaximum() != null ? s.getMaximum().intValue() : -1
+        else if( s.getType().equals("array") ){
+        if( s.getItemsSchema().getSchemaOb().schemaObject().getType().equals("string") ){
+        for( EnumObj e : s.getItemsSchema().getSchemaOb().schemaObject().getEnumObjs() )
+        targetUrl=rand.nextDouble()< 0.5?targetUrl+"&"+p.getName()+"="+e.getEnumOb():targetUrl;
+        }
+        else if( s.getItemsSchema().getSchemaOb().schemaObject().getType().equals("integer") ){
+        for( int i = 0 ; i < 5 ; i++ )
+        targetUrl = targetUrl + "&" + p.getName() + "=" + this.generateRandomInt(  rand,
+        -1, // s.getMinimum() != null ? s.getMinimum().intValue() : -1,
+        10); // s.getMaximum() != null ? s.getMaximum().intValue() : -1
+        }
+
+        }
+        }
+        }
+        targetUrl = targetUrl.replaceFirst("&", "?");
+        System.out.println(targetUrl);
+
+        URL url = new URL(targetUrl);
+        HttpURLConnection con = (HttpURLConnection) url.openConnection();
+
+        con.setRequestMethod("GET"); // optional default is GET
+        int responseCode = con.getResponseCode();
+
+        // print result
+        System.out.println("HTTP status code (GET) : " + responseCode);
+    }
+  /**
+   * @aspect RandomRequestGenerator
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:106
+   */
+  public void sendRandomPOST(String targetUrl) throws Exception {
+        Random rand = new Random();
+
+        for( ParameterOb o : this.getParameterObs() ){
+        ParameterObject p = o.parameterObject();
+        SchemaObject s = p.getSchemaOb().schemaObject();
+        if( p.getIn().equals("path") ){
+        String pathPart = targetUrl.substring(targetUrl.indexOf("{") ,targetUrl.indexOf("}") + 1);
+
+        if( s.getType().equals("string") )
+        targetUrl = targetUrl.replace(pathPart, this.generateRandomString(rand, s.getEnumObjs()));
+        else if( s.getType().equals("integer") )
+        targetUrl = targetUrl.replace(pathPart, this.generateRandomInt( rand,
+        -1, // s.getMinimum() != null ? s.getMinimum().intValue() : -1,
+        10 // s.getMaximum() != null ? s.getMaximum().intValue() : -1
+        ));
+        }
+        else if( p.getIn().equals("query") ){
+
+        if( s.getType().equals("string") )
+        targetUrl = targetUrl + "&" + p.getName() + "=" + this.generateRandomString(rand, s.getEnumObjs());
+        else if( s.getType().equals("integer") )
+        targetUrl = targetUrl + "&" + p.getName() + "=" + this.generateRandomInt(  rand,
+        -1, // s.getMinimum() != null ? s.getMinimum().intValue() : -1,
+        10); // s.getMaximum() != null ? s.getMaximum().intValue() : -1
+        else if( s.getType().equals("array") ){
+        if( s.getItemsSchema().getSchemaOb().schemaObject().getType().equals("string") ){
+        for( EnumObj e : s.getItemsSchema().getSchemaOb().schemaObject().getEnumObjs() )
+        targetUrl=rand.nextDouble()< 0.5?targetUrl+"&"+p.getName()+"="+e.getEnumOb():targetUrl;
+        }
+        else if( s.getItemsSchema().getSchemaOb().schemaObject().getType().equals("integer") ){
+        for( int i = 0 ; i < 5 ; i++ )
+        targetUrl = targetUrl + "&" + p.getName() + "=" + this.generateRandomInt(  rand,
+        -1, // s.getMinimum() != null ? s.getMinimum().intValue() : -1,
+        10); // s.getMaximum() != null ? s.getMaximum().intValue() : -1
+        }
+
+        }
+        }
+        }
+        targetUrl = targetUrl.replaceFirst("&", "?");
+        System.out.println(targetUrl);
+
+        URL url = new URL(targetUrl);
+        HttpURLConnection con = (HttpURLConnection) url.openConnection();
+
+        con.setRequestMethod("POST"); // HTTP POST
+        con.setDoOutput(true); // POST
+
+        int responseCode = con.getResponseCode();
+
+        // print result
+        System.out.println("HTTP status code (POST) : " + responseCode);
+    }
+  /**
+   * @aspect RandomRequestGenerator
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:161
+   */
+  public String generateRandomString(Random rand, JastAddList<EnumObj> objs) {
+        if( objs.getNumChild() != 0 )
+        return objs.getChild(rand.nextInt(objs.getNumChild())).getEnumOb().toString();
+
+
+        return rand
+        .ints(97, 123)
+        .limit(10)
+        .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
+        .toString();
+    }
+  /**
+   * @aspect RandomRequestGenerator
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:173
+   */
+  public String generateRandomInt(Random rand, int minimum, int maximum){
+        if( minimum > -1 && maximum > 0 )
+        return String.valueOf(rand.nextInt(minimum+maximum)-minimum);
+        else if( minimum > -1 )
+        return String.valueOf(rand.nextInt()+minimum);
+        else if( maximum > 0 )
+        return String.valueOf(rand.nextInt(maximum));
+        return String.valueOf(rand.nextInt());
+        }
   /**
    * @declaredat ASTNode:1
    */
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Opt.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Opt.java
index 3f2981bde0e9faffa6a1da13a2af444cce47efe9..c98cb09988ec0770841cd57fd128495e08c92f65 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Opt.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Opt.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,7 +16,6 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
  * @astdecl Opt : ASTNode;
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Options.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Options.java
index 58ab4a34a0fbe8144a0009a4519ac4e7b56148ec..980b67a56e94cfc143a25bb77787f15a2768634e 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Options.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Options.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,15 +16,14 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:45
- * @astdecl Options : ASTNode ::= OperationObject;
- * @production Options : {@link ASTNode} ::= <span class="component">{@link OperationObject}</span>;
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:49
+ * @astdecl Options : OperationOb ::= <OperationObject:OperationObject>;
+ * @production Options : {@link OperationOb} ::= <span class="component">&lt;OperationObject:OperationObject&gt;</span>;
 
  */
-public class Options extends ASTNode<ASTNode> implements Cloneable {
+public class Options extends OperationOb implements Cloneable {
   /**
    * @declaredat ASTNode:1
    */
@@ -38,53 +38,52 @@ public class Options extends ASTNode<ASTNode> implements Cloneable {
    * @declaredat ASTNode:10
    */
   public void init$Children() {
-    children = new ASTNode[1];
   }
   /**
-   * @declaredat ASTNode:13
+   * @declaredat ASTNode:12
    */
   @ASTNodeAnnotation.Constructor(
     name = {"OperationObject"},
     type = {"OperationObject"},
-    kind = {"Child"}
+    kind = {"Token"}
   )
   public Options(OperationObject p0) {
-    setChild(p0, 0);
+    setOperationObject(p0);
   }
   /** @apilevel low-level 
-   * @declaredat ASTNode:22
+   * @declaredat ASTNode:21
    */
   protected int numChildren() {
-    return 1;
+    return 0;
   }
   /**
    * @apilevel internal
-   * @declaredat ASTNode:28
+   * @declaredat ASTNode:27
    */
   public boolean mayHaveRewrite() {
     return false;
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:32
+   * @declaredat ASTNode:31
    */
   public void flushAttrCache() {
     super.flushAttrCache();
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:36
+   * @declaredat ASTNode:35
    */
   public void flushCollectionCache() {
     super.flushCollectionCache();
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:40
+   * @declaredat ASTNode:39
    */
   public Options clone() throws CloneNotSupportedException {
     Options node = (Options) super.clone();
     return node;
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:45
+   * @declaredat ASTNode:44
    */
   public Options copy() {
     try {
@@ -104,7 +103,7 @@ public class Options extends ASTNode<ASTNode> implements Cloneable {
    * @return dangling copy of the subtree at this node
    * @apilevel low-level
    * @deprecated Please use treeCopy or treeCopyNoTransform instead
-   * @declaredat ASTNode:64
+   * @declaredat ASTNode:63
    */
   @Deprecated
   public Options fullCopy() {
@@ -115,7 +114,7 @@ public class Options extends ASTNode<ASTNode> implements Cloneable {
    * The copy is dangling, i.e. has no parent.
    * @return dangling copy of the subtree at this node
    * @apilevel low-level
-   * @declaredat ASTNode:74
+   * @declaredat ASTNode:73
    */
   public Options treeCopyNoTransform() {
     Options tree = (Options) copy();
@@ -136,7 +135,7 @@ public class Options extends ASTNode<ASTNode> implements Cloneable {
    * The copy is dangling, i.e. has no parent.
    * @return dangling copy of the subtree at this node
    * @apilevel low-level
-   * @declaredat ASTNode:94
+   * @declaredat ASTNode:93
    */
   public Options treeCopy() {
     Options tree = (Options) copy();
@@ -152,36 +151,30 @@ public class Options extends ASTNode<ASTNode> implements Cloneable {
     return tree;
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:108
+   * @declaredat ASTNode:107
    */
   protected boolean is$Equal(ASTNode node) {
-    return super.is$Equal(node);    
+    return super.is$Equal(node) && (tokenOperationObject_OperationObject == ((Options) node).tokenOperationObject_OperationObject);    
   }
   /**
-   * Replaces the OperationObject child.
-   * @param node The new node to replace the OperationObject child.
+   * Replaces the lexeme OperationObject.
+   * @param value The new value for the lexeme OperationObject.
    * @apilevel high-level
    */
-  public void setOperationObject(OperationObject node) {
-    setChild(node, 0);
+  public void setOperationObject(OperationObject value) {
+    tokenOperationObject_OperationObject = value;
   }
+  /** @apilevel internal 
+   */
+  protected OperationObject tokenOperationObject_OperationObject;
   /**
-   * Retrieves the OperationObject child.
-   * @return The current node used as the OperationObject child.
+   * Retrieves the value for the lexeme OperationObject.
+   * @return The value for the lexeme OperationObject.
    * @apilevel high-level
    */
-  @ASTNodeAnnotation.Child(name="OperationObject")
+  @ASTNodeAnnotation.Token(name="OperationObject")
   public OperationObject getOperationObject() {
-    return (OperationObject) getChild(0);
-  }
-  /**
-   * Retrieves the OperationObject child.
-   * <p><em>This method does not invoke AST transformations.</em></p>
-   * @return The current node used as the OperationObject child.
-   * @apilevel low-level
-   */
-  public OperationObject getOperationObjectNoTransform() {
-    return (OperationObject) getChildNoTransform(0);
+    return tokenOperationObject_OperationObject;
   }
   /** @apilevel internal */
   public ASTNode rewriteTo() {
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ParameterOb.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ParameterOb.java
index 64483b639ef755364b17173f9537e87379064509..27ef3d85035d6b0acce0703f2fa5c1b62aadd829 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ParameterOb.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ParameterOb.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,70 +16,17 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:58
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:59
  * @astdecl ParameterOb : ASTNode;
  * @production ParameterOb : {@link ASTNode};
 
  */
 public abstract class ParameterOb extends ASTNode<ASTNode> implements Cloneable {
-  /**
-   * @aspect Composer
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jadd:359
-   */
-  public static Parameter composeParameter (ParameterOb parameterObject, Map<Object, ASTNode> map){
-        Parameter parameter = new Parameter();
-
-        if( !parameterObject.getRef().isEmpty() )
-        parameter.setRef(parameterObject.getRef());
-        if( !parameterObject.getName().isEmpty() )
-        parameter.setName(parameterObject.getName());
-        if( !parameterObject.getIn().isEmpty() )
-        parameter.setIn(parameterObject.getIn());
-        if( parameterObject.getRequired() != null )
-        parameter.setRequired(parameterObject.getRequired());
-        if( !parameterObject.getDescription().isEmpty() )
-        parameter.setDescription(parameterObject.getDescription());
-        if( parameterObject.getDeprecatedBoolean() != null )
-        parameter.setDeprecated(parameterObject.getDeprecatedBoolean());
-        if( !parameterObject.getStyle().isEmpty() )
-        parameter.setStyle(parameterObject.getStyle());
-        if( parameterObject.getAllowReserved() != null )
-        parameter.setAllowReserved(parameterObject.getAllowReserved());
-        if( parameterObject.getExplode() != null )
-        parameter.setExplode(parameterObject.getExplode());
-        if( parameterObject.getSchemaObject() != null )
-        parameter.setSchema(SchemaObject.composeSchema(parameterObject.getSchemaObject()));
-        if( parameterObject.getExample() != null )
-        parameter.setExample(parameterObject.getExample());
-        if( parameterObject.getNumExampleTuple() != 0 ){
-        Map<String, Example> exampleMap = new HashMap<>();
-        for( ExampleTuple t : parameterObject.getExampleTuples() )
-        exampleMap.put(t.getKey(), ExampleObject.composeExample(t.getExampleObject()));
-        parameter.setExamples(exampleMap);
-        }
-        if( parameterObject.getNumContentTuple() != 0 ){
-        Map<String, MediaType> contentMap = new HashMap<>();
-        for( ContentTuple t : parameterObject.getContentTuples() )
-        contentMap.put(t.getKey(), MediaTypeObject.composeMediaType(t.getMediaTypeObject()));
-        parameter.setContentMediaTypes(contentMap);
-        }
-        if( parameterObject.getRequired() != null )
-            parameter.setRequired(parameterObject.getRequired());
-        if( parameterObject.getNumExtension() != 0 ){
-        Map<String, Object> extensionMap = new HashMap<>();
-        for( Extension e : parameterObject.getExtensions() )
-        extensionMap.put(e.getKey(), e.getValue());
-        parameter.setExtensions(extensionMap);
-        }
-
-        return parameter;
-        }
   /**
    * @aspect Parser
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:356
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:329
    */
   public static ParameterOb parseParameter(Parameter parameter, OAIContext context, Map<Object, ASTNode> map) throws DecodeException {
         ParameterObject parameterObject = new ParameterObject();
@@ -200,6 +148,22 @@ public abstract class ParameterOb extends ASTNode<ASTNode> implements Cloneable
    * @declaredat ASTNode:58
    */
   public abstract ParameterOb treeCopy();
+  /**
+   * @attribute syn
+   * @aspect Composer
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:382
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="Composer", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:382")
+  public abstract Parameter composeParameter(ParameterOb parameterOb, Map<Object, ASTNode> map);
+  /**
+   * @attribute syn
+   * @aspect ReferenceGet
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\ReferenceGet.jrag:3
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="ReferenceGet", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\ReferenceGet.jrag:3")
+  public abstract ParameterObject parameterObject();
   /** @apilevel internal */
   public ASTNode rewriteTo() {
     return super.rewriteTo();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ParameterObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ParameterObject.java
index 0a879f382f7ecdf2a5575f556b10bf71cce7a824..6a13631e91928bcf2acca8aa0369c82a3b5b7281 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ParameterObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ParameterObject.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:60
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:61
  * @astdecl ParameterObject : ParameterOb ::= <Name:String> <In:String> <Description:String> <Required:Boolean> <DeprecatedBoolean:Boolean> <AllowEmptyValue:Boolean> <Style:String> <Explode:Boolean> <AllowReserved:Boolean> [SchemaOb] <Example:Object> ExampleTuple* ContentTuple* Extension*;
  * @production ParameterObject : {@link ParameterOb} ::= <span class="component">&lt;Name:String&gt;</span> <span class="component">&lt;In:String&gt;</span> <span class="component">&lt;Description:String&gt;</span> <span class="component">&lt;Required:Boolean&gt;</span> <span class="component">&lt;DeprecatedBoolean:Boolean&gt;</span> <span class="component">&lt;AllowEmptyValue:Boolean&gt;</span> <span class="component">&lt;Style:String&gt;</span> <span class="component">&lt;Explode:Boolean&gt;</span> <span class="component">&lt;AllowReserved:Boolean&gt;</span> <span class="component">[{@link SchemaOb}]</span> <span class="component">&lt;Example:Object&gt;</span> <span class="component">{@link ExampleTuple}*</span> <span class="component">{@link ContentTuple}*</span> <span class="component">{@link Extension}*</span>;
 
@@ -755,6 +755,93 @@ public class ParameterObject extends ParameterOb implements Cloneable {
   public JastAddList<Extension> getExtensionsNoTransform() {
     return getExtensionListNoTransform();
   }
+/** @apilevel internal */
+protected java.util.Set composeParameter_ParameterOb_Map_Object__ASTNode__visited;
+  /**
+   * @attribute syn
+   * @aspect Composer
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:382
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="Composer", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:382")
+  public Parameter composeParameter(ParameterOb parameterOb, Map<Object, ASTNode> map) {
+    java.util.List _parameters = new java.util.ArrayList(2);
+    _parameters.add(parameterOb);
+    _parameters.add(map);
+    if (composeParameter_ParameterOb_Map_Object__ASTNode__visited == null) composeParameter_ParameterOb_Map_Object__ASTNode__visited = new java.util.HashSet(4);
+    if (composeParameter_ParameterOb_Map_Object__ASTNode__visited.contains(_parameters)) {
+      throw new RuntimeException("Circular definition of attribute ParameterOb.composeParameter(ParameterOb,Map_Object__ASTNode_).");
+    }
+    composeParameter_ParameterOb_Map_Object__ASTNode__visited.add(_parameters);
+    try {
+            Parameter parameter = new Parameter();
+            ParameterObject p = (ParameterObject) parameterOb;
+    
+            if( !p.getName().isEmpty() )
+            parameter.setName(p.getName());
+            if( !p.getIn().isEmpty() )
+            parameter.setIn(p.getIn());
+            if( p.getRequired() != null )
+            parameter.setRequired(p.getRequired());
+            if( !p.getDescription().isEmpty() )
+            parameter.setDescription(p.getDescription());
+            if( p.getDeprecatedBoolean() != null )
+            parameter.setDeprecated(p.getDeprecatedBoolean());
+            if( !p.getStyle().isEmpty() )
+            parameter.setStyle(p.getStyle());
+            if( p.getAllowReserved() != null )
+            parameter.setAllowReserved(p.getAllowReserved());
+            if( p.getExplode() != null )
+            parameter.setExplode(p.getExplode());
+            if( p.getSchemaOb() != null )
+            parameter.setSchema(p.getSchemaOb().composeSchema(p.getSchemaOb(), map));
+            if( p.getExample() != null )
+            parameter.setExample(p.getExample());
+            if( p.getNumExampleTuple() != 0 ){
+            Map<String, Example> exampleMap = new HashMap<>();
+            for( ExampleTuple t : p.getExampleTuples() )
+            exampleMap.put(t.getKey(), ExampleObject.composeExample(t.getExampleObject(), map));
+            parameter.setExamples(exampleMap);
+            }
+            if( p.getNumContentTuple() != 0 ){
+            Map<String, MediaType> contentMap = new HashMap<>();
+            for( ContentTuple t : p.getContentTuples() )
+            contentMap.put(t.getKey(), MediaTypeObject.composeMediaType(t.getMediaTypeObject(), map));
+            parameter.setContentMediaTypes(contentMap);
+            }
+            if( p.getRequired() != null )
+            parameter.setRequired(p.getRequired());
+            if( p.getNumExtension() != 0 ){
+            Map<String, Object> extensionMap = new HashMap<>();
+            for( Extension e : p.getExtensions() )
+            extensionMap.put(e.getKey(), e.getValue());
+            parameter.setExtensions(extensionMap);
+            }
+    
+            return parameter;
+            }
+    finally {
+      composeParameter_ParameterOb_Map_Object__ASTNode__visited.remove(_parameters);
+    }
+  }
+/** @apilevel internal */
+protected boolean parameterObject_visited = false;
+  /**
+   * @attribute syn
+   * @aspect ReferenceGet
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\ReferenceGet.jrag:4
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="ReferenceGet", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\ReferenceGet.jrag:3")
+  public ParameterObject parameterObject() {
+    if (parameterObject_visited) {
+      throw new RuntimeException("Circular definition of attribute ParameterOb.parameterObject().");
+    }
+    parameterObject_visited = true;
+    ParameterObject parameterObject_value = this;
+    parameterObject_visited = false;
+    return parameterObject_value;
+  }
   /** @apilevel internal */
   public ASTNode rewriteTo() {
     return super.rewriteTo();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ParameterReference.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ParameterReference.java
index a890925a2302c3ba236a3eb1c904ac1ced6e2ef5..c276dbe9cbf0c3e319d874b77160f0212088a349 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ParameterReference.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ParameterReference.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:59
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:60
  * @astdecl ParameterReference : ParameterOb ::= <Ref:String> <ParameterOb:ParameterOb>;
  * @production ParameterReference : {@link ParameterOb} ::= <span class="component">&lt;Ref:String&gt;</span> <span class="component">&lt;ParameterOb:ParameterOb&gt;</span>;
 
@@ -197,6 +197,61 @@ public class ParameterReference extends ParameterOb implements Cloneable {
   public ParameterOb getParameterOb() {
     return tokenParameterOb_ParameterOb;
   }
+/** @apilevel internal */
+protected java.util.Set composeParameter_ParameterOb_Map_Object__ASTNode__visited;
+  /**
+   * @attribute syn
+   * @aspect Composer
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:382
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="Composer", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:382")
+  public Parameter composeParameter(ParameterOb parameterOb, Map<Object, ASTNode> map) {
+    java.util.List _parameters = new java.util.ArrayList(2);
+    _parameters.add(parameterOb);
+    _parameters.add(map);
+    if (composeParameter_ParameterOb_Map_Object__ASTNode__visited == null) composeParameter_ParameterOb_Map_Object__ASTNode__visited = new java.util.HashSet(4);
+    if (composeParameter_ParameterOb_Map_Object__ASTNode__visited.contains(_parameters)) {
+      throw new RuntimeException("Circular definition of attribute ParameterOb.composeParameter(ParameterOb,Map_Object__ASTNode_).");
+    }
+    composeParameter_ParameterOb_Map_Object__ASTNode__visited.add(_parameters);
+    try {
+            Parameter parameter = new Parameter();
+            ParameterReference p = (ParameterReference) parameterOb;
+    
+            if( !p.getRef().isEmpty() )
+            parameter.setRef(p.getRef());
+    
+            return parameter;
+            }
+    finally {
+      composeParameter_ParameterOb_Map_Object__ASTNode__visited.remove(_parameters);
+    }
+  }
+/** @apilevel internal */
+protected boolean parameterObject_visited = false;
+  /**
+   * @attribute syn
+   * @aspect ReferenceGet
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\ReferenceGet.jrag:3
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="ReferenceGet", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\ReferenceGet.jrag:3")
+  public ParameterObject parameterObject() {
+    if (parameterObject_visited) {
+      throw new RuntimeException("Circular definition of attribute ParameterOb.parameterObject().");
+    }
+    parameterObject_visited = true;
+    try {
+            if( getParameterOb() instanceof ParameterObject )
+            return (ParameterObject) getParameterOb();
+            else
+            return getParameterOb().parameterObject();
+        }
+    finally {
+      parameterObject_visited = false;
+    }
+  }
   /** @apilevel internal */
   public ASTNode rewriteTo() {
     return super.rewriteTo();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ParameterTuple.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ParameterTuple.java
index c32ea78938417285d48c01c760670269dec6f7fe..c24e9955032816691bbb3c2cf1bc3f762ef72b6d 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ParameterTuple.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ParameterTuple.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,7 +16,6 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
  * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:25
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Password.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Password.java
index ebdd0ccc9f434e8cd07258072124c0124f4b72dc..d8f1b0c4c3b73e93a0e716c332fe2238438ed88c 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Password.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Password.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:133
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:134
  * @astdecl Password : ASTNode ::= OAuthFlowObject;
  * @production Password : {@link ASTNode} ::= <span class="component">{@link OAuthFlowObject}</span>;
 
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Patch.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Patch.java
index 798289b82c11c2d4a3d46ab3d5416276b3cdeb32..2116c0ede6f4ffde29cae1338b1ef90f4d2e0fb6 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Patch.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Patch.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,15 +16,14 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:47
- * @astdecl Patch : ASTNode ::= OperationObject;
- * @production Patch : {@link ASTNode} ::= <span class="component">{@link OperationObject}</span>;
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:51
+ * @astdecl Patch : OperationOb ::= <OperationObject:OperationObject>;
+ * @production Patch : {@link OperationOb} ::= <span class="component">&lt;OperationObject:OperationObject&gt;</span>;
 
  */
-public class Patch extends ASTNode<ASTNode> implements Cloneable {
+public class Patch extends OperationOb implements Cloneable {
   /**
    * @declaredat ASTNode:1
    */
@@ -38,53 +38,52 @@ public class Patch extends ASTNode<ASTNode> implements Cloneable {
    * @declaredat ASTNode:10
    */
   public void init$Children() {
-    children = new ASTNode[1];
   }
   /**
-   * @declaredat ASTNode:13
+   * @declaredat ASTNode:12
    */
   @ASTNodeAnnotation.Constructor(
     name = {"OperationObject"},
     type = {"OperationObject"},
-    kind = {"Child"}
+    kind = {"Token"}
   )
   public Patch(OperationObject p0) {
-    setChild(p0, 0);
+    setOperationObject(p0);
   }
   /** @apilevel low-level 
-   * @declaredat ASTNode:22
+   * @declaredat ASTNode:21
    */
   protected int numChildren() {
-    return 1;
+    return 0;
   }
   /**
    * @apilevel internal
-   * @declaredat ASTNode:28
+   * @declaredat ASTNode:27
    */
   public boolean mayHaveRewrite() {
     return false;
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:32
+   * @declaredat ASTNode:31
    */
   public void flushAttrCache() {
     super.flushAttrCache();
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:36
+   * @declaredat ASTNode:35
    */
   public void flushCollectionCache() {
     super.flushCollectionCache();
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:40
+   * @declaredat ASTNode:39
    */
   public Patch clone() throws CloneNotSupportedException {
     Patch node = (Patch) super.clone();
     return node;
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:45
+   * @declaredat ASTNode:44
    */
   public Patch copy() {
     try {
@@ -104,7 +103,7 @@ public class Patch extends ASTNode<ASTNode> implements Cloneable {
    * @return dangling copy of the subtree at this node
    * @apilevel low-level
    * @deprecated Please use treeCopy or treeCopyNoTransform instead
-   * @declaredat ASTNode:64
+   * @declaredat ASTNode:63
    */
   @Deprecated
   public Patch fullCopy() {
@@ -115,7 +114,7 @@ public class Patch extends ASTNode<ASTNode> implements Cloneable {
    * The copy is dangling, i.e. has no parent.
    * @return dangling copy of the subtree at this node
    * @apilevel low-level
-   * @declaredat ASTNode:74
+   * @declaredat ASTNode:73
    */
   public Patch treeCopyNoTransform() {
     Patch tree = (Patch) copy();
@@ -136,7 +135,7 @@ public class Patch extends ASTNode<ASTNode> implements Cloneable {
    * The copy is dangling, i.e. has no parent.
    * @return dangling copy of the subtree at this node
    * @apilevel low-level
-   * @declaredat ASTNode:94
+   * @declaredat ASTNode:93
    */
   public Patch treeCopy() {
     Patch tree = (Patch) copy();
@@ -152,36 +151,30 @@ public class Patch extends ASTNode<ASTNode> implements Cloneable {
     return tree;
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:108
+   * @declaredat ASTNode:107
    */
   protected boolean is$Equal(ASTNode node) {
-    return super.is$Equal(node);    
+    return super.is$Equal(node) && (tokenOperationObject_OperationObject == ((Patch) node).tokenOperationObject_OperationObject);    
   }
   /**
-   * Replaces the OperationObject child.
-   * @param node The new node to replace the OperationObject child.
+   * Replaces the lexeme OperationObject.
+   * @param value The new value for the lexeme OperationObject.
    * @apilevel high-level
    */
-  public void setOperationObject(OperationObject node) {
-    setChild(node, 0);
+  public void setOperationObject(OperationObject value) {
+    tokenOperationObject_OperationObject = value;
   }
+  /** @apilevel internal 
+   */
+  protected OperationObject tokenOperationObject_OperationObject;
   /**
-   * Retrieves the OperationObject child.
-   * @return The current node used as the OperationObject child.
+   * Retrieves the value for the lexeme OperationObject.
+   * @return The value for the lexeme OperationObject.
    * @apilevel high-level
    */
-  @ASTNodeAnnotation.Child(name="OperationObject")
+  @ASTNodeAnnotation.Token(name="OperationObject")
   public OperationObject getOperationObject() {
-    return (OperationObject) getChild(0);
-  }
-  /**
-   * Retrieves the OperationObject child.
-   * <p><em>This method does not invoke AST transformations.</em></p>
-   * @return The current node used as the OperationObject child.
-   * @apilevel low-level
-   */
-  public OperationObject getOperationObjectNoTransform() {
-    return (OperationObject) getChildNoTransform(0);
+    return tokenOperationObject_OperationObject;
   }
   /** @apilevel internal */
   public ASTNode rewriteTo() {
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/PathItemOb.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/PathItemOb.java
index 60827432d119b9658a9e1ae68d9b8b7c89ab3b59..58aa00b2f6141f4071b701c8fccd5cae2d2b2ee9 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/PathItemOb.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/PathItemOb.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,7 +16,6 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
  * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:38
@@ -24,55 +24,9 @@ import org.openapi4j.core.exception.DecodeException;
 
  */
 public abstract class PathItemOb extends ASTNode<ASTNode> implements Cloneable {
-  /**
-   * @aspect Composer
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jadd:240
-   */
-  public static Path composePath (PathItemOb pathItem, Map<Object, ASTNode> map){
-        Path path = new Path();
-
-        
-
-        if( !pathItem.getRef().isEmpty() )
-        path.setRef(pathItem.getRef());
-        if( !pathItem.getSummary().isEmpty())
-        path.setSummary(pathItem.getSummary());
-        if( !pathItem.getDescription().isEmpty() )
-        path.setDescription(pathItem.getDescription());
-        if( pathItem.hasGet() )
-        path.setGet( OperationObject.composeOperation(pathItem.getGet().getOperationObject()) );
-        if( pathItem.hasPut() )
-        path.setPut( OperationObject.composeOperation(pathItem.getPut().getOperationObject()) );
-        if( pathItem.hasPost() )
-        path.setPost( OperationObject.composeOperation(pathItem.getPost().getOperationObject()) );
-        if( pathItem.hasDelete() )
-        path.setDelete( OperationObject.composeOperation(pathItem.getDelete().getOperationObject()) );
-        if( pathItem.hasOptions() )
-        path.setOptions( OperationObject.composeOperation(pathItem.getOptions().getOperationObject()) );
-        if( pathItem.hasHead() )
-        path.setHead( OperationObject.composeOperation(pathItem.getHead().getOperationObject()) );
-        if( pathItem.hasPatch() )
-        path.setPatch( OperationObject.composeOperation(pathItem.getPatch().getOperationObject()) );
-        if( pathItem.getNumServerObject() != 0 ){
-        for( ServerObject s : pathItem.getServerObjects() )
-        path.addServer( ServerObject.composeServer(s) );
-        }
-        if( pathItem.getNumParameterObject() != 0 ){
-        for( ParameterObject p : pathItem.getParameterObjects() )
-        path.addParameter( ParameterObject.composeParameter(p) );
-        }
-        if( pathItem.getNumExtension() != 0 ){
-        Map<String, Object> extensionMap = new HashMap<>();
-        for( Extension e : pathItem.getExtensions() )
-        extensionMap.put(e.getKey(), e.getValue());
-        path.setExtensions(extensionMap);
-        }
-
-        return path;
-        }
   /**
    * @aspect Parser
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:217
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:190
    */
   public static PathItemOb parsePath(Path path, OAIContext context, Map<Object, ASTNode> map) throws DecodeException {
         PathItemObject pathItem = new PathItemObject();
@@ -218,6 +172,22 @@ public abstract class PathItemOb extends ASTNode<ASTNode> implements Cloneable {
    * @declaredat ASTNode:58
    */
   public abstract PathItemOb treeCopy();
+  /**
+   * @attribute syn
+   * @aspect Composer
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:262
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="Composer", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:262")
+  public abstract Path composePath(PathItemOb pathItem, Map<Object, ASTNode> map);
+  /**
+   * @attribute syn
+   * @aspect ReferenceGet
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\ReferenceGet.jrag:21
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="ReferenceGet", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\ReferenceGet.jrag:21")
+  public abstract PathItemObject pathItemObject();
   /** @apilevel internal */
   public ASTNode rewriteTo() {
     return super.rewriteTo();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/PathItemObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/PathItemObject.java
index 0538f4544473a727067edddc65ca37096949b6ef..fe538e296ad48f82941b143540b01e1916e9300f 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/PathItemObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/PathItemObject.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,7 +16,6 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
  * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:40
@@ -958,6 +958,85 @@ public class PathItemObject extends PathItemOb implements Cloneable {
   public JastAddList<Extension> getExtensionsNoTransform() {
     return getExtensionListNoTransform();
   }
+/** @apilevel internal */
+protected java.util.Set composePath_PathItemOb_Map_Object__ASTNode__visited;
+  /**
+   * @attribute syn
+   * @aspect Composer
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:262
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="Composer", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:262")
+  public Path composePath(PathItemOb pathItem, Map<Object, ASTNode> map) {
+    java.util.List _parameters = new java.util.ArrayList(2);
+    _parameters.add(pathItem);
+    _parameters.add(map);
+    if (composePath_PathItemOb_Map_Object__ASTNode__visited == null) composePath_PathItemOb_Map_Object__ASTNode__visited = new java.util.HashSet(4);
+    if (composePath_PathItemOb_Map_Object__ASTNode__visited.contains(_parameters)) {
+      throw new RuntimeException("Circular definition of attribute PathItemOb.composePath(PathItemOb,Map_Object__ASTNode_).");
+    }
+    composePath_PathItemOb_Map_Object__ASTNode__visited.add(_parameters);
+    try {
+            Path path = new Path();
+            PathItemObject p = (PathItemObject) pathItem;
+    
+            if( !p.getSummary().isEmpty())
+            path.setSummary(p.getSummary());
+            if( !p.getDescription().isEmpty() )
+            path.setDescription(p.getDescription());
+            if( p.hasGet() )
+            path.setGet( OperationObject.composeOperation(p.getGet().getOperationObject(), map) );
+            if( p.hasPut() )
+            path.setPut( OperationObject.composeOperation(p.getPut().getOperationObject(), map) );
+            if( p.hasPost() )
+            path.setPost( OperationObject.composeOperation(p.getPost().getOperationObject(), map) );
+            if( p.hasDelete() )
+            path.setDelete( OperationObject.composeOperation(p.getDelete().getOperationObject(), map) );
+            if( p.hasOptions() )
+            path.setOptions( OperationObject.composeOperation(p.getOptions().getOperationObject(), map) );
+            if( p.hasHead() )
+            path.setHead( OperationObject.composeOperation(p.getHead().getOperationObject(), map) );
+            if( p.hasPatch() )
+            path.setPatch( OperationObject.composeOperation(p.getPatch().getOperationObject(), map) );
+            if( p.getNumServerObject() != 0 ){
+            for( ServerObject s : p.getServerObjects() )
+            path.addServer( ServerObject.composeServer(s, map) );
+            }
+            if( p.getNumParameterOb() != 0 ){
+            for( ParameterOb e : p.getParameterObs() )
+            path.addParameter( e.composeParameter(e, map) );
+            }
+            if( p.getNumExtension() != 0 ){
+            Map<String, Object> extensionMap = new HashMap<>();
+            for( Extension e : p.getExtensions() )
+            extensionMap.put(e.getKey(), e.getValue());
+            path.setExtensions(extensionMap);
+            }
+    
+            return path;
+            }
+    finally {
+      composePath_PathItemOb_Map_Object__ASTNode__visited.remove(_parameters);
+    }
+  }
+/** @apilevel internal */
+protected boolean pathItemObject_visited = false;
+  /**
+   * @attribute syn
+   * @aspect ReferenceGet
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\ReferenceGet.jrag:22
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="ReferenceGet", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\ReferenceGet.jrag:21")
+  public PathItemObject pathItemObject() {
+    if (pathItemObject_visited) {
+      throw new RuntimeException("Circular definition of attribute PathItemOb.pathItemObject().");
+    }
+    pathItemObject_visited = true;
+    PathItemObject pathItemObject_value = this;
+    pathItemObject_visited = false;
+    return pathItemObject_value;
+  }
   /** @apilevel internal */
   public ASTNode rewriteTo() {
     return super.rewriteTo();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/PathItemReference.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/PathItemReference.java
index 303aacecd2d0e9f75c5c2cf850198f15580f5c59..48008a75aeee18aa8ab3915c3248fedbafd3fbac 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/PathItemReference.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/PathItemReference.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,7 +16,6 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
  * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:39
@@ -197,6 +197,61 @@ public class PathItemReference extends PathItemOb implements Cloneable {
   public PathItemOb getPathItemOb() {
     return tokenPathItemOb_PathItemOb;
   }
+/** @apilevel internal */
+protected java.util.Set composePath_PathItemOb_Map_Object__ASTNode__visited;
+  /**
+   * @attribute syn
+   * @aspect Composer
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:262
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="Composer", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:262")
+  public Path composePath(PathItemOb pathItem, Map<Object, ASTNode> map) {
+    java.util.List _parameters = new java.util.ArrayList(2);
+    _parameters.add(pathItem);
+    _parameters.add(map);
+    if (composePath_PathItemOb_Map_Object__ASTNode__visited == null) composePath_PathItemOb_Map_Object__ASTNode__visited = new java.util.HashSet(4);
+    if (composePath_PathItemOb_Map_Object__ASTNode__visited.contains(_parameters)) {
+      throw new RuntimeException("Circular definition of attribute PathItemOb.composePath(PathItemOb,Map_Object__ASTNode_).");
+    }
+    composePath_PathItemOb_Map_Object__ASTNode__visited.add(_parameters);
+    try {
+                Path path = new Path();
+            PathItemReference p = (PathItemReference) pathItem;
+    
+            if( !p.getRef().isEmpty() )
+            path.setRef(p.getRef());
+    
+            return path;
+            }
+    finally {
+      composePath_PathItemOb_Map_Object__ASTNode__visited.remove(_parameters);
+    }
+  }
+/** @apilevel internal */
+protected boolean pathItemObject_visited = false;
+  /**
+   * @attribute syn
+   * @aspect ReferenceGet
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\ReferenceGet.jrag:21
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="ReferenceGet", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\ReferenceGet.jrag:21")
+  public PathItemObject pathItemObject() {
+    if (pathItemObject_visited) {
+      throw new RuntimeException("Circular definition of attribute PathItemOb.pathItemObject().");
+    }
+    pathItemObject_visited = true;
+    try {
+            if( getPathItemOb() instanceof PathItemObject )
+                return (PathItemObject) getPathItemOb();
+            else
+                return getPathItemOb().pathItemObject();
+        }
+    finally {
+      pathItemObject_visited = false;
+    }
+  }
   /** @apilevel internal */
   public ASTNode rewriteTo() {
     return super.rewriteTo();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/PathsObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/PathsObject.java
index df3f78af45cf3b8be367d5a7bfc30cd918559a8e..276f7a0fc483f5108afed5f9126d2d92504206af 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/PathsObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/PathsObject.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,7 +16,6 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
  * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:35
@@ -24,6 +24,29 @@ import org.openapi4j.core.exception.DecodeException;
 
  */
 public class PathsObject extends ASTNode<ASTNode> implements Cloneable {
+  /**
+   * @aspect RandomRequestGenerator
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:33
+   */
+  public void sendRandomRequests(String baseUrl) throws Exception {
+        if( this.getPathItemOb().pathItemObject().hasGet() ){
+        IntStream.range(0, 1).forEach( i -> {
+        try {
+        this.getPathItemOb().pathItemObject().getGet().getOperationObject().sendRandomGET(baseUrl+this.getRef());
+        } catch (Exception e) {
+        e.printStackTrace();
+        }
+        });
+        }
+        if( this.getPathItemOb().pathItemObject().hasPost() ){
+        IntStream.range(0, 1).forEach( i -> {
+        try {
+        this.getPathItemOb().pathItemObject().getPost().getOperationObject().sendRandomPOST(baseUrl+this.getRef());
+        } catch (Exception e) {
+        e.printStackTrace();
+        }
+        });}
+    }
   /**
    * @declaredat ASTNode:1
    */
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Post.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Post.java
index 6e23a5cf05a3147114d663e3c9cc4bb358d90598..fe284e01e0da2d490080baafc45ac9d30f10bbdf 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Post.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Post.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,15 +16,14 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:43
- * @astdecl Post : ASTNode ::= OperationObject;
- * @production Post : {@link ASTNode} ::= <span class="component">{@link OperationObject}</span>;
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:47
+ * @astdecl Post : OperationOb ::= <OperationObject:OperationObject>;
+ * @production Post : {@link OperationOb} ::= <span class="component">&lt;OperationObject:OperationObject&gt;</span>;
 
  */
-public class Post extends ASTNode<ASTNode> implements Cloneable {
+public class Post extends OperationOb implements Cloneable {
   /**
    * @declaredat ASTNode:1
    */
@@ -38,53 +38,52 @@ public class Post extends ASTNode<ASTNode> implements Cloneable {
    * @declaredat ASTNode:10
    */
   public void init$Children() {
-    children = new ASTNode[1];
   }
   /**
-   * @declaredat ASTNode:13
+   * @declaredat ASTNode:12
    */
   @ASTNodeAnnotation.Constructor(
     name = {"OperationObject"},
     type = {"OperationObject"},
-    kind = {"Child"}
+    kind = {"Token"}
   )
   public Post(OperationObject p0) {
-    setChild(p0, 0);
+    setOperationObject(p0);
   }
   /** @apilevel low-level 
-   * @declaredat ASTNode:22
+   * @declaredat ASTNode:21
    */
   protected int numChildren() {
-    return 1;
+    return 0;
   }
   /**
    * @apilevel internal
-   * @declaredat ASTNode:28
+   * @declaredat ASTNode:27
    */
   public boolean mayHaveRewrite() {
     return false;
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:32
+   * @declaredat ASTNode:31
    */
   public void flushAttrCache() {
     super.flushAttrCache();
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:36
+   * @declaredat ASTNode:35
    */
   public void flushCollectionCache() {
     super.flushCollectionCache();
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:40
+   * @declaredat ASTNode:39
    */
   public Post clone() throws CloneNotSupportedException {
     Post node = (Post) super.clone();
     return node;
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:45
+   * @declaredat ASTNode:44
    */
   public Post copy() {
     try {
@@ -104,7 +103,7 @@ public class Post extends ASTNode<ASTNode> implements Cloneable {
    * @return dangling copy of the subtree at this node
    * @apilevel low-level
    * @deprecated Please use treeCopy or treeCopyNoTransform instead
-   * @declaredat ASTNode:64
+   * @declaredat ASTNode:63
    */
   @Deprecated
   public Post fullCopy() {
@@ -115,7 +114,7 @@ public class Post extends ASTNode<ASTNode> implements Cloneable {
    * The copy is dangling, i.e. has no parent.
    * @return dangling copy of the subtree at this node
    * @apilevel low-level
-   * @declaredat ASTNode:74
+   * @declaredat ASTNode:73
    */
   public Post treeCopyNoTransform() {
     Post tree = (Post) copy();
@@ -136,7 +135,7 @@ public class Post extends ASTNode<ASTNode> implements Cloneable {
    * The copy is dangling, i.e. has no parent.
    * @return dangling copy of the subtree at this node
    * @apilevel low-level
-   * @declaredat ASTNode:94
+   * @declaredat ASTNode:93
    */
   public Post treeCopy() {
     Post tree = (Post) copy();
@@ -152,36 +151,30 @@ public class Post extends ASTNode<ASTNode> implements Cloneable {
     return tree;
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:108
+   * @declaredat ASTNode:107
    */
   protected boolean is$Equal(ASTNode node) {
-    return super.is$Equal(node);    
+    return super.is$Equal(node) && (tokenOperationObject_OperationObject == ((Post) node).tokenOperationObject_OperationObject);    
   }
   /**
-   * Replaces the OperationObject child.
-   * @param node The new node to replace the OperationObject child.
+   * Replaces the lexeme OperationObject.
+   * @param value The new value for the lexeme OperationObject.
    * @apilevel high-level
    */
-  public void setOperationObject(OperationObject node) {
-    setChild(node, 0);
+  public void setOperationObject(OperationObject value) {
+    tokenOperationObject_OperationObject = value;
   }
+  /** @apilevel internal 
+   */
+  protected OperationObject tokenOperationObject_OperationObject;
   /**
-   * Retrieves the OperationObject child.
-   * @return The current node used as the OperationObject child.
+   * Retrieves the value for the lexeme OperationObject.
+   * @return The value for the lexeme OperationObject.
    * @apilevel high-level
    */
-  @ASTNodeAnnotation.Child(name="OperationObject")
+  @ASTNodeAnnotation.Token(name="OperationObject")
   public OperationObject getOperationObject() {
-    return (OperationObject) getChild(0);
-  }
-  /**
-   * Retrieves the OperationObject child.
-   * <p><em>This method does not invoke AST transformations.</em></p>
-   * @return The current node used as the OperationObject child.
-   * @apilevel low-level
-   */
-  public OperationObject getOperationObjectNoTransform() {
-    return (OperationObject) getChildNoTransform(0);
+    return tokenOperationObject_OperationObject;
   }
   /** @apilevel internal */
   public ASTNode rewriteTo() {
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/PropertyItem.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/PropertyItem.java
index 48a6e43855b1752bc13b2f63e83c1cc49d42a178..3cb1b6bb3eda46997eb2e332a0cc8e4affc4d241 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/PropertyItem.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/PropertyItem.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:112
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:113
  * @astdecl PropertyItem : ASTNode ::= <Name:String> SchemaOb;
  * @production PropertyItem : {@link ASTNode} ::= <span class="component">&lt;Name:String&gt;</span> <span class="component">{@link SchemaOb}</span>;
 
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Put.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Put.java
index 8142057fb7db4723f4304fca9754922f74ced5d3..9b0e0803bdbf91a6ff9139d976e880ee266fce00 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Put.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Put.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,15 +16,14 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:42
- * @astdecl Put : ASTNode ::= OperationObject;
- * @production Put : {@link ASTNode} ::= <span class="component">{@link OperationObject}</span>;
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:46
+ * @astdecl Put : OperationOb ::= <OperationObject:OperationObject>;
+ * @production Put : {@link OperationOb} ::= <span class="component">&lt;OperationObject:OperationObject&gt;</span>;
 
  */
-public class Put extends ASTNode<ASTNode> implements Cloneable {
+public class Put extends OperationOb implements Cloneable {
   /**
    * @declaredat ASTNode:1
    */
@@ -38,53 +38,52 @@ public class Put extends ASTNode<ASTNode> implements Cloneable {
    * @declaredat ASTNode:10
    */
   public void init$Children() {
-    children = new ASTNode[1];
   }
   /**
-   * @declaredat ASTNode:13
+   * @declaredat ASTNode:12
    */
   @ASTNodeAnnotation.Constructor(
     name = {"OperationObject"},
     type = {"OperationObject"},
-    kind = {"Child"}
+    kind = {"Token"}
   )
   public Put(OperationObject p0) {
-    setChild(p0, 0);
+    setOperationObject(p0);
   }
   /** @apilevel low-level 
-   * @declaredat ASTNode:22
+   * @declaredat ASTNode:21
    */
   protected int numChildren() {
-    return 1;
+    return 0;
   }
   /**
    * @apilevel internal
-   * @declaredat ASTNode:28
+   * @declaredat ASTNode:27
    */
   public boolean mayHaveRewrite() {
     return false;
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:32
+   * @declaredat ASTNode:31
    */
   public void flushAttrCache() {
     super.flushAttrCache();
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:36
+   * @declaredat ASTNode:35
    */
   public void flushCollectionCache() {
     super.flushCollectionCache();
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:40
+   * @declaredat ASTNode:39
    */
   public Put clone() throws CloneNotSupportedException {
     Put node = (Put) super.clone();
     return node;
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:45
+   * @declaredat ASTNode:44
    */
   public Put copy() {
     try {
@@ -104,7 +103,7 @@ public class Put extends ASTNode<ASTNode> implements Cloneable {
    * @return dangling copy of the subtree at this node
    * @apilevel low-level
    * @deprecated Please use treeCopy or treeCopyNoTransform instead
-   * @declaredat ASTNode:64
+   * @declaredat ASTNode:63
    */
   @Deprecated
   public Put fullCopy() {
@@ -115,7 +114,7 @@ public class Put extends ASTNode<ASTNode> implements Cloneable {
    * The copy is dangling, i.e. has no parent.
    * @return dangling copy of the subtree at this node
    * @apilevel low-level
-   * @declaredat ASTNode:74
+   * @declaredat ASTNode:73
    */
   public Put treeCopyNoTransform() {
     Put tree = (Put) copy();
@@ -136,7 +135,7 @@ public class Put extends ASTNode<ASTNode> implements Cloneable {
    * The copy is dangling, i.e. has no parent.
    * @return dangling copy of the subtree at this node
    * @apilevel low-level
-   * @declaredat ASTNode:94
+   * @declaredat ASTNode:93
    */
   public Put treeCopy() {
     Put tree = (Put) copy();
@@ -152,36 +151,30 @@ public class Put extends ASTNode<ASTNode> implements Cloneable {
     return tree;
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:108
+   * @declaredat ASTNode:107
    */
   protected boolean is$Equal(ASTNode node) {
-    return super.is$Equal(node);    
+    return super.is$Equal(node) && (tokenOperationObject_OperationObject == ((Put) node).tokenOperationObject_OperationObject);    
   }
   /**
-   * Replaces the OperationObject child.
-   * @param node The new node to replace the OperationObject child.
+   * Replaces the lexeme OperationObject.
+   * @param value The new value for the lexeme OperationObject.
    * @apilevel high-level
    */
-  public void setOperationObject(OperationObject node) {
-    setChild(node, 0);
+  public void setOperationObject(OperationObject value) {
+    tokenOperationObject_OperationObject = value;
   }
+  /** @apilevel internal 
+   */
+  protected OperationObject tokenOperationObject_OperationObject;
   /**
-   * Retrieves the OperationObject child.
-   * @return The current node used as the OperationObject child.
+   * Retrieves the value for the lexeme OperationObject.
+   * @return The value for the lexeme OperationObject.
    * @apilevel high-level
    */
-  @ASTNodeAnnotation.Child(name="OperationObject")
+  @ASTNodeAnnotation.Token(name="OperationObject")
   public OperationObject getOperationObject() {
-    return (OperationObject) getChild(0);
-  }
-  /**
-   * Retrieves the OperationObject child.
-   * <p><em>This method does not invoke AST transformations.</em></p>
-   * @return The current node used as the OperationObject child.
-   * @apilevel low-level
-   */
-  public OperationObject getOperationObjectNoTransform() {
-    return (OperationObject) getChildNoTransform(0);
+    return tokenOperationObject_OperationObject;
   }
   /** @apilevel internal */
   public ASTNode rewriteTo() {
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/RequestBodyOb.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/RequestBodyOb.java
index 752bf6117e827d0e0cbd82cae205d189a5ebba08..3e5820eda6b76e8513fc44c223e1e817f327394d 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/RequestBodyOb.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/RequestBodyOb.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,40 +16,17 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:64
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:65
  * @astdecl RequestBodyOb : ASTNode;
  * @production RequestBodyOb : {@link ASTNode};
 
  */
 public abstract class RequestBodyOb extends ASTNode<ASTNode> implements Cloneable {
-  /**
-   * @aspect Composer
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jadd:408
-   */
-  public static org.openapi4j.parser.model.v3.RequestBody composeRequestBody (RequestBodyOb requestBodyObject, Map<Object, ASTNode> map){
-        org.openapi4j.parser.model.v3.RequestBody requestBody = new org.openapi4j.parser.model.v3.RequestBody();
-
-        if( requestBodyObject.getNumContentTuple() != 0 ){
-        Map<String, MediaType> contents = new HashMap<>();
-        for( ContentTuple t : requestBodyObject.getContentTuples())
-        contents.put(t.getKey(), MediaTypeObject.composeMediaType(t.getMediaTypeObject()));
-        requestBody.setContentMediaTypes(contents);
-        }
-        if( !requestBodyObject.getDescription().isEmpty() )
-        requestBody.setDescription(requestBodyObject.getDescription());
-        if( requestBodyObject.getRequired() != null )
-        requestBody.setRequired(requestBodyObject.getRequired());
-        if( !requestBodyObject.getRef().isEmpty() )
-        requestBody.setRef(requestBodyObject.getRef());
-
-        return requestBody;
-        }
   /**
    * @aspect Parser
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:403
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:376
    */
   public static RequestBodyOb parseRequestBody(org.openapi4j.parser.model.v3.RequestBody requestBody, OAIContext context, Map<Object, ASTNode> map) throws DecodeException {
         RequestBodyObject requestBodyObject = new RequestBodyObject();
@@ -150,6 +128,14 @@ public abstract class RequestBodyOb extends ASTNode<ASTNode> implements Cloneabl
    * @declaredat ASTNode:58
    */
   public abstract RequestBodyOb treeCopy();
+  /**
+   * @attribute syn
+   * @aspect Composer
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:440
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="Composer", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:440")
+  public abstract RequestBody composeRequestBody(RequestBodyOb requestBodyOb, Map<Object, ASTNode> map);
   /** @apilevel internal */
   public ASTNode rewriteTo() {
     return super.rewriteTo();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/RequestBodyObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/RequestBodyObject.java
index c3370f2411f6eb1ef9656326c965b6db777c3e52..52fa5978ac11c7e2304b24ee574a801b650aa3b8 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/RequestBodyObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/RequestBodyObject.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:66
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:67
  * @astdecl RequestBodyObject : RequestBodyOb ::= <Description:String> ContentTuple* <Required:Boolean> Extension*;
  * @production RequestBodyObject : {@link RequestBodyOb} ::= <span class="component">&lt;Description:String&gt;</span> <span class="component">{@link ContentTuple}*</span> <span class="component">&lt;Required:Boolean&gt;</span> <span class="component">{@link Extension}*</span>;
 
@@ -422,6 +422,45 @@ public class RequestBodyObject extends RequestBodyOb implements Cloneable {
   public JastAddList<Extension> getExtensionsNoTransform() {
     return getExtensionListNoTransform();
   }
+/** @apilevel internal */
+protected java.util.Set composeRequestBody_RequestBodyOb_Map_Object__ASTNode__visited;
+  /**
+   * @attribute syn
+   * @aspect Composer
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:440
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="Composer", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:440")
+  public RequestBody composeRequestBody(RequestBodyOb requestBodyOb, Map<Object, ASTNode> map) {
+    java.util.List _parameters = new java.util.ArrayList(2);
+    _parameters.add(requestBodyOb);
+    _parameters.add(map);
+    if (composeRequestBody_RequestBodyOb_Map_Object__ASTNode__visited == null) composeRequestBody_RequestBodyOb_Map_Object__ASTNode__visited = new java.util.HashSet(4);
+    if (composeRequestBody_RequestBodyOb_Map_Object__ASTNode__visited.contains(_parameters)) {
+      throw new RuntimeException("Circular definition of attribute RequestBodyOb.composeRequestBody(RequestBodyOb,Map_Object__ASTNode_).");
+    }
+    composeRequestBody_RequestBodyOb_Map_Object__ASTNode__visited.add(_parameters);
+    try {
+            RequestBody requestBody = new RequestBody();
+            RequestBodyObject r = (RequestBodyObject) requestBodyOb;
+    
+            if( r.getNumContentTuple() != 0 ){
+            Map<String, MediaType> contents = new HashMap<>();
+            for( ContentTuple t : r.getContentTuples())
+            contents.put(t.getKey(), MediaTypeObject.composeMediaType(t.getMediaTypeObject(), map));
+            requestBody.setContentMediaTypes(contents);
+            }
+            if( !r.getDescription().isEmpty() )
+            requestBody.setDescription(r.getDescription());
+            if( r.getRequired() != null )
+            requestBody.setRequired(r.getRequired());
+    
+            return requestBody;
+            }
+    finally {
+      composeRequestBody_RequestBodyOb_Map_Object__ASTNode__visited.remove(_parameters);
+    }
+  }
   /** @apilevel internal */
   public ASTNode rewriteTo() {
     return super.rewriteTo();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/RequestBodyReference.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/RequestBodyReference.java
index cfc634300f877bdc8525aa265b9673901f0c06eb..8e030b1b18e8cccf32d6cb2990bf32a027867c65 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/RequestBodyReference.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/RequestBodyReference.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:65
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:66
  * @astdecl RequestBodyReference : RequestBodyOb ::= <Ref:String> <RequestBodyOb:RequestBodyOb>;
  * @production RequestBodyReference : {@link RequestBodyOb} ::= <span class="component">&lt;Ref:String&gt;</span> <span class="component">&lt;RequestBodyOb:RequestBodyOb&gt;</span>;
 
@@ -197,6 +197,37 @@ public class RequestBodyReference extends RequestBodyOb implements Cloneable {
   public RequestBodyOb getRequestBodyOb() {
     return tokenRequestBodyOb_RequestBodyOb;
   }
+/** @apilevel internal */
+protected java.util.Set composeRequestBody_RequestBodyOb_Map_Object__ASTNode__visited;
+  /**
+   * @attribute syn
+   * @aspect Composer
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:440
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="Composer", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:440")
+  public RequestBody composeRequestBody(RequestBodyOb requestBodyOb, Map<Object, ASTNode> map) {
+    java.util.List _parameters = new java.util.ArrayList(2);
+    _parameters.add(requestBodyOb);
+    _parameters.add(map);
+    if (composeRequestBody_RequestBodyOb_Map_Object__ASTNode__visited == null) composeRequestBody_RequestBodyOb_Map_Object__ASTNode__visited = new java.util.HashSet(4);
+    if (composeRequestBody_RequestBodyOb_Map_Object__ASTNode__visited.contains(_parameters)) {
+      throw new RuntimeException("Circular definition of attribute RequestBodyOb.composeRequestBody(RequestBodyOb,Map_Object__ASTNode_).");
+    }
+    composeRequestBody_RequestBodyOb_Map_Object__ASTNode__visited.add(_parameters);
+    try {
+            RequestBody requestBody = new RequestBody();
+            RequestBodyReference r = (RequestBodyReference) requestBodyOb;
+    
+            if( !r.getRef().isEmpty() )
+            requestBody.setRef(r.getRef());
+    
+            return requestBody;
+            }
+    finally {
+      composeRequestBody_RequestBodyOb_Map_Object__ASTNode__visited.remove(_parameters);
+    }
+  }
   /** @apilevel internal */
   public ASTNode rewriteTo() {
     return super.rewriteTo();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/RequestBodyTuple.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/RequestBodyTuple.java
index 26a42b8574d65f114c67ff83b85faa0e970fba67..de0d31a798cada1c0abd47f8ea178e0e945c1902 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/RequestBodyTuple.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/RequestBodyTuple.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,7 +16,6 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
  * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:27
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/RequiredField.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/RequiredField.java
index 32ca219c1c698ce17f196c69d93ad21586ce697c..5d6f2c1a04f8c2826f86220781e6d8394a72c562 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/RequiredField.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/RequiredField.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:113
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:114
  * @astdecl RequiredField : ASTNode ::= <Value:String>;
  * @production RequiredField : {@link ASTNode} ::= <span class="component">&lt;Value:String&gt;</span>;
 
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ResponseOb.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ResponseOb.java
index f2b7ee50fb3a46022d2e5ca878ea6eef1f947f2d..b76b3a6daf5649e010cd1f450a8042c66b9e65e2 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ResponseOb.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ResponseOb.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,50 +16,17 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:76
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:77
  * @astdecl ResponseOb : ASTNode;
  * @production ResponseOb : {@link ASTNode};
 
  */
 public abstract class ResponseOb extends ASTNode<ASTNode> implements Cloneable {
-  /**
-   * @aspect Composer
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jadd:475
-   */
-  public static Response composeResponse (ResponseObject responseObject, Map<Object, ASTNode> map){
-        Response response = new Response();
-
-        if( !responseObject.getRef().isEmpty() )
-        response.setRef(responseObject.getRef());
-        if( !responseObject.getDescription().isEmpty() )
-        response.setDescription(responseObject.getDescription());
-        if( responseObject.getNumHeaderTuple() != 0 ){
-        Map<String, Header> headers = new HashMap<>();
-        for( HeaderTuple t : responseObject.getHeaderTuples() )
-        headers.put(t.getKey(), HeaderObject.composeHeader(t.getHeaderObject()));
-        response.setHeaders(headers);
-        }
-        if( responseObject.getNumContentTuple() != 0 ){
-        Map<String, MediaType> contents = new HashMap<>();
-        for( ContentTuple t : responseObject.getContentTuples() )
-        contents.put(t.getKey(), MediaTypeObject.composeMediaType(t.getMediaTypeObject()));
-        response.setContentMediaTypes(contents);
-        }
-        if( responseObject.getNumLinkTuple() != 0 ){
-        Map<String, Link> links = new HashMap<>();
-        for( LinkTuple t : responseObject.getLinkTuples() )
-        links.put(t.getKey(), LinkObject.composeLink(t.getLinkObject()));
-        response.setLinks(links);
-        }
-
-        return response;
-        }
   /**
    * @aspect Parser
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:476
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:449
    */
   public static ResponseOb parseResponse(Response response, OAIContext context, Map<Object, ASTNode> map) throws DecodeException {
         ResponseObject responseObject = new ResponseObject();
@@ -166,6 +134,14 @@ public abstract class ResponseOb extends ASTNode<ASTNode> implements Cloneable {
    * @declaredat ASTNode:58
    */
   public abstract ResponseOb treeCopy();
+  /**
+   * @attribute syn
+   * @aspect Composer
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:520
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="Composer", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:520")
+  public abstract Response composeResponse(ResponseOb responseOb, Map<Object, ASTNode> map);
   /** @apilevel internal */
   public ASTNode rewriteTo() {
     return super.rewriteTo();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ResponseObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ResponseObject.java
index c6bbc62b5210ec5b0f69819433a0fc4df4b94861..85cf50d73897b1ff62b888422a78470a1110c072 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ResponseObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ResponseObject.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:78
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:79
  * @astdecl ResponseObject : ResponseOb ::= <Description:String> HeaderTuple* ContentTuple* LinkTuple* Extension*;
  * @production ResponseObject : {@link ResponseOb} ::= <span class="component">&lt;Description:String&gt;</span> <span class="component">{@link HeaderTuple}*</span> <span class="component">{@link ContentTuple}*</span> <span class="component">{@link LinkTuple}*</span> <span class="component">{@link Extension}*</span>;
 
@@ -625,6 +625,55 @@ public class ResponseObject extends ResponseOb implements Cloneable {
   public JastAddList<Extension> getExtensionsNoTransform() {
     return getExtensionListNoTransform();
   }
+/** @apilevel internal */
+protected java.util.Set composeResponse_ResponseOb_Map_Object__ASTNode__visited;
+  /**
+   * @attribute syn
+   * @aspect Composer
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:520
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="Composer", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:520")
+  public Response composeResponse(ResponseOb responseOb, Map<Object, ASTNode> map) {
+    java.util.List _parameters = new java.util.ArrayList(2);
+    _parameters.add(responseOb);
+    _parameters.add(map);
+    if (composeResponse_ResponseOb_Map_Object__ASTNode__visited == null) composeResponse_ResponseOb_Map_Object__ASTNode__visited = new java.util.HashSet(4);
+    if (composeResponse_ResponseOb_Map_Object__ASTNode__visited.contains(_parameters)) {
+      throw new RuntimeException("Circular definition of attribute ResponseOb.composeResponse(ResponseOb,Map_Object__ASTNode_).");
+    }
+    composeResponse_ResponseOb_Map_Object__ASTNode__visited.add(_parameters);
+    try {
+            Response response = new Response();
+            ResponseObject r = (ResponseObject) responseOb;
+    
+            if( !r.getDescription().isEmpty() )
+            response.setDescription(r.getDescription());
+            if( r.getNumHeaderTuple() != 0 ){
+            Map<String, Header> headers = new HashMap<>();
+            for( HeaderTuple t : r.getHeaderTuples() )
+            headers.put(t.getKey(), t.getHeaderOb().composeHeader(t.getHeaderOb(), map));
+            response.setHeaders(headers);
+            }
+            if( r.getNumContentTuple() != 0 ){
+            Map<String, MediaType> contents = new HashMap<>();
+            for( ContentTuple t : r.getContentTuples() )
+            contents.put(t.getKey(), MediaTypeObject.composeMediaType(t.getMediaTypeObject(), map));
+            response.setContentMediaTypes(contents);
+            }
+            if( r.getNumLinkTuple() != 0 ){
+            Map<String, Link> links = new HashMap<>();
+            for( LinkTuple t : r.getLinkTuples() )
+            links.put(t.getKey(), t.getLinkOb().composeLink(t.getLinkOb(), map));
+            response.setLinks(links);
+            }
+    
+            return response;
+            }
+    finally {
+      composeResponse_ResponseOb_Map_Object__ASTNode__visited.remove(_parameters);
+    }
+  }
   /** @apilevel internal */
   public ASTNode rewriteTo() {
     return super.rewriteTo();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ResponseReference.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ResponseReference.java
index 8596d1c71871a14fdb127ee28821c22342572d77..ce89ba14e605c4f522d88a3adcf7b88b26143880 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ResponseReference.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ResponseReference.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:77
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:78
  * @astdecl ResponseReference : ResponseOb ::= <Ref:String> <ResponseOb:ResponseOb>;
  * @production ResponseReference : {@link ResponseOb} ::= <span class="component">&lt;Ref:String&gt;</span> <span class="component">&lt;ResponseOb:ResponseOb&gt;</span>;
 
@@ -197,6 +197,37 @@ public class ResponseReference extends ResponseOb implements Cloneable {
   public ResponseOb getResponseOb() {
     return tokenResponseOb_ResponseOb;
   }
+/** @apilevel internal */
+protected java.util.Set composeResponse_ResponseOb_Map_Object__ASTNode__visited;
+  /**
+   * @attribute syn
+   * @aspect Composer
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:520
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="Composer", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:520")
+  public Response composeResponse(ResponseOb responseOb, Map<Object, ASTNode> map) {
+    java.util.List _parameters = new java.util.ArrayList(2);
+    _parameters.add(responseOb);
+    _parameters.add(map);
+    if (composeResponse_ResponseOb_Map_Object__ASTNode__visited == null) composeResponse_ResponseOb_Map_Object__ASTNode__visited = new java.util.HashSet(4);
+    if (composeResponse_ResponseOb_Map_Object__ASTNode__visited.contains(_parameters)) {
+      throw new RuntimeException("Circular definition of attribute ResponseOb.composeResponse(ResponseOb,Map_Object__ASTNode_).");
+    }
+    composeResponse_ResponseOb_Map_Object__ASTNode__visited.add(_parameters);
+    try {
+            Response response = new Response();
+            ResponseReference r = (ResponseReference) responseOb;
+    
+            if( !r.getRef().isEmpty() )
+            response.setRef(r.getRef());
+    
+            return response;
+            }
+    finally {
+      composeResponse_ResponseOb_Map_Object__ASTNode__visited.remove(_parameters);
+    }
+  }
   /** @apilevel internal */
   public ASTNode rewriteTo() {
     return super.rewriteTo();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ResponseTuple.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ResponseTuple.java
index 2fa0f990704fd486fe720a389ff29ce917befe5e..0cb216ff8fa7c71ecfb0f919f8f41d0edef1a671 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ResponseTuple.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ResponseTuple.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,7 +16,6 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
  * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:24
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/SchemaOb.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/SchemaOb.java
index 41389456bd750657ffdce2ff9eec9a42b44cf3ee..030f2995be634d75ca5e6ad3020eade93dd2ee1d 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/SchemaOb.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/SchemaOb.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,28 +16,17 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:105
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:106
  * @astdecl SchemaOb : ASTNode;
  * @production SchemaOb : {@link ASTNode};
 
  */
 public abstract class SchemaOb extends ASTNode<ASTNode> implements Cloneable {
-  /**
-   * @aspect Composer
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jadd:616
-   */
-  public static org.openapi4j.parser.model.v3.Schema composeSchema (SchemaOb schemaOb, Map<Object, ASTNode> map){
-        org.openapi4j.parser.model.v3.Schema schema = new org.openapi4j.parser.model.v3.Schema();
-
-
-        return schema;
-        }
   /**
    * @aspect Parser
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:653
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:626
    */
   public static SchemaOb parseSchema (org.openapi4j.parser.model.v3.Schema schema, OAIContext context, Map<Object, ASTNode> map) throws DecodeException {
         SchemaObject schemaObject = new SchemaObject();
@@ -48,7 +38,7 @@ public abstract class SchemaOb extends ASTNode<ASTNode> implements Cloneable {
         return s;
         } else {
         if( schema.getAdditionalProperties() != null )
-        schemaObject.setAdditionalProperties(parseSchema(schema.getAdditionalProperties(), context, map));
+        schemaObject.setAdditionalProperties(new AdditionalProperties(parseSchema(schema.getAdditionalProperties(), context, map)));
         if( schema.getAdditionalProperties() == null && schema.getAdditionalPropertiesAllowed() != null )
         schemaObject.setAdditionalPropertiesAllowed(schema.getAdditionalPropertiesAllowed());
         if( schema.getDefault() != null )
@@ -160,118 +150,6 @@ public abstract class SchemaOb extends ASTNode<ASTNode> implements Cloneable {
         }
         }
 
-        if( schema.getAdditionalProperties() != null )
-        schemaObject.setAdditionalProperties(parseSchema(schema.getAdditionalProperties(), context, map));
-        if( schema.getAdditionalProperties() == null && schema.getAdditionalPropertiesAllowed() != null )
-        schemaObject.setAdditionalPropertiesAllowed(schema.getAdditionalPropertiesAllowed());
-        if( schema.getDefault() != null )
-        schemaObject.setDefaultValue(schema.getDefault());
-        if( schema.getDescription() != null )
-        schemaObject.setDescription(schema.getDescription());
-        if( schema.getDeprecated() != null )
-        schemaObject.setDeprecatedBoolean(schema.getDeprecated());
-        if( schema.getDiscriminator() != null )
-        schemaObject.setDiscriminatorObject(DiscriminatorObject.parseDiscriminator(schema.getDiscriminator(), map));
-        if( schema.getEnums() != null ){
-        for( Object o : schema.getEnums() ){
-        EnumObj enumObj = new EnumObj();
-        enumObj.setEnumOb(o);
-        schemaObject.addEnumObj(enumObj);
-        }
-        }
-        if( schema.getExample() != null )
-        schemaObject.setExample(schema.getExample());
-        if( schema.getExclusiveMaximum() != null )
-        schemaObject.setExclusiveMaximum(schema.getExclusiveMaximum());
-        if( schema.getExclusiveMinimum() != null )
-        schemaObject.setExclusiveMinimum(schema.getExclusiveMinimum());
-        if( schema.getExternalDocs() != null )
-        schemaObject.setExternalDocObject(ExternalDocObject.parseExternalDocs(schema.getExternalDocs(), map));
-        if( schema.getFormat() != null )
-        schemaObject.setFormat(schema.getFormat());
-        if( schema.getItemsSchema() != null ){
-        ItemsSchema itemsSchema = new ItemsSchema();
-        itemsSchema.setSchemaOb(parseSchema(schema.getItemsSchema(), context, map));
-        schemaObject.setItemsSchema(itemsSchema);
-        }
-        if( schema.getMaximum() != null )
-        schemaObject.setMaximum(schema.getMaximum());
-        if( schema.getMinimum() != null )
-        schemaObject.setMinimum(schema.getMinimum());
-        if( schema.getMaxItems() != null )
-        schemaObject.setMaxItems(schema.getMaxItems());
-        if( schema.getMinItems() != null )
-        schemaObject.setMinItems(schema.getMinItems());
-        if( schema.getMaxLength() != null )
-        schemaObject.setMaxLength(schema.getMaxLength());
-        if( schema.getMinLength() != null )
-        schemaObject.setMinLength(schema.getMinLength());
-        if( schema.getMaxProperties() != null )
-        schemaObject.setMaxProperties(schema.getMaxProperties());
-        if( schema.getMinProperties() != null )
-        schemaObject.setMinProperties(schema.getMinProperties());
-        if( schema.getMultipleOf() != null )
-        schemaObject.setMultipleOf(schema.getMultipleOf());
-        if( schema.getNotSchema() != null ){
-        NotSchema notSchema = new NotSchema();
-        notSchema.setSchemaOb(parseSchema(schema.getNotSchema(), context, map));
-        schemaObject.setNotSchema(notSchema);
-        }
-        if( schema.getNullable() != null )
-        schemaObject.setNullable(schema.getNullable());
-        if( schema.getPattern() != null )
-        schemaObject.setPattern(schema.getPattern());
-        if( schema.getProperties() != null  ){
-        for( String key : schema.getProperties().keySet() ){
-        PropertyItem propertyItem = new PropertyItem();
-        schemaObject.addPropertyItem(new PropertyItem(key, parseSchema(schema.getProperty(key), context, map)));
-        }
-        }
-        if( schema.getRequiredFields() != null ){
-        for( String s : schema.getRequiredFields() ){
-        RequiredField requiredField = new RequiredField();
-        requiredField.setValue(s);
-        schemaObject.addRequiredField(requiredField);
-        }
-        }
-        if( schema.getAllOfSchemas() != null ){
-        for(org.openapi4j.parser.model.v3.Schema schemaItem : schema.getAllOfSchemas()){
-        AllOfSchema allOfSchema = new AllOfSchema();
-        allOfSchema.setSchemaOb(parseSchema(schemaItem, context, map));
-        schemaObject.addAllOfSchema(allOfSchema);
-        }
-        }
-        if( schema.getAnyOfSchemas() != null ){
-        for(org.openapi4j.parser.model.v3.Schema schemaItem : schema.getAnyOfSchemas()){
-        AnyOfSchema anyOfSchema = new AnyOfSchema();
-        anyOfSchema.setSchemaOb(parseSchema(schemaItem, context, map));
-        schemaObject.addAnyOfSchema(anyOfSchema);
-        }
-        }
-        if( schema.getOneOfSchemas() != null ){
-        for(org.openapi4j.parser.model.v3.Schema schemaItem : schema.getOneOfSchemas()){
-        OneOfSchema oneOfSchema = new OneOfSchema();
-        oneOfSchema.setSchemaOb(parseSchema(schemaItem, context, map));
-        schemaObject.addOneOfSchema(oneOfSchema);
-        }
-        }
-        if( schema.getReadOnly() != null )
-        schemaObject.setReadOnly(schema.getReadOnly());
-        if( schema.getWriteOnly() != null )
-        schemaObject.setWriteOnly(schema.getWriteOnly());
-        if( schema.getType() != null )
-        schemaObject.setType(schema.getType());
-        if( schema.getTitle() != null )
-        schemaObject.setTitle(schema.getTitle());
-        if( schema.getUniqueItems() != null )
-        schemaObject.setUniqueItems(schema.getUniqueItems());
-        if( schema.getXml() != null )
-        schemaObject.setXmlObject(XmlObject.parseXml(schema.getXml(), map));
-        if( schema.getExtensions() != null ){
-        for( String key : schema.getExtensions().keySet() )
-        schemaObject.addExtension(new Extension(key, schema.getExtensions().get(key)));
-        }
-
         map.put(schema, schemaObject);
         return schemaObject;
         }
@@ -349,6 +227,22 @@ public abstract class SchemaOb extends ASTNode<ASTNode> implements Cloneable {
    * @declaredat ASTNode:58
    */
   public abstract SchemaOb treeCopy();
+  /**
+   * @attribute syn
+   * @aspect Composer
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:701
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="Composer", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:701")
+  public abstract org.openapi4j.parser.model.v3.Schema composeSchema(SchemaOb schemaOb, Map<Object, ASTNode> map);
+  /**
+   * @attribute syn
+   * @aspect ReferenceGet
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\ReferenceGet.jrag:12
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="ReferenceGet", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\ReferenceGet.jrag:12")
+  public abstract SchemaObject schemaObject();
   /** @apilevel internal */
   public ASTNode rewriteTo() {
     return super.rewriteTo();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/SchemaObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/SchemaObject.java
index 3fdfc999390299fe84adca77c924b76472524471..a9e89221f611aaf8d8bc6b72b1b84432ca717a5c 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/SchemaObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/SchemaObject.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,12 +16,11 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:107
- * @astdecl SchemaObject : SchemaOb ::= <AdditionalProperties:SchemaOb> <AdditionalPropertiesAllowed:Boolean> <DefaultValue:Object> <Description:String> <DeprecatedBoolean:Boolean> [DiscriminatorObject] EnumObj* <Example:Object> <ExclusiveMaximum:Boolean> <ExclusiveMinimum:Boolean> [ExternalDocObject] <Format:String> [ItemsSchema] <Maximum:Number> <Minimum:Number> <MaxItems:Integer> <MinItems:Integer> <MaxLength:Integer> <MinLength:Integer> <MaxProperties:Integer> <MinProperties:Integer> <MultipleOf:Number> [NotSchema] <Nullable:Boolean> <Pattern:String> PropertyItem* RequiredField* AllOfSchema* AnyOfSchema* OneOfSchema* <ReadOnly:Boolean> <WriteOnly:Boolean> <Type:String> <Title:String> <UniqueItems:Boolean> [XmlObject] Extension*;
- * @production SchemaObject : {@link SchemaOb} ::= <span class="component">&lt;AdditionalProperties:SchemaOb&gt;</span> <span class="component">&lt;AdditionalPropertiesAllowed:Boolean&gt;</span> <span class="component">&lt;DefaultValue:Object&gt;</span> <span class="component">&lt;Description:String&gt;</span> <span class="component">&lt;DeprecatedBoolean:Boolean&gt;</span> <span class="component">[{@link DiscriminatorObject}]</span> <span class="component">{@link EnumObj}*</span> <span class="component">&lt;Example:Object&gt;</span> <span class="component">&lt;ExclusiveMaximum:Boolean&gt;</span> <span class="component">&lt;ExclusiveMinimum:Boolean&gt;</span> <span class="component">[{@link ExternalDocObject}]</span> <span class="component">&lt;Format:String&gt;</span> <span class="component">[{@link ItemsSchema}]</span> <span class="component">&lt;Maximum:Number&gt;</span> <span class="component">&lt;Minimum:Number&gt;</span> <span class="component">&lt;MaxItems:Integer&gt;</span> <span class="component">&lt;MinItems:Integer&gt;</span> <span class="component">&lt;MaxLength:Integer&gt;</span> <span class="component">&lt;MinLength:Integer&gt;</span> <span class="component">&lt;MaxProperties:Integer&gt;</span> <span class="component">&lt;MinProperties:Integer&gt;</span> <span class="component">&lt;MultipleOf:Number&gt;</span> <span class="component">[{@link NotSchema}]</span> <span class="component">&lt;Nullable:Boolean&gt;</span> <span class="component">&lt;Pattern:String&gt;</span> <span class="component">{@link PropertyItem}*</span> <span class="component">{@link RequiredField}*</span> <span class="component">{@link AllOfSchema}*</span> <span class="component">{@link AnyOfSchema}*</span> <span class="component">{@link OneOfSchema}*</span> <span class="component">&lt;ReadOnly:Boolean&gt;</span> <span class="component">&lt;WriteOnly:Boolean&gt;</span> <span class="component">&lt;Type:String&gt;</span> <span class="component">&lt;Title:String&gt;</span> <span class="component">&lt;UniqueItems:Boolean&gt;</span> <span class="component">[{@link XmlObject}]</span> <span class="component">{@link Extension}*</span>;
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:108
+ * @astdecl SchemaObject : SchemaOb ::= [AdditionalProperties] <AdditionalPropertiesAllowed:Boolean> <DefaultValue:Object> <Description:String> <DeprecatedBoolean:Boolean> [DiscriminatorObject] EnumObj* <Example:Object> <ExclusiveMaximum:Boolean> <ExclusiveMinimum:Boolean> [ExternalDocObject] <Format:String> [ItemsSchema] <Maximum:Number> <Minimum:Number> <MaxItems:Integer> <MinItems:Integer> <MaxLength:Integer> <MinLength:Integer> <MaxProperties:Integer> <MinProperties:Integer> <MultipleOf:Number> [NotSchema] <Nullable:Boolean> <Pattern:String> PropertyItem* RequiredField* AllOfSchema* AnyOfSchema* OneOfSchema* <ReadOnly:Boolean> <WriteOnly:Boolean> <Type:String> <Title:String> <UniqueItems:Boolean> [XmlObject] Extension*;
+ * @production SchemaObject : {@link SchemaOb} ::= <span class="component">[{@link AdditionalProperties}]</span> <span class="component">&lt;AdditionalPropertiesAllowed:Boolean&gt;</span> <span class="component">&lt;DefaultValue:Object&gt;</span> <span class="component">&lt;Description:String&gt;</span> <span class="component">&lt;DeprecatedBoolean:Boolean&gt;</span> <span class="component">[{@link DiscriminatorObject}]</span> <span class="component">{@link EnumObj}*</span> <span class="component">&lt;Example:Object&gt;</span> <span class="component">&lt;ExclusiveMaximum:Boolean&gt;</span> <span class="component">&lt;ExclusiveMinimum:Boolean&gt;</span> <span class="component">[{@link ExternalDocObject}]</span> <span class="component">&lt;Format:String&gt;</span> <span class="component">[{@link ItemsSchema}]</span> <span class="component">&lt;Maximum:Number&gt;</span> <span class="component">&lt;Minimum:Number&gt;</span> <span class="component">&lt;MaxItems:Integer&gt;</span> <span class="component">&lt;MinItems:Integer&gt;</span> <span class="component">&lt;MaxLength:Integer&gt;</span> <span class="component">&lt;MinLength:Integer&gt;</span> <span class="component">&lt;MaxProperties:Integer&gt;</span> <span class="component">&lt;MinProperties:Integer&gt;</span> <span class="component">&lt;MultipleOf:Number&gt;</span> <span class="component">[{@link NotSchema}]</span> <span class="component">&lt;Nullable:Boolean&gt;</span> <span class="component">&lt;Pattern:String&gt;</span> <span class="component">{@link PropertyItem}*</span> <span class="component">{@link RequiredField}*</span> <span class="component">{@link AllOfSchema}*</span> <span class="component">{@link AnyOfSchema}*</span> <span class="component">{@link OneOfSchema}*</span> <span class="component">&lt;ReadOnly:Boolean&gt;</span> <span class="component">&lt;WriteOnly:Boolean&gt;</span> <span class="component">&lt;Type:String&gt;</span> <span class="component">&lt;Title:String&gt;</span> <span class="component">&lt;UniqueItems:Boolean&gt;</span> <span class="component">[{@link XmlObject}]</span> <span class="component">{@link Extension}*</span>;
 
  */
 public class SchemaObject extends SchemaOb implements Cloneable {
@@ -38,42 +38,43 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    * @declaredat ASTNode:10
    */
   public void init$Children() {
-    children = new ASTNode[12];
+    children = new ASTNode[13];
     setChild(new Opt(), 0);
-    setChild(new JastAddList(), 1);
-    setChild(new Opt(), 2);
+    setChild(new Opt(), 1);
+    setChild(new JastAddList(), 2);
     setChild(new Opt(), 3);
     setChild(new Opt(), 4);
-    setChild(new JastAddList(), 5);
+    setChild(new Opt(), 5);
     setChild(new JastAddList(), 6);
     setChild(new JastAddList(), 7);
     setChild(new JastAddList(), 8);
     setChild(new JastAddList(), 9);
-    setChild(new Opt(), 10);
-    setChild(new JastAddList(), 11);
+    setChild(new JastAddList(), 10);
+    setChild(new Opt(), 11);
+    setChild(new JastAddList(), 12);
   }
   /**
-   * @declaredat ASTNode:25
+   * @declaredat ASTNode:26
    */
   @ASTNodeAnnotation.Constructor(
     name = {"AdditionalProperties", "AdditionalPropertiesAllowed", "DefaultValue", "Description", "DeprecatedBoolean", "DiscriminatorObject", "EnumObj", "Example", "ExclusiveMaximum", "ExclusiveMinimum", "ExternalDocObject", "Format", "ItemsSchema", "Maximum", "Minimum", "MaxItems", "MinItems", "MaxLength", "MinLength", "MaxProperties", "MinProperties", "MultipleOf", "NotSchema", "Nullable", "Pattern", "PropertyItem", "RequiredField", "AllOfSchema", "AnyOfSchema", "OneOfSchema", "ReadOnly", "WriteOnly", "Type", "Title", "UniqueItems", "XmlObject", "Extension"},
-    type = {"SchemaOb", "Boolean", "Object", "String", "Boolean", "Opt<DiscriminatorObject>", "JastAddList<EnumObj>", "Object", "Boolean", "Boolean", "Opt<ExternalDocObject>", "String", "Opt<ItemsSchema>", "Number", "Number", "Integer", "Integer", "Integer", "Integer", "Integer", "Integer", "Number", "Opt<NotSchema>", "Boolean", "String", "JastAddList<PropertyItem>", "JastAddList<RequiredField>", "JastAddList<AllOfSchema>", "JastAddList<AnyOfSchema>", "JastAddList<OneOfSchema>", "Boolean", "Boolean", "String", "String", "Boolean", "Opt<XmlObject>", "JastAddList<Extension>"},
-    kind = {"Token", "Token", "Token", "Token", "Token", "Opt", "List", "Token", "Token", "Token", "Opt", "Token", "Opt", "Token", "Token", "Token", "Token", "Token", "Token", "Token", "Token", "Token", "Opt", "Token", "Token", "List", "List", "List", "List", "List", "Token", "Token", "Token", "Token", "Token", "Opt", "List"}
+    type = {"Opt<AdditionalProperties>", "Boolean", "Object", "String", "Boolean", "Opt<DiscriminatorObject>", "JastAddList<EnumObj>", "Object", "Boolean", "Boolean", "Opt<ExternalDocObject>", "String", "Opt<ItemsSchema>", "Number", "Number", "Integer", "Integer", "Integer", "Integer", "Integer", "Integer", "Number", "Opt<NotSchema>", "Boolean", "String", "JastAddList<PropertyItem>", "JastAddList<RequiredField>", "JastAddList<AllOfSchema>", "JastAddList<AnyOfSchema>", "JastAddList<OneOfSchema>", "Boolean", "Boolean", "String", "String", "Boolean", "Opt<XmlObject>", "JastAddList<Extension>"},
+    kind = {"Opt", "Token", "Token", "Token", "Token", "Opt", "List", "Token", "Token", "Token", "Opt", "Token", "Opt", "Token", "Token", "Token", "Token", "Token", "Token", "Token", "Token", "Token", "Opt", "Token", "Token", "List", "List", "List", "List", "List", "Token", "Token", "Token", "Token", "Token", "Opt", "List"}
   )
-  public SchemaObject(SchemaOb p0, Boolean p1, Object p2, String p3, Boolean p4, Opt<DiscriminatorObject> p5, JastAddList<EnumObj> p6, Object p7, Boolean p8, Boolean p9, Opt<ExternalDocObject> p10, String p11, Opt<ItemsSchema> p12, Number p13, Number p14, Integer p15, Integer p16, Integer p17, Integer p18, Integer p19, Integer p20, Number p21, Opt<NotSchema> p22, Boolean p23, String p24, JastAddList<PropertyItem> p25, JastAddList<RequiredField> p26, JastAddList<AllOfSchema> p27, JastAddList<AnyOfSchema> p28, JastAddList<OneOfSchema> p29, Boolean p30, Boolean p31, String p32, String p33, Boolean p34, Opt<XmlObject> p35, JastAddList<Extension> p36) {
-    setAdditionalProperties(p0);
+  public SchemaObject(Opt<AdditionalProperties> p0, Boolean p1, Object p2, String p3, Boolean p4, Opt<DiscriminatorObject> p5, JastAddList<EnumObj> p6, Object p7, Boolean p8, Boolean p9, Opt<ExternalDocObject> p10, String p11, Opt<ItemsSchema> p12, Number p13, Number p14, Integer p15, Integer p16, Integer p17, Integer p18, Integer p19, Integer p20, Number p21, Opt<NotSchema> p22, Boolean p23, String p24, JastAddList<PropertyItem> p25, JastAddList<RequiredField> p26, JastAddList<AllOfSchema> p27, JastAddList<AnyOfSchema> p28, JastAddList<OneOfSchema> p29, Boolean p30, Boolean p31, String p32, String p33, Boolean p34, Opt<XmlObject> p35, JastAddList<Extension> p36) {
+    setChild(p0, 0);
     setAdditionalPropertiesAllowed(p1);
     setDefaultValue(p2);
     setDescription(p3);
     setDeprecatedBoolean(p4);
-    setChild(p5, 0);
-    setChild(p6, 1);
+    setChild(p5, 1);
+    setChild(p6, 2);
     setExample(p7);
     setExclusiveMaximum(p8);
     setExclusiveMinimum(p9);
-    setChild(p10, 2);
+    setChild(p10, 3);
     setFormat(p11);
-    setChild(p12, 3);
+    setChild(p12, 4);
     setMaximum(p13);
     setMinimum(p14);
     setMaxItems(p15);
@@ -83,56 +84,56 @@ public class SchemaObject extends SchemaOb implements Cloneable {
     setMaxProperties(p19);
     setMinProperties(p20);
     setMultipleOf(p21);
-    setChild(p22, 4);
+    setChild(p22, 5);
     setNullable(p23);
     setPattern(p24);
-    setChild(p25, 5);
-    setChild(p26, 6);
-    setChild(p27, 7);
-    setChild(p28, 8);
-    setChild(p29, 9);
+    setChild(p25, 6);
+    setChild(p26, 7);
+    setChild(p27, 8);
+    setChild(p28, 9);
+    setChild(p29, 10);
     setReadOnly(p30);
     setWriteOnly(p31);
     setType(p32);
     setTitle(p33);
     setUniqueItems(p34);
-    setChild(p35, 10);
-    setChild(p36, 11);
+    setChild(p35, 11);
+    setChild(p36, 12);
   }
   /** @apilevel low-level 
-   * @declaredat ASTNode:70
+   * @declaredat ASTNode:71
    */
   protected int numChildren() {
-    return 12;
+    return 13;
   }
   /**
    * @apilevel internal
-   * @declaredat ASTNode:76
+   * @declaredat ASTNode:77
    */
   public boolean mayHaveRewrite() {
     return false;
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:80
+   * @declaredat ASTNode:81
    */
   public void flushAttrCache() {
     super.flushAttrCache();
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:84
+   * @declaredat ASTNode:85
    */
   public void flushCollectionCache() {
     super.flushCollectionCache();
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:88
+   * @declaredat ASTNode:89
    */
   public SchemaObject clone() throws CloneNotSupportedException {
     SchemaObject node = (SchemaObject) super.clone();
     return node;
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:93
+   * @declaredat ASTNode:94
    */
   public SchemaObject copy() {
     try {
@@ -152,7 +153,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    * @return dangling copy of the subtree at this node
    * @apilevel low-level
    * @deprecated Please use treeCopy or treeCopyNoTransform instead
-   * @declaredat ASTNode:112
+   * @declaredat ASTNode:113
    */
   @Deprecated
   public SchemaObject fullCopy() {
@@ -163,7 +164,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    * The copy is dangling, i.e. has no parent.
    * @return dangling copy of the subtree at this node
    * @apilevel low-level
-   * @declaredat ASTNode:122
+   * @declaredat ASTNode:123
    */
   public SchemaObject treeCopyNoTransform() {
     SchemaObject tree = (SchemaObject) copy();
@@ -184,7 +185,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    * The copy is dangling, i.e. has no parent.
    * @return dangling copy of the subtree at this node
    * @apilevel low-level
-   * @declaredat ASTNode:142
+   * @declaredat ASTNode:143
    */
   public SchemaObject treeCopy() {
     SchemaObject tree = (SchemaObject) copy();
@@ -200,30 +201,61 @@ public class SchemaObject extends SchemaOb implements Cloneable {
     return tree;
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:156
+   * @declaredat ASTNode:157
    */
   protected boolean is$Equal(ASTNode node) {
-    return super.is$Equal(node) && (tokenSchemaOb_AdditionalProperties == ((SchemaObject) node).tokenSchemaOb_AdditionalProperties) && (tokenBoolean_AdditionalPropertiesAllowed == ((SchemaObject) node).tokenBoolean_AdditionalPropertiesAllowed) && (tokenObject_DefaultValue == ((SchemaObject) node).tokenObject_DefaultValue) && (tokenString_Description == ((SchemaObject) node).tokenString_Description) && (tokenBoolean_DeprecatedBoolean == ((SchemaObject) node).tokenBoolean_DeprecatedBoolean) && (tokenObject_Example == ((SchemaObject) node).tokenObject_Example) && (tokenBoolean_ExclusiveMaximum == ((SchemaObject) node).tokenBoolean_ExclusiveMaximum) && (tokenBoolean_ExclusiveMinimum == ((SchemaObject) node).tokenBoolean_ExclusiveMinimum) && (tokenString_Format == ((SchemaObject) node).tokenString_Format) && (tokenNumber_Maximum == ((SchemaObject) node).tokenNumber_Maximum) && (tokenNumber_Minimum == ((SchemaObject) node).tokenNumber_Minimum) && (tokenInteger_MaxItems == ((SchemaObject) node).tokenInteger_MaxItems) && (tokenInteger_MinItems == ((SchemaObject) node).tokenInteger_MinItems) && (tokenInteger_MaxLength == ((SchemaObject) node).tokenInteger_MaxLength) && (tokenInteger_MinLength == ((SchemaObject) node).tokenInteger_MinLength) && (tokenInteger_MaxProperties == ((SchemaObject) node).tokenInteger_MaxProperties) && (tokenInteger_MinProperties == ((SchemaObject) node).tokenInteger_MinProperties) && (tokenNumber_MultipleOf == ((SchemaObject) node).tokenNumber_MultipleOf) && (tokenBoolean_Nullable == ((SchemaObject) node).tokenBoolean_Nullable) && (tokenString_Pattern == ((SchemaObject) node).tokenString_Pattern) && (tokenBoolean_ReadOnly == ((SchemaObject) node).tokenBoolean_ReadOnly) && (tokenBoolean_WriteOnly == ((SchemaObject) node).tokenBoolean_WriteOnly) && (tokenString_Type == ((SchemaObject) node).tokenString_Type) && (tokenString_Title == ((SchemaObject) node).tokenString_Title) && (tokenBoolean_UniqueItems == ((SchemaObject) node).tokenBoolean_UniqueItems);    
+    return super.is$Equal(node) && (tokenBoolean_AdditionalPropertiesAllowed == ((SchemaObject) node).tokenBoolean_AdditionalPropertiesAllowed) && (tokenObject_DefaultValue == ((SchemaObject) node).tokenObject_DefaultValue) && (tokenString_Description == ((SchemaObject) node).tokenString_Description) && (tokenBoolean_DeprecatedBoolean == ((SchemaObject) node).tokenBoolean_DeprecatedBoolean) && (tokenObject_Example == ((SchemaObject) node).tokenObject_Example) && (tokenBoolean_ExclusiveMaximum == ((SchemaObject) node).tokenBoolean_ExclusiveMaximum) && (tokenBoolean_ExclusiveMinimum == ((SchemaObject) node).tokenBoolean_ExclusiveMinimum) && (tokenString_Format == ((SchemaObject) node).tokenString_Format) && (tokenNumber_Maximum == ((SchemaObject) node).tokenNumber_Maximum) && (tokenNumber_Minimum == ((SchemaObject) node).tokenNumber_Minimum) && (tokenInteger_MaxItems == ((SchemaObject) node).tokenInteger_MaxItems) && (tokenInteger_MinItems == ((SchemaObject) node).tokenInteger_MinItems) && (tokenInteger_MaxLength == ((SchemaObject) node).tokenInteger_MaxLength) && (tokenInteger_MinLength == ((SchemaObject) node).tokenInteger_MinLength) && (tokenInteger_MaxProperties == ((SchemaObject) node).tokenInteger_MaxProperties) && (tokenInteger_MinProperties == ((SchemaObject) node).tokenInteger_MinProperties) && (tokenNumber_MultipleOf == ((SchemaObject) node).tokenNumber_MultipleOf) && (tokenBoolean_Nullable == ((SchemaObject) node).tokenBoolean_Nullable) && (tokenString_Pattern == ((SchemaObject) node).tokenString_Pattern) && (tokenBoolean_ReadOnly == ((SchemaObject) node).tokenBoolean_ReadOnly) && (tokenBoolean_WriteOnly == ((SchemaObject) node).tokenBoolean_WriteOnly) && (tokenString_Type == ((SchemaObject) node).tokenString_Type) && (tokenString_Title == ((SchemaObject) node).tokenString_Title) && (tokenBoolean_UniqueItems == ((SchemaObject) node).tokenBoolean_UniqueItems);    
   }
   /**
-   * Replaces the lexeme AdditionalProperties.
-   * @param value The new value for the lexeme AdditionalProperties.
-   * @apilevel high-level
+   * Replaces the optional node for the AdditionalProperties child. This is the <code>Opt</code>
+   * node containing the child AdditionalProperties, not the actual child!
+   * @param opt The new node to be used as the optional node for the AdditionalProperties child.
+   * @apilevel low-level
    */
-  public void setAdditionalProperties(SchemaOb value) {
-    tokenSchemaOb_AdditionalProperties = value;
+  public void setAdditionalPropertiesOpt(Opt<AdditionalProperties> opt) {
+    setChild(opt, 0);
   }
-  /** @apilevel internal 
+  /**
+   * Replaces the (optional) AdditionalProperties child.
+   * @param node The new node to be used as the AdditionalProperties child.
+   * @apilevel high-level
    */
-  protected SchemaOb tokenSchemaOb_AdditionalProperties;
+  public void setAdditionalProperties(AdditionalProperties node) {
+    getAdditionalPropertiesOpt().setChild(node, 0);
+  }
   /**
-   * Retrieves the value for the lexeme AdditionalProperties.
-   * @return The value for the lexeme AdditionalProperties.
+   * Check whether the optional AdditionalProperties child exists.
+   * @return {@code true} if the optional AdditionalProperties child exists, {@code false} if it does not.
    * @apilevel high-level
    */
-  @ASTNodeAnnotation.Token(name="AdditionalProperties")
-  public SchemaOb getAdditionalProperties() {
-    return tokenSchemaOb_AdditionalProperties;
+  public boolean hasAdditionalProperties() {
+    return getAdditionalPropertiesOpt().getNumChild() != 0;
+  }
+  /**
+   * Retrieves the (optional) AdditionalProperties child.
+   * @return The AdditionalProperties child, if it exists. Returns {@code null} otherwise.
+   * @apilevel low-level
+   */
+  public AdditionalProperties getAdditionalProperties() {
+    return (AdditionalProperties) getAdditionalPropertiesOpt().getChild(0);
+  }
+  /**
+   * Retrieves the optional node for the AdditionalProperties child. This is the <code>Opt</code> node containing the child AdditionalProperties, not the actual child!
+   * @return The optional node for child the AdditionalProperties child.
+   * @apilevel low-level
+   */
+  @ASTNodeAnnotation.OptChild(name="AdditionalProperties")
+  public Opt<AdditionalProperties> getAdditionalPropertiesOpt() {
+    return (Opt<AdditionalProperties>) getChild(0);
+  }
+  /**
+   * Retrieves the optional node for child AdditionalProperties. This is the <code>Opt</code> node containing the child AdditionalProperties, not the actual child!
+   * <p><em>This method does not invoke AST transformations.</em></p>
+   * @return The optional node for child AdditionalProperties.
+   * @apilevel low-level
+   */
+  public Opt<AdditionalProperties> getAdditionalPropertiesOptNoTransform() {
+    return (Opt<AdditionalProperties>) getChildNoTransform(0);
   }
   /**
    * Replaces the lexeme AdditionalPropertiesAllowed.
@@ -312,7 +344,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    * @apilevel low-level
    */
   public void setDiscriminatorObjectOpt(Opt<DiscriminatorObject> opt) {
-    setChild(opt, 0);
+    setChild(opt, 1);
   }
   /**
    * Replaces the (optional) DiscriminatorObject child.
@@ -345,7 +377,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    */
   @ASTNodeAnnotation.OptChild(name="DiscriminatorObject")
   public Opt<DiscriminatorObject> getDiscriminatorObjectOpt() {
-    return (Opt<DiscriminatorObject>) getChild(0);
+    return (Opt<DiscriminatorObject>) getChild(1);
   }
   /**
    * Retrieves the optional node for child DiscriminatorObject. This is the <code>Opt</code> node containing the child DiscriminatorObject, not the actual child!
@@ -354,7 +386,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    * @apilevel low-level
    */
   public Opt<DiscriminatorObject> getDiscriminatorObjectOptNoTransform() {
-    return (Opt<DiscriminatorObject>) getChildNoTransform(0);
+    return (Opt<DiscriminatorObject>) getChildNoTransform(1);
   }
   /**
    * Replaces the EnumObj list.
@@ -362,7 +394,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    * @apilevel high-level
    */
   public void setEnumObjList(JastAddList<EnumObj> list) {
-    setChild(list, 1);
+    setChild(list, 2);
   }
   /**
    * Retrieves the number of children in the EnumObj list.
@@ -430,7 +462,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    */
   @ASTNodeAnnotation.ListChild(name="EnumObj")
   public JastAddList<EnumObj> getEnumObjList() {
-    JastAddList<EnumObj> list = (JastAddList<EnumObj>) getChild(1);
+    JastAddList<EnumObj> list = (JastAddList<EnumObj>) getChild(2);
     return list;
   }
   /**
@@ -440,7 +472,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    * @apilevel low-level
    */
   public JastAddList<EnumObj> getEnumObjListNoTransform() {
-    return (JastAddList<EnumObj>) getChildNoTransform(1);
+    return (JastAddList<EnumObj>) getChildNoTransform(2);
   }
   /**
    * @return the element at index {@code i} in the EnumObj list without
@@ -533,7 +565,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    * @apilevel low-level
    */
   public void setExternalDocObjectOpt(Opt<ExternalDocObject> opt) {
-    setChild(opt, 2);
+    setChild(opt, 3);
   }
   /**
    * Replaces the (optional) ExternalDocObject child.
@@ -566,7 +598,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    */
   @ASTNodeAnnotation.OptChild(name="ExternalDocObject")
   public Opt<ExternalDocObject> getExternalDocObjectOpt() {
-    return (Opt<ExternalDocObject>) getChild(2);
+    return (Opt<ExternalDocObject>) getChild(3);
   }
   /**
    * Retrieves the optional node for child ExternalDocObject. This is the <code>Opt</code> node containing the child ExternalDocObject, not the actual child!
@@ -575,7 +607,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    * @apilevel low-level
    */
   public Opt<ExternalDocObject> getExternalDocObjectOptNoTransform() {
-    return (Opt<ExternalDocObject>) getChildNoTransform(2);
+    return (Opt<ExternalDocObject>) getChildNoTransform(3);
   }
   /**
    * Replaces the lexeme Format.
@@ -604,7 +636,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    * @apilevel low-level
    */
   public void setItemsSchemaOpt(Opt<ItemsSchema> opt) {
-    setChild(opt, 3);
+    setChild(opt, 4);
   }
   /**
    * Replaces the (optional) ItemsSchema child.
@@ -637,7 +669,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    */
   @ASTNodeAnnotation.OptChild(name="ItemsSchema")
   public Opt<ItemsSchema> getItemsSchemaOpt() {
-    return (Opt<ItemsSchema>) getChild(3);
+    return (Opt<ItemsSchema>) getChild(4);
   }
   /**
    * Retrieves the optional node for child ItemsSchema. This is the <code>Opt</code> node containing the child ItemsSchema, not the actual child!
@@ -646,7 +678,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    * @apilevel low-level
    */
   public Opt<ItemsSchema> getItemsSchemaOptNoTransform() {
-    return (Opt<ItemsSchema>) getChildNoTransform(3);
+    return (Opt<ItemsSchema>) getChildNoTransform(4);
   }
   /**
    * Replaces the lexeme Maximum.
@@ -835,7 +867,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    * @apilevel low-level
    */
   public void setNotSchemaOpt(Opt<NotSchema> opt) {
-    setChild(opt, 4);
+    setChild(opt, 5);
   }
   /**
    * Replaces the (optional) NotSchema child.
@@ -868,7 +900,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    */
   @ASTNodeAnnotation.OptChild(name="NotSchema")
   public Opt<NotSchema> getNotSchemaOpt() {
-    return (Opt<NotSchema>) getChild(4);
+    return (Opt<NotSchema>) getChild(5);
   }
   /**
    * Retrieves the optional node for child NotSchema. This is the <code>Opt</code> node containing the child NotSchema, not the actual child!
@@ -877,7 +909,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    * @apilevel low-level
    */
   public Opt<NotSchema> getNotSchemaOptNoTransform() {
-    return (Opt<NotSchema>) getChildNoTransform(4);
+    return (Opt<NotSchema>) getChildNoTransform(5);
   }
   /**
    * Replaces the lexeme Nullable.
@@ -925,7 +957,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    * @apilevel high-level
    */
   public void setPropertyItemList(JastAddList<PropertyItem> list) {
-    setChild(list, 5);
+    setChild(list, 6);
   }
   /**
    * Retrieves the number of children in the PropertyItem list.
@@ -993,7 +1025,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    */
   @ASTNodeAnnotation.ListChild(name="PropertyItem")
   public JastAddList<PropertyItem> getPropertyItemList() {
-    JastAddList<PropertyItem> list = (JastAddList<PropertyItem>) getChild(5);
+    JastAddList<PropertyItem> list = (JastAddList<PropertyItem>) getChild(6);
     return list;
   }
   /**
@@ -1003,7 +1035,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    * @apilevel low-level
    */
   public JastAddList<PropertyItem> getPropertyItemListNoTransform() {
-    return (JastAddList<PropertyItem>) getChildNoTransform(5);
+    return (JastAddList<PropertyItem>) getChildNoTransform(6);
   }
   /**
    * @return the element at index {@code i} in the PropertyItem list without
@@ -1035,7 +1067,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    * @apilevel high-level
    */
   public void setRequiredFieldList(JastAddList<RequiredField> list) {
-    setChild(list, 6);
+    setChild(list, 7);
   }
   /**
    * Retrieves the number of children in the RequiredField list.
@@ -1103,7 +1135,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    */
   @ASTNodeAnnotation.ListChild(name="RequiredField")
   public JastAddList<RequiredField> getRequiredFieldList() {
-    JastAddList<RequiredField> list = (JastAddList<RequiredField>) getChild(6);
+    JastAddList<RequiredField> list = (JastAddList<RequiredField>) getChild(7);
     return list;
   }
   /**
@@ -1113,7 +1145,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    * @apilevel low-level
    */
   public JastAddList<RequiredField> getRequiredFieldListNoTransform() {
-    return (JastAddList<RequiredField>) getChildNoTransform(6);
+    return (JastAddList<RequiredField>) getChildNoTransform(7);
   }
   /**
    * @return the element at index {@code i} in the RequiredField list without
@@ -1145,7 +1177,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    * @apilevel high-level
    */
   public void setAllOfSchemaList(JastAddList<AllOfSchema> list) {
-    setChild(list, 7);
+    setChild(list, 8);
   }
   /**
    * Retrieves the number of children in the AllOfSchema list.
@@ -1213,7 +1245,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    */
   @ASTNodeAnnotation.ListChild(name="AllOfSchema")
   public JastAddList<AllOfSchema> getAllOfSchemaList() {
-    JastAddList<AllOfSchema> list = (JastAddList<AllOfSchema>) getChild(7);
+    JastAddList<AllOfSchema> list = (JastAddList<AllOfSchema>) getChild(8);
     return list;
   }
   /**
@@ -1223,7 +1255,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    * @apilevel low-level
    */
   public JastAddList<AllOfSchema> getAllOfSchemaListNoTransform() {
-    return (JastAddList<AllOfSchema>) getChildNoTransform(7);
+    return (JastAddList<AllOfSchema>) getChildNoTransform(8);
   }
   /**
    * @return the element at index {@code i} in the AllOfSchema list without
@@ -1255,7 +1287,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    * @apilevel high-level
    */
   public void setAnyOfSchemaList(JastAddList<AnyOfSchema> list) {
-    setChild(list, 8);
+    setChild(list, 9);
   }
   /**
    * Retrieves the number of children in the AnyOfSchema list.
@@ -1323,7 +1355,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    */
   @ASTNodeAnnotation.ListChild(name="AnyOfSchema")
   public JastAddList<AnyOfSchema> getAnyOfSchemaList() {
-    JastAddList<AnyOfSchema> list = (JastAddList<AnyOfSchema>) getChild(8);
+    JastAddList<AnyOfSchema> list = (JastAddList<AnyOfSchema>) getChild(9);
     return list;
   }
   /**
@@ -1333,7 +1365,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    * @apilevel low-level
    */
   public JastAddList<AnyOfSchema> getAnyOfSchemaListNoTransform() {
-    return (JastAddList<AnyOfSchema>) getChildNoTransform(8);
+    return (JastAddList<AnyOfSchema>) getChildNoTransform(9);
   }
   /**
    * @return the element at index {@code i} in the AnyOfSchema list without
@@ -1365,7 +1397,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    * @apilevel high-level
    */
   public void setOneOfSchemaList(JastAddList<OneOfSchema> list) {
-    setChild(list, 9);
+    setChild(list, 10);
   }
   /**
    * Retrieves the number of children in the OneOfSchema list.
@@ -1433,7 +1465,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    */
   @ASTNodeAnnotation.ListChild(name="OneOfSchema")
   public JastAddList<OneOfSchema> getOneOfSchemaList() {
-    JastAddList<OneOfSchema> list = (JastAddList<OneOfSchema>) getChild(9);
+    JastAddList<OneOfSchema> list = (JastAddList<OneOfSchema>) getChild(10);
     return list;
   }
   /**
@@ -1443,7 +1475,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    * @apilevel low-level
    */
   public JastAddList<OneOfSchema> getOneOfSchemaListNoTransform() {
-    return (JastAddList<OneOfSchema>) getChildNoTransform(9);
+    return (JastAddList<OneOfSchema>) getChildNoTransform(10);
   }
   /**
    * @return the element at index {@code i} in the OneOfSchema list without
@@ -1576,7 +1608,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    * @apilevel low-level
    */
   public void setXmlObjectOpt(Opt<XmlObject> opt) {
-    setChild(opt, 10);
+    setChild(opt, 11);
   }
   /**
    * Replaces the (optional) XmlObject child.
@@ -1609,7 +1641,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    */
   @ASTNodeAnnotation.OptChild(name="XmlObject")
   public Opt<XmlObject> getXmlObjectOpt() {
-    return (Opt<XmlObject>) getChild(10);
+    return (Opt<XmlObject>) getChild(11);
   }
   /**
    * Retrieves the optional node for child XmlObject. This is the <code>Opt</code> node containing the child XmlObject, not the actual child!
@@ -1618,7 +1650,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    * @apilevel low-level
    */
   public Opt<XmlObject> getXmlObjectOptNoTransform() {
-    return (Opt<XmlObject>) getChildNoTransform(10);
+    return (Opt<XmlObject>) getChildNoTransform(11);
   }
   /**
    * Replaces the Extension list.
@@ -1626,7 +1658,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    * @apilevel high-level
    */
   public void setExtensionList(JastAddList<Extension> list) {
-    setChild(list, 11);
+    setChild(list, 12);
   }
   /**
    * Retrieves the number of children in the Extension list.
@@ -1694,7 +1726,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    */
   @ASTNodeAnnotation.ListChild(name="Extension")
   public JastAddList<Extension> getExtensionList() {
-    JastAddList<Extension> list = (JastAddList<Extension>) getChild(11);
+    JastAddList<Extension> list = (JastAddList<Extension>) getChild(12);
     return list;
   }
   /**
@@ -1704,7 +1736,7 @@ public class SchemaObject extends SchemaOb implements Cloneable {
    * @apilevel low-level
    */
   public JastAddList<Extension> getExtensionListNoTransform() {
-    return (JastAddList<Extension>) getChildNoTransform(11);
+    return (JastAddList<Extension>) getChildNoTransform(12);
   }
   /**
    * @return the element at index {@code i} in the Extension list without
@@ -1730,6 +1762,174 @@ public class SchemaObject extends SchemaOb implements Cloneable {
   public JastAddList<Extension> getExtensionsNoTransform() {
     return getExtensionListNoTransform();
   }
+/** @apilevel internal */
+protected java.util.Set composeSchema_SchemaOb_Map_Object__ASTNode__visited;
+  /**
+   * @attribute syn
+   * @aspect Composer
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:701
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="Composer", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:701")
+  public org.openapi4j.parser.model.v3.Schema composeSchema(SchemaOb schemaOb, Map<Object, ASTNode> map) {
+    java.util.List _parameters = new java.util.ArrayList(2);
+    _parameters.add(schemaOb);
+    _parameters.add(map);
+    if (composeSchema_SchemaOb_Map_Object__ASTNode__visited == null) composeSchema_SchemaOb_Map_Object__ASTNode__visited = new java.util.HashSet(4);
+    if (composeSchema_SchemaOb_Map_Object__ASTNode__visited.contains(_parameters)) {
+      throw new RuntimeException("Circular definition of attribute SchemaOb.composeSchema(SchemaOb,Map_Object__ASTNode_).");
+    }
+    composeSchema_SchemaOb_Map_Object__ASTNode__visited.add(_parameters);
+    try {
+            org.openapi4j.parser.model.v3.Schema schema = new org.openapi4j.parser.model.v3.Schema();
+            SchemaObject s = (SchemaObject) schemaOb;
+    
+            if( s.hasAdditionalProperties() ) {
+            SchemaOb o = s.getAdditionalProperties().getSchemaOb();
+            if ( o instanceof SchemaObject )
+            schema.setAdditionalProperties(((SchemaObject) o).composeSchema(o, map));
+            else
+            schema.setAdditionalProperties(((SchemaReference) o).composeSchema(o, map));
+            }
+            if( s.getAdditionalPropertiesAllowed() != null )
+            schema.setAdditionalPropertiesAllowed(s.getAdditionalPropertiesAllowed());
+            if( s.getDefaultValue() != null )
+            schema.setDefault(s.getDefaultValue());
+            if( !s.getDescription().isEmpty() )
+            schema.setDescription(s.getDescription());
+            if( s.getDeprecatedBoolean() != null )
+            schema.setDeprecated(s.getDeprecatedBoolean());
+            if( s.hasDiscriminatorObject() )
+            schema.setDiscriminator(DiscriminatorObject.composeDiscriminator(s.getDiscriminatorObject(), map));
+            if( s.getNumEnumObj() != 0 ){
+            for( EnumObj e : s.getEnumObjs() )
+            schema.addEnum(e.getEnumOb());
+            }
+            if( s.getExample() != null )
+            schema.setExample(s.getExample());
+            if( s.getExclusiveMaximum() != null )
+            schema.setExclusiveMaximum(s.getExclusiveMaximum());
+            if( s.getExclusiveMinimum() != null )
+            schema.setExclusiveMinimum(s.getExclusiveMinimum());
+            if( s.hasExternalDocObject() )
+            schema.setExternalDocs(ExternalDocObject.composeExternalDocs(s.getExternalDocObject(), map));
+            if( !s.getFormat().isEmpty() )
+            schema.setFormat(s.getFormat());
+            if( s.hasItemsSchema() ) {
+            if (s.getItemsSchema().getSchemaOb() instanceof SchemaObject)
+            schema.setItemsSchema(((SchemaObject) s.getItemsSchema().getSchemaOb()).composeSchema(s.getItemsSchema().getSchemaOb(), map));
+            else
+            schema.setItemsSchema(((SchemaReference) s.getItemsSchema().getSchemaOb()).composeSchema(s.getItemsSchema().getSchemaOb(), map));
+            }
+            if( s.getMaximum() != null )
+            schema.setMaximum(s.getMaximum());
+            if( s.getMinimum() != null )
+            schema.setMinimum(s.getMinimum());
+            if( s.getMaxItems() != null )
+            schema.setMaxItems(s.getMaxItems());
+            if( s.getMinItems() != null )
+            schema.setMinItems(s.getMinItems());
+            if( s.getMaxLength() != null )
+            schema.setMaxLength(s.getMaxLength());
+            if( s.getMinLength() != null )
+            schema.setMinLength(s.getMinLength());
+            if( s.getMaxProperties() != null )
+            schema.setMaxProperties(s.getMaxProperties());
+            if( s.getMinProperties() != null )
+            schema.setMinProperties(s.getMinProperties());
+            if( s.getMultipleOf() != null )
+            schema.setMultipleOf(s.getMultipleOf());
+            if( s.hasNotSchema() ) {
+            if( s.getNotSchema().getSchemaOb() instanceof SchemaObject )
+            schema.setNotSchema(((SchemaObject) s.getNotSchema().getSchemaOb()).composeSchema(s.getNotSchema().getSchemaOb(), map));
+            else
+            schema.setNotSchema(((SchemaReference) s.getNotSchema().getSchemaOb()).composeSchema(s.getNotSchema().getSchemaOb(), map));
+            }
+            if( s.getNullable() != null )
+            schema.setNullable(s.getNullable());
+            if( !s.getPattern().isEmpty() )
+            schema.setPattern(s.getPattern());
+            if( s.getNumPropertyItem() != 0 ){
+            Map<String, org.openapi4j.parser.model.v3.Schema> properties = new HashMap<>();
+            for( PropertyItem p : s.getPropertyItemList() ) {
+            if( p.getSchemaOb() instanceof SchemaObject )
+            properties.put(p.getName(), ((SchemaObject) p.getSchemaOb()).composeSchema(p.getSchemaOb(), map));
+            else
+            properties.put(p.getName(), ((SchemaReference) p.getSchemaOb()).composeSchema(p.getSchemaOb(), map));
+            }
+            schema.setProperties(properties);
+            }
+            if( s.getNumRequiredField() != 0 ){
+            for( RequiredField r : s.getRequiredFields() )
+            schema.addRequiredField(r.getValue());
+            }
+            if( s.getNumAllOfSchema() != 0 ){
+            for( AllOfSchema a : s.getAllOfSchemas() ) {
+            if( a.getSchemaOb() instanceof SchemaObject )
+            schema.addAllOfSchema(((SchemaObject) a.getSchemaOb()).composeSchema(a.getSchemaOb(), map));
+            else
+            schema.addAllOfSchema(((SchemaReference) a.getSchemaOb()).composeSchema(a.getSchemaOb(), map));
+            }
+            }
+            if( s.getNumAnyOfSchema() != 0 ){
+            for( AnyOfSchema a : s.getAnyOfSchemas() ) {
+            if( a.getSchemaOb() instanceof SchemaObject )
+            schema.addAnyOfSchema(((SchemaObject) a.getSchemaOb()).composeSchema(a.getSchemaOb(), map));
+            else
+            schema.addAnyOfSchema(((SchemaReference) a.getSchemaOb()).composeSchema(a.getSchemaOb(), map));
+            }
+            }
+            if( s.getNumOneOfSchema() != 0 ){
+            for( OneOfSchema o : s.getOneOfSchemas() ) {
+            if( o.getSchemaOb() instanceof SchemaObject )
+            schema.addOneOfSchema(((SchemaObject) o.getSchemaOb()).composeSchema(o.getSchemaOb(), map));
+            else
+            schema.addOneOfSchema(((SchemaReference) o.getSchemaOb()).composeSchema(o.getSchemaOb(), map));
+            }
+            }
+            if( s.getReadOnly() != null )
+            schema.setReadOnly(s.getReadOnly());
+            if( s.getWriteOnly() != null )
+            schema.setWriteOnly(s.getWriteOnly());
+            if( !s.getType().isEmpty() )
+            schema.setType(s.getType());
+            if( !s.getTitle().isEmpty() )
+            schema.setTitle(s.getTitle());
+            if( s.getUniqueItems() != null )
+            schema.setUniqueItems(s.getUniqueItems());
+            if( s.hasXmlObject() )
+            schema.setXml(XmlObject.composeXml(s.getXmlObject(), map));
+            if( s.getNumExtension() != 0 ){
+            Map<String, Object> extensionMap = new HashMap<>();
+            for( Extension e : s.getExtensions() )
+            extensionMap.put(e.getKey(), e.getValue());
+            schema.setExtensions(extensionMap);
+            }
+    
+            return schema;
+            }
+    finally {
+      composeSchema_SchemaOb_Map_Object__ASTNode__visited.remove(_parameters);
+    }
+  }
+/** @apilevel internal */
+protected boolean schemaObject_visited = false;
+  /**
+   * @attribute syn
+   * @aspect ReferenceGet
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\ReferenceGet.jrag:13
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="ReferenceGet", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\ReferenceGet.jrag:12")
+  public SchemaObject schemaObject() {
+    if (schemaObject_visited) {
+      throw new RuntimeException("Circular definition of attribute SchemaOb.schemaObject().");
+    }
+    schemaObject_visited = true;
+    SchemaObject schemaObject_value = this;
+    schemaObject_visited = false;
+    return schemaObject_value;
+  }
   /** @apilevel internal */
   public ASTNode rewriteTo() {
     return super.rewriteTo();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/SchemaReference.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/SchemaReference.java
index 083b0d37f494d2cb1b8017b6652ea0af7ba71cc8..c1cf7ef1af6c99fb1b6741b509199a3313deb30b 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/SchemaReference.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/SchemaReference.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:106
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:107
  * @astdecl SchemaReference : SchemaOb ::= <Ref:String> <SchemaOb:SchemaOb>;
  * @production SchemaReference : {@link SchemaOb} ::= <span class="component">&lt;Ref:String&gt;</span> <span class="component">&lt;SchemaOb:SchemaOb&gt;</span>;
 
@@ -197,6 +197,61 @@ public class SchemaReference extends SchemaOb implements Cloneable {
   public SchemaOb getSchemaOb() {
     return tokenSchemaOb_SchemaOb;
   }
+/** @apilevel internal */
+protected java.util.Set composeSchema_SchemaOb_Map_Object__ASTNode__visited;
+  /**
+   * @attribute syn
+   * @aspect Composer
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:701
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="Composer", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:701")
+  public org.openapi4j.parser.model.v3.Schema composeSchema(SchemaOb schemaOb, Map<Object, ASTNode> map) {
+    java.util.List _parameters = new java.util.ArrayList(2);
+    _parameters.add(schemaOb);
+    _parameters.add(map);
+    if (composeSchema_SchemaOb_Map_Object__ASTNode__visited == null) composeSchema_SchemaOb_Map_Object__ASTNode__visited = new java.util.HashSet(4);
+    if (composeSchema_SchemaOb_Map_Object__ASTNode__visited.contains(_parameters)) {
+      throw new RuntimeException("Circular definition of attribute SchemaOb.composeSchema(SchemaOb,Map_Object__ASTNode_).");
+    }
+    composeSchema_SchemaOb_Map_Object__ASTNode__visited.add(_parameters);
+    try {
+            org.openapi4j.parser.model.v3.Schema schema = new org.openapi4j.parser.model.v3.Schema();
+            SchemaReference s = (SchemaReference) schemaOb;
+    
+            if( !s.getRef().isEmpty() )
+            schema.setRef(s.getRef());
+    
+            return schema;
+            }
+    finally {
+      composeSchema_SchemaOb_Map_Object__ASTNode__visited.remove(_parameters);
+    }
+  }
+/** @apilevel internal */
+protected boolean schemaObject_visited = false;
+  /**
+   * @attribute syn
+   * @aspect ReferenceGet
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\ReferenceGet.jrag:12
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="ReferenceGet", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\ReferenceGet.jrag:12")
+  public SchemaObject schemaObject() {
+    if (schemaObject_visited) {
+      throw new RuntimeException("Circular definition of attribute SchemaOb.schemaObject().");
+    }
+    schemaObject_visited = true;
+    try {
+        if( getSchemaOb() instanceof SchemaObject )
+            return (SchemaObject) getSchemaOb();
+        else
+            return getSchemaOb().schemaObject();
+        }
+    finally {
+      schemaObject_visited = false;
+    }
+  }
   /** @apilevel internal */
   public ASTNode rewriteTo() {
     return super.rewriteTo();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/SchemaTuple.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/SchemaTuple.java
index 897390f9dc4604ee2d2376354197ffd6e23a5d0d..c93b736d0719d1c69e4ceca012d7c9b92fb7e2ee 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/SchemaTuple.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/SchemaTuple.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,7 +16,6 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
  * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:23
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ScopesTuple.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ScopesTuple.java
index b20603ca3c00f24e74cae9675d75661d4d37a68c..3b63598ed8f98dac0cf0ccc8e1874e0909e44f81 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ScopesTuple.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ScopesTuple.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:139
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:140
  * @astdecl ScopesTuple : ASTNode ::= <ScopesKey:String> <ScopesValue:String>;
  * @production ScopesTuple : {@link ASTNode} ::= <span class="component">&lt;ScopesKey:String&gt;</span> <span class="component">&lt;ScopesValue:String&gt;</span>;
 
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/SecurityRequirementObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/SecurityRequirementObject.java
index b78ae40ff43a6337a2c55e9e0b8aba25d619b7bc..36a250d21832cad6bc56020d6aba9d4b640866a5 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/SecurityRequirementObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/SecurityRequirementObject.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:142
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:143
  * @astdecl SecurityRequirementObject : ASTNode ::= SecurityRequirementTuple*;
  * @production SecurityRequirementObject : {@link ASTNode} ::= <span class="component">{@link SecurityRequirementTuple}*</span>;
 
@@ -26,7 +26,7 @@ import org.openapi4j.core.exception.DecodeException;
 public class SecurityRequirementObject extends ASTNode<ASTNode> implements Cloneable {
   /**
    * @aspect Composer
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jadd:816
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:945
    */
   public static SecurityRequirement composeSecurityRequirement (SecurityRequirementObject securityRequirementObject, Map<Object, ASTNode> map){
         SecurityRequirement securityRequirement = new SecurityRequirement();
@@ -46,7 +46,7 @@ public class SecurityRequirementObject extends ASTNode<ASTNode> implements Clone
         }
   /**
    * @aspect Parser
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:1011
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:872
    */
   public static SecurityRequirementObject parseSecurityRequirement(SecurityRequirement securityRequirement, Map<Object, ASTNode> map){
         SecurityRequirementObject securityRequirementObject = new SecurityRequirementObject();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/SecurityRequirementTuple.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/SecurityRequirementTuple.java
index 85d694a7a299ddd459b10ddcb4e58398c05248be..aa0abfdfd4d7ce37257ffc39208432ee2e92aa49 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/SecurityRequirementTuple.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/SecurityRequirementTuple.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:143
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:144
  * @astdecl SecurityRequirementTuple : ASTNode ::= <Name:String> SecurityRequirementValue*;
  * @production SecurityRequirementTuple : {@link ASTNode} ::= <span class="component">&lt;Name:String&gt;</span> <span class="component">{@link SecurityRequirementValue}*</span>;
 
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/SecurityRequirementValue.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/SecurityRequirementValue.java
index c54b874388e3c8dcb9376e49ca4e5ae3ae93f245..78e17b7a0dd8e61a31299deeaff4f6a3ba681b1e 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/SecurityRequirementValue.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/SecurityRequirementValue.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:144
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:145
  * @astdecl SecurityRequirementValue : ASTNode ::= <Value:String>;
  * @production SecurityRequirementValue : {@link ASTNode} ::= <span class="component">&lt;Value:String&gt;</span>;
 
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/SecuritySchemeOb.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/SecuritySchemeOb.java
index cc3ca1892f3ca8e00e1474dfe6bd9359653a3d84..192db233955fb5fe37a4f26d31a574d69006f259 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/SecuritySchemeOb.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/SecuritySchemeOb.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,50 +16,17 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:126
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:127
  * @astdecl SecuritySchemeOb : ASTNode;
  * @production SecuritySchemeOb : {@link ASTNode};
 
  */
 public abstract class SecuritySchemeOb extends ASTNode<ASTNode> implements Cloneable {
-  /**
-   * @aspect Composer
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jadd:749
-   */
-  public static SecurityScheme composeSecurityScheme (SecuritySchemeObject securitySchemeObject, Map<Object, ASTNode> map){
-        SecurityScheme securityScheme = new SecurityScheme();
-
-        if( !securitySchemeObject.getType().isEmpty() )
-        securityScheme.setType(securitySchemeObject.getType());
-        if( !securitySchemeObject.getName().isEmpty() )
-        securityScheme.setName(securitySchemeObject.getName());
-        if( !securitySchemeObject.getIn().isEmpty() )
-        securityScheme.setIn(securitySchemeObject.getIn());
-        if( !securitySchemeObject.getScheme().isEmpty() )
-        securityScheme.setScheme(securitySchemeObject.getScheme());
-        if( !securitySchemeObject.getOpenIdConnectUrl().isEmpty() )
-        securityScheme.setOpenIdConnectUrl(securitySchemeObject.getOpenIdConnectUrl());
-        if( securitySchemeObject.getOAuthFlowsObject() != null )
-        securityScheme.setFlows(OAuthFlowsObject.composeOAuthFlows(securitySchemeObject.getOAuthFlowsObject()));
-        if( !securitySchemeObject.getDescription().isEmpty() )
-        securityScheme.setDescription( securitySchemeObject.getDescription() );
-        if( !securitySchemeObject.getBearerFormat().isEmpty() )
-        securityScheme.setBearerFormat( securitySchemeObject.getBearerFormat() );
-        if( securitySchemeObject.getNumExtension() != 0 ){
-        Map<String, Object> extensionMap = new HashMap<>();
-        for( Extension e : securitySchemeObject.getExtensions() )
-        extensionMap.put(e.getKey(), e.getValue());
-        securityScheme.setExtensions(extensionMap);
-        }
-
-        return securityScheme;
-        }
   /**
    * @aspect Parser
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:931
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:792
    */
   public static SecuritySchemeOb parseSecurityScheme(SecurityScheme securityScheme, OAIContext context, Map<Object, ASTNode> map){
         SecuritySchemeObject securitySchemeObject = new SecuritySchemeObject();
@@ -161,6 +129,14 @@ public abstract class SecuritySchemeOb extends ASTNode<ASTNode> implements Clone
    * @declaredat ASTNode:58
    */
   public abstract SecuritySchemeOb treeCopy();
+  /**
+   * @attribute syn
+   * @aspect Composer
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:872
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="Composer", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:872")
+  public abstract SecurityScheme composeSecurityScheme(SecuritySchemeOb securitySchemeOb, Map<Object, ASTNode> map);
   /** @apilevel internal */
   public ASTNode rewriteTo() {
     return super.rewriteTo();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/SecuritySchemeObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/SecuritySchemeObject.java
index f11878c9b909d8429037e168cf6c56748d28fe57..ac31f8f12e0cd55b8ad0f5d9fed5098483e90e1e 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/SecuritySchemeObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/SecuritySchemeObject.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:128
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:129
  * @astdecl SecuritySchemeObject : SecuritySchemeOb ::= <Type:String> <Description:String> <Name:String> <In:String> <Scheme:String> <BearerFormat:String> OAuthFlowsObject <OpenIdConnectUrl:String> Extension*;
  * @production SecuritySchemeObject : {@link SecuritySchemeOb} ::= <span class="component">&lt;Type:String&gt;</span> <span class="component">&lt;Description:String&gt;</span> <span class="component">&lt;Name:String&gt;</span> <span class="component">&lt;In:String&gt;</span> <span class="component">&lt;Scheme:String&gt;</span> <span class="component">&lt;BearerFormat:String&gt;</span> <span class="component">{@link OAuthFlowsObject}</span> <span class="component">&lt;OpenIdConnectUrl:String&gt;</span> <span class="component">{@link Extension}*</span>;
 
@@ -442,6 +442,57 @@ public class SecuritySchemeObject extends SecuritySchemeOb implements Cloneable
   public JastAddList<Extension> getExtensionsNoTransform() {
     return getExtensionListNoTransform();
   }
+/** @apilevel internal */
+protected java.util.Set composeSecurityScheme_SecuritySchemeOb_Map_Object__ASTNode__visited;
+  /**
+   * @attribute syn
+   * @aspect Composer
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:872
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="Composer", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:872")
+  public SecurityScheme composeSecurityScheme(SecuritySchemeOb securitySchemeOb, Map<Object, ASTNode> map) {
+    java.util.List _parameters = new java.util.ArrayList(2);
+    _parameters.add(securitySchemeOb);
+    _parameters.add(map);
+    if (composeSecurityScheme_SecuritySchemeOb_Map_Object__ASTNode__visited == null) composeSecurityScheme_SecuritySchemeOb_Map_Object__ASTNode__visited = new java.util.HashSet(4);
+    if (composeSecurityScheme_SecuritySchemeOb_Map_Object__ASTNode__visited.contains(_parameters)) {
+      throw new RuntimeException("Circular definition of attribute SecuritySchemeOb.composeSecurityScheme(SecuritySchemeOb,Map_Object__ASTNode_).");
+    }
+    composeSecurityScheme_SecuritySchemeOb_Map_Object__ASTNode__visited.add(_parameters);
+    try {
+            SecurityScheme securityScheme = new SecurityScheme();
+            SecuritySchemeObject s = (SecuritySchemeObject) securitySchemeOb;
+    
+            if( !s.getType().isEmpty() )
+            securityScheme.setType(s.getType());
+            if( !s.getName().isEmpty() )
+            securityScheme.setName(s.getName());
+            if( !s.getIn().isEmpty() )
+            securityScheme.setIn(s.getIn());
+            if( !s.getScheme().isEmpty() )
+            securityScheme.setScheme(s.getScheme());
+            if( !s.getOpenIdConnectUrl().isEmpty() )
+            securityScheme.setOpenIdConnectUrl(s.getOpenIdConnectUrl());
+            if( s.getOAuthFlowsObject() != null )
+            securityScheme.setFlows(OAuthFlowsObject.composeOAuthFlows(s.getOAuthFlowsObject(), map));
+            if( !s.getDescription().isEmpty() )
+            securityScheme.setDescription( s.getDescription() );
+            if( !s.getBearerFormat().isEmpty() )
+            securityScheme.setBearerFormat( s.getBearerFormat() );
+            if( s.getNumExtension() != 0 ){
+            Map<String, Object> extensionMap = new HashMap<>();
+            for( Extension e : s.getExtensions() )
+            extensionMap.put(e.getKey(), e.getValue());
+            securityScheme.setExtensions(extensionMap);
+            }
+    
+            return securityScheme;
+            }
+    finally {
+      composeSecurityScheme_SecuritySchemeOb_Map_Object__ASTNode__visited.remove(_parameters);
+    }
+  }
   /** @apilevel internal */
   public ASTNode rewriteTo() {
     return super.rewriteTo();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/SecuritySchemeReference.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/SecuritySchemeReference.java
index de48f205d277ed181fd5a5f30372b503ef69e68e..0c7f7dc095d1732bce6607f071fdd9402c95da80 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/SecuritySchemeReference.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/SecuritySchemeReference.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:127
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:128
  * @astdecl SecuritySchemeReference : SecuritySchemeOb ::= <Ref:String> <SecuritySchemeOb:SecuritySchemeOb>;
  * @production SecuritySchemeReference : {@link SecuritySchemeOb} ::= <span class="component">&lt;Ref:String&gt;</span> <span class="component">&lt;SecuritySchemeOb:SecuritySchemeOb&gt;</span>;
 
@@ -197,6 +197,37 @@ public class SecuritySchemeReference extends SecuritySchemeOb implements Cloneab
   public SecuritySchemeOb getSecuritySchemeOb() {
     return tokenSecuritySchemeOb_SecuritySchemeOb;
   }
+/** @apilevel internal */
+protected java.util.Set composeSecurityScheme_SecuritySchemeOb_Map_Object__ASTNode__visited;
+  /**
+   * @attribute syn
+   * @aspect Composer
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:872
+   */
+  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
+  @ASTNodeAnnotation.Source(aspect="Composer", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:872")
+  public SecurityScheme composeSecurityScheme(SecuritySchemeOb securitySchemeOb, Map<Object, ASTNode> map) {
+    java.util.List _parameters = new java.util.ArrayList(2);
+    _parameters.add(securitySchemeOb);
+    _parameters.add(map);
+    if (composeSecurityScheme_SecuritySchemeOb_Map_Object__ASTNode__visited == null) composeSecurityScheme_SecuritySchemeOb_Map_Object__ASTNode__visited = new java.util.HashSet(4);
+    if (composeSecurityScheme_SecuritySchemeOb_Map_Object__ASTNode__visited.contains(_parameters)) {
+      throw new RuntimeException("Circular definition of attribute SecuritySchemeOb.composeSecurityScheme(SecuritySchemeOb,Map_Object__ASTNode_).");
+    }
+    composeSecurityScheme_SecuritySchemeOb_Map_Object__ASTNode__visited.add(_parameters);
+    try {
+            SecurityScheme securityScheme = new SecurityScheme();
+            SecuritySchemeReference s = (SecuritySchemeReference) securitySchemeOb;
+    
+            if( !s.getRef().isEmpty() )
+            securityScheme.setRef(s.getRef());
+    
+            return securityScheme;
+            }
+    finally {
+      composeSecurityScheme_SecuritySchemeOb_Map_Object__ASTNode__visited.remove(_parameters);
+    }
+  }
   /** @apilevel internal */
   public ASTNode rewriteTo() {
     return super.rewriteTo();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/SecuritySchemeTuple.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/SecuritySchemeTuple.java
index cfee37bc44cb3b1c07078b44d1c4b7c70aa8ec56..a27af9940b6836ca22c775954ec0728954689de8 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/SecuritySchemeTuple.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/SecuritySchemeTuple.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,7 +16,6 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
  * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:29
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ServerObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ServerObject.java
index 3c09dd3b03db953395cbdbc60c7f61623384ab39..90d2d5607617687a78aa2f162757da040fc19773 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ServerObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ServerObject.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,7 +16,6 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
  * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:14
@@ -26,7 +26,7 @@ import org.openapi4j.core.exception.DecodeException;
 public class ServerObject extends ASTNode<ASTNode> implements Cloneable {
   /**
    * @aspect Composer
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jadd:125
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:125
    */
   public static Server composeServer (ServerObject serverObject, Map<Object, ASTNode> map){
         Server server = new Server();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ServerVariableObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ServerVariableObject.java
index da0263933531c2afa41be64a9597ed8329d00c5b..5c0cf4971f6f389228d5f720115b6d6d765b2222 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ServerVariableObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ServerVariableObject.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,7 +16,6 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
  * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:18
@@ -26,7 +26,7 @@ import org.openapi4j.core.exception.DecodeException;
 public class ServerVariableObject extends ASTNode<ASTNode> implements Cloneable {
   /**
    * @aspect Composer
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jadd:149
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:149
    */
   public static ServerVariable composeServerVariable (ServerVariableObject serverVariableObject, Map<Object, ASTNode> map){
         ServerVariable serverVariable = new ServerVariable();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ServerVariablesTuple.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ServerVariablesTuple.java
index 8b3b0cad5790cd417372273a72f77ddd2c521398..16878d741e22d2300a0c2d7f05711dbfa6294b75 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ServerVariablesTuple.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ServerVariablesTuple.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,7 +16,6 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
  * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:15
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Tag.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Tag.java
index a47dad53a3a51c6dc36dca2e9e3058d8ad880908..3469ec203e8f7bd373f0554fa77153a366a10894 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Tag.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Tag.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:52
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:53
  * @astdecl Tag : ASTNode ::= <Tag:String>;
  * @production Tag : {@link ASTNode} ::= <span class="component">&lt;Tag:String&gt;</span>;
 
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/TagObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/TagObject.java
index 5b3b9b5ad28b7dfdb76bb3b8730c144c00ff88b0..2a1e5c572decb682906924954df8ecfcfa65b314 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/TagObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/TagObject.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:102
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:103
  * @astdecl TagObject : ASTNode ::= <Name:String> <Description:String> [ExternalDocObject] Extension*;
  * @production TagObject : {@link ASTNode} ::= <span class="component">&lt;Name:String&gt;</span> <span class="component">&lt;Description:String&gt;</span> <span class="component">[{@link ExternalDocObject}]</span> <span class="component">{@link Extension}*</span>;
 
@@ -26,7 +26,7 @@ import org.openapi4j.core.exception.DecodeException;
 public class TagObject extends ASTNode<ASTNode> implements Cloneable {
   /**
    * @aspect Composer
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jadd:597
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:682
    */
   public static org.openapi4j.parser.model.v3.Tag composeTag (TagObject tagObject, Map<Object, ASTNode> map){
         org.openapi4j.parser.model.v3.Tag tag = new org.openapi4j.parser.model.v3.Tag();
@@ -36,7 +36,7 @@ public class TagObject extends ASTNode<ASTNode> implements Cloneable {
         if( !tagObject.getDescription().isEmpty() )
         tag.setDescription( tagObject.getDescription() );
         if( tagObject.hasExternalDocObject() )
-        tag.setExternalDocs( ExternalDocObject.composeExternalDocs(tagObject.getExternalDocObject()) );
+        tag.setExternalDocs( ExternalDocObject.composeExternalDocs(tagObject.getExternalDocObject(), map) );
         if( tagObject.getNumExtension() != 0 ){
         Map<String, Object> extensionMap = new HashMap<>();
         for( Extension e : tagObject.getExtensions() )
@@ -48,7 +48,7 @@ public class TagObject extends ASTNode<ASTNode> implements Cloneable {
         }
   /**
    * @aspect Parser
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:631
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:604
    */
   public static TagObject parseTag(org.openapi4j.parser.model.v3.Tag tag, Map<Object, ASTNode> map){
         TagObject tagObject = new TagObject();
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Trace.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Trace.java
index e446253bca81078235a66ab32668827b9fdc8fbb..14a4bc3469ac4bb21544764ce02bba9f96033217 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Trace.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Trace.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,15 +16,14 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:48
- * @astdecl Trace : ASTNode ::= OperationObject;
- * @production Trace : {@link ASTNode} ::= <span class="component">{@link OperationObject}</span>;
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:52
+ * @astdecl Trace : OperationOb ::= <OperationObject:OperationObject>;
+ * @production Trace : {@link OperationOb} ::= <span class="component">&lt;OperationObject:OperationObject&gt;</span>;
 
  */
-public class Trace extends ASTNode<ASTNode> implements Cloneable {
+public class Trace extends OperationOb implements Cloneable {
   /**
    * @declaredat ASTNode:1
    */
@@ -38,53 +38,52 @@ public class Trace extends ASTNode<ASTNode> implements Cloneable {
    * @declaredat ASTNode:10
    */
   public void init$Children() {
-    children = new ASTNode[1];
   }
   /**
-   * @declaredat ASTNode:13
+   * @declaredat ASTNode:12
    */
   @ASTNodeAnnotation.Constructor(
     name = {"OperationObject"},
     type = {"OperationObject"},
-    kind = {"Child"}
+    kind = {"Token"}
   )
   public Trace(OperationObject p0) {
-    setChild(p0, 0);
+    setOperationObject(p0);
   }
   /** @apilevel low-level 
-   * @declaredat ASTNode:22
+   * @declaredat ASTNode:21
    */
   protected int numChildren() {
-    return 1;
+    return 0;
   }
   /**
    * @apilevel internal
-   * @declaredat ASTNode:28
+   * @declaredat ASTNode:27
    */
   public boolean mayHaveRewrite() {
     return false;
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:32
+   * @declaredat ASTNode:31
    */
   public void flushAttrCache() {
     super.flushAttrCache();
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:36
+   * @declaredat ASTNode:35
    */
   public void flushCollectionCache() {
     super.flushCollectionCache();
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:40
+   * @declaredat ASTNode:39
    */
   public Trace clone() throws CloneNotSupportedException {
     Trace node = (Trace) super.clone();
     return node;
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:45
+   * @declaredat ASTNode:44
    */
   public Trace copy() {
     try {
@@ -104,7 +103,7 @@ public class Trace extends ASTNode<ASTNode> implements Cloneable {
    * @return dangling copy of the subtree at this node
    * @apilevel low-level
    * @deprecated Please use treeCopy or treeCopyNoTransform instead
-   * @declaredat ASTNode:64
+   * @declaredat ASTNode:63
    */
   @Deprecated
   public Trace fullCopy() {
@@ -115,7 +114,7 @@ public class Trace extends ASTNode<ASTNode> implements Cloneable {
    * The copy is dangling, i.e. has no parent.
    * @return dangling copy of the subtree at this node
    * @apilevel low-level
-   * @declaredat ASTNode:74
+   * @declaredat ASTNode:73
    */
   public Trace treeCopyNoTransform() {
     Trace tree = (Trace) copy();
@@ -136,7 +135,7 @@ public class Trace extends ASTNode<ASTNode> implements Cloneable {
    * The copy is dangling, i.e. has no parent.
    * @return dangling copy of the subtree at this node
    * @apilevel low-level
-   * @declaredat ASTNode:94
+   * @declaredat ASTNode:93
    */
   public Trace treeCopy() {
     Trace tree = (Trace) copy();
@@ -152,36 +151,30 @@ public class Trace extends ASTNode<ASTNode> implements Cloneable {
     return tree;
   }
   /** @apilevel internal 
-   * @declaredat ASTNode:108
+   * @declaredat ASTNode:107
    */
   protected boolean is$Equal(ASTNode node) {
-    return super.is$Equal(node);    
+    return super.is$Equal(node) && (tokenOperationObject_OperationObject == ((Trace) node).tokenOperationObject_OperationObject);    
   }
   /**
-   * Replaces the OperationObject child.
-   * @param node The new node to replace the OperationObject child.
+   * Replaces the lexeme OperationObject.
+   * @param value The new value for the lexeme OperationObject.
    * @apilevel high-level
    */
-  public void setOperationObject(OperationObject node) {
-    setChild(node, 0);
+  public void setOperationObject(OperationObject value) {
+    tokenOperationObject_OperationObject = value;
   }
+  /** @apilevel internal 
+   */
+  protected OperationObject tokenOperationObject_OperationObject;
   /**
-   * Retrieves the OperationObject child.
-   * @return The current node used as the OperationObject child.
+   * Retrieves the value for the lexeme OperationObject.
+   * @return The value for the lexeme OperationObject.
    * @apilevel high-level
    */
-  @ASTNodeAnnotation.Child(name="OperationObject")
+  @ASTNodeAnnotation.Token(name="OperationObject")
   public OperationObject getOperationObject() {
-    return (OperationObject) getChild(0);
-  }
-  /**
-   * Retrieves the OperationObject child.
-   * <p><em>This method does not invoke AST transformations.</em></p>
-   * @return The current node used as the OperationObject child.
-   * @apilevel low-level
-   */
-  public OperationObject getOperationObjectNoTransform() {
-    return (OperationObject) getChildNoTransform(0);
+    return tokenOperationObject_OperationObject;
   }
   /** @apilevel internal */
   public ASTNode rewriteTo() {
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/XmlObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/XmlObject.java
index e9792647a80b49b4fa56d7a92aa89c9d19818b03..d546aa15e420b496ad0af8720ba3a05c16fab2af 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/XmlObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/XmlObject.java
@@ -8,6 +8,7 @@ import org.openapi4j.core.model.OAIContext;
 import java.io.IOException;
 import java.util.*;
 import java.net.URL;
+import org.openapi4j.core.exception.DecodeException;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -15,10 +16,9 @@ import java.net.HttpURLConnection;
 import javax.net.ssl.HttpsURLConnection;
 import java.util.Random;
 import java.util.stream.IntStream;
-import org.openapi4j.core.exception.DecodeException;
 /**
  * @ast node
- * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:123
+ * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\OpenAPISpecification.ast:124
  * @astdecl XmlObject : ASTNode ::= <Name:String> <Namespace:String> <Prefix:String> <Attribute:Boolean> <Wrapped:Boolean> Extension*;
  * @production XmlObject : {@link ASTNode} ::= <span class="component">&lt;Name:String&gt;</span> <span class="component">&lt;Namespace:String&gt;</span> <span class="component">&lt;Prefix:String&gt;</span> <span class="component">&lt;Attribute:Boolean&gt;</span> <span class="component">&lt;Wrapped:Boolean&gt;</span> <span class="component">{@link Extension}*</span>;
 
@@ -26,9 +26,9 @@ import org.openapi4j.core.exception.DecodeException;
 public class XmlObject extends ASTNode<ASTNode> implements Cloneable {
   /**
    * @aspect Composer
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jadd:732
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jrag:855
    */
-  public static Xml composeXml (XmlObject xmlObject) {
+  public static Xml composeXml (XmlObject xmlObject, Map<Object, ASTNode> map) {
         Xml xml = new Xml();
 
         if( !xmlObject.getName().isEmpty() )
@@ -46,7 +46,7 @@ public class XmlObject extends ASTNode<ASTNode> implements Cloneable {
         }
   /**
    * @aspect Parser
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:909
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:770
    */
   public static XmlObject parseXml (Xml xml, Map<Object, ASTNode> map) {
         XmlObject xmlObject = new XmlObject();
diff --git a/src/main/jastadd/Composer.jadd b/src/main/jastadd/Composer.jrag
similarity index 54%
rename from src/main/jastadd/Composer.jadd
rename to src/main/jastadd/Composer.jrag
index 60032ca52fa0fde61ffe2196f8f39abd55598df2..40b8e29d663d93795c1bc999bc303fb21f1adf3a 100644
--- a/src/main/jastadd/Composer.jadd
+++ b/src/main/jastadd/Composer.jrag
@@ -27,7 +27,7 @@ aspect Composer {
         if( openapi.getNumPathsObject() != 0 ){
         Map<String, Path> paths = new HashMap<>();
         for( PathsObject p : openapi.getPathsObjects() )
-        paths.put( p.getRef(), PathItemOb.composePath(p.getPathItemOb(), map) );
+        paths.put( p.getRef(), p.getPathItemOb().composePath(p.getPathItemOb(), map) );
         api3.setPaths(paths);
         }
         if( openapi.hasComponentsObject() )
@@ -62,17 +62,17 @@ public static Info InfoObject.composeInfo (InfoObject infoObject, Map<Object, AS
         Info info = new Info();
 
         if( !infoObject.getTitle().isEmpty() )
-            info.setTitle(infoObject.getTitle());
+        info.setTitle(infoObject.getTitle());
         if( !infoObject.getVersion().isEmpty() )
-            info.setVersion(infoObject.getVersion());
+        info.setVersion(infoObject.getVersion());
         if( !infoObject.getDescription().isEmpty() )
         info.setDescription(infoObject.getDescription());
         if( !infoObject.getTermsOfService().isEmpty() )
         info.setTermsOfService(infoObject.getTermsOfService());
         if( infoObject.hasContactObject() )
-        info.setContact(ContactObject.composeContact(infoObject.getContactObject()));
+        info.setContact(ContactObject.composeContact(infoObject.getContactObject(), map));
         if( infoObject.hasLicenseObject() )
-        info.setLicense(LicenseObject.composeLicense(infoObject.getLicenseObject()));
+        info.setLicense(LicenseObject.composeLicense(infoObject.getLicenseObject(), map));
         if( infoObject.getNumExtension() != 0 ){
         Map<String, Object> extension = new HashMap<>();
         for( Extension e : infoObject.getExtensions() )
@@ -175,20 +175,32 @@ public static Components ComponentsObject.composeComponents (ComponentsObject co
 
         if( componentsObject.getNumSchemaTuple() != 0 ){
         Map<String, org.openapi4j.parser.model.v3.Schema> schemaMap = new HashMap<>();
-        for( SchemaTuple t : componentsObject.getSchemaTuples() )
-        schemaMap.put(t.getKey(), SchemaOb.composeSchema(t.getSchemaOb(), map));
+        SchemaOb s;
+        for( SchemaTuple t : componentsObject.getSchemaTuples() ){
+        s = t.getSchemaOb();
+        if( s instanceof SchemaObject )
+        schemaMap.put(t.getKey(), ((SchemaObject)s).composeSchema(s, map));
+        else
+        schemaMap.put(t.getKey(), ((SchemaReference)s).composeSchema(s, map));
+        }
         components.setSchemas(schemaMap);
         }
         if( componentsObject.getNumResponseTuple() != 0 ){
         Map<String, Response> responseMap = new HashMap<>();
-        for( ResponseTuple t : componentsObject.getResponseTuples() )
-        responseMap.put(t.getKey(), ResponseOb.composeResponse(t.getResponseOb(), map));
+        ResponseOb r;
+        for( ResponseTuple t : componentsObject.getResponseTuples() ) {
+        r = t.getResponseOb();
+        responseMap.put(t.getKey(), r.composeResponse(r, map));
+        }
         components.setResponses(responseMap);
         }
         if( componentsObject.getNumParameterTuple() != 0 ){
         Map<String, Parameter> parameterMap = new HashMap<>();
-        for( ParameterTuple t : componentsObject.getParameterTuples() )
-        parameterMap.put(t.getKey(), ParameterOb.composeParameter(t.getParameterOb(), map));
+        ParameterOb p;
+        for( ParameterTuple t : componentsObject.getParameterTuples() ) {
+        p = t.getParameterOb();
+        parameterMap.put(t.getKey(), p.composeParameter(p, map));
+        }
         components.setParameters(parameterMap);
         }
         if( componentsObject.getNumExampleTuple() != 0 ){
@@ -199,33 +211,43 @@ public static Components ComponentsObject.composeComponents (ComponentsObject co
         }
         if( componentsObject.getNumRequestBodyTuple() != 0 ){
         Map<String, RequestBody> requestBodyMap = new HashMap<>();
-        for( RequestBodyTuple t : componentsObject.getRequestBodyTuples() )
-        requestBodyMap.put(t.getKey(), RequestBodyOb.composeRequestBody(t.getRequestBodyOb(), map));
-        components.setRequestBodies(requestBodyMap);
+        RequestBodyOb r;
+        for( RequestBodyTuple t : componentsObject.getRequestBodyTuples() ) {
+        r = t.getRequestBodyOb();
+        requestBodyMap.put(t.getKey(), r.composeRequestBody(r, map));
+        }        components.setRequestBodies(requestBodyMap);
         }
         if( componentsObject.getNumHeaderTuple() != 0 ){
         Map<String, Header> headerMap = new HashMap<>();
-        for( HeaderTuple t : componentsObject.getHeaderTuples() )
-        headerMap.put(t.getKey(), HeaderOb.composeHeader(t.getHeaderOb(), map));
-        components.setHeaders(headerMap);
+        HeaderOb h;
+        for( HeaderTuple t : componentsObject.getHeaderTuples() ) {
+        h = t.getHeaderOb();
+        headerMap.put(t.getKey(), h.composeHeader(h, map));
+        }        components.setHeaders(headerMap);
         }
         if( componentsObject.getNumSecuritySchemeTuple() != 0 ){
         Map<String, SecurityScheme> securitySchemeMap = new HashMap<>();
-        for( SecuritySchemeTuple t : componentsObject.getSecuritySchemeTuples() )
-        securitySchemeMap.put(t.getKey(), SecuritySchemeOb.composeSecurityScheme(t.getSecuritySchemeOb(), map));
-        components.setSecuritySchemes(securitySchemeMap);
+        SecuritySchemeOb s;
+        for( SecuritySchemeTuple t : componentsObject.getSecuritySchemeTuples() ) {
+        s = t.getSecuritySchemeOb();
+        securitySchemeMap.put(t.getKey(), s.composeSecurityScheme(s, map));
+        }        components.setSecuritySchemes(securitySchemeMap);
         }
         if( componentsObject.getNumLinkTuple() != 0 ){
         Map<String, Link> linkMap = new HashMap<>();
-        for( LinkTuple t : componentsObject.getLinkTuples() )
-        linkMap.put(t.getKey(), LinkOb.composeLink(t.getLinkOb(), map));
-        components.setLinks(linkMap);
+        LinkOb l;
+        for( LinkTuple t : componentsObject.getLinkTuples() ) {
+        l = t.getLinkOb();
+        linkMap.put(t.getKey(), l.composeLink(l, map));
+        }        components.setLinks(linkMap);
         }
         if( componentsObject.getNumCallbackTuple() != 0 ){
         Map<String, Callback> callbackMap = new HashMap<>();
-        for( CallbackTuple t : componentsObject.getCallbackTuples() )
-        callbackMap.put(t.getKey(), CallbackOb.composeCallback(t.getCallbackOb(), map));
-        components.setCallbacks(callbackMap);
+        CallbackOb c;
+        for( CallbackTuple t : componentsObject.getCallbackTuples() ) {
+        c = t.getCallbackOb();
+        callbackMap.put(t.getKey(), c.composeCallback(c, map));
+        }        components.setCallbacks(callbackMap);
         }
         if( componentsObject.getNumExtension() != 0 ){
         Map<String, Object> extensions = new HashMap<>();
@@ -237,40 +259,49 @@ public static Components ComponentsObject.composeComponents (ComponentsObject co
         return components;
         }
 
-public static Path PathItemOb.composePath (PathItemOb pathItem, Map<Object, ASTNode> map){
-        Path path = new Path();
+        syn Path PathItemOb.composePath (PathItemOb pathItem, Map<Object, ASTNode> map);
+        eq PathItemReference.composePath (PathItemOb pathItem, Map<Object, ASTNode> map) {
+            Path path = new Path();
+        PathItemReference p = (PathItemReference) pathItem;
 
-        if( !pathItem.getRef().isEmpty() )
-        path.setRef(pathItem.getRef());
-        if( !pathItem.getSummary().isEmpty())
-        path.setSummary(pathItem.getSummary());
-        if( !pathItem.getDescription().isEmpty() )
-        path.setDescription(pathItem.getDescription());
-        if( pathItem.hasGet() )
-        path.setGet( OperationObject.composeOperation(pathItem.getGet().getOperationObject()) );
-        if( pathItem.hasPut() )
-        path.setPut( OperationObject.composeOperation(pathItem.getPut().getOperationObject()) );
-        if( pathItem.hasPost() )
-        path.setPost( OperationObject.composeOperation(pathItem.getPost().getOperationObject()) );
-        if( pathItem.hasDelete() )
-        path.setDelete( OperationObject.composeOperation(pathItem.getDelete().getOperationObject()) );
-        if( pathItem.hasOptions() )
-        path.setOptions( OperationObject.composeOperation(pathItem.getOptions().getOperationObject()) );
-        if( pathItem.hasHead() )
-        path.setHead( OperationObject.composeOperation(pathItem.getHead().getOperationObject()) );
-        if( pathItem.hasPatch() )
-        path.setPatch( OperationObject.composeOperation(pathItem.getPatch().getOperationObject()) );
-        if( pathItem.getNumServerObject() != 0 ){
-        for( ServerObject s : pathItem.getServerObjects() )
-        path.addServer( ServerObject.composeServer(s) );
-        }
-        if( pathItem.getNumParameterObject() != 0 ){
-        for( ParameterObject p : pathItem.getParameterObjects() )
-        path.addParameter( ParameterObject.composeParameter(p) );
-        }
-        if( pathItem.getNumExtension() != 0 ){
+        if( !p.getRef().isEmpty() )
+        path.setRef(p.getRef());
+
+        return path;
+        }
+        eq PathItemObject.composePath (PathItemOb pathItem, Map<Object, ASTNode> map) {
+        Path path = new Path();
+        PathItemObject p = (PathItemObject) pathItem;
+
+        if( !p.getSummary().isEmpty())
+        path.setSummary(p.getSummary());
+        if( !p.getDescription().isEmpty() )
+        path.setDescription(p.getDescription());
+        if( p.hasGet() )
+        path.setGet( OperationObject.composeOperation(p.getGet().getOperationObject(), map) );
+        if( p.hasPut() )
+        path.setPut( OperationObject.composeOperation(p.getPut().getOperationObject(), map) );
+        if( p.hasPost() )
+        path.setPost( OperationObject.composeOperation(p.getPost().getOperationObject(), map) );
+        if( p.hasDelete() )
+        path.setDelete( OperationObject.composeOperation(p.getDelete().getOperationObject(), map) );
+        if( p.hasOptions() )
+        path.setOptions( OperationObject.composeOperation(p.getOptions().getOperationObject(), map) );
+        if( p.hasHead() )
+        path.setHead( OperationObject.composeOperation(p.getHead().getOperationObject(), map) );
+        if( p.hasPatch() )
+        path.setPatch( OperationObject.composeOperation(p.getPatch().getOperationObject(), map) );
+        if( p.getNumServerObject() != 0 ){
+        for( ServerObject s : p.getServerObjects() )
+        path.addServer( ServerObject.composeServer(s, map) );
+        }
+        if( p.getNumParameterOb() != 0 ){
+        for( ParameterOb e : p.getParameterObs() )
+        path.addParameter( e.composeParameter(e, map) );
+        }
+        if( p.getNumExtension() != 0 ){
         Map<String, Object> extensionMap = new HashMap<>();
-        for( Extension e : pathItem.getExtensions() )
+        for( Extension e : p.getExtensions() )
         extensionMap.put(e.getKey(), e.getValue());
         path.setExtensions(extensionMap);
         }
@@ -281,7 +312,6 @@ public static Path PathItemOb.composePath (PathItemOb pathItem, Map<Object, ASTN
 public static Operation OperationObject.composeOperation (OperationObject operationObject, Map<Object, ASTNode> map){
         Operation operation = new Operation();
 
-
         if( operationObject.getNumTag() != 0 ){
         for( de.tudresden.inf.st.openapi.ast.Tag t : operationObject.getTags() )
         operation.addTag(t.getTag());
@@ -291,43 +321,36 @@ public static Operation OperationObject.composeOperation (OperationObject operat
         if( !operationObject.getDescription().isEmpty() )
         operation.setDescription( operationObject.getDescription() );
         if( operationObject.hasExternalDocObject() )
-        operation.setExternalDocs( ExternalDocObject.composeExternalDocs(operationObject.getExternalDocObject()) );
+        operation.setExternalDocs( ExternalDocObject.composeExternalDocs(operationObject.getExternalDocObject(), map) );
         if( !operationObject.getOperationID().isEmpty() )
         operation.setOperationId( operationObject.getOperationID() );
-        if( operationObject.getNumParameterObject() != 0 ){
-        for( ParameterObject p : operationObject.getParameterObjects() )
-        operation.addParameter( ParameterObject.composeParameter(p) );
+        if( operationObject.getNumParameterOb() != 0 ){
+        for( ParameterOb p : operationObject.getParameterObs() )
+        operation.addParameter(p.composeParameter(p, map));
         }
-        if( operationObject.hasRequestBodyObject() )
-        operation.setRequestBody( RequestBodyObject.composeRequestBody(operationObject.getRequestBodyObject()));
+        if( operationObject.hasRequestBodyOb() )
+        operation.setRequestBody(operationObject.getRequestBodyOb().composeRequestBody(operationObject.getRequestBodyOb(), map));
         if( operationObject.getNumResponseTuple() != 0){
         Map<String, Response> responseMap = new HashMap<>();
         for( ResponseTuple t : operationObject.getResponseTuples() )
-        responseMap.put(t.getKey(), ResponseObject.composeResponse(t.getResponseObject()));
+        responseMap.put(t.getKey(), t.getResponseOb().composeResponse(t.getResponseOb(), map));
         operation.setResponses(responseMap);
         }
         if( operationObject.getNumCallbackTuple() != 0 ){
         Map<String, Callback> callbacks = new HashMap<>();
-        for( CallbackTuple t : operationObject.getCallbackTuples() ) {
-        if( !t.getCallbackObject().getRef().isEmpty() ){
-        Callback callback = new Callback();
-        callback.setRef(t.getCallbackObject().getRef());
-        callbacks.put(t.getKey(), callback);
-        }
-        else
-        callbacks.put(t.getKey(), CallbackObject.composeCallback(t.getCallbackObject()));
+        for( CallbackTuple t : operationObject.getCallbackTuples() )
+        callbacks.put(t.getKey(), t.getCallbackOb().composeCallback(t.getCallbackOb(), map));
         operation.setCallbacks(callbacks);
         }
-        }
         if( operationObject.getDeprecatedBoolean() != null )
         operation.setDeprecated(operationObject.getDeprecatedBoolean());
         if( operationObject.getSecurityRequirementObjects() != null ){
         for( SecurityRequirementObject s : operationObject.getSecurityRequirementObjects() )
-        operation.addSecurityRequirement( SecurityRequirementObject.composeSecurityRequirement(s) );
+        operation.addSecurityRequirement( SecurityRequirementObject.composeSecurityRequirement(s, map) );
         }
         if( operationObject.getNumServerObject() != 0 ){
         for( ServerObject s : operationObject.getServerObjects() )
-        operation.addServer( ServerObject.composeServer(s) );
+        operation.addServer( ServerObject.composeServer(s, map) );
         }
         if( operationObject.getNumExtension() != 0 ){
         Map<String, Object> extensionMap = new HashMap<>();
@@ -356,48 +379,57 @@ public static ExternalDocs ExternalDocObject.composeExternalDocs (ExternalDocObj
         return externalDocs;
         }
 
-public static Parameter ParameterOb.composeParameter (ParameterOb parameterObject, Map<Object, ASTNode> map){
+        syn Parameter ParameterOb.composeParameter (ParameterOb parameterOb, Map<Object, ASTNode> map);
+        eq ParameterReference.composeParameter (ParameterOb parameterOb, Map<Object, ASTNode> map) {
         Parameter parameter = new Parameter();
+        ParameterReference p = (ParameterReference) parameterOb;
+
+        if( !p.getRef().isEmpty() )
+        parameter.setRef(p.getRef());
 
-        if( !parameterObject.getRef().isEmpty() )
-        parameter.setRef(parameterObject.getRef());
-        if( !parameterObject.getName().isEmpty() )
-        parameter.setName(parameterObject.getName());
-        if( !parameterObject.getIn().isEmpty() )
-        parameter.setIn(parameterObject.getIn());
-        if( parameterObject.getRequired() != null )
-        parameter.setRequired(parameterObject.getRequired());
-        if( !parameterObject.getDescription().isEmpty() )
-        parameter.setDescription(parameterObject.getDescription());
-        if( parameterObject.getDeprecatedBoolean() != null )
-        parameter.setDeprecated(parameterObject.getDeprecatedBoolean());
-        if( !parameterObject.getStyle().isEmpty() )
-        parameter.setStyle(parameterObject.getStyle());
-        if( parameterObject.getAllowReserved() != null )
-        parameter.setAllowReserved(parameterObject.getAllowReserved());
-        if( parameterObject.getExplode() != null )
-        parameter.setExplode(parameterObject.getExplode());
-        if( parameterObject.getSchemaObject() != null )
-        parameter.setSchema(SchemaObject.composeSchema(parameterObject.getSchemaObject()));
-        if( parameterObject.getExample() != null )
-        parameter.setExample(parameterObject.getExample());
-        if( parameterObject.getNumExampleTuple() != 0 ){
+        return parameter;
+        }
+        eq ParameterObject.composeParameter (ParameterOb parameterOb, Map<Object, ASTNode> map) {
+        Parameter parameter = new Parameter();
+        ParameterObject p = (ParameterObject) parameterOb;
+
+        if( !p.getName().isEmpty() )
+        parameter.setName(p.getName());
+        if( !p.getIn().isEmpty() )
+        parameter.setIn(p.getIn());
+        if( p.getRequired() != null )
+        parameter.setRequired(p.getRequired());
+        if( !p.getDescription().isEmpty() )
+        parameter.setDescription(p.getDescription());
+        if( p.getDeprecatedBoolean() != null )
+        parameter.setDeprecated(p.getDeprecatedBoolean());
+        if( !p.getStyle().isEmpty() )
+        parameter.setStyle(p.getStyle());
+        if( p.getAllowReserved() != null )
+        parameter.setAllowReserved(p.getAllowReserved());
+        if( p.getExplode() != null )
+        parameter.setExplode(p.getExplode());
+        if( p.getSchemaOb() != null )
+        parameter.setSchema(p.getSchemaOb().composeSchema(p.getSchemaOb(), map));
+        if( p.getExample() != null )
+        parameter.setExample(p.getExample());
+        if( p.getNumExampleTuple() != 0 ){
         Map<String, Example> exampleMap = new HashMap<>();
-        for( ExampleTuple t : parameterObject.getExampleTuples() )
-        exampleMap.put(t.getKey(), ExampleObject.composeExample(t.getExampleObject()));
+        for( ExampleTuple t : p.getExampleTuples() )
+        exampleMap.put(t.getKey(), ExampleObject.composeExample(t.getExampleObject(), map));
         parameter.setExamples(exampleMap);
         }
-        if( parameterObject.getNumContentTuple() != 0 ){
+        if( p.getNumContentTuple() != 0 ){
         Map<String, MediaType> contentMap = new HashMap<>();
-        for( ContentTuple t : parameterObject.getContentTuples() )
-        contentMap.put(t.getKey(), MediaTypeObject.composeMediaType(t.getMediaTypeObject()));
+        for( ContentTuple t : p.getContentTuples() )
+        contentMap.put(t.getKey(), MediaTypeObject.composeMediaType(t.getMediaTypeObject(), map));
         parameter.setContentMediaTypes(contentMap);
         }
-        if( parameterObject.getRequired() != null )
-            parameter.setRequired(parameterObject.getRequired());
-        if( parameterObject.getNumExtension() != 0 ){
+        if( p.getRequired() != null )
+        parameter.setRequired(p.getRequired());
+        if( p.getNumExtension() != 0 ){
         Map<String, Object> extensionMap = new HashMap<>();
-        for( Extension e : parameterObject.getExtensions() )
+        for( Extension e : p.getExtensions() )
         extensionMap.put(e.getKey(), e.getValue());
         parameter.setExtensions(extensionMap);
         }
@@ -405,42 +437,53 @@ public static Parameter ParameterOb.composeParameter (ParameterOb parameterObjec
         return parameter;
         }
 
-public static org.openapi4j.parser.model.v3.RequestBody RequestBodyOb.composeRequestBody (RequestBodyOb requestBodyObject, Map<Object, ASTNode> map){
-        org.openapi4j.parser.model.v3.RequestBody requestBody = new org.openapi4j.parser.model.v3.RequestBody();
+        syn RequestBody RequestBodyOb.composeRequestBody (RequestBodyOb requestBodyOb, Map<Object, ASTNode> map);
+        eq RequestBodyReference.composeRequestBody (RequestBodyOb requestBodyOb, Map<Object, ASTNode> map) {
+        RequestBody requestBody = new RequestBody();
+        RequestBodyReference r = (RequestBodyReference) requestBodyOb;
+
+        if( !r.getRef().isEmpty() )
+        requestBody.setRef(r.getRef());
+
+        return requestBody;
+        }
+        eq RequestBodyObject.composeRequestBody (RequestBodyOb requestBodyOb, Map<Object, ASTNode> map) {
+        RequestBody requestBody = new RequestBody();
+        RequestBodyObject r = (RequestBodyObject) requestBodyOb;
 
-        if( requestBodyObject.getNumContentTuple() != 0 ){
+        if( r.getNumContentTuple() != 0 ){
         Map<String, MediaType> contents = new HashMap<>();
-        for( ContentTuple t : requestBodyObject.getContentTuples())
-        contents.put(t.getKey(), MediaTypeObject.composeMediaType(t.getMediaTypeObject()));
+        for( ContentTuple t : r.getContentTuples())
+        contents.put(t.getKey(), MediaTypeObject.composeMediaType(t.getMediaTypeObject(), map));
         requestBody.setContentMediaTypes(contents);
         }
-        if( !requestBodyObject.getDescription().isEmpty() )
-        requestBody.setDescription(requestBodyObject.getDescription());
-        if( requestBodyObject.getRequired() != null )
-        requestBody.setRequired(requestBodyObject.getRequired());
-        if( !requestBodyObject.getRef().isEmpty() )
-        requestBody.setRef(requestBodyObject.getRef());
+        if( !r.getDescription().isEmpty() )
+        requestBody.setDescription(r.getDescription());
+        if( r.getRequired() != null )
+        requestBody.setRequired(r.getRequired());
 
         return requestBody;
         }
 
 public static MediaType MediaTypeObject.composeMediaType (MediaTypeObject mediaTypeObject, Map<Object, ASTNode> map){
         MediaType mediaType = new MediaType();
+        SchemaOb s;
 
-        if( mediaTypeObject.getSchemaObject() != null )
-        mediaType.setSchema(SchemaObject.composeSchema(mediaTypeObject.getSchemaObject()));
+        if( mediaTypeObject.getSchemaOb() != null ){
+        s = mediaTypeObject.getSchemaOb();
+        mediaType.setSchema(s.composeSchema(s, map));}
         if( mediaTypeObject.getExample() != null )
         mediaType.setExample(mediaTypeObject.getExample());
         if( mediaTypeObject.getNumExampleTuple() != 0 ){
         Map<String, Example> exampleMap = new HashMap<>();
         for( ExampleTuple t : mediaTypeObject.getExampleTuples() )
-        exampleMap.put(t.getKey(), ExampleObject.composeExample(t.getExampleObject()));
+        exampleMap.put(t.getKey(), ExampleObject.composeExample(t.getExampleObject(), map));
         mediaType.setExamples(exampleMap);
         }
         if( mediaTypeObject.getNumEncodingTuple() != 0 ){
         Map<String, EncodingProperty> encodingMap = new HashMap<>();
         for( EncodingTuple t : mediaTypeObject.getEncodingTuples() )
-        encodingMap.put(t.getKey(), EncodingObject.composeEncodingProperty(t.getEncodingObject()));
+        encodingMap.put(t.getKey(), EncodingObject.composeEncodingProperty(t.getEncodingObject(), map));
         mediaType.setEncodings(encodingMap);
         }
 
@@ -449,14 +492,16 @@ public static MediaType MediaTypeObject.composeMediaType (MediaTypeObject mediaT
 
 public static EncodingProperty EncodingObject.composeEncodingProperty (EncodingObject encodingObject, Map<Object, ASTNode> map){
         EncodingProperty encodingProperty = new EncodingProperty();
+        HeaderOb h;
 
         if( !encodingObject.getContentType().isEmpty() )
         encodingProperty.setContentType( encodingObject.getContentType() );
         if( encodingObject.getNumHeaderTuple() != 0 ){
         Map<String, Header> headers = new HashMap<>();
-        for( HeaderTuple t : encodingObject.getHeaderTuples() )
-        headers.put(t.getKey(), HeaderObject.composeHeader(t.getHeaderObject()));
-        encodingProperty.setHeaders(headers);
+        for( HeaderTuple t : encodingObject.getHeaderTuples() ) {
+        h = t.getHeaderOb();
+        headers.put(t.getKey(), h.composeHeader(h, map));
+        }        encodingProperty.setHeaders(headers);
         }
         if( !encodingObject.getStyle().isEmpty() )
         encodingProperty.setStyle(encodingObject.getStyle());
@@ -472,42 +517,65 @@ public static EncodingProperty EncodingObject.composeEncodingProperty (EncodingO
         return encodingProperty;
         }
 
-public static Response ResponseOb.composeResponse (ResponseObject responseObject, Map<Object, ASTNode> map){
+        syn Response ResponseOb.composeResponse (ResponseOb responseOb, Map<Object, ASTNode> map);
+        eq ResponseReference.composeResponse (ResponseOb responseOb, Map<Object, ASTNode> map){
+        Response response = new Response();
+        ResponseReference r = (ResponseReference) responseOb;
+
+        if( !r.getRef().isEmpty() )
+        response.setRef(r.getRef());
+
+        return response;
+        }
+        eq ResponseObject.composeResponse (ResponseOb responseOb, Map<Object, ASTNode> map){
         Response response = new Response();
+        ResponseObject r = (ResponseObject) responseOb;
 
-        if( !responseObject.getRef().isEmpty() )
-        response.setRef(responseObject.getRef());
-        if( !responseObject.getDescription().isEmpty() )
-        response.setDescription(responseObject.getDescription());
-        if( responseObject.getNumHeaderTuple() != 0 ){
+        if( !r.getDescription().isEmpty() )
+        response.setDescription(r.getDescription());
+        if( r.getNumHeaderTuple() != 0 ){
         Map<String, Header> headers = new HashMap<>();
-        for( HeaderTuple t : responseObject.getHeaderTuples() )
-        headers.put(t.getKey(), HeaderObject.composeHeader(t.getHeaderObject()));
+        for( HeaderTuple t : r.getHeaderTuples() )
+        headers.put(t.getKey(), t.getHeaderOb().composeHeader(t.getHeaderOb(), map));
         response.setHeaders(headers);
         }
-        if( responseObject.getNumContentTuple() != 0 ){
+        if( r.getNumContentTuple() != 0 ){
         Map<String, MediaType> contents = new HashMap<>();
-        for( ContentTuple t : responseObject.getContentTuples() )
-        contents.put(t.getKey(), MediaTypeObject.composeMediaType(t.getMediaTypeObject()));
+        for( ContentTuple t : r.getContentTuples() )
+        contents.put(t.getKey(), MediaTypeObject.composeMediaType(t.getMediaTypeObject(), map));
         response.setContentMediaTypes(contents);
         }
-        if( responseObject.getNumLinkTuple() != 0 ){
+        if( r.getNumLinkTuple() != 0 ){
         Map<String, Link> links = new HashMap<>();
-        for( LinkTuple t : responseObject.getLinkTuples() )
-        links.put(t.getKey(), LinkObject.composeLink(t.getLinkObject()));
+        for( LinkTuple t : r.getLinkTuples() )
+        links.put(t.getKey(), t.getLinkOb().composeLink(t.getLinkOb(), map));
         response.setLinks(links);
         }
 
         return response;
         }
 
-public static Callback CallbackOb.composeCallback (CallbackObject callbackObject, Map<Object, ASTNode> map){
+        syn Callback CallbackOb.composeCallback (CallbackOb callbackOb, Map<Object, ASTNode> map);
+        eq CallbackReference.composeCallback (CallbackOb callbackOb, Map<Object, ASTNode> map) {
+        Callback callback = new Callback();
+        CallbackReference c = (CallbackReference) callbackOb;
+
+        if( !c.getRef().isEmpty() )
+        callback.setRef(c.getRef());
+
+        return callback;
+        }
+        eq CallbackObject.composeCallback (CallbackOb callbackOb, Map<Object, ASTNode> map) {
         Callback callback = new Callback();
+        CallbackObject c = (CallbackObject) callbackOb;
 
-        if( callbackObject.getNumExpression() != 0 ){
+        if( c.getNumExpression() != 0 ){
         Map<String, Path> paths = new HashMap<>();
-        for( Expression e : callbackObject.getExpressions() )
-        paths.put( e.getName(), PathItem.composePath( e.getPathItem() ));
+        PathItemOb p;
+        for( Expression e : c.getExpressions() ) {
+        p = e.getPathItemOb();
+        paths.put(e.getName(), p.composePath(p, map));
+        }
         callback.setCallbackPaths(paths);
         }
 
@@ -535,61 +603,78 @@ public static Example ExampleObject.composeExample (ExampleObject exampleObject,
         return example;
         }
 
-public static Link LinkOb.composeLink (LinkObject linkObject, Map<Object, ASTNode> map){
+        syn Link LinkOb.composeLink (LinkOb linkOb, Map<Object, ASTNode> map);
+        eq LinkReference.composeLink (LinkOb linkOb, Map<Object, ASTNode> map){
         Link link = new Link();
+        LinkReference l = (LinkReference) linkOb;
 
+        if( !l.getRef().isEmpty() )
+        link.setRef(l.getRef());
 
-        if( !linkObject.getRef().isEmpty() )
-        link.setRef(linkObject.getRef());
-        if( !linkObject.getOperationRef().isEmpty() )
-        link.setOperationRef( linkObject.getOperationRef() );
-        if( !linkObject.getOperationID().isEmpty() )
-        link.setOperationId( linkObject.getOperationID() );
-        if( linkObject.getNumLinkParameterTuple() != 0 ){
+        return link;
+        }
+        eq LinkObject.composeLink (LinkOb linkOb, Map<Object, ASTNode> map){
+        Link link = new Link();
+        LinkObject l = (LinkObject) linkOb;
+
+        if( !l.getOperationRef().isEmpty() )
+        link.setOperationRef( l.getOperationRef() );
+        if( !l.getOperationID().isEmpty() )
+        link.setOperationId( l.getOperationID() );
+        if( l.getNumLinkParameterTuple() != 0 ){
         Map<String, String> parameters = new HashMap<>();
-        for( LinkParameterTuple t : linkObject.getLinkParameterTuples() )
+        for( LinkParameterTuple t : l.getLinkParameterTuples() )
         parameters.put( t.getLinkParameterKey(), t.getLinkParameterValue() );
         link.setParameters(parameters);
         }
-        if( !linkObject.getDescription().isEmpty() )
-        link.setDescription( linkObject.getDescription() );
-        if( linkObject.hasServerObject() )
-        link.setServer( ServerObject.composeServer(linkObject.getServerObject()) );
+        if( !l.getDescription().isEmpty() )
+        link.setDescription( l.getDescription() );
+        if( l.hasServerObject() )
+        link.setServer( ServerObject.composeServer(l.getServerObject(), map) );
 
         return link;
         }
 
-public static Header HeaderOb.composeHeader (HeaderObject headerObject, Map<Object, ASTNode> map){
+        syn Header HeaderOb.composeHeader (HeaderOb headerOb, Map<Object, ASTNode> map);
+        eq HeaderReference.composeHeader (HeaderOb headerOb, Map<Object, ASTNode> map) {
         Header header = new Header();
+        HeaderReference h = new HeaderReference();
+
+        if( !h.getRef().isEmpty() )
+        header.setRef(h.getRef());
 
-        if( !headerObject.getRef().isEmpty() )
-        header.setRef(headerObject.getRef());
-        if( headerObject.getRequired() != null )
-        header.setRequired(headerObject.getRequired());
-        if( !headerObject.getDescription().isEmpty() )
-        header.setDescription( headerObject.getDescription() );
-        if( !headerObject.getStyle().isEmpty() )
-        header.setStyle(headerObject.getStyle());
-        if( headerObject.getExplode() != null )
-        header.setExplode(headerObject.getExplode());
-        if( headerObject.getAllowReserved() != null )
-        header.setAllowReserved(headerObject.getAllowReserved());
-        if( headerObject.getExample() != null )
-        header.setExample(headerObject.getExample());
-        if( headerObject.getNumExampleTuple() != 0 ){
+        return header;
+        }
+        eq HeaderObject.composeHeader (HeaderOb headerOb, Map<Object, ASTNode> map) {
+        Header header = new Header();
+        HeaderObject h = (HeaderObject) headerOb;
+
+        if( h.getRequired() != null )
+        header.setRequired(h.getRequired());
+        if( !h.getDescription().isEmpty() )
+        header.setDescription( h.getDescription() );
+        if( !h.getStyle().isEmpty() )
+        header.setStyle(h.getStyle());
+        if( h.getExplode() != null )
+        header.setExplode(h.getExplode());
+        if( h.getAllowReserved() != null )
+        header.setAllowReserved(h.getAllowReserved());
+        if( h.getExample() != null )
+        header.setExample(h.getExample());
+        if( h.getNumExampleTuple() != 0 ){
         Map<String, Example> examples = new HashMap<>();
-        for( ExampleTuple t : headerObject.getExampleTuples() )
-        examples.put(t.getKey(), ExampleObject.composeExample(t.getExampleObject()));
+        for( ExampleTuple t : h.getExampleTuples() )
+        examples.put(t.getKey(), ExampleObject.composeExample(t.getExampleObject(), map));
         header.setExample(examples);
         }
-        if( headerObject.getNumContentTuple() != 0 ){
+        if( h.getNumContentTuple() != 0 ){
         Map<String, MediaType> contents = new HashMap<>();
-        for( ContentTuple t : headerObject.getContentTuples() )
-        contents.put(t.getKey(), MediaTypeObject.composeMediaType(t.getMediaTypeObject()));
+        for( ContentTuple t : h.getContentTuples() )
+        contents.put(t.getKey(), MediaTypeObject.composeMediaType(t.getMediaTypeObject(), map));
         header.setContentMediaTypes(contents);
         }
-        if( headerObject.hasSchemaObject() )
-            header.setSchema(SchemaObject.composeSchema(headerObject.getSchemaObject()));
+        if( h.hasSchemaOb() )
+        header.setSchema(h.getSchemaOb().composeSchema(h.getSchemaOb(), map));
 
         return header;
         }
@@ -602,7 +687,7 @@ public static org.openapi4j.parser.model.v3.Tag TagObject.composeTag (TagObject
         if( !tagObject.getDescription().isEmpty() )
         tag.setDescription( tagObject.getDescription() );
         if( tagObject.hasExternalDocObject() )
-        tag.setExternalDocs( ExternalDocObject.composeExternalDocs(tagObject.getExternalDocObject()) );
+        tag.setExternalDocs( ExternalDocObject.composeExternalDocs(tagObject.getExternalDocObject(), map) );
         if( tagObject.getNumExtension() != 0 ){
         Map<String, Object> extensionMap = new HashMap<>();
         for( Extension e : tagObject.getExtensions() )
@@ -613,100 +698,138 @@ public static org.openapi4j.parser.model.v3.Tag TagObject.composeTag (TagObject
         return tag;
         }
 
-public static org.openapi4j.parser.model.v3.Schema SchemaOb.composeSchema (SchemaOb schemaOb, Map<Object, ASTNode> map){
+        syn org.openapi4j.parser.model.v3.Schema SchemaOb.composeSchema (SchemaOb schemaOb, Map<Object, ASTNode> map);
+        eq SchemaReference.composeSchema (SchemaOb schemaOb, Map<Object, ASTNode> map){
+        org.openapi4j.parser.model.v3.Schema schema = new org.openapi4j.parser.model.v3.Schema();
+        SchemaReference s = (SchemaReference) schemaOb;
+
+        if( !s.getRef().isEmpty() )
+        schema.setRef(s.getRef());
+
+        return schema;
+        }
+        eq SchemaObject.composeSchema (SchemaOb schemaOb, Map<Object, ASTNode> map){
         org.openapi4j.parser.model.v3.Schema schema = new org.openapi4j.parser.model.v3.Schema();
+        SchemaObject s = (SchemaObject) schemaOb;
 
-        if( !schemaObject.getRef().isEmpty() )
-        schema.setRef(schemaObject.getRef());
-        if( schemaObject.getAdditionalProperties() != null )
-        schema.setAdditionalProperties(composeSchema(schemaObject.getAdditionalProperties()));
-        if( schemaObject.getAdditionalPropertiesAllowed() != null )
-        schema.setAdditionalPropertiesAllowed(schemaObject.getAdditionalPropertiesAllowed());
-        if( schemaObject.getDefaultValue() != null )
-        schema.setDefault(schemaObject.getDefaultValue());
-        if( !schemaObject.getDescription().isEmpty() )
-        schema.setDescription(schemaObject.getDescription());
-        if( schemaObject.getDeprecatedBoolean() != null )
-        schema.setDeprecated(schemaObject.getDeprecatedBoolean());
-        if( schemaObject.hasDiscriminatorObject() )
-        schema.setDiscriminator(DiscriminatorObject.composeDiscriminator(schemaObject.getDiscriminatorObject()));
-        if( schemaObject.getNumEnumObj() != 0 ){
-        for( EnumObj e : schemaObject.getEnumObjs() )
+        if( s.hasAdditionalProperties() ) {
+        SchemaOb o = s.getAdditionalProperties().getSchemaOb();
+        if ( o instanceof SchemaObject )
+        schema.setAdditionalProperties(((SchemaObject) o).composeSchema(o, map));
+        else
+        schema.setAdditionalProperties(((SchemaReference) o).composeSchema(o, map));
+        }
+        if( s.getAdditionalPropertiesAllowed() != null )
+        schema.setAdditionalPropertiesAllowed(s.getAdditionalPropertiesAllowed());
+        if( s.getDefaultValue() != null )
+        schema.setDefault(s.getDefaultValue());
+        if( !s.getDescription().isEmpty() )
+        schema.setDescription(s.getDescription());
+        if( s.getDeprecatedBoolean() != null )
+        schema.setDeprecated(s.getDeprecatedBoolean());
+        if( s.hasDiscriminatorObject() )
+        schema.setDiscriminator(DiscriminatorObject.composeDiscriminator(s.getDiscriminatorObject(), map));
+        if( s.getNumEnumObj() != 0 ){
+        for( EnumObj e : s.getEnumObjs() )
         schema.addEnum(e.getEnumOb());
         }
-        if( schemaObject.getExample() != null )
-        schema.setExample(schemaObject.getExample());
-        if( schemaObject.getExclusiveMaximum() != null )
-        schema.setExclusiveMaximum(schemaObject.getExclusiveMaximum());
-        if( schemaObject.getExclusiveMinimum() != null )
-        schema.setExclusiveMinimum(schemaObject.getExclusiveMinimum());
-        if( schemaObject.hasExternalDocObject() )
-        schema.setExternalDocs(ExternalDocObject.composeExternalDocs(schemaObject.getExternalDocObject()));
-        if( !schemaObject.getFormat().isEmpty() )
-        schema.setFormat(schemaObject.getFormat());
-        if( schemaObject.hasItemsSchema() )
-        schema.setItemsSchema(composeSchema(schemaObject.getItemsSchema().getSchemaObject()));
-        if( schemaObject.getMaximum() != null )
-        schema.setMaximum(schemaObject.getMaximum());
-        if( schemaObject.getMinimum() != null )
-        schema.setMinimum(schemaObject.getMinimum());
-        if( schemaObject.getMaxItems() != null )
-        schema.setMaxItems(schemaObject.getMaxItems());
-        if( schemaObject.getMinItems() != null )
-        schema.setMinItems(schemaObject.getMinItems());
-        if( schemaObject.getMaxLength() != null )
-        schema.setMaxLength(schemaObject.getMaxLength());
-        if( schemaObject.getMinLength() != null )
-        schema.setMinLength(schemaObject.getMinLength());
-        if( schemaObject.getMaxProperties() != null )
-        schema.setMaxProperties(schemaObject.getMaxProperties());
-        if( schemaObject.getMinProperties() != null )
-        schema.setMinProperties(schemaObject.getMinProperties());
-        if( schemaObject.getMultipleOf() != null )
-        schema.setMultipleOf(schemaObject.getMultipleOf());
-        if( schemaObject.hasNotSchema() )
-        schema.setNotSchema(composeSchema(schemaObject.getNotSchema().getSchemaObject()));
-        if( schemaObject.getNullable() != null )
-        schema.setNullable(schemaObject.getNullable());
-        if( !schemaObject.getPattern().isEmpty() )
-        schema.setPattern(schemaObject.getPattern());
-        if( schemaObject.getNumPropertyItem() != 0 ){
+        if( s.getExample() != null )
+        schema.setExample(s.getExample());
+        if( s.getExclusiveMaximum() != null )
+        schema.setExclusiveMaximum(s.getExclusiveMaximum());
+        if( s.getExclusiveMinimum() != null )
+        schema.setExclusiveMinimum(s.getExclusiveMinimum());
+        if( s.hasExternalDocObject() )
+        schema.setExternalDocs(ExternalDocObject.composeExternalDocs(s.getExternalDocObject(), map));
+        if( !s.getFormat().isEmpty() )
+        schema.setFormat(s.getFormat());
+        if( s.hasItemsSchema() ) {
+        if (s.getItemsSchema().getSchemaOb() instanceof SchemaObject)
+        schema.setItemsSchema(((SchemaObject) s.getItemsSchema().getSchemaOb()).composeSchema(s.getItemsSchema().getSchemaOb(), map));
+        else
+        schema.setItemsSchema(((SchemaReference) s.getItemsSchema().getSchemaOb()).composeSchema(s.getItemsSchema().getSchemaOb(), map));
+        }
+        if( s.getMaximum() != null )
+        schema.setMaximum(s.getMaximum());
+        if( s.getMinimum() != null )
+        schema.setMinimum(s.getMinimum());
+        if( s.getMaxItems() != null )
+        schema.setMaxItems(s.getMaxItems());
+        if( s.getMinItems() != null )
+        schema.setMinItems(s.getMinItems());
+        if( s.getMaxLength() != null )
+        schema.setMaxLength(s.getMaxLength());
+        if( s.getMinLength() != null )
+        schema.setMinLength(s.getMinLength());
+        if( s.getMaxProperties() != null )
+        schema.setMaxProperties(s.getMaxProperties());
+        if( s.getMinProperties() != null )
+        schema.setMinProperties(s.getMinProperties());
+        if( s.getMultipleOf() != null )
+        schema.setMultipleOf(s.getMultipleOf());
+        if( s.hasNotSchema() ) {
+        if( s.getNotSchema().getSchemaOb() instanceof SchemaObject )
+        schema.setNotSchema(((SchemaObject) s.getNotSchema().getSchemaOb()).composeSchema(s.getNotSchema().getSchemaOb(), map));
+        else
+        schema.setNotSchema(((SchemaReference) s.getNotSchema().getSchemaOb()).composeSchema(s.getNotSchema().getSchemaOb(), map));
+        }
+        if( s.getNullable() != null )
+        schema.setNullable(s.getNullable());
+        if( !s.getPattern().isEmpty() )
+        schema.setPattern(s.getPattern());
+        if( s.getNumPropertyItem() != 0 ){
         Map<String, org.openapi4j.parser.model.v3.Schema> properties = new HashMap<>();
-        for( PropertyItem p : schemaObject.getPropertyItemList() )
-        properties.put(p.getName(), composeSchema(p.getSchemaObject()));
+        for( PropertyItem p : s.getPropertyItemList() ) {
+        if( p.getSchemaOb() instanceof SchemaObject )
+        properties.put(p.getName(), ((SchemaObject) p.getSchemaOb()).composeSchema(p.getSchemaOb(), map));
+        else
+        properties.put(p.getName(), ((SchemaReference) p.getSchemaOb()).composeSchema(p.getSchemaOb(), map));
+        }
         schema.setProperties(properties);
         }
-        if( schemaObject.getNumRequiredField() != 0 ){
-        for( RequiredField r : schemaObject.getRequiredFields() )
+        if( s.getNumRequiredField() != 0 ){
+        for( RequiredField r : s.getRequiredFields() )
         schema.addRequiredField(r.getValue());
         }
-        if( schemaObject.getNumAllOfSchema() != 0 ){
-        for( AllOfSchema a : schemaObject.getAllOfSchemas() )
-        schema.addAllOfSchema(composeSchema(a.getSchemaObject()));
-        }
-        if( schemaObject.getNumAnyOfSchema() != 0 ){
-        for( AnyOfSchema a : schemaObject.getAnyOfSchemas() )
-        schema.addAnyOfSchema(composeSchema(a.getSchemaObject()));
-        }
-        if( schemaObject.getNumOneOfSchema() != 0 ){
-        for( OneOfSchema o : schemaObject.getOneOfSchemas() )
-        schema.addOneOfSchema(composeSchema(o.getSchemaObject()));
-        }
-        if( schemaObject.getReadOnly() != null )
-        schema.setReadOnly(schemaObject.getReadOnly());
-        if( schemaObject.getWriteOnly() != null )
-        schema.setWriteOnly(schemaObject.getWriteOnly());
-        if( !schemaObject.getType().isEmpty() )
-        schema.setType(schemaObject.getType());
-        if( !schemaObject.getTitle().isEmpty() )
-        schema.setTitle(schemaObject.getTitle());
-        if( schemaObject.getUniqueItems() != null )
-        schema.setUniqueItems(schemaObject.getUniqueItems());
-        if( schemaObject.hasXmlObject() )
-        schema.setXml(XmlObject.composeXml(schemaObject.getXmlObject()));
-        if( schemaObject.getNumExtension() != 0 ){
+        if( s.getNumAllOfSchema() != 0 ){
+        for( AllOfSchema a : s.getAllOfSchemas() ) {
+        if( a.getSchemaOb() instanceof SchemaObject )
+        schema.addAllOfSchema(((SchemaObject) a.getSchemaOb()).composeSchema(a.getSchemaOb(), map));
+        else
+        schema.addAllOfSchema(((SchemaReference) a.getSchemaOb()).composeSchema(a.getSchemaOb(), map));
+        }
+        }
+        if( s.getNumAnyOfSchema() != 0 ){
+        for( AnyOfSchema a : s.getAnyOfSchemas() ) {
+        if( a.getSchemaOb() instanceof SchemaObject )
+        schema.addAnyOfSchema(((SchemaObject) a.getSchemaOb()).composeSchema(a.getSchemaOb(), map));
+        else
+        schema.addAnyOfSchema(((SchemaReference) a.getSchemaOb()).composeSchema(a.getSchemaOb(), map));
+        }
+        }
+        if( s.getNumOneOfSchema() != 0 ){
+        for( OneOfSchema o : s.getOneOfSchemas() ) {
+        if( o.getSchemaOb() instanceof SchemaObject )
+        schema.addOneOfSchema(((SchemaObject) o.getSchemaOb()).composeSchema(o.getSchemaOb(), map));
+        else
+        schema.addOneOfSchema(((SchemaReference) o.getSchemaOb()).composeSchema(o.getSchemaOb(), map));
+        }
+        }
+        if( s.getReadOnly() != null )
+        schema.setReadOnly(s.getReadOnly());
+        if( s.getWriteOnly() != null )
+        schema.setWriteOnly(s.getWriteOnly());
+        if( !s.getType().isEmpty() )
+        schema.setType(s.getType());
+        if( !s.getTitle().isEmpty() )
+        schema.setTitle(s.getTitle());
+        if( s.getUniqueItems() != null )
+        schema.setUniqueItems(s.getUniqueItems());
+        if( s.hasXmlObject() )
+        schema.setXml(XmlObject.composeXml(s.getXmlObject(), map));
+        if( s.getNumExtension() != 0 ){
         Map<String, Object> extensionMap = new HashMap<>();
-        for( Extension e : schemaObject.getExtensions() )
+        for( Extension e : s.getExtensions() )
         extensionMap.put(e.getKey(), e.getValue());
         schema.setExtensions(extensionMap);
         }
@@ -729,7 +852,7 @@ public static Discriminator DiscriminatorObject.composeDiscriminator (Discrimina
         return discriminator;
         }
 
-public static Xml XmlObject.composeXml (XmlObject xmlObject) {
+public static Xml XmlObject.composeXml (XmlObject xmlObject, Map<Object, ASTNode> map) {
         Xml xml = new Xml();
 
         if( !xmlObject.getName().isEmpty() )
@@ -746,28 +869,39 @@ public static Xml XmlObject.composeXml (XmlObject xmlObject) {
         return xml;
         }
 
-public static SecurityScheme SecuritySchemeOb.composeSecurityScheme (SecuritySchemeObject securitySchemeObject, Map<Object, ASTNode> map){
+        syn SecurityScheme SecuritySchemeOb.composeSecurityScheme (SecuritySchemeOb securitySchemeOb, Map<Object, ASTNode> map);
+        eq SecuritySchemeReference.composeSecurityScheme (SecuritySchemeOb securitySchemeOb, Map<Object, ASTNode> map){
         SecurityScheme securityScheme = new SecurityScheme();
+        SecuritySchemeReference s = (SecuritySchemeReference) securitySchemeOb;
+
+        if( !s.getRef().isEmpty() )
+        securityScheme.setRef(s.getRef());
 
-        if( !securitySchemeObject.getType().isEmpty() )
-        securityScheme.setType(securitySchemeObject.getType());
-        if( !securitySchemeObject.getName().isEmpty() )
-        securityScheme.setName(securitySchemeObject.getName());
-        if( !securitySchemeObject.getIn().isEmpty() )
-        securityScheme.setIn(securitySchemeObject.getIn());
-        if( !securitySchemeObject.getScheme().isEmpty() )
-        securityScheme.setScheme(securitySchemeObject.getScheme());
-        if( !securitySchemeObject.getOpenIdConnectUrl().isEmpty() )
-        securityScheme.setOpenIdConnectUrl(securitySchemeObject.getOpenIdConnectUrl());
-        if( securitySchemeObject.getOAuthFlowsObject() != null )
-        securityScheme.setFlows(OAuthFlowsObject.composeOAuthFlows(securitySchemeObject.getOAuthFlowsObject()));
-        if( !securitySchemeObject.getDescription().isEmpty() )
-        securityScheme.setDescription( securitySchemeObject.getDescription() );
-        if( !securitySchemeObject.getBearerFormat().isEmpty() )
-        securityScheme.setBearerFormat( securitySchemeObject.getBearerFormat() );
-        if( securitySchemeObject.getNumExtension() != 0 ){
+        return securityScheme;
+        }
+        eq SecuritySchemeObject.composeSecurityScheme (SecuritySchemeOb securitySchemeOb, Map<Object, ASTNode> map){
+        SecurityScheme securityScheme = new SecurityScheme();
+        SecuritySchemeObject s = (SecuritySchemeObject) securitySchemeOb;
+
+        if( !s.getType().isEmpty() )
+        securityScheme.setType(s.getType());
+        if( !s.getName().isEmpty() )
+        securityScheme.setName(s.getName());
+        if( !s.getIn().isEmpty() )
+        securityScheme.setIn(s.getIn());
+        if( !s.getScheme().isEmpty() )
+        securityScheme.setScheme(s.getScheme());
+        if( !s.getOpenIdConnectUrl().isEmpty() )
+        securityScheme.setOpenIdConnectUrl(s.getOpenIdConnectUrl());
+        if( s.getOAuthFlowsObject() != null )
+        securityScheme.setFlows(OAuthFlowsObject.composeOAuthFlows(s.getOAuthFlowsObject(), map));
+        if( !s.getDescription().isEmpty() )
+        securityScheme.setDescription( s.getDescription() );
+        if( !s.getBearerFormat().isEmpty() )
+        securityScheme.setBearerFormat( s.getBearerFormat() );
+        if( s.getNumExtension() != 0 ){
         Map<String, Object> extensionMap = new HashMap<>();
-        for( Extension e : securitySchemeObject.getExtensions() )
+        for( Extension e : s.getExtensions() )
         extensionMap.put(e.getKey(), e.getValue());
         securityScheme.setExtensions(extensionMap);
         }
@@ -779,18 +913,13 @@ public static OAuthFlows OAuthFlowsObject.composeOAuthFlows (OAuthFlowsObject oA
         OAuthFlows oAuthFlows = new OAuthFlows();
 
         if( oAuthFlowsObject.hasImplicit() )
-        oAuthFlows.setImplicit( OAuthFlowObject.composeOAuthFlow(oAuthFlowsObject.getImplicit().getOAuthFlowObject()) );
-        if( oAuthFlowsObject.hasPassword() ){
-        System.out.println("Password eingegangen : " + oAuthFlowsObject.getPassword().getOAuthFlowObject().getAuthorizationUrl() );
-        System.out.println("Password eingegangen : " + oAuthFlowsObject.getPassword().getOAuthFlowObject().getConfiguration() );
-        System.out.println("Password eingegangen : " + oAuthFlowsObject.getPassword().getOAuthFlowObject().getTokenUrl() );
-        System.out.println("Password eingegangen : " + oAuthFlowsObject.getPassword().getOAuthFlowObject().getRefreshUrl() );
-        oAuthFlows.setPassword( OAuthFlowObject.composeOAuthFlow(oAuthFlowsObject.getPassword().getOAuthFlowObject()) );
-        }
+        oAuthFlows.setImplicit( OAuthFlowObject.composeOAuthFlow(oAuthFlowsObject.getImplicit().getOAuthFlowObject(), map) );
+        if( oAuthFlowsObject.hasPassword() )
+        oAuthFlows.setPassword( OAuthFlowObject.composeOAuthFlow(oAuthFlowsObject.getPassword().getOAuthFlowObject(), map) );
         if( oAuthFlowsObject.hasClientCredentials() )
-        oAuthFlows.setClientCredentials( OAuthFlowObject.composeOAuthFlow(oAuthFlowsObject.getClientCredentials().getOAuthFlowObject()) );
+        oAuthFlows.setClientCredentials( OAuthFlowObject.composeOAuthFlow(oAuthFlowsObject.getClientCredentials().getOAuthFlowObject(), map) );
         if( oAuthFlowsObject.hasAuthorizationCode() )
-        oAuthFlows.setAuthorizationCode( OAuthFlowObject.composeOAuthFlow(oAuthFlowsObject.getAuthorizationCode().getOAuthFlowObject()) );
+        oAuthFlows.setAuthorizationCode( OAuthFlowObject.composeOAuthFlow(oAuthFlowsObject.getAuthorizationCode().getOAuthFlowObject(), map) );
 
         return oAuthFlows;
         }
diff --git a/src/main/jastadd/OpenAPISpecification.ast b/src/main/jastadd/OpenAPISpecification.ast
index 6d2a1b739aade8516afbdfb49f71194fc865be59..1d9ac86b3091743734ec1ea701768adf17cb237b 100644
--- a/src/main/jastadd/OpenAPISpecification.ast
+++ b/src/main/jastadd/OpenAPISpecification.ast
@@ -38,17 +38,18 @@ PathsObject ::= <Ref> PathItemOb;
 abstract PathItemOb;
 PathItemReference : PathItemOb ::= <Ref> <PathItemOb:PathItemOb>;
 PathItemObject : PathItemOb ::= <Summary> <Description> [Get] [Put] [Post] [Delete] [Options] [Head] [Patch] [Trace] ServerObject* ParameterOb* Extension*;
-Get ::= OperationObject;
-Put ::= OperationObject;
-Post ::= OperationObject;
-Delete ::= OperationObject;
-Options ::= OperationObject;
-Head ::= OperationObject;
-Patch ::= OperationObject;
-Trace ::= OperationObject;
 
 //Operation Object
-OperationObject ::= Tag* <Summary> <Description> [ExternalDocObject] <OperationID> ParameterOb* [RequestBodyOb] ResponseTuple* CallbackTuple* <DeprecatedBoolean:Boolean> SecurityRequirementObject* ServerObject* <Required:Boolean> Extension*;
+abstract OperationOb;
+OperationObject : OperationOb ::= Tag* <Summary> <Description> [ExternalDocObject] <OperationID> ParameterOb* [RequestBodyOb] ResponseTuple* CallbackTuple* <DeprecatedBoolean:Boolean> SecurityRequirementObject* ServerObject* <Required:Boolean> Extension*;
+Get : OperationOb ::= <OperationObject:OperationObject>;
+Put : OperationOb ::= <OperationObject:OperationObject>;
+Post : OperationOb ::= <OperationObject:OperationObject>;
+Delete : OperationOb ::= <OperationObject:OperationObject>;
+Options : OperationOb ::= <OperationObject:OperationObject>;
+Head : OperationOb ::= <OperationObject:OperationObject>;
+Patch : OperationOb ::= <OperationObject:OperationObject>;
+Trace : OperationOb ::= <OperationObject:OperationObject>;
 Tag ::= <Tag:String>;
 
 //External Documentation Object
@@ -104,7 +105,7 @@ TagObject ::= <Name> <Description> [ExternalDocObject] Extension*;
 //Schema Object
 abstract SchemaOb;
 SchemaReference : SchemaOb ::= <Ref> <SchemaOb:SchemaOb>;
-SchemaObject : SchemaOb ::= <AdditionalProperties:SchemaOb> <AdditionalPropertiesAllowed:Boolean> <DefaultValue:Object> <Description> <DeprecatedBoolean:Boolean> [DiscriminatorObject] EnumObj* <Example:Object> <ExclusiveMaximum:Boolean> <ExclusiveMinimum:Boolean> [ExternalDocObject] <Format> [ItemsSchema] <Maximum:Number> <Minimum:Number> <MaxItems:Integer> <MinItems:Integer> <MaxLength:Integer> <MinLength:Integer> <MaxProperties:Integer> <MinProperties:Integer> <MultipleOf:Number> [NotSchema] <Nullable:Boolean> <Pattern> PropertyItem* RequiredField* AllOfSchema* AnyOfSchema* OneOfSchema* <ReadOnly:Boolean> <WriteOnly:Boolean> <Type> <Title> <UniqueItems:Boolean> [XmlObject] Extension*;
+SchemaObject : SchemaOb ::= [AdditionalProperties] <AdditionalPropertiesAllowed:Boolean> <DefaultValue:Object> <Description> <DeprecatedBoolean:Boolean> [DiscriminatorObject] EnumObj* <Example:Object> <ExclusiveMaximum:Boolean> <ExclusiveMinimum:Boolean> [ExternalDocObject] <Format> [ItemsSchema] <Maximum:Number> <Minimum:Number> <MaxItems:Integer> <MinItems:Integer> <MaxLength:Integer> <MinLength:Integer> <MaxProperties:Integer> <MinProperties:Integer> <MultipleOf:Number> [NotSchema] <Nullable:Boolean> <Pattern> PropertyItem* RequiredField* AllOfSchema* AnyOfSchema* OneOfSchema* <ReadOnly:Boolean> <WriteOnly:Boolean> <Type> <Title> <UniqueItems:Boolean> [XmlObject] Extension*;
 AdditionalProperties ::= SchemaOb;
 EnumObj ::= <EnumOb:Object>;
 ItemsSchema ::= SchemaOb;
diff --git a/src/main/jastadd/Parser.jrag b/src/main/jastadd/Parser.jrag
index 41ac81aaf825c7323014e6ef522783e1f3d59492..f432f5a70b06ccaff575b893c95b2d95de063f0a 100644
--- a/src/main/jastadd/Parser.jrag
+++ b/src/main/jastadd/Parser.jrag
@@ -143,67 +143,40 @@ public static ComponentsObject ComponentsObject.parseComponents(Components compo
         ComponentsObject componentsObject = new ComponentsObject();
 
         if( components.getSchemas() != null ){
-        for( String key : components.getSchemas().keySet() ){
-        SchemaTuple schemaTuple = new SchemaTuple();
-        schemaTuple.setKey(key);
-        schemaTuple.setSchemaOb(SchemaOb.parseSchema(components.getSchema(key), context, map));
-        }
+        for( String key : components.getSchemas().keySet() )
+        componentsObject.addSchemaTuple(new SchemaTuple(key, SchemaOb.parseSchema(components.getSchema(key), context, map)));
         }
         if( components.getResponses() != null ){
-        for( String key : components.getResponses().keySet() ){
-        ResponseTuple responseTuple = new ResponseTuple();
-        responseTuple.setKey(key);
-        responseTuple.setResponseOb(ResponseOb.parseResponse(components.getResponse(key), context, map));
-        }
+        for( String key : components.getResponses().keySet() )
+        componentsObject.addResponseTuple(new ResponseTuple(key, ResponseOb.parseResponse(components.getResponse(key), context, map)));
         }
         if( components.getParameters() != null ){
-        for( String key : components.getParameters().keySet() ){
-        ParameterTuple parameterTuple = new ParameterTuple();
-        parameterTuple.setKey(key);
-        parameterTuple.setParameterOb(ParameterOb.parseParameter(components.getParameter(key), context, map));
-        }
+        for( String key : components.getParameters().keySet() )
+        componentsObject.addParameterTuple(new ParameterTuple(key, ParameterOb.parseParameter(components.getParameter(key), context, map)));
         }
         if( components.getExamples() != null ){
-        for( String key : components.getExamples().keySet() ){
-        ExampleTuple exampleTuple = new ExampleTuple();
-        exampleTuple.setKey(key);
-        exampleTuple.setExampleObject(ExampleObject.parseExample(components.getExample(key), context, map));
-        }
+        for( String key : components.getExamples().keySet() )
+        componentsObject.addExampleTuple(new ExampleTuple(key, ExampleObject.parseExample(components.getExample(key), context, map)));
         }
         if( components.getRequestBodies() != null ){
-        for( String key : components.getRequestBodies().keySet() ){
-        RequestBodyTuple requestBodyTuple = new RequestBodyTuple();
-        requestBodyTuple.setKey(key);
-        requestBodyTuple.setRequestBodyOb(RequestBodyOb.parseRequestBody(components.getRequestBody(key), context, map));
-        }
+        for( String key : components.getRequestBodies().keySet() )
+        componentsObject.addRequestBodyTuple(new RequestBodyTuple(key, RequestBodyOb.parseRequestBody(components.getRequestBody(key), context, map)));
         }
         if( components.getHeaders() != null ){
-        for( String key : components.getHeaders().keySet() ){
-        HeaderTuple headerTuple = new HeaderTuple();
-        headerTuple.setKey(key);
-        headerTuple.setHeaderOb(HeaderOb.parseHeader(components.getHeader(key), context, map));
-        }
+        for( String key : components.getHeaders().keySet() )
+        componentsObject.addHeaderTuple(new HeaderTuple(key, HeaderOb.parseHeader(components.getHeader(key), context, map)));
         }
         if( components.getSecuritySchemes() != null ){
-        for( String key : components.getSecuritySchemes().keySet() ){
-        SecuritySchemeTuple securitySchemeTuple = new SecuritySchemeTuple();
-        securitySchemeTuple.setKey(key);
-        securitySchemeTuple.setSecuritySchemeOb(SecuritySchemeOb.parseSecurityScheme(components.getSecurityScheme(key), context, map));
-        }
+        for( String key : components.getSecuritySchemes().keySet() )
+        componentsObject.addSecuritySchemeTuple(new SecuritySchemeTuple(key, SecuritySchemeOb.parseSecurityScheme(components.getSecurityScheme(key), context, map)));
         }
         if( components.getLinks() != null ){
-        for( String key : components.getLinks().keySet() ){
-        LinkTuple linkTuple = new LinkTuple();
-        linkTuple.setKey(key);
-        linkTuple.setLinkOb(LinkOb.parseLink(components.getLink(key), context, map));
-        }
+        for( String key : components.getLinks().keySet() )
+        componentsObject.addLinkTuple(new LinkTuple(key, LinkOb.parseLink(components.getLink(key), context, map)));
         }
         if( components.getCallbacks() != null ){
-        for( String key : components.getCallbacks().keySet() ){
-        CallbackTuple callbackTuple = new CallbackTuple();
-        callbackTuple.setKey(key);
-        callbackTuple.setCallbackOb(CallbackOb.parseCallback(components.getCallback(key), context, map));
-        }
+        for( String key : components.getCallbacks().keySet() )
+        componentsObject.addCallbackTuple(new CallbackTuple(key, CallbackOb.parseCallback(components.getCallback(key), context, map)));
         }
         if( components.getExtensions() != null ){
         for( String key : components.getExtensions().keySet() )
@@ -660,7 +633,7 @@ public static SchemaOb SchemaOb.parseSchema (org.openapi4j.parser.model.v3.Schem
         return s;
         } else {
         if( schema.getAdditionalProperties() != null )
-        schemaObject.setAdditionalProperties(parseSchema(schema.getAdditionalProperties(), context, map));
+        schemaObject.setAdditionalProperties(new AdditionalProperties(parseSchema(schema.getAdditionalProperties(), context, map)));
         if( schema.getAdditionalProperties() == null && schema.getAdditionalPropertiesAllowed() != null )
         schemaObject.setAdditionalPropertiesAllowed(schema.getAdditionalPropertiesAllowed());
         if( schema.getDefault() != null )
@@ -772,118 +745,6 @@ public static SchemaOb SchemaOb.parseSchema (org.openapi4j.parser.model.v3.Schem
         }
         }
 
-        if( schema.getAdditionalProperties() != null )
-        schemaObject.setAdditionalProperties(parseSchema(schema.getAdditionalProperties(), context, map));
-        if( schema.getAdditionalProperties() == null && schema.getAdditionalPropertiesAllowed() != null )
-        schemaObject.setAdditionalPropertiesAllowed(schema.getAdditionalPropertiesAllowed());
-        if( schema.getDefault() != null )
-        schemaObject.setDefaultValue(schema.getDefault());
-        if( schema.getDescription() != null )
-        schemaObject.setDescription(schema.getDescription());
-        if( schema.getDeprecated() != null )
-        schemaObject.setDeprecatedBoolean(schema.getDeprecated());
-        if( schema.getDiscriminator() != null )
-        schemaObject.setDiscriminatorObject(DiscriminatorObject.parseDiscriminator(schema.getDiscriminator(), map));
-        if( schema.getEnums() != null ){
-        for( Object o : schema.getEnums() ){
-        EnumObj enumObj = new EnumObj();
-        enumObj.setEnumOb(o);
-        schemaObject.addEnumObj(enumObj);
-        }
-        }
-        if( schema.getExample() != null )
-        schemaObject.setExample(schema.getExample());
-        if( schema.getExclusiveMaximum() != null )
-        schemaObject.setExclusiveMaximum(schema.getExclusiveMaximum());
-        if( schema.getExclusiveMinimum() != null )
-        schemaObject.setExclusiveMinimum(schema.getExclusiveMinimum());
-        if( schema.getExternalDocs() != null )
-        schemaObject.setExternalDocObject(ExternalDocObject.parseExternalDocs(schema.getExternalDocs(), map));
-        if( schema.getFormat() != null )
-        schemaObject.setFormat(schema.getFormat());
-        if( schema.getItemsSchema() != null ){
-        ItemsSchema itemsSchema = new ItemsSchema();
-        itemsSchema.setSchemaOb(parseSchema(schema.getItemsSchema(), context, map));
-        schemaObject.setItemsSchema(itemsSchema);
-        }
-        if( schema.getMaximum() != null )
-        schemaObject.setMaximum(schema.getMaximum());
-        if( schema.getMinimum() != null )
-        schemaObject.setMinimum(schema.getMinimum());
-        if( schema.getMaxItems() != null )
-        schemaObject.setMaxItems(schema.getMaxItems());
-        if( schema.getMinItems() != null )
-        schemaObject.setMinItems(schema.getMinItems());
-        if( schema.getMaxLength() != null )
-        schemaObject.setMaxLength(schema.getMaxLength());
-        if( schema.getMinLength() != null )
-        schemaObject.setMinLength(schema.getMinLength());
-        if( schema.getMaxProperties() != null )
-        schemaObject.setMaxProperties(schema.getMaxProperties());
-        if( schema.getMinProperties() != null )
-        schemaObject.setMinProperties(schema.getMinProperties());
-        if( schema.getMultipleOf() != null )
-        schemaObject.setMultipleOf(schema.getMultipleOf());
-        if( schema.getNotSchema() != null ){
-        NotSchema notSchema = new NotSchema();
-        notSchema.setSchemaOb(parseSchema(schema.getNotSchema(), context, map));
-        schemaObject.setNotSchema(notSchema);
-        }
-        if( schema.getNullable() != null )
-        schemaObject.setNullable(schema.getNullable());
-        if( schema.getPattern() != null )
-        schemaObject.setPattern(schema.getPattern());
-        if( schema.getProperties() != null  ){
-        for( String key : schema.getProperties().keySet() ){
-        PropertyItem propertyItem = new PropertyItem();
-        schemaObject.addPropertyItem(new PropertyItem(key, parseSchema(schema.getProperty(key), context, map)));
-        }
-        }
-        if( schema.getRequiredFields() != null ){
-        for( String s : schema.getRequiredFields() ){
-        RequiredField requiredField = new RequiredField();
-        requiredField.setValue(s);
-        schemaObject.addRequiredField(requiredField);
-        }
-        }
-        if( schema.getAllOfSchemas() != null ){
-        for(org.openapi4j.parser.model.v3.Schema schemaItem : schema.getAllOfSchemas()){
-        AllOfSchema allOfSchema = new AllOfSchema();
-        allOfSchema.setSchemaOb(parseSchema(schemaItem, context, map));
-        schemaObject.addAllOfSchema(allOfSchema);
-        }
-        }
-        if( schema.getAnyOfSchemas() != null ){
-        for(org.openapi4j.parser.model.v3.Schema schemaItem : schema.getAnyOfSchemas()){
-        AnyOfSchema anyOfSchema = new AnyOfSchema();
-        anyOfSchema.setSchemaOb(parseSchema(schemaItem, context, map));
-        schemaObject.addAnyOfSchema(anyOfSchema);
-        }
-        }
-        if( schema.getOneOfSchemas() != null ){
-        for(org.openapi4j.parser.model.v3.Schema schemaItem : schema.getOneOfSchemas()){
-        OneOfSchema oneOfSchema = new OneOfSchema();
-        oneOfSchema.setSchemaOb(parseSchema(schemaItem, context, map));
-        schemaObject.addOneOfSchema(oneOfSchema);
-        }
-        }
-        if( schema.getReadOnly() != null )
-        schemaObject.setReadOnly(schema.getReadOnly());
-        if( schema.getWriteOnly() != null )
-        schemaObject.setWriteOnly(schema.getWriteOnly());
-        if( schema.getType() != null )
-        schemaObject.setType(schema.getType());
-        if( schema.getTitle() != null )
-        schemaObject.setTitle(schema.getTitle());
-        if( schema.getUniqueItems() != null )
-        schemaObject.setUniqueItems(schema.getUniqueItems());
-        if( schema.getXml() != null )
-        schemaObject.setXmlObject(XmlObject.parseXml(schema.getXml(), map));
-        if( schema.getExtensions() != null ){
-        for( String key : schema.getExtensions().keySet() )
-        schemaObject.addExtension(new Extension(key, schema.getExtensions().get(key)));
-        }
-
         map.put(schema, schemaObject);
         return schemaObject;
         }
diff --git a/src/main/jastadd/RandomRequestGenerator.jadd b/src/main/jastadd/RandomRequestGenerator.jrag
similarity index 58%
rename from src/main/jastadd/RandomRequestGenerator.jadd
rename to src/main/jastadd/RandomRequestGenerator.jrag
index 174e779d5241cba42ef581a8aac068d45e1e5b06..d2b10bd66d4df4167cb341e82d0219c16517bf9d 100644
--- a/src/main/jastadd/RandomRequestGenerator.jadd
+++ b/src/main/jastadd/RandomRequestGenerator.jrag
@@ -17,30 +17,33 @@ aspect RandomRequestGenerator {
 
      */
 
+    //coll Set<MappingTuple> OpenAPIObject.getRandomUrl() [new HashSet<>()];
+    //    MappingTuple contributes this when generateRequests() to OpenAPIObject.getRandomUrl();
 
-/*
-    public void OpenAPIObject.generateRequests() throws Exception {
+    //inh MappingTuple
+
+    public String OpenAPIObject.generateRequests() throws Exception {
         String baseUrl = this.getServerObject(0).getUrl();
 
         for( PathsObject p : this.getPathsObjects() )
         p.sendRandomRequests(baseUrl);
-
+        return "";
     }
 
     public void PathsObject.sendRandomRequests(String baseUrl) throws Exception {
-        if( this.getPathItem().hasGet() ){
+        if( this.getPathItemOb().pathItemObject().hasGet() ){
         IntStream.range(0, 1).forEach( i -> {
         try {
-        this.getPathItem().getGet().getOperationObject().sendRandomGET(baseUrl+this.getRef());
+        this.getPathItemOb().pathItemObject().getGet().getOperationObject().sendRandomGET(baseUrl+this.getRef());
         } catch (Exception e) {
         e.printStackTrace();
         }
         });
         }
-        if( this.getPathItem().hasPost() ){
+        if( this.getPathItemOb().pathItemObject().hasPost() ){
         IntStream.range(0, 1).forEach( i -> {
         try {
-        this.getPathItem().getPost().getOperationObject().sendRandomPOST(baseUrl+this.getRef());
+        this.getPathItemOb().pathItemObject().getPost().getOperationObject().sendRandomPOST(baseUrl+this.getRef());
         } catch (Exception e) {
         e.printStackTrace();
         }
@@ -50,36 +53,38 @@ aspect RandomRequestGenerator {
     public void OperationObject.sendRandomGET(String targetUrl) throws Exception {
         Random rand = new Random();
 
-        for( ParameterObject p : this.getParameterObjects() ){
+        for( ParameterOb o : this.getParameterObs() ){
+        ParameterObject p = o.parameterObject();
+        SchemaObject s = p.getSchemaOb().schemaObject();
         if( p.getIn().equals("path") ){
         String pathPart = targetUrl.substring(targetUrl.indexOf("{") ,targetUrl.indexOf("}") + 1);
 
-        if( p.getSchemaObject().getType().equals("string") )
-        targetUrl = targetUrl.replace(pathPart, this.generateRandomString(rand, p.getSchemaObject().getEnumObjs()));
-        else if( p.getSchemaObject().getType().equals("integer") )
+        if( s.getType().equals("string") )
+        targetUrl = targetUrl.replace(pathPart, this.generateRandomString(rand, s.getEnumObjs()));
+        else if( s.getType().equals("integer") )
         targetUrl = targetUrl.replace(pathPart, this.generateRandomInt( rand,
-        -1, // p.getSchemaObject().getMinimum() != null ? p.getSchemaObject().getMinimum().intValue() : -1,
-        10 // p.getSchemaObject().getMaximum() != null ? p.getSchemaObject().getMaximum().intValue() : -1
+        -1, // s.getMinimum() != null ? s.getMinimum().intValue() : -1,
+        10 // s.getMaximum() != null ? s.getMaximum().intValue() : -1
         ));
         }
         else if( p.getIn().equals("query") ){
 
-        if( p.getSchemaObject().getType().equals("string") )
-        targetUrl = targetUrl + "&" + p.getName() + "=" + this.generateRandomString(rand, p.getSchemaObject().getEnumObjs());
-        else if( p.getSchemaObject().getType().equals("integer") )
+        if( s.getType().equals("string") )
+        targetUrl = targetUrl + "&" + p.getName() + "=" + this.generateRandomString(rand, s.getEnumObjs());
+        else if( s.getType().equals("integer") )
         targetUrl = targetUrl + "&" + p.getName() + "=" + this.generateRandomInt(  rand,
-        -1, // p.getSchemaObject().getMinimum() != null ? p.getSchemaObject().getMinimum().intValue() : -1,
-        10); // p.getSchemaObject().getMaximum() != null ? p.getSchemaObject().getMaximum().intValue() : -1
-        else if( p.getSchemaObject().getType().equals("array") ){
-        if( p.getSchemaObject().getItemsSchema().getSchemaObject().getType().equals("string") ){
-        for( EnumObj e : p.getSchemaObject().getItemsSchema().getSchemaObject().getEnumObjs() )
+        -1, // s.getMinimum() != null ? s.getMinimum().intValue() : -1,
+        10); // s.getMaximum() != null ? s.getMaximum().intValue() : -1
+        else if( s.getType().equals("array") ){
+        if( s.getItemsSchema().getSchemaOb().schemaObject().getType().equals("string") ){
+        for( EnumObj e : s.getItemsSchema().getSchemaOb().schemaObject().getEnumObjs() )
         targetUrl=rand.nextDouble()< 0.5?targetUrl+"&"+p.getName()+"="+e.getEnumOb():targetUrl;
         }
-        else if( p.getSchemaObject().getItemsSchema().getSchemaObject().getType().equals("integer") ){
+        else if( s.getItemsSchema().getSchemaOb().schemaObject().getType().equals("integer") ){
         for( int i = 0 ; i < 5 ; i++ )
         targetUrl = targetUrl + "&" + p.getName() + "=" + this.generateRandomInt(  rand,
-        -1, // p.getSchemaObject().getMinimum() != null ? p.getSchemaObject().getMinimum().intValue() : -1,
-        10); // p.getSchemaObject().getMaximum() != null ? p.getSchemaObject().getMaximum().intValue() : -1
+        -1, // s.getMinimum() != null ? s.getMinimum().intValue() : -1,
+        10); // s.getMaximum() != null ? s.getMaximum().intValue() : -1
         }
 
         }
@@ -101,36 +106,38 @@ aspect RandomRequestGenerator {
     public void OperationObject.sendRandomPOST(String targetUrl) throws Exception {
         Random rand = new Random();
 
-        for( ParameterObject p : this.getParameterObjects() ){
+        for( ParameterOb o : this.getParameterObs() ){
+        ParameterObject p = o.parameterObject();
+        SchemaObject s = p.getSchemaOb().schemaObject();
         if( p.getIn().equals("path") ){
         String pathPart = targetUrl.substring(targetUrl.indexOf("{") ,targetUrl.indexOf("}") + 1);
 
-        if( p.getSchemaObject().getType().equals("string") )
-        targetUrl = targetUrl.replace(pathPart, this.generateRandomString(rand, p.getSchemaObject().getEnumObjs()));
-        else if( p.getSchemaObject().getType().equals("integer") )
+        if( s.getType().equals("string") )
+        targetUrl = targetUrl.replace(pathPart, this.generateRandomString(rand, s.getEnumObjs()));
+        else if( s.getType().equals("integer") )
         targetUrl = targetUrl.replace(pathPart, this.generateRandomInt( rand,
-        -1, // p.getSchemaObject().getMinimum() != null ? p.getSchemaObject().getMinimum().intValue() : -1,
-        10 // p.getSchemaObject().getMaximum() != null ? p.getSchemaObject().getMaximum().intValue() : -1
+        -1, // s.getMinimum() != null ? s.getMinimum().intValue() : -1,
+        10 // s.getMaximum() != null ? s.getMaximum().intValue() : -1
         ));
         }
         else if( p.getIn().equals("query") ){
 
-        if( p.getSchemaObject().getType().equals("string") )
-        targetUrl = targetUrl + "&" + p.getName() + "=" + this.generateRandomString(rand, p.getSchemaObject().getEnumObjs());
-        else if( p.getSchemaObject().getType().equals("integer") )
+        if( s.getType().equals("string") )
+        targetUrl = targetUrl + "&" + p.getName() + "=" + this.generateRandomString(rand, s.getEnumObjs());
+        else if( s.getType().equals("integer") )
         targetUrl = targetUrl + "&" + p.getName() + "=" + this.generateRandomInt(  rand,
-        -1, // p.getSchemaObject().getMinimum() != null ? p.getSchemaObject().getMinimum().intValue() : -1,
-        10); // p.getSchemaObject().getMaximum() != null ? p.getSchemaObject().getMaximum().intValue() : -1
-        else if( p.getSchemaObject().getType().equals("array") ){
-        if( p.getSchemaObject().getItemsSchema().getSchemaObject().getType().equals("string") ){
-        for( EnumObj e : p.getSchemaObject().getItemsSchema().getSchemaObject().getEnumObjs() )
+        -1, // s.getMinimum() != null ? s.getMinimum().intValue() : -1,
+        10); // s.getMaximum() != null ? s.getMaximum().intValue() : -1
+        else if( s.getType().equals("array") ){
+        if( s.getItemsSchema().getSchemaOb().schemaObject().getType().equals("string") ){
+        for( EnumObj e : s.getItemsSchema().getSchemaOb().schemaObject().getEnumObjs() )
         targetUrl=rand.nextDouble()< 0.5?targetUrl+"&"+p.getName()+"="+e.getEnumOb():targetUrl;
         }
-        else if( p.getSchemaObject().getItemsSchema().getSchemaObject().getType().equals("integer") ){
+        else if( s.getItemsSchema().getSchemaOb().schemaObject().getType().equals("integer") ){
         for( int i = 0 ; i < 5 ; i++ )
         targetUrl = targetUrl + "&" + p.getName() + "=" + this.generateRandomInt(  rand,
-        -1, // p.getSchemaObject().getMinimum() != null ? p.getSchemaObject().getMinimum().intValue() : -1,
-        10); // p.getSchemaObject().getMaximum() != null ? p.getSchemaObject().getMaximum().intValue() : -1
+        -1, // s.getMinimum() != null ? s.getMinimum().intValue() : -1,
+        10); // s.getMaximum() != null ? s.getMaximum().intValue() : -1
         }
 
         }
@@ -172,6 +179,4 @@ aspect RandomRequestGenerator {
         return String.valueOf(rand.nextInt(maximum));
         return String.valueOf(rand.nextInt());
         }
-
- */
 }
\ No newline at end of file
diff --git a/src/main/jastadd/ReferenceGet.jrag b/src/main/jastadd/ReferenceGet.jrag
new file mode 100644
index 0000000000000000000000000000000000000000..32e49e785c48dd721020c182465a00d668b20ccf
--- /dev/null
+++ b/src/main/jastadd/ReferenceGet.jrag
@@ -0,0 +1,31 @@
+aspect ReferenceGet {
+
+    syn ParameterObject ParameterOb.parameterObject();
+    eq ParameterObject.parameterObject() = this;
+    eq ParameterReference.parameterObject() {
+        if( getParameterOb() instanceof ParameterObject )
+        return (ParameterObject) getParameterOb();
+        else
+        return getParameterOb().parameterObject();
+    }
+
+    syn SchemaObject SchemaOb.schemaObject();
+    eq SchemaObject.schemaObject() = this;
+    eq SchemaReference.schemaObject() {
+    if( getSchemaOb() instanceof SchemaObject )
+        return (SchemaObject) getSchemaOb();
+    else
+        return getSchemaOb().schemaObject();
+    }
+
+    syn PathItemObject PathItemOb.pathItemObject();
+    eq PathItemObject.pathItemObject() = this;
+    eq PathItemReference.pathItemObject() {
+        if( getPathItemOb() instanceof PathItemObject )
+            return (PathItemObject) getPathItemOb();
+        else
+            return getPathItemOb().pathItemObject();
+    }
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/de/tudresden/inf/st/openapi/OpenAPIMain.java b/src/main/java/de/tudresden/inf/st/openapi/OpenAPIMain.java
index 9a5fbb8eace7466a0e5e0e1b3385360db075217a..1a91ba268d95cf1897305f4f56d72babe1ff1b62 100644
--- a/src/main/java/de/tudresden/inf/st/openapi/OpenAPIMain.java
+++ b/src/main/java/de/tudresden/inf/st/openapi/OpenAPIMain.java
@@ -52,15 +52,8 @@ public class OpenAPIMain {
             System.out.println("Loading expression DSL file '" + file + "'.");
 
             openApi = OpenAPIObject.parseOpenAPI(api);
-            if( file.equals("petstore-v2.yaml") ){
-                Schema s = api.getPaths().get("/pet").getPost().getResponse("200").getContentMediaType("application/xml").getSchema();
-                System.out.println(api.getPaths().get("/pet").getPost().getResponse("200").getContentMediaType("application/xml").getSchema().getRef());
-                System.out.println(s.getReference(api.getContext()).getMappedContent(Schema.class).getTitle());
-                System.out.println(s.getReference(api.getContext()).getMappedContent(Schema.class));
-                //System.out.println(s.getReference(new OAI3Context(new URL(s.getRef()))).getMappedContent(Schema.class).getTitle());
-
-                //System.out.println(api.getPaths().get("/pet").getPost().getResponse("'200'").getContentMediaType("application/xml").getSchema().isRef());
-            }
+            api3 = OpenAPIObject.composeOpenAPI(openApi);
+            openApi.generateRequests();
 
         }
 
diff --git a/src/test/java/openapi/OpenAPIMain_test.java b/src/test/java/openapi/OpenAPIMain_test.java
index 76c7244823669f936af44c5bb6f57372545ec75f..6a4347fc6eb38eb89d352c129eb0f0b2dd17f863 100644
--- a/src/test/java/openapi/OpenAPIMain_test.java
+++ b/src/test/java/openapi/OpenAPIMain_test.java
@@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.flipkart.zjsonpatch.JsonDiff;
 import de.tudresden.inf.st.openapi.ast.*;
 import org.junit.jupiter.api.Assertions;
+import org.openapi4j.core.exception.DecodeException;
 import org.openapi4j.core.exception.EncodeException;
 import org.openapi4j.core.exception.ResolutionException;
 import org.openapi4j.core.validation.ValidationException;
@@ -33,7 +34,7 @@ import static org.junit.jupiter.api.Assertions.*;
 public class OpenAPIMain_test {
 
     @Test
-    public void test() throws IOException, ResolutionException, ValidationException, EncodeException {
+    public void test() throws IOException, ResolutionException, ValidationException, EncodeException, DecodeException {
         OpenAPIObject openApi;
         OpenApi3 api3;
         ValidationResults results;
@@ -85,7 +86,6 @@ public class OpenAPIMain_test {
         }
 
         // clean all generated jsons
-
         contents = genDirectory.listFiles();
         if (contents != null) {
             for (File file : contents)