diff --git a/docs/dict_reference.rst b/docs/dict_reference.rst
deleted file mode 100644
index f081c0ae71596cee72ea04bc90f9fb25211feeee..0000000000000000000000000000000000000000
--- a/docs/dict_reference.rst
+++ /dev/null
@@ -1,171 +0,0 @@
-Reference for Attributes, Association and Classes keys
-======================================================
-
-Attributes
-----------
-
-commons_DOMLElement::name
-commons_DOMLElement::description
-commons_Property::key
-commons_IProperty::value
-commons_SProperty::value
-commons_FProperty::value
-commons_BProperty::value
-application_SoftwareComponent::isPersistent
-application_SoftwareComponent::licenseCost
-application_SoftwareComponent::configFile
-application_SaaS::licenseCost
-application_SoftwareInterface::endPoint
-infrastructure_ComputingNode::architecture
-infrastructure_ComputingNode::os
-infrastructure_ComputingNode::memory_mb
-infrastructure_ComputingNode::memory_kb
-infrastructure_ComputingNode::storage
-infrastructure_ComputingNode::cpu_count
-infrastructure_ComputingNode::cost
-infrastructure_VirtualMachine::sizeDescription
-infrastructure_Location::region
-infrastructure_Location::zone
-infrastructure_ComputingNodeGenerator::uri
-infrastructure_ComputingNodeGenerator::kind
-infrastructure_AutoScalingGroup::min
-infrastructure_AutoScalingGroup::max
-infrastructure_AutoScalingGroup::loadBalancer
-infrastructure_Storage::label
-infrastructure_Storage::size_gb
-infrastructure_Storage::cost
-infrastructure_FunctionAsAService::cost
-infrastructure_Network::protocol
-infrastructure_Network::address_lb
-infrastructure_Network::address_ub
-infrastructure_NetworkInterface::endPoint
-infrastructure_NetworkInterface::speed
-infrastructure_Rule::kind
-infrastructure_Rule::protocol
-infrastructure_Rule::fromPort
-infrastructure_Rule::toPort
-infrastructure_Rule::cidr
-infrastructure_KeyPair::user
-infrastructure_KeyPair::keyfile
-infrastructure_KeyPair::algorithm
-infrastructure_KeyPair::bits
-infrastructure_UserPass::username
-infrastructure_UserPass::password
-infrastructure_SwarmRole::kind
-concrete_ConcreteElement::configurationScript
-
-Associations
-------------
-
-commons_DOMLElement::annotations
-commons_Property::reference
-commons_Configuration::deployments
-commons_Deployment::component
-commons_Deployment::node
-application_ApplicationLayer::components
-application_SoftwareComponent::exposedInterfaces
-application_SoftwareComponent::consumedInterfaces
-application_SaaS::exposedInterfaces
-infrastructure_InfrastructureLayer::nodes
-infrastructure_InfrastructureLayer::generators
-infrastructure_InfrastructureLayer::storages
-infrastructure_InfrastructureLayer::faas
-infrastructure_InfrastructureLayer::credentials
-infrastructure_InfrastructureLayer::groups
-infrastructure_InfrastructureLayer::securityGroups
-infrastructure_InfrastructureLayer::networks
-infrastructure_ComputingNode::ifaces
-infrastructure_ComputingNode::location
-infrastructure_ComputingNode::credentials
-infrastructure_ComputingNode::group
-infrastructure_VirtualMachine::generatedFrom
-infrastructure_Container::generatedFrom
-infrastructure_Container::hosts
-infrastructure_VMImage::generatedVMs
-infrastructure_ContainerImage::generatedContainers
-infrastructure_AutoScalingGroup::machineDefinition
-infrastructure_AutoScalingGroup::deploymentNetwork
-infrastructure_AutoScalingGroup::securityGroup
-infrastructure_Storage::ifaces
-infrastructure_FunctionAsAService::ifaces
-infrastructure_Network::connectedIfaces
-infrastructure_Network::igws
-infrastructure_Network::subnets
-infrastructure_Subnet::connectedTo
-infrastructure_NetworkInterface::belongsTo
-infrastructure_NetworkInterface::associated
-infrastructure_ComputingGroup::groupedNodes
-infrastructure_SecurityGroup::rules
-infrastructure_SecurityGroup::ifaces
-infrastructure_SwarmRole::nodes
-infrastructure_Swarm::roles
-concrete_ConcreteInfrastructure::providers
-concrete_RuntimeProvider::vms
-concrete_RuntimeProvider::vmImages
-concrete_RuntimeProvider::containerImages
-concrete_RuntimeProvider::networks
-concrete_RuntimeProvider::storages
-concrete_RuntimeProvider::faas
-concrete_RuntimeProvider::group
-concrete_VirtualMachine::maps
-concrete_VMImage::maps
-concrete_ContainerImage::maps
-concrete_Network::maps
-concrete_Storage::maps
-concrete_FunctionAsAService::maps
-concrete_ComputingGroup::maps
-
-Classes
--------
-
-commons_DOMLElement
-commons_Property
-commons_IProperty
-commons_SProperty
-commons_FProperty
-commons_BProperty
-commons_Configuration
-commons_Deployment
-application_ApplicationLayer
-application_ApplicationComponent
-application_SoftwareComponent
-application_SaaS
-application_SoftwareInterface
-application_DBMS
-application_SaaSDBMS
-infrastructure_InfrastructureLayer
-infrastructure_InfrastructureElement
-infrastructure_ComputingNode
-infrastructure_PhysicalComputingNode
-infrastructure_VirtualMachine
-infrastructure_Location
-infrastructure_Container
-infrastructure_ComputingNodeGenerator
-infrastructure_VMImage
-infrastructure_ContainerImage
-infrastructure_AutoScalingGroup
-infrastructure_Storage
-infrastructure_FunctionAsAService
-infrastructure_Network
-infrastructure_Subnet
-infrastructure_NetworkInterface
-infrastructure_InternetGateway
-infrastructure_ComputingGroup
-infrastructure_SecurityGroup
-infrastructure_Rule
-infrastructure_Credentials
-infrastructure_KeyPair
-infrastructure_UserPass
-infrastructure_SwarmRole
-infrastructure_Swarm
-infrastructure_ExtInfrastructureElement
-concrete_ConcreteInfrastructure
-concrete_ConcreteElement
-concrete_RuntimeProvider
-concrete_VirtualMachine
-concrete_VMImage
-concrete_ContainerImage
-concrete_Network
-concrete_Storage
-concrete_FunctionAsAService
-concrete_ComputingGroup
\ No newline at end of file
diff --git a/docs/index.rst b/docs/index.rst
index dbb3f36d3a996bdf801893b338c2ae04707ab7cb..61192c2eafb2647b10f088aee325397520e3676e 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -20,6 +20,7 @@ in charge of checking the correctness and consistency of `DOML`_ models.
    writing-requirements
    requirements
    restapis
+   reference_index
 
 ..
    Indices and tables
diff --git a/docs/reference_index.rst b/docs/reference_index.rst
new file mode 100644
index 0000000000000000000000000000000000000000..ea6fe70bac0a9cce4487e1af14f17256434fa82e
--- /dev/null
+++ b/docs/reference_index.rst
@@ -0,0 +1,11 @@
+DOML Reference
+==============
+
+For a comprehensive list of all the classes, attributes and associations supported in the DOML Model Checker and DOMLR, please consult one of the following pages.
+
+:doc:`Reference for DOML v2.0 <reference_v2.0>`
+-----------------------------------------------
+:doc:`Reference for DOML v2.1 <reference_v2.1>`
+-----------------------------------------------
+:doc:`Reference for DOML v2.2 <reference_v2.2>`
+-----------------------------------------------
diff --git a/docs/reference_v2.0.rst b/docs/reference_v2.0.rst
new file mode 100644
index 0000000000000000000000000000000000000000..5d59dc06766198c6f51eb611511f6ff1b31ad8e3
--- /dev/null
+++ b/docs/reference_v2.0.rst
@@ -0,0 +1,530 @@
+DOML v2.0 Reference
+=============================
+
+
+commons
+^^^^^^^
+
+.. _v2.0_commons_BProperty:
+
+BProperty
+"""""""""
+*Inherits from* :ref:`Property <v2.0_commons_Property>`
+
+* Attributes:
+	* ``value`` [Boolean]
+
+.. _v2.0_commons_Configuration:
+
+Configuration
+"""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.0_commons_DOMLElement>`
+
+* Associations:
+	* ``deployments`` → Deployment [0..*]
+
+.. _v2.0_commons_DOMLElement:
+
+DOMLElement
+"""""""""""
+* Associations:
+	* ``annotations`` → Property [0..*]
+* Attributes:
+	* ``name`` [String]
+	* ``description`` [String]
+
+.. _v2.0_commons_Deployment:
+
+Deployment
+""""""""""
+* Associations:
+	* ``component`` → ApplicationComponent [1..1]
+	* ``node`` → InfrastructureElement [1..1]
+
+.. _v2.0_commons_FProperty:
+
+FProperty
+"""""""""
+*Inherits from* :ref:`Property <v2.0_commons_Property>`
+
+* Attributes:
+	* ``value`` [String]
+
+.. _v2.0_commons_IProperty:
+
+IProperty
+"""""""""
+*Inherits from* :ref:`Property <v2.0_commons_Property>`
+
+* Attributes:
+	* ``value`` [Integer]
+
+.. _v2.0_commons_Property:
+
+Property
+""""""""
+* Associations:
+	* ``reference`` → DOMLElement [0..1]
+* Attributes:
+	* ``key`` [String]
+
+.. _v2.0_commons_SProperty:
+
+SProperty
+"""""""""
+*Inherits from* :ref:`Property <v2.0_commons_Property>`
+
+* Attributes:
+	* ``value`` [String]
+
+application
+^^^^^^^^^^^
+
+.. _v2.0_application_ApplicationComponent:
+
+ApplicationComponent
+""""""""""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.0_commons_DOMLElement>`
+
+
+.. _v2.0_application_ApplicationLayer:
+
+ApplicationLayer
+""""""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.0_commons_DOMLElement>`
+
+* Associations:
+	* ``components`` → ApplicationComponent [0..*]
+
+.. _v2.0_application_DBMS:
+
+DBMS
+""""
+*Inherits from* :ref:`SoftwareComponent <v2.0_application_SoftwareComponent>`
+
+
+.. _v2.0_application_SaaS:
+
+SaaS
+""""
+*Inherits from* :ref:`ApplicationComponent <v2.0_application_ApplicationComponent>`
+
+* Associations:
+	* ``exposedInterfaces`` → SoftwareInterface [0..*]
+* Attributes:
+	* ``licenseCost`` [String]
+
+.. _v2.0_application_SaaSDBMS:
+
+SaaSDBMS
+""""""""
+*Inherits from* :ref:`SaaS <v2.0_application_SaaS>`
+
+
+.. _v2.0_application_SoftwareComponent:
+
+SoftwareComponent
+"""""""""""""""""
+*Inherits from* :ref:`ApplicationComponent <v2.0_application_ApplicationComponent>`
+
+* Associations:
+	* ``exposedInterfaces`` → SoftwareInterface [0..*]
+	* ``consumedInterfaces`` → SoftwareInterface [0..*]
+* Attributes:
+	* ``isPersistent`` [Boolean]
+	* ``licenseCost`` [String]
+	* ``configFile`` [String]
+
+.. _v2.0_application_SoftwareInterface:
+
+SoftwareInterface
+"""""""""""""""""
+*Inherits from* :ref:`ApplicationComponent <v2.0_application_ApplicationComponent>`
+
+* Attributes:
+	* ``endPoint`` [String]
+
+infrastructure
+^^^^^^^^^^^^^^
+
+.. _v2.0_infrastructure_AutoScalingGroup:
+
+AutoScalingGroup
+""""""""""""""""
+*Inherits from* :ref:`ComputingGroup <v2.0_infrastructure_ComputingGroup>`
+
+* Associations:
+	* ``machineDefinition`` → VirtualMachine [1..1]
+	* ``deploymentNetwork`` → Network [0..1]
+	* ``securityGroup`` → SecurityGroup [0..1]
+* Attributes:
+	* ``min`` [Integer]
+	* ``max`` [Integer]
+	* ``loadBalancer`` [String]
+
+.. _v2.0_infrastructure_ComputingGroup:
+
+ComputingGroup
+""""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.0_commons_DOMLElement>`
+
+* Associations:
+	* ``groupedNodes`` → ComputingNode [0..*]
+
+.. _v2.0_infrastructure_ComputingNode:
+
+ComputingNode
+"""""""""""""
+*Inherits from* :ref:`InfrastructureElement <v2.0_infrastructure_InfrastructureElement>`
+
+* Associations:
+	* ``ifaces`` → NetworkInterface [0..*]
+	* ``location`` → Location [0..1]
+	* ``credentials`` → Credentials [0..1]
+	* ``group`` → ComputingGroup [0..1]
+* Attributes:
+	* ``architecture`` [String]
+	* ``os`` [String]
+	* ``memory_mb`` [Integer]
+	* ``memory_kb`` [Integer]
+	* ``storage`` [String]
+	* ``cpu_count`` [Integer]
+	* ``cost`` [Integer]
+
+.. _v2.0_infrastructure_ComputingNodeGenerator:
+
+ComputingNodeGenerator
+""""""""""""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.0_commons_DOMLElement>`
+
+* Attributes:
+	* ``uri`` [String]
+	* ``kind`` [GeneratorKind]
+
+.. _v2.0_infrastructure_Container:
+
+Container
+"""""""""
+*Inherits from* :ref:`ComputingNode <v2.0_infrastructure_ComputingNode>`
+
+* Associations:
+	* ``generatedFrom`` → ContainerImage [0..1]
+	* ``hosts`` → ComputingNode [0..*]
+
+.. _v2.0_infrastructure_ContainerImage:
+
+ContainerImage
+""""""""""""""
+*Inherits from* :ref:`ComputingNodeGenerator <v2.0_infrastructure_ComputingNodeGenerator>`
+
+* Associations:
+	* ``generatedContainers`` → Container [0..*]
+
+.. _v2.0_infrastructure_Credentials:
+
+Credentials
+"""""""""""
+*Inherits from* :ref:`DOMLElement <v2.0_commons_DOMLElement>`
+
+
+.. _v2.0_infrastructure_ExtInfrastructureElement:
+
+ExtInfrastructureElement
+""""""""""""""""""""""""
+*Inherits from* :ref:`InfrastructureElement <v2.0_infrastructure_InfrastructureElement>`
+
+
+.. _v2.0_infrastructure_FunctionAsAService:
+
+FunctionAsAService
+""""""""""""""""""
+*Inherits from* :ref:`InfrastructureElement <v2.0_infrastructure_InfrastructureElement>`
+
+* Associations:
+	* ``ifaces`` → NetworkInterface [0..*]
+* Attributes:
+	* ``cost`` [Integer]
+
+.. _v2.0_infrastructure_InfrastructureElement:
+
+InfrastructureElement
+"""""""""""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.0_commons_DOMLElement>`
+
+
+.. _v2.0_infrastructure_InfrastructureLayer:
+
+InfrastructureLayer
+"""""""""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.0_commons_DOMLElement>`
+
+* Associations:
+	* ``nodes`` → ComputingNode [0..*]
+	* ``generators`` → ComputingNodeGenerator [0..*]
+	* ``storages`` → Storage [0..*]
+	* ``faas`` → FunctionAsAService [0..*]
+	* ``credentials`` → Credentials [0..*]
+	* ``groups`` → ComputingGroup [0..*]
+	* ``securityGroups`` → SecurityGroup [0..*]
+	* ``networks`` → Network [0..*]
+
+.. _v2.0_infrastructure_InternetGateway:
+
+InternetGateway
+"""""""""""""""
+*Inherits from* :ref:`NetworkInterface <v2.0_infrastructure_NetworkInterface>`
+
+
+.. _v2.0_infrastructure_KeyPair:
+
+KeyPair
+"""""""
+*Inherits from* :ref:`Credentials <v2.0_infrastructure_Credentials>`
+
+* Attributes:
+	* ``user`` [String]
+	* ``keyfile`` [String]
+	* ``algorithm`` [String]
+	* ``bits`` [Integer]
+
+.. _v2.0_infrastructure_Location:
+
+Location
+""""""""
+*Inherits from* :ref:`DOMLElement <v2.0_commons_DOMLElement>`
+
+* Attributes:
+	* ``region`` [String]
+	* ``zone`` [String]
+
+.. _v2.0_infrastructure_Network:
+
+Network
+"""""""
+*Inherits from* :ref:`DOMLElement <v2.0_commons_DOMLElement>`
+
+* Associations:
+	* ``connectedIfaces`` → NetworkInterface [0..*]
+	* ``igws`` → InternetGateway [0..*]
+	* ``subnets`` → Subnet [0..*]
+* Attributes:
+	* ``protocol`` [String]
+	* ``address_lb`` [Integer]
+	* ``address_ub`` [Integer]
+
+.. _v2.0_infrastructure_NetworkInterface:
+
+NetworkInterface
+""""""""""""""""
+*Inherits from* :ref:`InfrastructureElement <v2.0_infrastructure_InfrastructureElement>`
+
+* Associations:
+	* ``belongsTo`` → Network [0..1]
+	* ``associated`` → SecurityGroup [0..1]
+* Attributes:
+	* ``endPoint`` [Integer]
+	* ``speed`` [String]
+
+.. _v2.0_infrastructure_PhysicalComputingNode:
+
+PhysicalComputingNode
+"""""""""""""""""""""
+*Inherits from* :ref:`ComputingNode <v2.0_infrastructure_ComputingNode>`
+
+
+.. _v2.0_infrastructure_Rule:
+
+Rule
+""""
+*Inherits from* :ref:`DOMLElement <v2.0_commons_DOMLElement>`
+
+* Attributes:
+	* ``kind`` [String]
+	* ``protocol`` [String]
+	* ``fromPort`` [Integer]
+	* ``toPort`` [Integer]
+	* ``cidr`` [String]
+
+.. _v2.0_infrastructure_SecurityGroup:
+
+SecurityGroup
+"""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.0_commons_DOMLElement>`
+
+* Associations:
+	* ``rules`` → Rule [0..*]
+	* ``ifaces`` → NetworkInterface [0..*]
+
+.. _v2.0_infrastructure_Storage:
+
+Storage
+"""""""
+*Inherits from* :ref:`InfrastructureElement <v2.0_infrastructure_InfrastructureElement>`
+
+* Associations:
+	* ``ifaces`` → NetworkInterface [0..*]
+* Attributes:
+	* ``label`` [String]
+	* ``size_gb`` [Integer]
+	* ``cost`` [Integer]
+
+.. _v2.0_infrastructure_Subnet:
+
+Subnet
+""""""
+*Inherits from* :ref:`Network <v2.0_infrastructure_Network>`
+
+* Associations:
+	* ``connectedTo`` → Network [0..1]
+
+.. _v2.0_infrastructure_Swarm:
+
+Swarm
+"""""
+*Inherits from* :ref:`ComputingGroup <v2.0_infrastructure_ComputingGroup>`
+
+* Associations:
+	* ``roles`` → SwarmRole [0..*]
+
+.. _v2.0_infrastructure_SwarmRole:
+
+SwarmRole
+"""""""""
+*Inherits from* :ref:`DOMLElement <v2.0_commons_DOMLElement>`
+
+* Associations:
+	* ``nodes`` → ComputingNode [0..*]
+* Attributes:
+	* ``kind`` [String]
+
+.. _v2.0_infrastructure_UserPass:
+
+UserPass
+""""""""
+*Inherits from* :ref:`Credentials <v2.0_infrastructure_Credentials>`
+
+* Attributes:
+	* ``username`` [String]
+	* ``password`` [String]
+
+.. _v2.0_infrastructure_VMImage:
+
+VMImage
+"""""""
+*Inherits from* :ref:`ComputingNodeGenerator <v2.0_infrastructure_ComputingNodeGenerator>`
+
+* Associations:
+	* ``generatedVMs`` → VirtualMachine [0..*]
+
+.. _v2.0_infrastructure_VirtualMachine:
+
+VirtualMachine
+""""""""""""""
+*Inherits from* :ref:`ComputingNode <v2.0_infrastructure_ComputingNode>`
+
+* Associations:
+	* ``generatedFrom`` → VMImage [0..1]
+* Attributes:
+	* ``sizeDescription`` [String]
+
+concrete
+^^^^^^^^
+
+.. _v2.0_concrete_ComputingGroup:
+
+ComputingGroup
+""""""""""""""
+*Inherits from* :ref:`ConcreteElement <v2.0_concrete_ConcreteElement>`
+
+* Associations:
+	* ``maps`` → ComputingGroup [1..1]
+
+.. _v2.0_concrete_ConcreteElement:
+
+ConcreteElement
+"""""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.0_commons_DOMLElement>`
+
+* Attributes:
+	* ``configurationScript`` [String]
+
+.. _v2.0_concrete_ConcreteInfrastructure:
+
+ConcreteInfrastructure
+""""""""""""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.0_commons_DOMLElement>`
+
+* Associations:
+	* ``providers`` → RuntimeProvider [0..*]
+
+.. _v2.0_concrete_ContainerImage:
+
+ContainerImage
+""""""""""""""
+*Inherits from* :ref:`ConcreteElement <v2.0_concrete_ConcreteElement>`
+
+* Associations:
+	* ``maps`` → ContainerImage [0..1]
+
+.. _v2.0_concrete_FunctionAsAService:
+
+FunctionAsAService
+""""""""""""""""""
+*Inherits from* :ref:`ConcreteElement <v2.0_concrete_ConcreteElement>`
+
+* Associations:
+	* ``maps`` → FunctionAsAService [0..1]
+
+.. _v2.0_concrete_Network:
+
+Network
+"""""""
+*Inherits from* :ref:`ConcreteElement <v2.0_concrete_ConcreteElement>`
+
+* Associations:
+	* ``maps`` → Network [0..1]
+
+.. _v2.0_concrete_RuntimeProvider:
+
+RuntimeProvider
+"""""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.0_commons_DOMLElement>`
+
+* Associations:
+	* ``vms`` → VirtualMachine [0..*]
+	* ``vmImages`` → VMImage [0..*]
+	* ``containerImages`` → ContainerImage [0..*]
+	* ``networks`` → Network [0..*]
+	* ``storages`` → Storage [0..*]
+	* ``faas`` → FunctionAsAService [0..*]
+	* ``group`` → ComputingGroup [0..*]
+
+.. _v2.0_concrete_Storage:
+
+Storage
+"""""""
+*Inherits from* :ref:`ConcreteElement <v2.0_concrete_ConcreteElement>`
+
+* Associations:
+	* ``maps`` → Storage [0..1]
+
+.. _v2.0_concrete_VMImage:
+
+VMImage
+"""""""
+*Inherits from* :ref:`ConcreteElement <v2.0_concrete_ConcreteElement>`
+
+* Associations:
+	* ``maps`` → VMImage [0..1]
+
+.. _v2.0_concrete_VirtualMachine:
+
+VirtualMachine
+""""""""""""""
+*Inherits from* :ref:`ConcreteElement <v2.0_concrete_ConcreteElement>`
+
+* Associations:
+	* ``maps`` → VirtualMachine [0..1]
+
+
+
diff --git a/docs/reference_v2.1.rst b/docs/reference_v2.1.rst
new file mode 100644
index 0000000000000000000000000000000000000000..ec6b8d8453142bb870d15d7f9f161b382319f832
--- /dev/null
+++ b/docs/reference_v2.1.rst
@@ -0,0 +1,544 @@
+DOML v2.1 Reference
+=============================
+
+
+commons
+^^^^^^^
+
+.. _v2.1_commons_BProperty:
+
+BProperty
+"""""""""
+*Inherits from* :ref:`Property <v2.1_commons_Property>`
+
+* Attributes:
+	* ``value`` [Boolean]
+
+.. _v2.1_commons_Configuration:
+
+Configuration
+"""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.1_commons_DOMLElement>`
+
+* Associations:
+	* ``deployments`` → Deployment [0..*]
+
+.. _v2.1_commons_DOMLElement:
+
+DOMLElement
+"""""""""""
+* Associations:
+	* ``annotations`` → Property [0..*]
+* Attributes:
+	* ``name`` [String]
+	* ``description`` [String]
+
+.. _v2.1_commons_Deployment:
+
+Deployment
+""""""""""
+* Associations:
+	* ``component`` → ApplicationComponent [1..1]
+	* ``node`` → InfrastructureElement [1..1]
+
+.. _v2.1_commons_FProperty:
+
+FProperty
+"""""""""
+*Inherits from* :ref:`Property <v2.1_commons_Property>`
+
+* Attributes:
+	* ``value`` [String]
+
+.. _v2.1_commons_IProperty:
+
+IProperty
+"""""""""
+*Inherits from* :ref:`Property <v2.1_commons_Property>`
+
+* Attributes:
+	* ``value`` [Integer]
+
+.. _v2.1_commons_Property:
+
+Property
+""""""""
+* Associations:
+	* ``reference`` → DOMLElement [0..1]
+* Attributes:
+	* ``key`` [String]
+
+.. _v2.1_commons_SProperty:
+
+SProperty
+"""""""""
+*Inherits from* :ref:`Property <v2.1_commons_Property>`
+
+* Attributes:
+	* ``value`` [String]
+
+application
+^^^^^^^^^^^
+
+.. _v2.1_application_ApplicationComponent:
+
+ApplicationComponent
+""""""""""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.1_commons_DOMLElement>`
+
+
+.. _v2.1_application_ApplicationLayer:
+
+ApplicationLayer
+""""""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.1_commons_DOMLElement>`
+
+* Associations:
+	* ``components`` → ApplicationComponent [0..*]
+
+.. _v2.1_application_DBMS:
+
+DBMS
+""""
+*Inherits from* :ref:`SoftwareComponent <v2.1_application_SoftwareComponent>`
+
+
+.. _v2.1_application_SaaS:
+
+SaaS
+""""
+*Inherits from* :ref:`ApplicationComponent <v2.1_application_ApplicationComponent>`
+
+* Associations:
+	* ``exposedInterfaces`` → SoftwareInterface [0..*]
+* Attributes:
+	* ``licenseCost`` [String]
+
+.. _v2.1_application_SaaSDBMS:
+
+SaaSDBMS
+""""""""
+*Inherits from* :ref:`SaaS <v2.1_application_SaaS>`
+
+
+.. _v2.1_application_SoftwareComponent:
+
+SoftwareComponent
+"""""""""""""""""
+*Inherits from* :ref:`ApplicationComponent <v2.1_application_ApplicationComponent>`
+
+* Associations:
+	* ``exposedInterfaces`` → SoftwareInterface [0..*]
+	* ``consumedInterfaces`` → SoftwareInterface [0..*]
+* Attributes:
+	* ``isPersistent`` [Boolean]
+	* ``licenseCost`` [String]
+	* ``configFile`` [String]
+
+.. _v2.1_application_SoftwareInterface:
+
+SoftwareInterface
+"""""""""""""""""
+*Inherits from* :ref:`ApplicationComponent <v2.1_application_ApplicationComponent>`
+
+* Attributes:
+	* ``endPoint`` [String]
+
+infrastructure
+^^^^^^^^^^^^^^
+
+.. _v2.1_infrastructure_AutoScalingGroup:
+
+AutoScalingGroup
+""""""""""""""""
+*Inherits from* :ref:`ComputingGroup <v2.1_infrastructure_ComputingGroup>`
+
+* Associations:
+	* ``machineDefinition`` → VirtualMachine [1..1]
+	* ``securityGroup`` → SecurityGroup [0..1]
+* Attributes:
+	* ``min`` [Integer]
+	* ``max`` [Integer]
+	* ``loadBalancer`` [String]
+
+.. _v2.1_infrastructure_ComputingGroup:
+
+ComputingGroup
+""""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.1_commons_DOMLElement>`
+
+* Associations:
+	* ``groupedNodes`` → ComputingNode [0..*]
+
+.. _v2.1_infrastructure_ComputingNode:
+
+ComputingNode
+"""""""""""""
+*Inherits from* :ref:`InfrastructureElement <v2.1_infrastructure_InfrastructureElement>`
+
+* Associations:
+	* ``ifaces`` → NetworkInterface [0..*]
+	* ``location`` → Location [0..1]
+	* ``credentials`` → Credentials [0..1]
+	* ``group`` → ComputingGroup [0..1]
+* Attributes:
+	* ``architecture`` [String]
+	* ``os`` [String]
+	* ``memory_mb`` [Integer]
+	* ``memory_kb`` [Integer]
+	* ``storage`` [String]
+	* ``cpu_count`` [Integer]
+	* ``cost`` [Integer]
+
+.. _v2.1_infrastructure_ComputingNodeGenerator:
+
+ComputingNodeGenerator
+""""""""""""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.1_commons_DOMLElement>`
+
+* Attributes:
+	* ``uri`` [String]
+	* ``kind`` [GeneratorKind]
+
+.. _v2.1_infrastructure_Container:
+
+Container
+"""""""""
+*Inherits from* :ref:`ComputingNode <v2.1_infrastructure_ComputingNode>`
+
+* Associations:
+	* ``generatedFrom`` → ContainerImage [0..1]
+	* ``configs`` → ContainerConfig [0..*]
+
+.. _v2.1_infrastructure_ContainerConfig:
+
+ContainerConfig
+"""""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.1_commons_DOMLElement>`
+
+* Associations:
+	* ``host`` → ComputingNode [0..1]
+	* ``iface`` → NetworkInterface [0..1]
+* Attributes:
+	* ``container_port`` [Integer]
+	* ``vm_port`` [Integer]
+
+.. _v2.1_infrastructure_ContainerImage:
+
+ContainerImage
+""""""""""""""
+*Inherits from* :ref:`ComputingNodeGenerator <v2.1_infrastructure_ComputingNodeGenerator>`
+
+* Associations:
+	* ``generatedContainers`` → Container [0..*]
+
+.. _v2.1_infrastructure_Credentials:
+
+Credentials
+"""""""""""
+*Inherits from* :ref:`DOMLElement <v2.1_commons_DOMLElement>`
+
+
+.. _v2.1_infrastructure_ExtInfrastructureElement:
+
+ExtInfrastructureElement
+""""""""""""""""""""""""
+*Inherits from* :ref:`InfrastructureElement <v2.1_infrastructure_InfrastructureElement>`
+
+
+.. _v2.1_infrastructure_FunctionAsAService:
+
+FunctionAsAService
+""""""""""""""""""
+*Inherits from* :ref:`InfrastructureElement <v2.1_infrastructure_InfrastructureElement>`
+
+* Associations:
+	* ``ifaces`` → NetworkInterface [0..*]
+* Attributes:
+	* ``cost`` [Integer]
+
+.. _v2.1_infrastructure_InfrastructureElement:
+
+InfrastructureElement
+"""""""""""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.1_commons_DOMLElement>`
+
+
+.. _v2.1_infrastructure_InfrastructureLayer:
+
+InfrastructureLayer
+"""""""""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.1_commons_DOMLElement>`
+
+* Associations:
+	* ``nodes`` → ComputingNode [0..*]
+	* ``generators`` → ComputingNodeGenerator [0..*]
+	* ``storages`` → Storage [0..*]
+	* ``faas`` → FunctionAsAService [0..*]
+	* ``credentials`` → Credentials [0..*]
+	* ``groups`` → ComputingGroup [0..*]
+	* ``securityGroups`` → SecurityGroup [0..*]
+	* ``networks`` → Network [0..*]
+
+.. _v2.1_infrastructure_InternetGateway:
+
+InternetGateway
+"""""""""""""""
+*Inherits from* :ref:`NetworkInterface <v2.1_infrastructure_NetworkInterface>`
+
+
+.. _v2.1_infrastructure_KeyPair:
+
+KeyPair
+"""""""
+*Inherits from* :ref:`Credentials <v2.1_infrastructure_Credentials>`
+
+* Attributes:
+	* ``user`` [String]
+	* ``keyfile`` [String]
+	* ``algorithm`` [String]
+	* ``bits`` [Integer]
+
+.. _v2.1_infrastructure_Location:
+
+Location
+""""""""
+*Inherits from* :ref:`DOMLElement <v2.1_commons_DOMLElement>`
+
+* Attributes:
+	* ``region`` [String]
+	* ``zone`` [String]
+
+.. _v2.1_infrastructure_Network:
+
+Network
+"""""""
+*Inherits from* :ref:`DOMLElement <v2.1_commons_DOMLElement>`
+
+* Associations:
+	* ``connectedIfaces`` → NetworkInterface [0..*]
+	* ``igws`` → InternetGateway [0..*]
+	* ``subnets`` → Subnet [0..*]
+* Attributes:
+	* ``protocol`` [String]
+	* ``addressRange`` [String]
+	* ``cidr`` [Integer]
+
+.. _v2.1_infrastructure_NetworkInterface:
+
+NetworkInterface
+""""""""""""""""
+*Inherits from* :ref:`InfrastructureElement <v2.1_infrastructure_InfrastructureElement>`
+
+* Associations:
+	* ``belongsTo`` → Network [0..1]
+	* ``associated`` → SecurityGroup [0..1]
+* Attributes:
+	* ``endPoint`` [Integer]
+	* ``speed`` [String]
+
+.. _v2.1_infrastructure_PhysicalComputingNode:
+
+PhysicalComputingNode
+"""""""""""""""""""""
+*Inherits from* :ref:`ComputingNode <v2.1_infrastructure_ComputingNode>`
+
+
+.. _v2.1_infrastructure_Rule:
+
+Rule
+""""
+*Inherits from* :ref:`DOMLElement <v2.1_commons_DOMLElement>`
+
+* Attributes:
+	* ``kind`` [String]
+	* ``protocol`` [String]
+	* ``fromPort`` [Integer]
+	* ``toPort`` [Integer]
+	* ``cidr`` [String]
+
+.. _v2.1_infrastructure_SecurityGroup:
+
+SecurityGroup
+"""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.1_commons_DOMLElement>`
+
+* Associations:
+	* ``rules`` → Rule [0..*]
+	* ``ifaces`` → NetworkInterface [0..*]
+
+.. _v2.1_infrastructure_Storage:
+
+Storage
+"""""""
+*Inherits from* :ref:`InfrastructureElement <v2.1_infrastructure_InfrastructureElement>`
+
+* Associations:
+	* ``ifaces`` → NetworkInterface [0..*]
+* Attributes:
+	* ``label`` [String]
+	* ``size_gb`` [Integer]
+	* ``cost`` [Integer]
+
+.. _v2.1_infrastructure_Subnet:
+
+Subnet
+""""""
+*Inherits from* :ref:`Network <v2.1_infrastructure_Network>`
+
+* Associations:
+	* ``connectedTo`` → Network [0..1]
+
+.. _v2.1_infrastructure_Swarm:
+
+Swarm
+"""""
+*Inherits from* :ref:`ComputingGroup <v2.1_infrastructure_ComputingGroup>`
+
+* Associations:
+	* ``roles`` → SwarmRole [0..*]
+
+.. _v2.1_infrastructure_SwarmRole:
+
+SwarmRole
+"""""""""
+*Inherits from* :ref:`DOMLElement <v2.1_commons_DOMLElement>`
+
+* Associations:
+	* ``nodes`` → ComputingNode [0..*]
+* Attributes:
+	* ``kind`` [String]
+
+.. _v2.1_infrastructure_UserPass:
+
+UserPass
+""""""""
+*Inherits from* :ref:`Credentials <v2.1_infrastructure_Credentials>`
+
+* Attributes:
+	* ``username`` [String]
+	* ``password`` [String]
+
+.. _v2.1_infrastructure_VMImage:
+
+VMImage
+"""""""
+*Inherits from* :ref:`ComputingNodeGenerator <v2.1_infrastructure_ComputingNodeGenerator>`
+
+* Associations:
+	* ``generatedVMs`` → VirtualMachine [0..*]
+
+.. _v2.1_infrastructure_VirtualMachine:
+
+VirtualMachine
+""""""""""""""
+*Inherits from* :ref:`ComputingNode <v2.1_infrastructure_ComputingNode>`
+
+* Associations:
+	* ``generatedFrom`` → VMImage [0..1]
+* Attributes:
+	* ``sizeDescription`` [String]
+
+concrete
+^^^^^^^^
+
+.. _v2.1_concrete_ComputingGroup:
+
+ComputingGroup
+""""""""""""""
+*Inherits from* :ref:`ConcreteElement <v2.1_concrete_ConcreteElement>`
+
+* Associations:
+	* ``maps`` → ComputingGroup [1..1]
+
+.. _v2.1_concrete_ConcreteElement:
+
+ConcreteElement
+"""""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.1_commons_DOMLElement>`
+
+* Attributes:
+	* ``configurationScript`` [String]
+
+.. _v2.1_concrete_ConcreteInfrastructure:
+
+ConcreteInfrastructure
+""""""""""""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.1_commons_DOMLElement>`
+
+* Associations:
+	* ``providers`` → RuntimeProvider [0..*]
+
+.. _v2.1_concrete_ContainerImage:
+
+ContainerImage
+""""""""""""""
+*Inherits from* :ref:`ConcreteElement <v2.1_concrete_ConcreteElement>`
+
+* Associations:
+	* ``maps`` → ContainerImage [0..1]
+
+.. _v2.1_concrete_FunctionAsAService:
+
+FunctionAsAService
+""""""""""""""""""
+*Inherits from* :ref:`ConcreteElement <v2.1_concrete_ConcreteElement>`
+
+* Associations:
+	* ``maps`` → FunctionAsAService [0..1]
+
+.. _v2.1_concrete_Network:
+
+Network
+"""""""
+*Inherits from* :ref:`ConcreteElement <v2.1_concrete_ConcreteElement>`
+
+* Associations:
+	* ``maps`` → Network [0..1]
+* Attributes:
+	* ``address`` [Integer]
+
+.. _v2.1_concrete_RuntimeProvider:
+
+RuntimeProvider
+"""""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.1_commons_DOMLElement>`
+
+* Associations:
+	* ``vms`` → VirtualMachine [0..*]
+	* ``vmImages`` → VMImage [0..*]
+	* ``containerImages`` → ContainerImage [0..*]
+	* ``networks`` → Network [0..*]
+	* ``storages`` → Storage [0..*]
+	* ``faas`` → FunctionAsAService [0..*]
+	* ``group`` → ComputingGroup [0..*]
+
+.. _v2.1_concrete_Storage:
+
+Storage
+"""""""
+*Inherits from* :ref:`ConcreteElement <v2.1_concrete_ConcreteElement>`
+
+* Associations:
+	* ``maps`` → Storage [0..1]
+
+.. _v2.1_concrete_VMImage:
+
+VMImage
+"""""""
+*Inherits from* :ref:`ConcreteElement <v2.1_concrete_ConcreteElement>`
+
+* Associations:
+	* ``maps`` → VMImage [0..1]
+
+.. _v2.1_concrete_VirtualMachine:
+
+VirtualMachine
+""""""""""""""
+*Inherits from* :ref:`ConcreteElement <v2.1_concrete_ConcreteElement>`
+
+* Associations:
+	* ``maps`` → VirtualMachine [0..1]
+
+
+
diff --git a/docs/reference_v2.2.rst b/docs/reference_v2.2.rst
new file mode 100644
index 0000000000000000000000000000000000000000..f72bdd429573e40f83c96f94048874b91f6ca625
--- /dev/null
+++ b/docs/reference_v2.2.rst
@@ -0,0 +1,573 @@
+DOML v2.2 Reference
+=============================
+
+
+commons
+^^^^^^^
+
+.. _v2.2_commons_BProperty:
+
+BProperty
+"""""""""
+*Inherits from* :ref:`Property <v2.2_commons_Property>`
+
+* Attributes:
+	* ``value`` [Boolean]
+
+.. _v2.2_commons_Configuration:
+
+Configuration
+"""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.2_commons_DOMLElement>`
+
+* Associations:
+	* ``deployments`` → Deployment [0..*]
+
+.. _v2.2_commons_Credentials:
+
+Credentials
+"""""""""""
+*Inherits from* :ref:`DOMLElement <v2.2_commons_DOMLElement>`
+
+
+.. _v2.2_commons_DOMLElement:
+
+DOMLElement
+"""""""""""
+* Associations:
+	* ``annotations`` → Property [0..*]
+* Attributes:
+	* ``name`` [String]
+	* ``description`` [String]
+
+.. _v2.2_commons_DeployableElement:
+
+DeployableElement
+"""""""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.2_commons_DOMLElement>`
+
+
+.. _v2.2_commons_Deployment:
+
+Deployment
+""""""""""
+* Associations:
+	* ``component`` → DeployableElement [1..1]
+	* ``node`` → InfrastructureElement [1..1]
+
+.. _v2.2_commons_FProperty:
+
+FProperty
+"""""""""
+*Inherits from* :ref:`Property <v2.2_commons_Property>`
+
+* Attributes:
+	* ``value`` [String]
+
+.. _v2.2_commons_IProperty:
+
+IProperty
+"""""""""
+*Inherits from* :ref:`Property <v2.2_commons_Property>`
+
+* Attributes:
+	* ``value`` [Integer]
+
+.. _v2.2_commons_KeyPair:
+
+KeyPair
+"""""""
+*Inherits from* :ref:`Credentials <v2.2_commons_Credentials>`
+
+* Attributes:
+	* ``user`` [String]
+	* ``keyfile`` [String]
+	* ``algorithm`` [String]
+	* ``bits`` [Integer]
+
+.. _v2.2_commons_Property:
+
+Property
+""""""""
+* Associations:
+	* ``reference`` → DOMLElement [0..1]
+* Attributes:
+	* ``key`` [String]
+
+.. _v2.2_commons_SProperty:
+
+SProperty
+"""""""""
+*Inherits from* :ref:`Property <v2.2_commons_Property>`
+
+* Attributes:
+	* ``value`` [String]
+
+.. _v2.2_commons_Source:
+
+Source
+""""""
+*Inherits from* :ref:`DOMLElement <v2.2_commons_DOMLElement>`
+
+* Attributes:
+	* ``entry`` [String]
+	* ``backend`` [String]
+
+.. _v2.2_commons_UserPass:
+
+UserPass
+""""""""
+*Inherits from* :ref:`Credentials <v2.2_commons_Credentials>`
+
+* Attributes:
+	* ``user`` [String]
+	* ``password`` [String]
+
+application
+^^^^^^^^^^^
+
+.. _v2.2_application_ApplicationComponent:
+
+ApplicationComponent
+""""""""""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.2_commons_DOMLElement>`
+
+
+.. _v2.2_application_ApplicationLayer:
+
+ApplicationLayer
+""""""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.2_commons_DOMLElement>`
+
+* Associations:
+	* ``components`` → ApplicationComponent [0..*]
+
+.. _v2.2_application_DBMS:
+
+DBMS
+""""
+*Inherits from* :ref:`SoftwareComponent <v2.2_application_SoftwareComponent>`
+
+
+.. _v2.2_application_SaaS:
+
+SaaS
+""""
+*Inherits from* :ref:`ApplicationComponent <v2.2_application_ApplicationComponent>`
+
+* Associations:
+	* ``exposedInterfaces`` → SoftwareInterface [0..*]
+* Attributes:
+	* ``licenseCost`` [String]
+
+.. _v2.2_application_SaaSDBMS:
+
+SaaSDBMS
+""""""""
+*Inherits from* :ref:`SaaS <v2.2_application_SaaS>`
+
+
+.. _v2.2_application_SoftwareComponent:
+
+SoftwareComponent
+"""""""""""""""""
+*Inherits from* :ref:`ApplicationComponent <v2.2_application_ApplicationComponent>`
+
+* Associations:
+	* ``exposedInterfaces`` → SoftwareInterface [0..*]
+	* ``consumedInterfaces`` → SoftwareInterface [0..*]
+	* ``src`` → Source [0..1]
+* Attributes:
+	* ``isPersistent`` [Boolean]
+	* ``licenseCost`` [String]
+
+.. _v2.2_application_SoftwareInterface:
+
+SoftwareInterface
+"""""""""""""""""
+*Inherits from* :ref:`ApplicationComponent <v2.2_application_ApplicationComponent>`
+
+* Attributes:
+	* ``endPoint`` [String]
+
+infrastructure
+^^^^^^^^^^^^^^
+
+.. _v2.2_infrastructure_AutoScalingGroup:
+
+AutoScalingGroup
+""""""""""""""""
+*Inherits from* :ref:`ComputingGroup <v2.2_infrastructure_ComputingGroup>`
+
+* Associations:
+	* ``machineDefinition`` → VirtualMachine [1..1]
+	* ``securityGroup`` → SecurityGroup [0..1]
+* Attributes:
+	* ``min`` [Integer]
+	* ``max`` [Integer]
+	* ``loadBalancer`` [String]
+
+.. _v2.2_infrastructure_ComputingGroup:
+
+ComputingGroup
+""""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.2_commons_DOMLElement>`
+
+* Associations:
+	* ``groupedNodes`` → ComputingNode [0..*]
+
+.. _v2.2_infrastructure_ComputingNode:
+
+ComputingNode
+"""""""""""""
+*Inherits from* :ref:`InfrastructureElement <v2.2_infrastructure_InfrastructureElement>`
+
+* Associations:
+	* ``ifaces`` → NetworkInterface [0..*]
+	* ``location`` → Location [0..1]
+	* ``credentials`` → Credentials [0..1]
+	* ``group`` → ComputingGroup [0..1]
+* Attributes:
+	* ``architecture`` [String]
+	* ``os`` [String]
+	* ``memory_mb`` [Integer]
+	* ``memory_kb`` [Integer]
+	* ``storage`` [String]
+	* ``cpu_count`` [Integer]
+	* ``cost`` [Integer]
+	* ``disabledMonitorings`` [String]
+
+.. _v2.2_infrastructure_ComputingNodeGenerator:
+
+ComputingNodeGenerator
+""""""""""""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.2_commons_DOMLElement>`
+
+* Attributes:
+	* ``uri`` [String]
+	* ``kind`` [GeneratorKind]
+
+.. _v2.2_infrastructure_Container:
+
+Container
+"""""""""
+*Inherits from* :ref:`ComputingNode <v2.2_infrastructure_ComputingNode>`
+
+* Associations:
+	* ``generatedFrom`` → ContainerImage [0..1]
+	* ``configs`` → ContainerConfig [0..*]
+
+.. _v2.2_infrastructure_ContainerConfig:
+
+ContainerConfig
+"""""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.2_commons_DOMLElement>`
+
+* Associations:
+	* ``host`` → ComputingNode [0..1]
+	* ``iface`` → NetworkInterface [0..1]
+* Attributes:
+	* ``container_port`` [Integer]
+	* ``vm_port`` [Integer]
+
+.. _v2.2_infrastructure_ContainerImage:
+
+ContainerImage
+""""""""""""""
+*Inherits from* :ref:`ComputingNodeGenerator <v2.2_infrastructure_ComputingNodeGenerator>`
+
+* Associations:
+	* ``generatedContainers`` → Container [0..*]
+
+.. _v2.2_infrastructure_ExtInfrastructureElement:
+
+ExtInfrastructureElement
+""""""""""""""""""""""""
+*Inherits from* :ref:`InfrastructureElement <v2.2_infrastructure_InfrastructureElement>`
+
+
+.. _v2.2_infrastructure_FunctionAsAService:
+
+FunctionAsAService
+""""""""""""""""""
+*Inherits from* :ref:`InfrastructureElement <v2.2_infrastructure_InfrastructureElement>`
+
+* Associations:
+	* ``ifaces`` → NetworkInterface [0..*]
+* Attributes:
+	* ``cost`` [Integer]
+
+.. _v2.2_infrastructure_InfrastructureElement:
+
+InfrastructureElement
+"""""""""""""""""""""
+*Inherits from* :ref:`DeployableElement <v2.2_commons_DeployableElement>`
+
+
+.. _v2.2_infrastructure_InfrastructureLayer:
+
+InfrastructureLayer
+"""""""""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.2_commons_DOMLElement>`
+
+* Associations:
+	* ``nodes`` → ComputingNode [0..*]
+	* ``generators`` → ComputingNodeGenerator [0..*]
+	* ``storages`` → Storage [0..*]
+	* ``faas`` → FunctionAsAService [0..*]
+	* ``credentials`` → Credentials [0..*]
+	* ``groups`` → ComputingGroup [0..*]
+	* ``securityGroups`` → SecurityGroup [0..*]
+	* ``networks`` → Network [0..*]
+	* ``rules`` → MonitoringRule [0..*]
+
+.. _v2.2_infrastructure_InternetGateway:
+
+InternetGateway
+"""""""""""""""
+*Inherits from* :ref:`NetworkInterface <v2.2_infrastructure_NetworkInterface>`
+
+
+.. _v2.2_infrastructure_Location:
+
+Location
+""""""""
+*Inherits from* :ref:`DOMLElement <v2.2_commons_DOMLElement>`
+
+* Attributes:
+	* ``region`` [String]
+	* ``zone`` [String]
+
+.. _v2.2_infrastructure_MonitoringRule:
+
+MonitoringRule
+""""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.2_commons_DOMLElement>`
+
+* Attributes:
+	* ``condition`` [String]
+	* ``strategy`` [String]
+	* ``strategyConfigurationString`` [String]
+
+.. _v2.2_infrastructure_Network:
+
+Network
+"""""""
+*Inherits from* :ref:`DOMLElement <v2.2_commons_DOMLElement>`
+
+* Associations:
+	* ``connectedIfaces`` → NetworkInterface [0..*]
+	* ``igws`` → InternetGateway [0..*]
+	* ``subnets`` → Subnet [0..*]
+* Attributes:
+	* ``protocol`` [String]
+	* ``addressRange`` [String]
+	* ``cidr`` [Integer]
+
+.. _v2.2_infrastructure_NetworkInterface:
+
+NetworkInterface
+""""""""""""""""
+*Inherits from* :ref:`InfrastructureElement <v2.2_infrastructure_InfrastructureElement>`
+
+* Associations:
+	* ``belongsTo`` → Network [0..1]
+	* ``associated`` → SecurityGroup [0..1]
+* Attributes:
+	* ``endPoint`` [Integer]
+	* ``speed`` [String]
+
+.. _v2.2_infrastructure_PhysicalComputingNode:
+
+PhysicalComputingNode
+"""""""""""""""""""""
+*Inherits from* :ref:`ComputingNode <v2.2_infrastructure_ComputingNode>`
+
+
+.. _v2.2_infrastructure_Rule:
+
+Rule
+""""
+*Inherits from* :ref:`DOMLElement <v2.2_commons_DOMLElement>`
+
+* Attributes:
+	* ``kind`` [String]
+	* ``protocol`` [String]
+	* ``fromPort`` [Integer]
+	* ``toPort`` [Integer]
+	* ``cidr`` [String]
+
+.. _v2.2_infrastructure_SecurityGroup:
+
+SecurityGroup
+"""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.2_commons_DOMLElement>`
+
+* Associations:
+	* ``rules`` → Rule [0..*]
+	* ``ifaces`` → NetworkInterface [0..*]
+
+.. _v2.2_infrastructure_Storage:
+
+Storage
+"""""""
+*Inherits from* :ref:`InfrastructureElement <v2.2_infrastructure_InfrastructureElement>`
+
+* Associations:
+	* ``ifaces`` → NetworkInterface [0..*]
+* Attributes:
+	* ``label`` [String]
+	* ``size_gb`` [Integer]
+	* ``cost`` [Integer]
+
+.. _v2.2_infrastructure_Subnet:
+
+Subnet
+""""""
+*Inherits from* :ref:`Network <v2.2_infrastructure_Network>`
+
+* Associations:
+	* ``connectedTo`` → Network [0..1]
+
+.. _v2.2_infrastructure_Swarm:
+
+Swarm
+"""""
+*Inherits from* :ref:`ComputingGroup <v2.2_infrastructure_ComputingGroup>`
+
+* Associations:
+	* ``roles`` → SwarmRole [0..*]
+
+.. _v2.2_infrastructure_SwarmRole:
+
+SwarmRole
+"""""""""
+*Inherits from* :ref:`DOMLElement <v2.2_commons_DOMLElement>`
+
+* Associations:
+	* ``nodes`` → ComputingNode [0..*]
+* Attributes:
+	* ``kind`` [String]
+
+.. _v2.2_infrastructure_VMImage:
+
+VMImage
+"""""""
+*Inherits from* :ref:`ComputingNodeGenerator <v2.2_infrastructure_ComputingNodeGenerator>`
+
+* Associations:
+	* ``generatedVMs`` → VirtualMachine [0..*]
+
+.. _v2.2_infrastructure_VirtualMachine:
+
+VirtualMachine
+""""""""""""""
+*Inherits from* :ref:`ComputingNode <v2.2_infrastructure_ComputingNode>`
+
+* Associations:
+	* ``generatedFrom`` → VMImage [0..1]
+* Attributes:
+	* ``sizeDescription`` [String]
+
+concrete
+^^^^^^^^
+
+.. _v2.2_concrete_ComputingGroup:
+
+ComputingGroup
+""""""""""""""
+*Inherits from* :ref:`ConcreteElement <v2.2_concrete_ConcreteElement>`
+
+* Associations:
+	* ``maps`` → ComputingGroup [1..1]
+
+.. _v2.2_concrete_ConcreteElement:
+
+ConcreteElement
+"""""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.2_commons_DOMLElement>`
+
+* Attributes:
+	* ``configurationScript`` [String]
+	* ``preexisting`` [Boolean]
+
+.. _v2.2_concrete_ConcreteInfrastructure:
+
+ConcreteInfrastructure
+""""""""""""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.2_commons_DOMLElement>`
+
+* Associations:
+	* ``providers`` → RuntimeProvider [0..*]
+
+.. _v2.2_concrete_ContainerImage:
+
+ContainerImage
+""""""""""""""
+*Inherits from* :ref:`ConcreteElement <v2.2_concrete_ConcreteElement>`
+
+* Associations:
+	* ``maps`` → ContainerImage [0..1]
+
+.. _v2.2_concrete_FunctionAsAService:
+
+FunctionAsAService
+""""""""""""""""""
+*Inherits from* :ref:`ConcreteElement <v2.2_concrete_ConcreteElement>`
+
+* Associations:
+	* ``maps`` → FunctionAsAService [0..1]
+
+.. _v2.2_concrete_Network:
+
+Network
+"""""""
+*Inherits from* :ref:`ConcreteElement <v2.2_concrete_ConcreteElement>`
+
+* Associations:
+	* ``maps`` → Network [0..1]
+
+.. _v2.2_concrete_RuntimeProvider:
+
+RuntimeProvider
+"""""""""""""""
+*Inherits from* :ref:`DOMLElement <v2.2_commons_DOMLElement>`
+
+* Associations:
+	* ``vms`` → VirtualMachine [0..*]
+	* ``vmImages`` → VMImage [0..*]
+	* ``containerImages`` → ContainerImage [0..*]
+	* ``networks`` → Network [0..*]
+	* ``storages`` → Storage [0..*]
+	* ``faas`` → FunctionAsAService [0..*]
+	* ``group`` → ComputingGroup [0..*]
+
+.. _v2.2_concrete_Storage:
+
+Storage
+"""""""
+*Inherits from* :ref:`ConcreteElement <v2.2_concrete_ConcreteElement>`
+
+* Associations:
+	* ``maps`` → Storage [0..1]
+
+.. _v2.2_concrete_VMImage:
+
+VMImage
+"""""""
+*Inherits from* :ref:`ConcreteElement <v2.2_concrete_ConcreteElement>`
+
+* Associations:
+	* ``maps`` → VMImage [0..1]
+
+.. _v2.2_concrete_VirtualMachine:
+
+VirtualMachine
+""""""""""""""
+*Inherits from* :ref:`ConcreteElement <v2.2_concrete_ConcreteElement>`
+
+* Associations:
+	* ``maps`` → VirtualMachine [0..1]
+
+
+
diff --git a/docs/writing-requirements.rst b/docs/writing-requirements.rst
index b30ec9408365d27dd0f516257badfe6922cbecd0..9d00a36e1f131b4f5262af2f8d3df0be80d87834 100644
--- a/docs/writing-requirements.rst
+++ b/docs/writing-requirements.rst
@@ -10,11 +10,21 @@ For now, it can be provided to the Model Checker through the CLI.
 Getting Started
 ===============
 
-First, create a new file with a ``.domlr`` extension.
+At the moment, you can integrate the requirements inside DOML using the ``functional_requirements`` field::
 
-If you use VS Code, there's a `Syntax Highlight`_ extension for it.
+    functional_requirements {
+        req_group_1 ```
+        # Your DOMLR goes here.
+        ```;
+        req_group_2 ```
+        # Other set of requirements
+        ```;
+    }
 
-Every user requirement file is a list of requirement::
+
+If you want to write a snippet of DOMLR using VS Code, there's a `Syntax Highlight`_ extension for it.
+
+Every DOMLR piece of code is a list of requirement::
 
     + "All Virtual Machines have a Interface and at least 4 cpu cores"
     forall vm (
@@ -26,7 +36,7 @@ Every user requirement file is a list of requirement::
             vm has abstract.ComputingNode.cpu_count >= 4 
         )
     )
-    error: "A vm does lacks an associated interface or has less than 4 CPUs"
+    error: "A vm lacks an associated interface or has less than 4 CPUs"
 
 Rules in 1 minute
 -----------------
@@ -39,11 +49,6 @@ The language is *case-sensitive* but it's not indentation-based, so you are free
 
     -   ``-`` means that the requirement is in **negative form**: the requirement is satisfied when its logic expression **is not** satisfied.
 
-    The difference is that in **positive form** you would generally use a *for all* quantifier at the beginning,
-    which doesn't allow you to know which specific element didn't satisfy the requirement, while in **negative form**
-    you'll have some variables that are not quantified, meaning that it's usually possible to retrieve the names of the
-    elements associated to those variables that do not satisfy the requirement.
-
 2.  After the ``+`` or ``-`` there's the **name** of the requirement, which is a string between double quotes ``"..."``.
     Single quotes ``'...'`` won't work.
 
@@ -54,6 +59,17 @@ The language is *case-sensitive* but it's not indentation-based, so you are free
     If you have a free variable, which means a variable that is not quantified, you can print its value by putting it in the
     string between curly brackets like this: ``{myVar}``. You'll get a warning if the Model Checker can't assign a value to that variable.
 
+A note on positive and negative form
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+The difference is that in **positive form** you would generally use a *for all* quantifier at the beginning,
+which doesn't allow you to know which specific element didn't satisfy the requirement, while in **negative form**
+you'll have some variables that are not quantified, meaning that it's usually possible to retrieve the names of the
+elements associated to those variables that do not satisfy the requirement. **Negative form** is usually faster, you
+can convert an expression into it using :math:numref:`logicconv`, where :math:`P(x)` is a statement containing quantified variable :math:`x`.
+
+.. math:: \forall x P(x) \iff \neg\exists x \neg P(x)
+    :label: logicconv
+
 .. `Syntax`:
 
 Syntax
@@ -108,6 +124,52 @@ Operator Precedence
 
 ``exists``/``forall`` > ``not`` > ``or`` > ``and`` > ``implies`` > ``iff``
 
+Examples
+========
+
+1. State that an element must be of a certain class::
+
+    saas is class application.SaaS
+
+2. Check that an element has a certain relationship with another::
+
+    vm has infrastructure.ComputingNode.ifaces iface
+
+Note that in the above example we haven't said anything about the nature of ``vm``. 
+We get that ``iface`` is of class ``NetworkInterface`` for free since the association ``infrastructure.ComputingNode.ifaces`` requires it.
+If you want ``vm`` to be a `VirtualMachine` you should specify it as::
+    
+    vm is class infrastructure.VirtualMachine
+    and
+    vm has infrastructure.ComputingNode.ifaces iface
+
+3. State that all VMs have to use less than 1 GB of memory::
+    
+        forall vm (
+            vm is class infrastructure.VirtualMachine
+            implies
+            vm has infrastructure.ComputingNode.memory_mb <= 1024 
+        )
+
+We use ``forall`` to say that all ``vm``, **if** (that's what ``implies`` does)  ``vm`` that are ``VirtualMachine``, 
+then it should have less than 1024 MB (memory here is expressed in MB).
+
+If we want to rewrite this requirement in negative form, it becomes *'There is a VM that has more than 1 GB'*. If there exists such VM, then it means that
+the expression is *true*, therefore the requirement is *false*::
+    
+    exists vm (
+        vm is class infrastructure.VirtualMachine
+        and
+        vm has infrastructure.ComputingNode.memory_mb > 1024
+        # we can also write it as a negation
+        or not vm has infrastructure.ComputingNode.memory <= 1024 
+    )
+
+4. Compare two attributes of two elements. Let's say that you have two different containers, ``c1`` and ``c2``, and you want to require
+that the memory used by ``c1`` is less than the one used by ``c2`` (note that we don't put another ``has`` in the expression in right hand side of ``<``)::
+
+    c1 has infrastructure.ComputingNode.memory_mb < c2 infrastructure.ComputingNode.memory_mb
+
 Grammar
 =======
 See the `grammar.lark`_ file on GitHub, it's written in a EBNF-like form.
@@ -115,4 +177,4 @@ See the `grammar.lark`_ file on GitHub, it's written in a EBNF-like form.
 
 .. _`Syntax Highlight`: https://marketplace.visualstudio.com/items?itemName=andreafra.piacere-domlr
 .. _`First Order Logic`: https://en.wikipedia.org/wiki/First-order_logic
-.. _`grammar.lark`: https://github.com/andreafra/piacere-model-checker/blob/main/mc_openapi/doml_mc/dsl_parser/grammar.lark
\ No newline at end of file
+.. _`grammar.lark`: https://github.com/andreafra/piacere-model-checker/blob/main/mc_openapi/doml_mc/domlr_parser/grammar.lark
\ No newline at end of file
diff --git a/gen_domlr_reference.py b/gen_domlr_reference.py
new file mode 100644
index 0000000000000000000000000000000000000000..336e1299b7d1360c37f962bbfea68fa4f01de43a
--- /dev/null
+++ b/gen_domlr_reference.py
@@ -0,0 +1,52 @@
+from mc_openapi.doml_mc.intermediate_model.metamodel import DOMLVersion, MetaModels
+from pprint import pprint
+from itertools import groupby
+
+DOCS_PATH = lambda version: f"docs/reference_{version}.rst"
+
+DOML_VERSIONS = [v for v in DOMLVersion]
+
+with open(DOCS_PATH('index'), 'w') as findex:
+    print("DOML Reference", file=findex)
+    print("==============\n", file=findex)
+    print("For a comprehensive list of all the classes, attributes and associations supported in the DOML Model Checker and DOMLR, please consult one of the following pages.\n", file=findex)
+
+    for version in DOML_VERSIONS:
+        v_name = f':doc:`Reference for DOML {version.value} <reference_{version.value}>`'
+        print(v_name, file=findex)
+        print('-'*len(v_name), file=findex)
+
+        with open(DOCS_PATH(version.value), 'w') as f:
+            print(f"DOML {version.value} Reference", file=f)
+            print("=============================\n", file=f)
+            
+            MM = MetaModels[version]
+            # ITEM => (package, class, assoc, attrs)
+            ITEMS = [(*(k.split("_", 1)), v.superclass, v.associations, v.attributes) for k, v in MM.items()] 
+            # PKG => CLASS => {ASSOC, ATTRS}
+            ITEMS = {k: [dict(zip(("name", "superclass", "assocs", "attrs"), (x[1], x[2], x[3], x[4]))) for x in v] for k, v in groupby(ITEMS, key=lambda x: x[0])}
+
+            for pkg, clss in ITEMS.items():
+                print(f'\n{pkg}', file=f)
+                print('^'*(len(pkg)), file=f)
+                for cls in sorted(clss, key=lambda x: x.get('name')):
+                    name = cls.get('name')
+                    supcls = cls.get('superclass')
+                    print(f'\n.. _{version.value}_{pkg}_{name}:', file=f)
+                    print(f'\n{name}', file=f)
+                    print('"'*(len(name)), file=f)
+                    if supcls:
+                        supcls_name = supcls.split("_", 1)[1]
+                        print(f'*Inherits from* :ref:`{supcls_name} <{version.value}_{supcls}>`\n', file=f)
+                    if (cls.get('assocs')):
+                        print(f'* Associations:', file=f)
+                        for assoc_k, assoc_v in cls.get('assocs').items():
+                            dest_cls = assoc_v.class_.split("_", 1)[1]
+                            print(f'\t* ``{assoc_k}`` → {dest_cls} [{assoc_v.multiplicity[0]}..{assoc_v.multiplicity[1]}]', file=f)
+                    if (cls.get('attrs')):
+                        print(f'* Attributes:', file=f)
+                        for attr_k, attr_v in cls.get('attrs').items():
+                            print(f'\t* ``{attr_k}`` [{attr_v.type}]', file=f)
+            print("\n\n", file=f)
+
+        print(f"Generated new reference for DOML {version.value} in {DOCS_PATH(version.value)}")
\ No newline at end of file