diff --git a/base_ontology.owl b/base_ontology.owl
index f3508eb323911276f03b4eb364bb6575eb8eb33b..2905c56525791f4f5178e9196f4f0f1d1c680a37 100644
--- a/base_ontology.owl
+++ b/base_ontology.owl
@@ -19,7 +19,6 @@
      xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
     <Ontology rdf:about="http://www.onem2m.org/ontology/Base_Ontology/base_ontology">
         <rdfs:comment>This file contains the Base Ontology of oneM2M as specified in TS-0012
-This version 3_0_0 of the oneM2M Base Ontology is identical to version 2_1_0
 
 =========================================
 Copyright Notification
@@ -39,7 +38,7 @@ NO REPRESENTATION OR WARRANTY IS MADE THAT THE INFORMATION IS TECHNICALLY ACCURA
 NO oneM2M PARTNER TYPE 1 SHALL BE LIABLE, BEYOND THE AMOUNT OF ANY SUM RECEIVED IN PAYMENT BY THAT PARTNER FOR THIS DOCUMENT, WITH RESPECT TO ANY CLAIM, AND IN NO EVENT SHALL oneM2M BE LIABLE FOR LOST PROFITS OR OTHER INCIDENTAL OR ON SEQUENTIAL DAMAGES.
 oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PROVIDED IN THIS DOCUMENT IS AT THE RISK OF THE USER.
 =========================================</rdfs:comment>
-        <versionIRI rdf:resource="http://www.onem2m.org/ontology/Base_Ontology/base_ontology-v3_0_0"/>
+        <versionIRI rdf:resource="http://www.onem2m.org/ontology/Base_Ontology/base_ontology-v3_1_0"/>
     </Ontology>
     
 
@@ -106,11 +105,11 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR
     
 
 
-    <!-- http://www.onem2m.org/ontology/Base_Ontology/base_ontology#exposesFunctionality -->
+    <!-- http://www.onem2m.org/ontology/Base_Ontology/base_ontology#exposesFunction -->
 
-    <ObjectProperty rdf:about="&base_ontology;exposesFunctionality">
+    <ObjectProperty rdf:about="&base_ontology;exposesFunction">
         <rdfs:comment>A Service exposes a Functionality to the network and makes it discoverable, registerable and remotely controllable in the network</rdfs:comment>
-        <rdfs:range rdf:resource="&base_ontology;Functionality"/>
+        <rdfs:range rdf:resource="&base_ontology;Function"/>
         <rdfs:domain rdf:resource="&base_ontology;Service"/>
     </ObjectProperty>
     
@@ -121,17 +120,17 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR
     <ObjectProperty rdf:about="&base_ontology;hasCommand">
         <rdfs:comment>A Functionality of a Device can be influenced / observed by a human user through the Commands that this Functionality has and that are offered to the user</rdfs:comment>
         <rdfs:range rdf:resource="&base_ontology;Command"/>
-        <rdfs:domain rdf:resource="&base_ontology;Functionality"/>
+        <rdfs:domain rdf:resource="&base_ontology;Function"/>
     </ObjectProperty>
     
 
 
-    <!-- http://www.onem2m.org/ontology/Base_Ontology/base_ontology#hasFunctionality -->
+    <!-- http://www.onem2m.org/ontology/Base_Ontology/base_ontology#hasFunction -->
 
-    <ObjectProperty rdf:about="&base_ontology;hasFunctionality">
+    <ObjectProperty rdf:about="&base_ontology;hasFunction">
         <rdfs:comment>In order to accomplish its task, a Device performs one or more Functionalities</rdfs:comment>
         <rdfs:domain rdf:resource="&base_ontology;Device"/>
-        <rdfs:range rdf:resource="&base_ontology;Functionality"/>
+        <rdfs:range rdf:resource="&base_ontology;Function"/>
     </ObjectProperty>
     
 
@@ -158,6 +157,9 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR
     <ObjectProperty rdf:about="&base_ontology;hasInputDataPoint">
         <rdfs:comment>A Service or an Operation of a Service of the Device can have InputDataPoints. Communicating entities write data into InputDataPoints and the Device retrieves the data at times according to an internal schedule.
  - An InputDataPoint is a persistent resource</rdfs:comment>
+        <rdfs:comment>Note:
+If an InputDataPoint is mandatory for a Service or Operation then 
+the cardinality of hasInputDataPoint must be - min 1.</rdfs:comment>
         <rdfs:range rdf:resource="&base_ontology;InputDataPoint"/>
         <rdfs:domain>
             <Class>
@@ -191,6 +193,9 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR
     <!-- http://www.onem2m.org/ontology/Base_Ontology/base_ontology#hasOperation -->
 
     <ObjectProperty rdf:about="&base_ontology;hasOperation">
+        <rdfs:comment>Note:
+If an Operation is mandatory for a Service then 
+the cardinality of hasOperation must be - min 1.</rdfs:comment>
         <rdfs:comment>A Service communicates by means of Operations over the network to transmit data to/from other devices</rdfs:comment>
         <rdfs:range rdf:resource="&base_ontology;Operation"/>
         <rdfs:domain rdf:resource="&base_ontology;Service"/>
@@ -228,6 +233,9 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR
     <!-- http://www.onem2m.org/ontology/Base_Ontology/base_ontology#hasOutputDataPoint -->
 
     <ObjectProperty rdf:about="&base_ontology;hasOutputDataPoint">
+        <rdfs:comment>Note:
+If an OutputDataPoint is mandatory for a Service or Operation then 
+the cardinality of hasOutputDataPoint must be - min 1.</rdfs:comment>
         <rdfs:comment>A Service or an Operation of a Service of the Device can have OutputDataPoints. The Device writes data into OutputDataPoints at times according to an internal schedule and the communicating entitis retrieves the data.
  - An OutputDataPoint is a persistent resource</rdfs:comment>
         <rdfs:range rdf:resource="&base_ontology;OutputDataPoint"/>
@@ -257,6 +265,9 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR
 
     <ObjectProperty rdf:about="&base_ontology;hasSubService">
         <rdfs:comment>A Service may be composed of smaller, independent (sub)Services, e.g. re-usable servicemodules</rdfs:comment>
+        <rdfs:comment>Note:
+If an Service constist of at least one sub-Service then 
+the cardinality of hasSubService must be - min 1.</rdfs:comment>
         <rdfs:domain rdf:resource="&base_ontology;Service"/>
         <rdfs:range rdf:resource="&base_ontology;Service"/>
     </ObjectProperty>
@@ -309,7 +320,7 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR
         <rdfs:isDefinedBy>A Functionality of a Device can refer to a certain Aspect (a quality or kind) that is measured or controlled by that Functionality. 
 e.g. a temperature sensor would refer to the Aspect &quot;Temperature&quot; that it measures</rdfs:isDefinedBy>
         <rdfs:range rdf:resource="&base_ontology;Aspect"/>
-        <rdfs:domain rdf:resource="&base_ontology;Functionality"/>
+        <rdfs:domain rdf:resource="&base_ontology;Function"/>
     </ObjectProperty>
     
 
@@ -608,6 +619,18 @@ The Data Property &quot;hasDataRestriction&quot; shall always be sub-classed</rd
     
 
 
+    <!-- http://www.onem2m.org/ontology/Base_Ontology/base_ontology#hasThingAnnotation -->
+
+    <DatatypeProperty rdf:about="&base_ontology;hasThingAnnotation">
+        <rdfs:comment>This data property contains a description of a Thing. 
+Note: Data Property: hasThingAnnotation should be used in cases where the annotation data do not change very often and/or where they are usually not the subject of semantic operations  (e.g. semantic discovery). Otherwise Object Propety: hasThingPropery should be used
+E.g. a certain type of Device could have the model (as a numeric description) or the name of the manufacturer (as a textual annotation)</rdfs:comment>
+        <rdfs:domain rdf:resource="&base_ontology;Thing"/>
+        <rdfs:range rdf:resource="&rdfs;Literal"/>
+    </DatatypeProperty>
+    
+
+
     <!-- http://www.onem2m.org/ontology/Base_Ontology/base_ontology#hasValue -->
 
     <DatatypeProperty rdf:about="&base_ontology;hasValue">
@@ -733,26 +756,26 @@ The Aspect could be a (physical or non-physical) entity or it could be a quality
     <Class rdf:about="&base_ontology;Command">
         <rdfs:subClassOf>
             <Restriction>
-                <onProperty rdf:resource="&base_ontology;hasOutput"/>
-                <allValuesFrom rdf:resource="&base_ontology;OperationOutput"/>
+                <onProperty rdf:resource="&base_ontology;hasOutputDataPoint"/>
+                <allValuesFrom rdf:resource="&base_ontology;OutputDataPoint"/>
             </Restriction>
         </rdfs:subClassOf>
         <rdfs:subClassOf>
             <Restriction>
-                <onProperty rdf:resource="&base_ontology;hasInputDataPoint"/>
-                <allValuesFrom rdf:resource="&base_ontology;InputDataPoint"/>
+                <onProperty rdf:resource="&base_ontology;hasOutput"/>
+                <allValuesFrom rdf:resource="&base_ontology;OperationOutput"/>
             </Restriction>
         </rdfs:subClassOf>
         <rdfs:subClassOf>
             <Restriction>
-                <onProperty rdf:resource="&base_ontology;hasOutputDataPoint"/>
-                <allValuesFrom rdf:resource="&base_ontology;OutputDataPoint"/>
+                <onProperty rdf:resource="&base_ontology;hasInput"/>
+                <allValuesFrom rdf:resource="&base_ontology;OperationInput"/>
             </Restriction>
         </rdfs:subClassOf>
         <rdfs:subClassOf>
             <Restriction>
-                <onProperty rdf:resource="&base_ontology;hasInput"/>
-                <allValuesFrom rdf:resource="&base_ontology;OperationInput"/>
+                <onProperty rdf:resource="&base_ontology;hasInputDataPoint"/>
+                <allValuesFrom rdf:resource="&base_ontology;InputDataPoint"/>
             </Restriction>
         </rdfs:subClassOf>
         <rdfs:comment>A Command (Class: Command) represents an action that can be performed to support the Functionality. A Command is the human understandable name of that action that is invoked in a device or is reported by the device. An Operation exposes a Command to the network. OperationInput and OperationOutput of the related Operation can parameterize the command.
@@ -764,10 +787,10 @@ Note: In RESTful systems the names of Input- and OutputDataPoints are usually ch
     
 
 
-    <!-- http://www.onem2m.org/ontology/Base_Ontology/base_ontology#ControllingFunctionality -->
+    <!-- http://www.onem2m.org/ontology/Base_Ontology/base_ontology#ControllingFunction -->
 
-    <Class rdf:about="&base_ontology;ControllingFunctionality">
-        <rdfs:subClassOf rdf:resource="&base_ontology;Functionality"/>
+    <Class rdf:about="&base_ontology;ControllingFunction">
+        <rdfs:subClassOf rdf:resource="&base_ontology;Function"/>
         <rdfs:comment>A ControllingFunctionality (Class: ControllingFunctionality) represents a functionality  that has impacts on the real world, but does not gather data. In general a ControllingFunctionality has Commands (and/or Operations of its related Services) that receives Input data
 E.g. a thermostat would have &quot;temperature-adjustment&quot; as a ControllingFunctionality</rdfs:comment>
     </Class>
@@ -780,22 +803,21 @@ E.g. a thermostat would have &quot;temperature-adjustment&quot; as a Controlling
         <rdfs:subClassOf rdf:resource="&base_ontology;Thing"/>
         <rdfs:subClassOf>
             <Restriction>
-                <onProperty rdf:resource="&base_ontology;consistsOf"/>
-                <allValuesFrom rdf:resource="&base_ontology;Device"/>
+                <onProperty rdf:resource="&base_ontology;hasService"/>
+                <allValuesFrom rdf:resource="&base_ontology;Service"/>
             </Restriction>
         </rdfs:subClassOf>
         <rdfs:subClassOf>
             <Restriction>
-                <onProperty rdf:resource="&base_ontology;hasService"/>
-                <onClass rdf:resource="&base_ontology;Service"/>
+                <onProperty rdf:resource="&base_ontology;hasFunction"/>
+                <onClass rdf:resource="&base_ontology;Function"/>
                 <minQualifiedCardinality rdf:datatype="&xsd;nonNegativeInteger">1</minQualifiedCardinality>
             </Restriction>
         </rdfs:subClassOf>
         <rdfs:subClassOf>
             <Restriction>
-                <onProperty rdf:resource="&base_ontology;hasFunctionality"/>
-                <onClass rdf:resource="&base_ontology;Functionality"/>
-                <minQualifiedCardinality rdf:datatype="&xsd;nonNegativeInteger">1</minQualifiedCardinality>
+                <onProperty rdf:resource="&base_ontology;consistsOf"/>
+                <allValuesFrom rdf:resource="&base_ontology;Device"/>
             </Restriction>
         </rdfs:subClassOf>
         <rdfs:comment>A Device (Class: Device) is a object designed to accomplish a particular task. A Device contains some logic and is producer and/or consumer of data that are exchanged via its Services with other oneM2M entities (Devices, Things) in the network. A Device may be a physical or non-physical entity.
@@ -808,9 +830,9 @@ In the context of oneM2M a Device is always assumed to be capable of communicati
     
 
 
-    <!-- http://www.onem2m.org/ontology/Base_Ontology/base_ontology#Functionality -->
+    <!-- http://www.onem2m.org/ontology/Base_Ontology/base_ontology#Function -->
 
-    <Class rdf:about="&base_ontology;Functionality">
+    <Class rdf:about="&base_ontology;Function">
         <priorVersion>A Functionality (Class: Functionality) represents the functionality necessary to accomplish the task for which a Device is designed. A device can be designed to perform more than one functionality.
 The functionality exhibits the – human understandable – meaning what the device &quot;does&quot;. 
 A Functionality refers to (e.g. observes or influences) some real-world aspect(s), that can be modelled as a Class: Aspect.
@@ -840,10 +862,10 @@ To enable a third party to instruct the device to retrieve (out of schedule) the
     
 
 
-    <!-- http://www.onem2m.org/ontology/Base_Ontology/base_ontology#MeasuringFunctionality -->
+    <!-- http://www.onem2m.org/ontology/Base_Ontology/base_ontology#MeasuringFunction -->
 
-    <Class rdf:about="&base_ontology;MeasuringFunctionality">
-        <rdfs:subClassOf rdf:resource="&base_ontology;Functionality"/>
+    <Class rdf:about="&base_ontology;MeasuringFunction">
+        <rdfs:subClassOf rdf:resource="&base_ontology;Function"/>
         <rdfs:comment>A MeasuringFunctionality (Class: MeasuringFunctionality) represents a functionality that has no impacts on the real world, but only gathers data. In general a MeasuringFunctionality has Commands (and/or Operations of its related Services)  that generate Output data
 E.g. a temperature sensor would have &quot;temperature-sensing&quot; as a MeasuringFunctionality</rdfs:comment>
     </Class>
@@ -864,8 +886,8 @@ E.g. the indoor temperature could have meta data: &quot;Degrees Celsius&quot;</r
     <Class rdf:about="&base_ontology;Operation">
         <rdfs:subClassOf>
             <Restriction>
-                <onProperty rdf:resource="&base_ontology;exposesCommand"/>
-                <someValuesFrom rdf:resource="&base_ontology;Command"/>
+                <onProperty rdf:resource="&base_ontology;hasInput"/>
+                <allValuesFrom rdf:resource="&base_ontology;OperationInput"/>
             </Restriction>
         </rdfs:subClassOf>
         <rdfs:subClassOf>
@@ -876,14 +898,14 @@ E.g. the indoor temperature could have meta data: &quot;Degrees Celsius&quot;</r
         </rdfs:subClassOf>
         <rdfs:subClassOf>
             <Restriction>
-                <onProperty rdf:resource="&base_ontology;hasOutput"/>
-                <allValuesFrom rdf:resource="&base_ontology;OperationOutput"/>
+                <onProperty rdf:resource="&base_ontology;exposesCommand"/>
+                <allValuesFrom rdf:resource="&base_ontology;Command"/>
             </Restriction>
         </rdfs:subClassOf>
         <rdfs:subClassOf>
             <Restriction>
-                <onProperty rdf:resource="&base_ontology;hasInput"/>
-                <allValuesFrom rdf:resource="&base_ontology;OperationInput"/>
+                <onProperty rdf:resource="&base_ontology;hasOutput"/>
+                <allValuesFrom rdf:resource="&base_ontology;OperationOutput"/>
             </Restriction>
         </rdfs:subClassOf>
         <rdfs:comment>An Operation (Class: Operation)  is the means of a Service to communicate in a procedure-type manner over the network (i.e. transmit data to/from other devices). It is the –machine interpretable- exposure of a –human understandable- Command to a network.
@@ -922,6 +944,13 @@ An Operation correlates the output data of the Operation to the input data that
 
     <Class rdf:about="&base_ontology;OperationState">
         <rdfs:subClassOf rdf:resource="&base_ontology;SimpleTypeVariable"/>
+        <rdfs:subClassOf>
+            <Restriction>
+                <onProperty rdf:resource="&base_ontology;hasDataRestriction_pattern"/>
+                <qualifiedCardinality rdf:datatype="&xsd;nonNegativeInteger">1</qualifiedCardinality>
+                <onDataRange rdf:resource="&xsd;string"/>
+            </Restriction>
+        </rdfs:subClassOf>
         <rdfs:subClassOf>
             <Restriction>
                 <onProperty rdf:resource="&base_ontology;hasDataType"/>
@@ -951,13 +980,6 @@ An Operation correlates the output data of the Operation to the input data that
                 </unionOf>
             </Class>
         </rdfs:subClassOf>
-        <rdfs:subClassOf>
-            <Restriction>
-                <onProperty rdf:resource="&base_ontology;hasDataRestriction_pattern"/>
-                <qualifiedCardinality rdf:datatype="&xsd;nonNegativeInteger">1</qualifiedCardinality>
-                <onDataRange rdf:resource="&xsd;string"/>
-            </Restriction>
-        </rdfs:subClassOf>
         <rdfs:comment>describes the current state during the lifetime of an Operation. The OperationState class represents all possible values for that state (enumerated individuals). The OperationState is set during the progress of the operation by the entity invoking the operation, the entity that is the target of the operation, e.g. a device (or for interworked devices by the IPE) and the CSE. It takes values like 
 &quot;data_received_by_application&quot;,  &quot;operation_ended&quot;, &quot;operation_failed&quot;, &quot;data_transmitted_to_interworked_device&quot;.</rdfs:comment>
     </Class>
@@ -978,14 +1000,20 @@ An Operation correlates the output data of the Operation to the input data that
     <Class rdf:about="&base_ontology;Service">
         <rdfs:subClassOf>
             <Restriction>
-                <onProperty rdf:resource="&base_ontology;hasOperation"/>
-                <allValuesFrom rdf:resource="&base_ontology;Operation"/>
+                <onProperty rdf:resource="&base_ontology;hasOutputDataPoint"/>
+                <allValuesFrom rdf:resource="&base_ontology;OutputDataPoint"/>
             </Restriction>
         </rdfs:subClassOf>
         <rdfs:subClassOf>
             <Restriction>
-                <onProperty rdf:resource="&base_ontology;exposesFunctionality"/>
-                <someValuesFrom rdf:resource="&base_ontology;Functionality"/>
+                <onProperty rdf:resource="&base_ontology;hasSubService"/>
+                <allValuesFrom rdf:resource="&base_ontology;Service"/>
+            </Restriction>
+        </rdfs:subClassOf>
+        <rdfs:subClassOf>
+            <Restriction>
+                <onProperty rdf:resource="&base_ontology;hasOperation"/>
+                <allValuesFrom rdf:resource="&base_ontology;Operation"/>
             </Restriction>
         </rdfs:subClassOf>
         <rdfs:subClassOf>
@@ -996,8 +1024,8 @@ An Operation correlates the output data of the Operation to the input data that
         </rdfs:subClassOf>
         <rdfs:subClassOf>
             <Restriction>
-                <onProperty rdf:resource="&base_ontology;hasOutputDataPoint"/>
-                <allValuesFrom rdf:resource="&base_ontology;OutputDataPoint"/>
+                <onProperty rdf:resource="&base_ontology;exposesFunction"/>
+                <someValuesFrom rdf:resource="&base_ontology;Function"/>
             </Restriction>
         </rdfs:subClassOf>
         <rdfs:comment>A Service (Class: Service) is a electronic representation of a Functionality in a network. The Service exposes the Functionality to the network and makes it discoverable, registerable and remotely controllable in the network. 
@@ -1020,6 +1048,19 @@ NOTE: While a Functionality  describes the – human understandable – meaning
                 <onDataRange rdf:resource="&rdf;PlainLiteral"/>
             </Restriction>
         </rdfs:subClassOf>
+        <rdfs:subClassOf>
+            <Restriction>
+                <onProperty rdf:resource="&base_ontology;hasSubStructure"/>
+                <onClass rdf:resource="&base_ontology;Variable"/>
+                <qualifiedCardinality rdf:datatype="&xsd;nonNegativeInteger">0</qualifiedCardinality>
+            </Restriction>
+        </rdfs:subClassOf>
+        <rdfs:subClassOf>
+            <Restriction>
+                <onProperty rdf:resource="&base_ontology;hasDataRestriction"/>
+                <allValuesFrom rdf:resource="&rdf;PlainLiteral"/>
+            </Restriction>
+        </rdfs:subClassOf>
         <rdfs:comment>SimpleTypeVariable (Class: SimpleTypeVariable) is a sub-class of class:Variable that only consists of Variables of simple xml types like xsd:integer, xsd:string…, potentially including restrictions
 
 The simple datatypes and –restrictions contained in &quot;OWL 2 Web Ontology Language Structural Specification and Functional-Style Syntax (Second Edition)&quot; are supported. (see http://www.w3.org/TR/owl2-syntax/)</rdfs:comment>
@@ -1036,6 +1077,12 @@ The simple datatypes and –restrictions contained in &quot;OWL 2 Web Ontology L
                 <allValuesFrom rdf:resource="&base_ontology;Thing"/>
             </Restriction>
         </rdfs:subClassOf>
+        <rdfs:subClassOf>
+            <Restriction>
+                <onProperty rdf:resource="&base_ontology;hasThingProperty"/>
+                <allValuesFrom rdf:resource="&base_ontology;ThingProperty"/>
+            </Restriction>
+        </rdfs:subClassOf>
         <rdfs:comment>A Thing in oneM2M  (Class: Thing) is an entity that can be identified in the oneM2M System. 
 A Thing that is not a Device is not able to conmmunicate electronically with its environment. However, the sub-class of Thing that is able to interact electronically is called a &quot;Device&quot;.
 A Thing may have ThingProperties (Object Property: hasThingProperty). A Thing can have relations to other things (Object Property: hasThingRelation).
@@ -1061,6 +1108,12 @@ A Value of a Thing can have meta data</rdfs:comment>
     <!-- http://www.onem2m.org/ontology/Base_Ontology/base_ontology#Variable -->
 
     <Class rdf:about="&base_ontology;Variable">
+        <rdfs:subClassOf>
+            <Restriction>
+                <onProperty rdf:resource="&base_ontology;hasSubStructure"/>
+                <allValuesFrom rdf:resource="&base_ontology;Variable"/>
+            </Restriction>
+        </rdfs:subClassOf>
         <rdfs:comment>A Variable (Class: Variable) constitutes a super class to the following classes: ThingProperty, OperationInput, OperationOutput, OperationState, InputDataPoint, OutputDataPoint, SimpleTypeVariable. Its members are entities that store some data (e.g. integers, text, or structured data) that can change over time. 
 These data of the Variable usually describe some real-world Aspects (e.g. a temperature) and can have MetaData (e.g. units, precision..)</rdfs:comment>
     </Class>