diff --git a/src/main/jastadd/OpenAPISpecification.relast b/src/main/jastadd/OpenAPISpecification.relast
index 3d656e084b253d142412f5a247e03cc1ce963620..e7058df451bc0f0e959ca1ab9db7126cccb51f82 100644
--- a/src/main/jastadd/OpenAPISpecification.relast
+++ b/src/main/jastadd/OpenAPISpecification.relast
@@ -251,10 +251,7 @@ rel TagObject.ex* -> Extension;
 //Schema Object
 abstract SchemaOb;
 SchemaReference : SchemaOb ::= <Ref> <Summary> <Description>;
-SchemaObject : SchemaOb ::= <AdditionalPropertiesAllowed:Boolean> <DefaultValue:Object> <Description> <DeprecatedBoolean:Boolean> <ExclusiveMaximum:Number> <ExclusiveMinimum:Number> <Format> <Maximum:Number> <Minimum:Number> <MaxItems:Integer> <MinItems:Integer> <MaxLength:Integer> <MinLength:Integer> <MaxProperties:Integer> <MinProperties:Integer> <MultipleOf:Number> <Pattern> <ReadOnly:Boolean> <WriteOnly:Boolean> <Type> <Title> <UniqueItems:Boolean> <MaxContains:Integer> <MinContains:Integer> <DependentRequired:Object> <DependentSchema:SchemaOb> <Const:Object>;
-
-AdditionalProperties;
-rel AdditionalProperties.s -> SchemaOb;
+SchemaObject : SchemaOb ::= <AdditionalProperties:Object> <DefaultValue:Object> <Description> <DeprecatedBoolean:Boolean> <ExclusiveMaximum:Number> <ExclusiveMinimum:Number> <Format> <Maximum:Number> <Minimum:Number> <MaxItems:Integer> <MinItems:Integer> <MaxLength:Integer> <MinLength:Integer> <MaxProperties:Integer> <MinProperties:Integer> <MultipleOf:Number> <Pattern> <ReadOnly:Boolean> <WriteOnly:Boolean> <Type> <Title> <UniqueItems:Boolean> <MaxContains:Integer> <MinContains:Integer> <DependentRequired:Object> <DependentSchema:SchemaOb> <Const:Object>;
 
 ItemsSchema;
 rel ItemsSchema.s -> SchemaOb;
diff --git a/src/main/jastadd/Parser.jrag b/src/main/jastadd/Parser.jrag
index 14f2ec8f005fa469ef7248ab92e10136262f85e1..c009e2a5ac50a18369f1759ab5400d08dbc57208 100644
--- a/src/main/jastadd/Parser.jrag
+++ b/src/main/jastadd/Parser.jrag
@@ -1,3 +1,4 @@
+import io.swagger.models.*;
 import io.swagger.v3.oas.models.OpenAPI;
 import io.swagger.v3.oas.models.*;
 import io.swagger.v3.oas.models.callbacks.*;
@@ -42,7 +43,7 @@ aspect Parser {
         }
         if (api.getExternalDocs() != null)
         openapi.set_impl_e(ExternalDocObject.parseExternalDocs(api.getExternalDocs()));
-        if (api.getExtensions() != null) {
+        if (api.getExtensions().size() != 0) {
         for (String key : api.getExtensions().keySet())
         openapi.addEx(new Extension(key, api.getExtensions().get(key)));
         }
@@ -69,7 +70,7 @@ aspect Parser {
         infoObject.set_impl_c(ContactObject.parseContact(info.getContact()));
         if (info.getLicense() != null)
         infoObject.set_impl_l(LicenseObject.parseLicense(info.getLicense()));
-        if (info.getExtensions() != null) {
+        if (info.getExtensions().size() != 0) {
         for (String key : info.getExtensions().keySet())
         infoObject.addEx(new Extension(key, info.getExtensions().get(key)));
         }
@@ -90,7 +91,7 @@ aspect Parser {
         contactObject.setUrl(contact.getUrl());
         if (contact.getEmail() != null)
         contactObject.setEmail(contact.getEmail());
-        if (contact.getExtensions() != null) {
+        if (contact.getExtensions().size() != 0) {
         for (String key : contact.getExtensions().keySet())
         contactObject.addEx(new Extension(key, contact.getExtensions().get(key)));
         }
@@ -105,7 +106,7 @@ aspect Parser {
         licenseObject.setName(license.getName());
         if (license.getUrl() != null)
         licenseObject.setUrl(license.getUrl());
-        if (license.getExtensions() != null) {
+        if (license.getExtensions().size() != 0) {
         for (String key : license.getExtensions().keySet())
         licenseObject.addEx(new Extension(key, license.getExtensions().get(key)));
         }
@@ -128,7 +129,7 @@ aspect Parser {
         for (String key : server.getVariables().keySet())
         serverObject.addSt(new ServerVariablesTuple(key, ServerVariableObject.parseServerVariable(server.getVariables().get(key))));
         }
-        if (server.getExtensions() != null) {
+        if (server.getExtensions().size() != 0) {
         for (String key : server.getExtensions().keySet())
         serverObject.addEx(new Extension(key, server.getExtensions().get(key)));
         }
@@ -147,7 +148,7 @@ aspect Parser {
         for (String e : serverVariable.getEnum())
         serverVariableObject.addE(new Enum(e));
         }
-        if (serverVariable.getExtensions() != null) {
+        if (serverVariable.getExtensions().size() != 0) {
         for (String key : serverVariable.getExtensions().keySet())
         serverVariableObject.addEx(new Extension(key, serverVariable.getExtensions().get(key)));
         }
@@ -194,7 +195,7 @@ aspect Parser {
         for (String key : components.getCallbacks().keySet())
         componentsObject.addC(new CallbackTuple(key, CallbackOb.parseCallback(components.getCallbacks().get(key))));
         }
-        if (components.getExtensions() != null) {
+        if (components.getExtensions().size() != 0) {
         for (String key : components.getExtensions().keySet())
         componentsObject.addEx(new Extension(key, components.getExtensions().get(key)));
         }
@@ -274,7 +275,7 @@ aspect Parser {
         for (Parameter p : path.getParameters())
         pathItem.addPo(ParameterOb.parseParameter(p));
         }
-        if (path.getExtensions() != null) {
+        if (path.getExtensions().size() != 0) {
         for (String key : path.getExtensions().keySet())
         pathItem.addEx(new Extension(key, path.getExtensions().get(key)));
         }
@@ -326,7 +327,7 @@ aspect Parser {
         for (Server s : operation.getServers())
         operationObject.addS(ServerObject.parseServer(s));
         }
-        if (operation.getExtensions() != null) {
+        if (operation.getExtensions().size() != 0) {
         for (String key : operation.getExtensions().keySet())
         operationObject.addEx(new Extension(key, operation.getExtensions().get(key)));
         }
@@ -349,380 +350,402 @@ aspect Parser {
         return externalDocObject;
   }
 
-  public static ParameterOb ParameterOb.parseParameter(Parameter parameter, OAIContext context, Map<Object, ASTNode> map) throws DecodeException {
-    ParameterObject parameterObject = new ParameterObject();
+  public static ParameterOb ParameterOb.parseParameter(Parameter parameter) {
+        ParameterObject parameterObject = new ParameterObject();
 
-    if (parameter.isRef()) {
-      ParameterReference p = new ParameterReference();
-      p.setRef(parameter.getRef());
-      return p;
-    } else {
-      if (parameter.getName() != null)
+        if (parameter.get$ref() != null) {
+        ParameterReference p = new ParameterReference();
+        p.setRef(parameter.get$ref());
+
+      /* 3.1.0 features
+      if (parameter.getSummary() != null) ...
+      if (parameter.getDescription() != null) ...
+      if (parameter.getParameter() != null) ...
+       */
+
+        return p;
+        } else {
+        if (parameter.getName() != null)
         parameterObject.setName(parameter.getName());
-      if (parameter.getIn() != null)
+        if (parameter.getIn() != null)
         parameterObject.setIn(parameter.getIn());
-      if (parameter.getDescription() != null)
+        if (parameter.getDescription() != null)
         parameterObject.setDescription(parameter.getDescription());
-      if (parameter.getDeprecated() != null)
+        if (parameter.getDeprecated() != null)
         parameterObject.setDeprecatedBoolean(parameter.getDeprecated());
-      if (parameter.getStyle() != null)
-        parameterObject.setStyle(parameter.getStyle());
-      if (parameter.getExplode() != null)
+        if (parameter.getStyle() != null)
+        parameterObject.setStyle(parameter.getStyle().toString());
+        if (parameter.getExplode() != null)
         parameterObject.setExplode(parameter.getExplode());
-      if (parameter.getAllowReserved() != null)
+        if (parameter.getAllowReserved() != null)
         parameterObject.setAllowReserved(parameter.getAllowReserved());
-      if (parameter.getSchema() != null)
-        parameterObject.setSchemaOb(SchemaOb.parseSchema(parameter.getSchema(), context, map));
-      if (parameter.getExample() != null)
+        if (parameter.getSchema() != null)
+        parameterObject.set_impl_s(SchemaOb.parseSchema(parameter.getSchema()));
+        if (parameter.getExample() != null)
         parameterObject.setExample(parameter.getExample());
-      if (parameter.getExamples() != null) {
+        if (parameter.getExamples() != null) {
         for (String key : parameter.getExamples().keySet())
-          parameterObject.addExampleTuple(new ExampleTuple(key, ExampleObject.parseExample(parameter.getExample(key), context, map)));
-      }
-      if (parameter.getContentMediaTypes() != null) {
-        for (String key : parameter.getContentMediaTypes().keySet())
-          parameterObject.addContentTuple(new ContentTuple(key, MediaTypeObject.parseMediaType(parameter.getContentMediaType(key), context, map)));
-      }
-      if (parameter.getRequired() != null)
+        parameterObject.addE(new ExampleTuple(key, ExampleObject.parseExample(parameter.getExamples().get(key))));
+        }
+        if (parameter.getContent() != null) {
+        for (String key : parameter.getContent().keySet())
+        parameterObject.addC(new ContentTuple(key, MediaTypeObject.parseMediaType(parameter.getContent().get(key))));
+        }
+        if (parameter.getRequired() != null)
         parameterObject.setRequired(parameter.getRequired());
-      if (parameter.getExtensions() != null) {
+        if (parameter.getExtensions().size() != 0) {
         for (String key : parameter.getExtensions().keySet())
-          parameterObject.addExtension(new Extension(key, parameter.getExtensions().get(key)));
-      }
-    }
+        parameterObject.addEx(new Extension(key, parameter.getExtensions().get(key)));
+        }
+        }
 
-    map.put(parameter, parameterObject);
-    return parameterObject;
+        return parameterObject;
   }
 
-  public static RequestBodyOb RequestBodyOb.parseRequestBody(org.openapi4j.parser.model.v3.RequestBody requestBody, OAIContext context, Map<Object, ASTNode> map) throws DecodeException {
-    RequestBodyObject requestBodyObject = new RequestBodyObject();
-
-    if (requestBody.isRef()) {
-      RequestBodyReference r = new RequestBodyReference();
-      r.setRef(requestBody.getRef());
-      return r;
-    } else {
-      if (requestBody.getContentMediaTypes() != null) {
-        for (String key : requestBody.getContentMediaTypes().keySet())
-          requestBodyObject.addContentTuple(new ContentTuple(key, MediaTypeObject.parseMediaType(requestBody.getContentMediaType(key), context, map)));
-      }
-      if (requestBody.getDescription() != null)
+  public static RequestBodyOb RequestBodyOb.parseRequestBody(RequestBody requestBody) {
+        RequestBodyObject requestBodyObject = new RequestBodyObject();
+
+        if (requestBody.get$ref() != null) {
+        RequestBodyReference r = new RequestBodyReference();
+        r.setRef(requestBody.get$ref());
+
+      /* 3.1.0 features
+      if (requestBody.getSummary() != null) ...
+      if (requestBody.getDescription() != null) ...
+       */
+
+        return r;
+        } else {
+        if (requestBody.getContent() != null) {
+        for (String key : requestBody.getContent().keySet())
+        requestBodyObject.addC(new ContentTuple(key, MediaTypeObject.parseMediaType(requestBody.getContent().get(key))));
+        }
+        if (requestBody.getDescription() != null)
         requestBodyObject.setDescription(requestBody.getDescription());
-      if (requestBody.getRequired() != null)
+        if (requestBody.getRequired() != null)
         requestBodyObject.setRequired(requestBody.getRequired());
-      if (requestBody.getExtensions() != null) {
+        if (requestBody.getExtensions().size() != 0) {
         for (String key : requestBody.getExtensions().keySet())
-          requestBodyObject.addExtension(new Extension(key, requestBody.getExtensions().get(key)));
-      }
-    }
+        requestBodyObject.addEx(new Extension(key, requestBody.getExtensions().get(key)));
+        }
+        }
 
-    map.put(requestBody, requestBodyObject);
-    return requestBodyObject;
+        return requestBodyObject;
   }
 
-  public static MediaTypeObject MediaTypeObject.parseMediaType(MediaType mediaType, OAIContext context, Map<Object, ASTNode> map) throws DecodeException {
-    MediaTypeObject mediaTypeObject = new MediaTypeObject();
-
-    if (mediaType.getSchema() != null)
-      mediaTypeObject.setSchemaOb(SchemaObject.parseSchema(mediaType.getSchema(), context, map));
-    if (mediaType.getExample() != null)
-      mediaTypeObject.setExample(mediaType.getExample());
-    if (mediaType.getExamples() != null) {
-      for (String key : mediaType.getExamples().keySet())
-        mediaTypeObject.addExampleTuple(new ExampleTuple(key, ExampleObject.parseExample(mediaType.getExample(key), context, map)));
-    }
-    if (mediaType.getEncodings() != null) {
-      for (String key : mediaType.getEncodings().keySet())
-        mediaTypeObject.addEncodingTuple(new EncodingTuple(key, EncodingObject.parseEncoding(mediaType.getEncoding(key), context, map)));
-    }
-    if (mediaType.getExtensions() != null) {
-      for (String key : mediaType.getExtensions().keySet())
-        mediaTypeObject.addExtension(new Extension(key, mediaType.getExtensions().get(key)));
-    }
-
-    map.put(mediaType, mediaTypeObject);
-    return mediaTypeObject;
+  public static MediaTypeObject MediaTypeObject.parseMediaType(MediaType mediaType) {
+        MediaTypeObject mediaTypeObject = new MediaTypeObject();
+
+        if (mediaType.getSchema() != null)
+        mediaTypeObject.set_impl_s(SchemaObject.parseSchema(mediaType.getSchema()));
+        if (mediaType.getExample() != null)
+        mediaTypeObject.setExample(mediaType.getExample());
+        if (mediaType.getExamples().size() != 0) {
+        for (String key : mediaType.getExamples().keySet())
+        mediaTypeObject.addE(new ExampleTuple(key, ExampleObject.parseExample(mediaType.getExamples().get(key))));
+        }
+        if (mediaType.getEncoding().size() != 0) {
+        for (String key : mediaType.getEncoding().keySet())
+        mediaTypeObject.addEn(new EncodingTuple(key, EncodingObject.parseEncoding(mediaType.getEncoding().get(key))));
+        }
+        if (mediaType.getExtensions().size() != 0) {
+        for (String key : mediaType.getExtensions().keySet())
+        mediaTypeObject.addEx(new Extension(key, mediaType.getExtensions().get(key)));
+        }
+
+        return mediaTypeObject;
   }
 
-  public static EncodingObject EncodingObject.parseEncoding(EncodingProperty encodingProperty, OAIContext context, Map<Object, ASTNode> map) throws DecodeException {
-    EncodingObject encodingObject = new EncodingObject();
-
-    if (encodingProperty.getContentType() != null)
-      encodingObject.setContentType(encodingProperty.getContentType());
-    if (encodingProperty.getHeaders() != null) {
-      for (String key : encodingProperty.getHeaders().keySet())
-        encodingObject.addHeaderTuple(new HeaderTuple(key, HeaderObject.parseHeader(encodingProperty.getHeader(key), context, map)));
-    }
-    if (encodingProperty.getStyle() != null)
-      encodingObject.setStyle(encodingProperty.getStyle());
-    if (encodingProperty.getExplode() != null)
-      encodingObject.setExplode(encodingProperty.getExplode());
-    if (encodingProperty.getExtensions() != null) {
-      for (String key : encodingProperty.getExtensions().keySet())
-        encodingObject.addExtension(new Extension(key, encodingProperty.getExtensions().get(key)));
-    }
-
-    map.put(encodingProperty, encodingObject);
-    return encodingObject;
+  public static EncodingObject EncodingObject.parseEncoding(EncodingProperty encodingProperty) {
+        EncodingObject encodingObject = new EncodingObject();
+
+        if (encodingProperty.getContentType() != null)
+        encodingObject.setContentType(encodingProperty.getContentType());
+        if (encodingProperty.getHeaders() != null) {
+        for (String key : encodingProperty.getHeaders().keySet())
+        encodingObject.addH(new HeaderTuple(key, HeaderObject.parseHeader(encodingProperty.getHeaders().get(key))));
+        }
+        if (encodingProperty.getStyle() != null)
+        encodingObject.setStyle(encodingProperty.getStyle().toString());
+        if (encodingProperty.getExplode() != null)
+        encodingObject.setExplode(encodingProperty.getExplode());
+        if (encodingProperty.getAllowReserved() != null)
+        encodingObject.setAllowReserved(encodingProperty.getAllowReserved());
+        if (encodingProperty.getExtensions() != null) {
+        for (String key : encodingProperty.getExtensions().keySet())
+        encodingObject.addEx(new Extension(key, encodingProperty.getExtensions().get(key)));
+        }
+
+        return encodingObject;
   }
 
-  public static ResponseOb ResponseOb.parseResponse(Response response, OAIContext context, Map<Object, ASTNode> map) throws DecodeException {
-    ResponseObject responseObject = new ResponseObject();
+  public static ResponseOb ResponseOb.parseResponse(ApiResponse response) {
+        ResponseObject responseObject = new ResponseObject();
+
+        if (response.get$ref() != null) {
+        ResponseReference r = new ResponseReference();
+        r.setRef(response.get$ref());
+
+      /* 3.1.0 features
+      if (response.getSummary() != null) ...
+      if (response.getDescription() != null) ...
+       */
 
-    if (response.isRef()) {
-      ResponseReference r = new ResponseReference();
-      r.setRef(response.getRef());
-      return r;
-    } else {
-      if (response.getDescription() != null)
+        return r;
+        } else {
+        if (response.getDescription() != null)
         responseObject.setDescription(response.getDescription());
-      if (response.getHeaders() != null) {
+        if (response.getHeaders().size() != 0) {
         for (String key : response.getHeaders().keySet())
-          responseObject.addHeaderTuple(new HeaderTuple(key, HeaderObject.parseHeader(response.getHeader(key), context, map)));
-      }
-      if (response.getContentMediaTypes() != null) {
-        for (String key : response.getContentMediaTypes().keySet())
-          responseObject.addContentTuple(new ContentTuple(key, MediaTypeObject.parseMediaType(response.getContentMediaType(key), context, map)));
-      }
-      if (response.getLinks() != null) {
+        responseObject.addH(new HeaderTuple(key, HeaderObject.parseHeader(response.getHeaders().get(key))));
+        }
+        if (response.getContent().size() != 0) {
+        for (String key : response.getContent().keySet())
+        responseObject.addC(new ContentTuple(key, MediaTypeObject.parseMediaType(response.getContent().get(key)))));
+        }
+        if (response.getLinks().size() != 0) {
         for (String key : response.getLinks().keySet())
-          responseObject.addLinkTuple(new LinkTuple(key, LinkOb.parseLink(response.getLink(key), context, map)));
-      }
-      if (response.getExtensions() != null) {
+        responseObject.addL(new LinkTuple(key, LinkOb.parseLink(response.getLinks().get(key))));
+        }
+        if (response.getExtensions().size() != 0) {
         for (String key : response.getExtensions().keySet())
-          responseObject.addExtension(new Extension(key, response.getExtensions().get(key)));
-      }
-    }
+        responseObject.addEx(new Extension(key, response.getExtensions().get(key)));
+        }
+        }
 
-    map.put(response, responseObject);
-    return responseObject;
+        return responseObject;
   }
 
-  public static CallbackOb CallbackOb.parseCallback(Callback callback, OAIContext context, Map<Object, ASTNode> map) throws DecodeException {
-    CallbackObject callbackObject = new CallbackObject();
-
-    if (callback.isRef()) {
-      CallbackReference c = new CallbackReference();
-      c.setRef(callback.getRef());
-      return c;
-    } else {
-      if (callback.getCallbackPaths() != null) {
-        for (String key : callback.getCallbackPaths().keySet())
-          callbackObject.addExpression(new Expression(key, PathItemObject.parsePath(callback.getCallbackPath(key), context, map)));
-      }
-      if (callback.getExtensions() != null) {
+  public static CallbackOb CallbackOb.parseCallback(Callback callback) {
+        CallbackObject callbackObject = new CallbackObject();
+
+        if (callback.get$ref() != null) {
+        CallbackReference c = new CallbackReference();
+        c.setRef(callback.get$ref());
+
+      /* 3.1.0 features
+      if (callback.getSummary() != null) ...
+      if (callback.getDescription() != null) ...
+       */
+
+        return c;
+        } else {
+        if (callback.size() != 0) {
+        for (String key : callback.keySet())
+        callbackObject.addE(new Expression(key, PathItemObject.parsePath(callback.get(key))));
+        }
+        if (callback.getExtensions().size() != 0) {
         for (String key : callback.getExtensions().keySet())
-          callbackObject.addExtension(new Extension(key, callback.getExtensions().get(key)));
-      }
-    }
+        callbackObject.addEx(new Extension(key, callback.getExtensions().get(key)));
+        }
+        }
 
-    map.put(callback, callbackObject);
-    return callbackObject;
+        return callbackObject;
   }
 
-  public static ExampleObject ExampleObject.parseExample(Example example, OAIContext context, Map<Object, ASTNode> map){
-    ExampleObject exampleObject = new ExampleObject();
-
-    if (example.getSummary() != null)
-      exampleObject.setSummary(example.getSummary());
-    if (example.getDescription() != null)
-      exampleObject.setDescription(example.getDescription());
-    if (example.getValue() != null)
-      exampleObject.setValue(example.getValue());
-    if (example.getExternalValue() != null)
-      exampleObject.setExternalValue(example.getExternalValue());
-    if (example.getExtensions() != null) {
-      for (String key : example.getExtensions().keySet())
-        exampleObject.addExtension(new Extension(key, example.getExtensions().get(key)));
-    }
-    if (example.getExtensions() != null) {
-      for (String key : example.getExtensions().keySet())
-        exampleObject.addExtension(new Extension(key, example.getExtensions().get(key)));
-    }
-
-
-    map.put(example, exampleObject);
-    return exampleObject;
+  public static ExampleObject ExampleObject.parseExample(Example example){
+        ExampleObject exampleObject = new ExampleObject();
+
+        if (example.getSummary() != null)
+        exampleObject.setSummary(example.getSummary());
+        if (example.getDescription() != null)
+        exampleObject.setDescription(example.getDescription());
+        if (example.getValue() != null)
+        exampleObject.setValue(example.getValue());
+        if (example.getExternalValue() != null)
+        exampleObject.setExternalValue(example.getExternalValue());
+        if (example.getExtensions().size() != 0) {
+        for (String key : example.getExtensions().keySet())
+        exampleObject.addEx(new Extension(key, example.getExtensions().get(key)));
+        }
+
+        return exampleObject;
   }
 
-  public static LinkOb LinkOb.parseLink(Link link, OAIContext context, Map<Object, ASTNode> map) throws DecodeException {
-    LinkObject linkObject = new LinkObject();
+  public static LinkOb LinkOb.parseLink(Link link) {
+        LinkObject linkObject = new LinkObject();
 
-    if (link.isRef()) {
-      LinkReference l = new LinkReference();
-      l.setRef(link.getRef());
-      return l;
-    } else {
-      if (link.getOperationRef() != null)
+        if (link.get$ref() != null) {
+        LinkReference l = new LinkReference();
+        l.setRef(link.get$ref());
+
+      /* 3.1.0 features
+      if (link.getSummary() != null) ...
+      if (link.getDescription() != null) ...
+       */
+
+        return l;
+        } else {
+        if (link.getOperationRef() != null)
         linkObject.setOperationRef(link.getOperationRef());
-      if (link.getOperationId() != null)
+        if (link.getOperationId() != null)
         linkObject.setOperationID(link.getOperationId());
-      if (link.getParameters() != null) {
+        if (link.getParameters().size() != 0) {
         for (String key : link.getParameters().keySet())
-          linkObject.addLinkParameterTuple(new LinkParameterTuple(key, link.getParameter(key)));
-      }
-      if (link.getDescription() != null)
+        linkObject.addL(new LinkParameterTuple(key, link.getParameters().get(key)));
+        }
+        if (link.getDescription() != null)
         linkObject.setDescription(link.getDescription());
-      if (link.getServer() != null)
-        linkObject.setServerObject(ServerObject.parseServer(link.getServer(), map));
-      if (link.getExtensions() != null) {
+        if (link.getServer() != null)
+        linkObject.set_impl_s(ServerObject.parseServer(link.getServer()));
+        if (link.getExtensions().size() != 0) {
         for (String key : link.getExtensions().keySet())
-          linkObject.addExtension(new Extension(key, link.getExtensions().get(key)));
-      }
-    }
+        linkObject.addEx(new Extension(key, link.getExtensions().get(key)));
+        }
+        }
 
-    map.put(link, linkObject);
-    return linkObject;
+        return linkObject;
   }
 
-  public static HeaderOb HeaderOb.parseHeader(Header header, OAIContext context, Map<Object, ASTNode> map) throws DecodeException {
-    HeaderObject headerObject = new HeaderObject();
+  public static HeaderOb HeaderOb.parseHeader(Header header) {
+        HeaderObject headerObject = new HeaderObject();
+
+        if (header.get$ref() != null) {
+        HeaderReference h = new HeaderReference();
+        h.setRef(header.get$ref());
+
+      /* 3.1.0 features
+      if (header.getSummary() != null) ...
+      if (header.getDescription() != null) ...
+       */
 
-    if (header.isRef()) {
-      HeaderReference h = new HeaderReference();
-      h.setRef(header.getRef());
-      return h;
-    } else {
-      if (header.getRequired() != null)
+        return h;
+        } else {
+        if (header.getRequired() != null)
         headerObject.setRequired(header.getRequired());
-      if (header.getDescription() != null)
+        if (header.getDescription() != null)
         headerObject.setDescription(header.getDescription());
-      if (header.getDeprecated() != null)
+        if (header.getDeprecated() != null)
         headerObject.setDeprecatedBoolean(header.getDeprecated());
-      if (header.getStyle() != null)
-        headerObject.setStyle(header.getStyle());
-      if (header.getExplode() != null)
+        if (header.getStyle() != null)
+        headerObject.setStyle(header.getStyle().toString());
+        if (header.getExplode() != null)
         headerObject.setExplode(header.getExplode());
-      if (header.getAllowReserved() != null)
-        headerObject.setExplode(header.getAllowReserved());
-      if (header.getExample() != null)
+        if (header.getExample() != null)
         headerObject.setExample(header.getExample());
-      if (header.getExamples() != null) {
+        if (header.getExamples().size() != 0) {
         for (String key : header.getExamples().keySet())
-          headerObject.addExampleTuple(new ExampleTuple(key, ExampleObject.parseExample(header.getExample(key), context, map)));
-      }
-      if (header.getContentMediaTypes() != null) {
-        for (String key : header.getContentMediaTypes().keySet())
-          headerObject.addContentTuple(new ContentTuple(key, MediaTypeObject.parseMediaType(header.getContentMediaType(key), context, map)));
-      }
-      if (header.getSchema() != null)
-        headerObject.setSchemaOb(SchemaOb.parseSchema(header.getSchema(), context, map));
-      if (header.getExtensions() != null) {
+        headerObject.addE(new ExampleTuple(key, ExampleObject.parseExample(header.getExamples().get(key))));
+        }
+        if (header.getContent().size() != 0) {
+        for (String key : header.getContent().keySet())
+        headerObject.addC(new ContentTuple(key, MediaTypeObject.parseMediaType(header.getContent().get(key)))));
+        }
+        if (header.getSchema() != null)
+        headerObject.set_impl_s(SchemaOb.parseSchema(header.getSchema()));
+        if (header.getExtensions() != null) {
         for (String key : header.getExtensions().keySet())
-          headerObject.addExtension(new Extension(key, header.getExtensions().get(key)));
-      }
-    }
+        headerObject.addEx(new Extension(key, header.getExtensions().get(key)));
+        }
+        }
 
-    map.put(header, headerObject);
-    return headerObject;
+        return headerObject;
   }
 
-  public static TagObject TagObject.parseTag(org.openapi4j.parser.model.v3.Tag tag, Map<Object, ASTNode> map){
-    TagObject tagObject = new TagObject();
-
-    tagObject.setName(tag.getName());
-
-    if (tag.getDescription() != null)
-      tagObject.setDescription(tag.getDescription());
-    if (tag.getExternalDocs() != null)
-      tagObject.setExternalDocObject(ExternalDocObject.parseExternalDocs(tag.getExternalDocs(), map));
-    if (tag.getExtensions() != null) {
-      for (String key : tag.getExtensions().keySet())
-        tagObject.addExtension(new Extension(key, tag.getExtensions().get(key)));
-    }
-    if (tag.getExtensions() != null) {
-      for (String key : tag.getExtensions().keySet())
-        tagObject.addExtension(new Extension(key, tag.getExtensions().get(key)));
-    }
-
-    map.put(tag, tagObject);
-    return tagObject;
+  public static TagObject TagObject.parseTag(Tag tag){
+        TagObject tagObject = new TagObject();
+
+        tagObject.setName(tag.getName());
+
+        if (tag.getDescription() != null)
+        tagObject.setDescription(tag.getDescription());
+        if (tag.getExternalDocs() != null)
+        tagObject.set_impl_e(ExternalDocObject.parseExternalDocs(tag.getExternalDocs()));
+        if (tag.getExtensions().size() != 0) {
+        for (String key : tag.getExtensions().keySet())
+        tagObject.addEx(new Extension(key, tag.getExtensions().get(key)));
+        }
+
+        return tagObject;
   }
 
-  public static SchemaOb SchemaOb.parseSchema (org.openapi4j.parser.model.v3.Schema schema, OAIContext context, Map<Object, ASTNode> map) throws DecodeException {
-    SchemaObject schemaObject = new SchemaObject();
-
-    if (schema.isRef()) {
-      SchemaReference s = new SchemaReference();
-      s.setRef(schema.getRef());
-      return s;
-    } else {
-      if (schema.getAdditionalProperties() != null)
-        schemaObject.setAdditionalProperties(new AdditionalProperties(parseSchema(schema.getAdditionalProperties(), context, map)));
-      if (schema.getAdditionalProperties() == null && schema.getAdditionalPropertiesAllowed() != null)
-        schemaObject.setAdditionalPropertiesAllowed(schema.getAdditionalPropertiesAllowed());
-      if (schema.getDefault() != null)
+  public static SchemaOb SchemaOb.parseSchema (Schema<?> schema) {
+        SchemaObject schemaObject = new SchemaObject();
+
+        if (schema.get$ref() != null) {
+        SchemaReference s = new SchemaReference();
+        s.setRef(schema.get$ref());
+
+      /* 3.1.0 features
+      if (schema.getSummary() != null) ...
+      if (schema.getDescription() != null) ...
+       */
+
+        return s;
+        } else {
+        if (schema.getAdditionalProperties() != null)
+        schemaObject.setAdditionalProperties(schema.getAdditionalProperties());
+        if (schema.getDefault() != null)
         schemaObject.setDefaultValue(schema.getDefault());
-      if (schema.getDescription() != null)
+        if (schema.getDescription() != null)
         schemaObject.setDescription(schema.getDescription());
-      if (schema.getDeprecated() != null)
+        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.getDiscriminator() != null)
+        schemaObject.setD(DiscriminatorObject.parseDiscriminator(schema.getDiscriminator()));
+        if (schema.getEnum() != null) {
+        for (Object o : schema.getEnum()) {
+        EnumObj enumObj = new EnumObj();
+        enumObj.setEnumOb(o);
+        schemaObject.addE(enumObj);
+        }
+        }
+        // in 3.1.0, there are multiple examples
+        if (schema.getExample() != null)
+        schemaObject.addEl(new ExampleElement(schema.getExample()));
+      /* in 3.1.0, types are Number instead of Boolean
       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)
+       */
+        if (schema.getExternalDocs() != null)
+        schemaObject.setExt(ExternalDocObject.parseExternalDocs(schema.getExternalDocs()));
+        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)
+        if (schema.getMaximum() != null)
         schemaObject.setMaximum(schema.getMaximum());
-      if (schema.getMinimum() != null)
+        if (schema.getMinimum() != null)
         schemaObject.setMinimum(schema.getMinimum());
-      if (schema.getMaxItems() != null)
+        if (schema.getMaxItems() != null)
         schemaObject.setMaxItems(schema.getMaxItems());
-      if (schema.getMinItems() != null)
+        if (schema.getMinItems() != null)
         schemaObject.setMinItems(schema.getMinItems());
-      if (schema.getMaxLength() != null)
+        if (schema.getMaxLength() != null)
         schemaObject.setMaxLength(schema.getMaxLength());
-      if (schema.getMinLength() != null)
+        if (schema.getMinLength() != null)
         schemaObject.setMinLength(schema.getMinLength());
-      if (schema.getMaxProperties() != null)
+        if (schema.getMaxProperties() != null)
         schemaObject.setMaxProperties(schema.getMaxProperties());
-      if (schema.getMinProperties() != null)
+        if (schema.getMinProperties() != null)
         schemaObject.setMinProperties(schema.getMinProperties());
-      if (schema.getMultipleOf() != null)
+        if (schema.getMultipleOf() != null)
         schemaObject.setMultipleOf(schema.getMultipleOf());
-      if (schema.getNotSchema() != null) {
+        if (schema.getNot() != 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)
+        notSchema.set_impl_s(parseSchema(schema.getNot()));
+        schemaObject.set_impl_n(notSchema);
+        }
+        if (schema.getPattern() != null)
         schemaObject.setPattern(schema.getPattern());
-      if (schema.getProperties() != null) {
+        if (schema.getProperties().size() != 0) {
         for (String key : schema.getProperties().keySet()) {
-          PropertyItem propertyItem = new PropertyItem();
-          schemaObject.addPropertyItem(new PropertyItem(key, parseSchema(schema.getProperty(key), context, map)));
+        PropertyItem propertyItem = new PropertyItem();
+        schemaObject.addP(new PropertyItem(key, parseSchema(schema.getProperties().get(key))));
+        }
+        }
+        if (schema.getRequired().size() != 0) {
+        for (String s : schema.getRequired()) {
+        RequiredField requiredField = new RequiredField();
+        requiredField.setValue(s);
+        schemaObject.addR(requiredField);
         }
-      }
-      if (schema.getRequiredFields() != null) {
-        for (String s : schema.getRequiredFields()) {
-          RequiredField requiredField = new RequiredField();
-          requiredField.setValue(s);
-          schemaObject.addRequiredField(requiredField);
         }
+      /* Schemas not supported (maybe supported in 3.1.0)
+      if (schema.getItemsSchema() != null) {
+        ItemsSchema itemsSchema = new ItemsSchema();
+        itemsSchema.setSchemaOb(parseSchema(schema.getItemsSchema(), context, map));
+        schemaObject.setItemsSchema(itemsSchema);
       }
       if (schema.getAllOfSchemas() != null) {
         for (org.openapi4j.parser.model.v3.Schema schemaItem : schema.getAllOfSchemas()) {
@@ -745,161 +768,167 @@ aspect Parser {
           schemaObject.addOneOfSchema(oneOfSchema);
         }
       }
-      if (schema.getReadOnly() != null)
+       */
+        if (schema.getReadOnly() != null)
         schemaObject.setReadOnly(schema.getReadOnly());
-      if (schema.getWriteOnly() != null)
+        if (schema.getWriteOnly() != null)
         schemaObject.setWriteOnly(schema.getWriteOnly());
-      if (schema.getType() != null)
+        if (schema.getType() != null)
         schemaObject.setType(schema.getType());
-      if (schema.getTitle() != null)
+        if (schema.getTitle() != null)
         schemaObject.setTitle(schema.getTitle());
-      if (schema.getUniqueItems() != null)
+        if (schema.getUniqueItems() != null)
         schemaObject.setUniqueItems(schema.getUniqueItems());
-      if (schema.getXml() != null)
-        schemaObject.setXmlObject(XmlObject.parseXml(schema.getXml(), map));
-      if (schema.getExtensions() != null) {
+        if (schema.getXml() != null)
+        schemaObject.setX(XmlObject.parseXml(schema.getXml()));
+        if (schema.getExtensions().size() != 0) {
         for (String key : schema.getExtensions().keySet())
-          schemaObject.addExtension(new Extension(key, schema.getExtensions().get(key)));
-      }
-    }
+        schemaObject.addEx(new Extension(key, schema.getExtensions().get(key)));
+        }
+        }
 
-    map.put(schema, schemaObject);
-    return schemaObject;
+        return schemaObject;
   }
 
-  public static DiscriminatorObject DiscriminatorObject.parseDiscriminator (Discriminator discriminator, Map<Object, ASTNode> map) {
-    DiscriminatorObject discriminatorObject = new DiscriminatorObject();
+  public static DiscriminatorObject DiscriminatorObject.parseDiscriminator (Discriminator discriminator) {
+        DiscriminatorObject discriminatorObject = new DiscriminatorObject();
 
-    if (discriminator.getPropertyName() != null)
-      discriminatorObject.setPropertyName(discriminator.getPropertyName());
-    if (discriminator.getMapping() != null) {
-      MappingTuple mapping = new MappingTuple();
-      for (String key : discriminator.getMapping().keySet()) {
+        if (discriminator.getPropertyName() != null)
+        discriminatorObject.setPropertyName(discriminator.getPropertyName());
+        if (discriminator.getMapping() != null) {
+        MappingTuple mapping = new MappingTuple();
+        for (String key : discriminator.getMapping().keySet()) {
         mapping.setKey(key);
         mapping.setValue(discriminator.getMapping().get(key));
-        discriminatorObject.addMappingTuple(mapping);
-      }
-    }
-    map.put(discriminator, discriminatorObject);
+        discriminatorObject.addM(mapping);
+        }
+        }
 
-    return discriminatorObject;
+        return discriminatorObject;
   }
 
-  public static XmlObject XmlObject.parseXml (Xml xml, Map<Object, ASTNode> map) {
-    XmlObject xmlObject = new XmlObject();
-
-    if (xml.getName() != null)
-      xmlObject.setName(xml.getName());
-    if (xml.getNamespace() != null)
-      xmlObject.setNamespace(xml.getNamespace());
-    if (xml.getPrefix() != null)
-      xmlObject.setPrefix(xml.getPrefix());
-    if (xml.getAttribute() != null)
-      xmlObject.setAttribute(xml.getAttribute());
-    if (xml.getWrapped() != null)
-      xmlObject.setWrapped(xml.getWrapped());
-    map.put(xml, xmlObject);
-    if (xml.getExtensions() != null) {
-      for (String key : xml.getExtensions().keySet())
-        xmlObject.addExtension(new Extension(key, xml.getExtensions().get(key)));
-    }
-
-    return xmlObject;
+  public static XmlObject XmlObject.parseXml (Xml xml) {
+        XmlObject xmlObject = new XmlObject();
+
+        if (xml.getName() != null)
+        xmlObject.setName(xml.getName());
+        if (xml.getNamespace() != null)
+        xmlObject.setNamespace(xml.getNamespace());
+        if (xml.getPrefix() != null)
+        xmlObject.setPrefix(xml.getPrefix());
+        if (xml.getAttribute() != null)
+        xmlObject.setAttribute(xml.getAttribute());
+        if (xml.getWrapped() != null)
+        xmlObject.setWrapped(xml.getWrapped());
+        if (xml.getExtensions() != null) {
+        for (String key : xml.getExtensions().keySet())
+        xmlObject.addEx(new Extension(key, xml.getExtensions().get(key)));
+        }
+
+        return xmlObject;
   }
 
-  public static SecuritySchemeOb SecuritySchemeOb.parseSecurityScheme(SecurityScheme securityScheme, OAIContext context, Map<Object, ASTNode> map){
-    SecuritySchemeObject securitySchemeObject = new SecuritySchemeObject();
-
-    if (securityScheme.getType() != null)
-      securitySchemeObject.setType(securityScheme.getType());
-    if (securityScheme.getName() != null)
-      securitySchemeObject.setName(securityScheme.getName());
-    if (securityScheme.getIn() != null)
-      securitySchemeObject.setIn(securityScheme.getIn());
-    if (securityScheme.getScheme() != null)
-      securitySchemeObject.setScheme(securityScheme.getScheme());
-    if (securityScheme.getOpenIdConnectUrl() != null)
-      securitySchemeObject.setOpenIdConnectUrl(securityScheme.getOpenIdConnectUrl());
-    if (securityScheme.getFlows() != null)
-      securitySchemeObject.setOAuthFlowsObject(OAuthFlowsObject.parseOAuthFlows(securityScheme.getFlows(), map));
-    if (securityScheme.getDescription() != null)
-      securitySchemeObject.setDescription(securityScheme.getDescription());
-    if (securityScheme.getBearerFormat() != null)
-      securitySchemeObject.setBearerFormat(securityScheme.getBearerFormat());
-    if (securityScheme.getExtensions() != null) {
-      for (String key : securityScheme.getExtensions().keySet())
-        securitySchemeObject.addExtension(new Extension(key, securityScheme.getExtensions().get(key)));
-    }
-
-    map.put(securityScheme, securitySchemeObject);
-    return securitySchemeObject;
+  public static SecuritySchemeOb SecuritySchemeOb.parseSecurityScheme(SecurityScheme securityScheme){
+        SecuritySchemeObject securitySchemeObject = new SecuritySchemeObject();
+
+        if(securityScheme.get$ref() != null){
+        SecuritySchemeReference r = new SecuritySchemeReference();
+        r.setRef(securityScheme.get$ref());
+
+      /* 3.1.0 features
+      if (securityScheme.getSummary() != null) ...
+      if (securityScheme.getDescription() != null) ...
+       */
+
+        return r;
+        } else {
+        if (securityScheme.getType() != null)
+        securitySchemeObject.setType(securityScheme.getType().toString());
+        if (securityScheme.getName() != null)
+        securitySchemeObject.setName(securityScheme.getName());
+        if (securityScheme.getIn() != null)
+        securitySchemeObject.setIn(securityScheme.getIn().toString());
+        if (securityScheme.getScheme() != null)
+        securitySchemeObject.setScheme(securityScheme.getScheme());
+        if (securityScheme.getOpenIdConnectUrl() != null)
+        securitySchemeObject.setOpenIdConnectUrl(securityScheme.getOpenIdConnectUrl());
+        if (securityScheme.getFlows() != null)
+        securitySchemeObject.setO(OAuthFlowsObject.parseOAuthFlows(securityScheme.getFlows()));
+        if (securityScheme.getDescription() != null)
+        securitySchemeObject.setDescription(securityScheme.getDescription());
+        if (securityScheme.getBearerFormat() != null)
+        securitySchemeObject.setBearerFormat(securityScheme.getBearerFormat());
+        if (securityScheme.getExtensions() != null) {
+        for (String key : securityScheme.getExtensions().keySet())
+        securitySchemeObject.addEx(new Extension(key, securityScheme.getExtensions().get(key)));
+        }
+        }
+
+        return securitySchemeObject;
   }
 
-  public static OAuthFlowsObject OAuthFlowsObject.parseOAuthFlows(OAuthFlows oAuthFlows, Map<Object, ASTNode> map){
-    OAuthFlowsObject oAuthFlowsObject = new OAuthFlowsObject();
-    Implicit implicit = new Implicit();
-    Password password = new Password();
-    ClientCredentials clientCredentials = new ClientCredentials();
-    AuthorizationCode authorizationCode = new AuthorizationCode();
-
-    if (oAuthFlows.getImplicit() != null) {
-      implicit.setOAuthFlowObject(OAuthFlowObject.parseOAuthFlow(oAuthFlows.getImplicit(), map));
-      oAuthFlowsObject.setImplicit(implicit);
-    }
-    if (oAuthFlows.getPassword() != null) {
-      password.setOAuthFlowObject(OAuthFlowObject.parseOAuthFlow(oAuthFlows.getPassword(), map));
-      oAuthFlowsObject.setPassword(password);
-    }
-    if (oAuthFlows.getClientCredentials() != null) {
-      clientCredentials.setOAuthFlowObject(OAuthFlowObject.parseOAuthFlow(oAuthFlows.getClientCredentials(), map));
-      oAuthFlowsObject.setClientCredentials(clientCredentials);
-    }
-    if (oAuthFlows.getAuthorizationCode() != null) {
-      authorizationCode.setOAuthFlowObject(OAuthFlowObject.parseOAuthFlow(oAuthFlows.getAuthorizationCode(), map));
-      oAuthFlowsObject.setAuthorizationCode(authorizationCode);
-    }
-    if (oAuthFlows.getExtensions() != null) {
-      for (String key : oAuthFlows.getExtensions().keySet())
-        oAuthFlowsObject.addExtension(new Extension(key, oAuthFlows.getExtensions().get(key)));
-    }
-
-    map.put(oAuthFlows, oAuthFlowsObject);
-    return oAuthFlowsObject;
+  public static OAuthFlowsObject OAuthFlowsObject.parseOAuthFlows(OAuthFlows oAuthFlows){
+        OAuthFlowsObject oAuthFlowsObject = new OAuthFlowsObject();
+        Implicit implicit = new Implicit();
+        Password password = new Password();
+        ClientCredentials clientCredentials = new ClientCredentials();
+        AuthorizationCode authorizationCode = new AuthorizationCode();
+
+        if (oAuthFlows.getImplicit() != null) {
+        implicit.set_impl_o(OAuthFlowObject.parseOAuthFlow(oAuthFlows.getImplicit(), map));
+        oAuthFlowsObject.set_impl_i(implicit);
+        }
+        if (oAuthFlows.getPassword() != null) {
+        password.set_impl_o(OAuthFlowObject.parseOAuthFlow(oAuthFlows.getPassword(), map));
+        oAuthFlowsObject.set_impl_p(password);
+        }
+        if (oAuthFlows.getClientCredentials() != null) {
+        clientCredentials.set_impl_o(OAuthFlowObject.parseOAuthFlow(oAuthFlows.getClientCredentials(), map));
+        oAuthFlowsObject.set_impl_c(clientCredentials);
+        }
+        if (oAuthFlows.getAuthorizationCode() != null) {
+        authorizationCode.set_impl_o(OAuthFlowObject.parseOAuthFlow(oAuthFlows.getAuthorizationCode(), map));
+        oAuthFlowsObject.set_impl_a(authorizationCode);
+        }
+        if (oAuthFlows.getExtensions() != null) {
+        for (String key : oAuthFlows.getExtensions().keySet())
+        oAuthFlowsObject.addEx(new Extension(key, oAuthFlows.getExtensions().get(key)));
+        }
+
+        return oAuthFlowsObject;
   }
 
-  public static OAuthFlowObject OAuthFlowObject.parseOAuthFlow(OAuthFlow oAuthFlow, Map<Object, ASTNode> map){
-    OAuthFlowObject oAuthFlowObject = new OAuthFlowObject();
-
-    if (oAuthFlow.getAuthorizationUrl() != null)
-      oAuthFlowObject.setAuthorizationUrl(oAuthFlow.getAuthorizationUrl());
-    if (oAuthFlow.getTokenUrl() != null)
-      oAuthFlowObject.setTokenUrl(oAuthFlow.getTokenUrl());
-    for (String key : oAuthFlow.getScopes().keySet())
-      oAuthFlowObject.addScopesTuple(new ScopesTuple(key, oAuthFlow.getScope(key)));
-    if (oAuthFlow.getRefreshUrl() != null)
-      oAuthFlowObject.setRefreshUrl(oAuthFlow.getRefreshUrl());
-    if (oAuthFlow.getExtensions() != null) {
-      for (String key : oAuthFlow.getExtensions().keySet())
-        oAuthFlowObject.addExtension(new Extension(key, oAuthFlow.getExtensions().get(key)));
-    }
-
-    map.put(oAuthFlow, oAuthFlowObject);
-    return oAuthFlowObject;
+  public static OAuthFlowObject OAuthFlowObject.parseOAuthFlow(OAuthFlow oAuthFlow){
+        OAuthFlowObject oAuthFlowObject = new OAuthFlowObject();
+
+        if (oAuthFlow.getAuthorizationUrl() != null)
+        oAuthFlowObject.setAuthorizationUrl(oAuthFlow.getAuthorizationUrl());
+        if (oAuthFlow.getTokenUrl() != null)
+        oAuthFlowObject.setTokenUrl(oAuthFlow.getTokenUrl());
+        for (String key : oAuthFlow.getScopes().keySet())
+        oAuthFlowObject.addS(new ScopesTuple(key, oAuthFlow.getScopes().get(key)));
+        if (oAuthFlow.getRefreshUrl() != null)
+        oAuthFlowObject.setRefreshUrl(oAuthFlow.getRefreshUrl());
+        if (oAuthFlow.getExtensions() != null) {
+        for (String key : oAuthFlow.getExtensions().keySet())
+        oAuthFlowObject.addEx(new Extension(key, oAuthFlow.getExtensions().get(key)));
+        }
+
+        return oAuthFlowObject;
   }
 
-  public static SecurityRequirementObject SecurityRequirementObject.parseSecurityRequirement(SecurityRequirement securityRequirement, Map<Object, ASTNode> map){
-    SecurityRequirementObject securityRequirementObject = new SecurityRequirementObject();
+  public static SecurityRequirementObject SecurityRequirementObject.parseSecurityRequirement(SecurityRequirement securityRequirement){
+        SecurityRequirementObject securityRequirementObject = new SecurityRequirementObject();
 
-    if (securityRequirement.getRequirements() != null) {
-      for (String key : securityRequirement.getRequirements().keySet()) {
-        JastAddList<SecurityRequirementValue> values = new JastAddList<>();
-        for (String v : securityRequirement.getRequirement(key))
-          values.add(new SecurityRequirementValue(v));
-        securityRequirementObject.addSecurityRequirementTuple(new SecurityRequirementTuple(key, values));
-      }
-    }
+        if (securityRequirement != null) {
+        for (String key : securityRequirement.keySet()) {
+        List<SecurityRequirementValue> values = new ArrayList<>();
+        for (String v : securityRequirement.get(key))
+        values.add(new SecurityRequirementValue(v));
+        securityRequirementObject.addT(new SecurityRequirementTuple(key, values));
+        }
+        }
 
-    map.put(securityRequirement, securityRequirementObject);
-    return securityRequirementObject;
+        return securityRequirementObject;
   }
 }
\ No newline at end of file