diff --git a/doc/example_odMLs/ex_2.odml b/doc/example_odMLs/ex_2.odml
deleted file mode 100644
index 8e4a6ca..0000000
--- a/doc/example_odMLs/ex_2.odml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?xml-stylesheet  type="text/xsl" href="odmlTerms.xsl"?>
-<?xml-stylesheet  type="text/xsl" href="odml.xsl"?>
-<odML version="1.1">
-  <repository>http://portal.g-node.org/odml/terminologies/v1.1/terminologies.xml</repository>
-  <section>
-    <definition>Information on the crew</definition>
-    <section>
-      <definition>Information on the crew</definition>
-      <id>da908cda-19e1-4df8-b873-d1f6cd1b164d</id>
-      <type>crew</type>
-      <name>s11</name>
-    </section>
-    <section>
-      <definition>Information on the crew</definition>
-      <section>
-        <definition>Information on the crew</definition>
-        <id>18bb5a7e-2097-43f2-a782-e6f612107e93</id>
-        <type>crew</type>
-        <reference>s21</reference>
-        <name>s121</name>
-      </section>
-      <id>8d68e6fe-8dda-4dfe-a1d8-edaa0f410255</id>
-      <type>crew</type>
-      <name>s12</name>
-    </section>
-    <id>d1e70848-5318-4466-82d0-1c3e99a8ba85</id>
-    <type>crew</type>
-    <name>s1</name>
-  </section>
-  <section>
-    <definition>Information on the crew</definition>
-    <section>
-      <definition>Information on the crew</definition>
-      <id>4b2d0e9d-6352-4676-97d7-fc0a795e83a9</id>
-      <type>crew</type>
-      <name>s21</name>
-    </section>
-    <id>bc6cc466-5769-4da1-b90e-8e5595903a4a</id>
-    <type>crew</type>
-    <name>s2</name>
-  </section>
-  <date>1979-10-12</date>
-  <id>9b862019-643a-403f-b5a9-3b46db012961</id>
-  <version>42</version>
-  <author>D. N. Adams</author>
-</odML>
diff --git a/doc/example_odMLs/odml_ex_1_generator.py b/doc/example_odMLs/odml_ex_1_generator.py
deleted file mode 100644
index 028de1c..0000000
--- a/doc/example_odMLs/odml_ex_1_generator.py
+++ /dev/null
@@ -1,63 +0,0 @@
-import datetime
-import os
-
-import odml
-
-odml_pythonpath = "./g-node/python-odml"
-odmlrepo = 'http://portal.g-node.org/odml/terminologies/v1.0/terminologies.xml'
-
-# CREATE A DOCUMENT
-doc = odml.Document(author="D. N. Adams",
-                    date=datetime.date(1979, 10, 12),
-                    version=42,
-                    repository=odmlrepo)
-
-# CREATE AND APPEND THE MAIN SECTIONs
-doc.append(odml.Section(name="TheCrew",
-                        definition="Information on the crew",
-                        type="crew"))
-
-# SET NEW PARENT NODE
-parent = doc['TheCrew']
-
-# APPEND SUBSECTIONS
-parent.append(odml.Section(name="Arthur Philip Dent",
-                           type="crew/person",
-                           definition="Information on Arthur Dent"))
-
-
-# APPEND PROPERTIES WITH VALUES
-parent.append(odml.Property(name="NameCrewMembers",
-                            value=["Arthur Philip Dent",
-                                   "Zaphod Beeblebrox",
-                                   "Tricia Marie McMillan",
-                                   "Ford Prefect"],
-                            dtype=odml.DType.person,
-                            definition="List of crew members names"))
-
-parent.append(odml.Property(name="NoCrewMembers",
-                            value=4,
-                            dtype=odml.DType.int,
-                            definition="Number of crew members",
-                            uncertainty=1,
-                            reference="The Hitchhiker's guide to the Galaxy (novel)"))
-
-# SET NEW PARENT NODE
-parent = doc['TheCrew']['Arthur Philip Dent']
-
-# APPEND SUBSECTIONS
-
-# APPEND PROPERTIES WITH VALUES
-parent.append(odml.Property(name="Species",
-                            value="Human",
-                            dtype=odml.DType.string,
-                            definition="Species to which subject belongs to"))
-
-parent.append(odml.Property(name="Nickname",
-                            value=None,
-                            dtype=odml.DType.string,
-                            definition="Nickname(s) of the subject"))
-
-save_to = os.path.join(odml_pythonpath, "doc", "example_odMLs", "ex_1.odml")
-
-odml.save(doc, save_to)
diff --git a/doc/example_odMLs/ex_1.odml b/doc/example_odMLs/sample_odml.odml
similarity index 100%
rename from doc/example_odMLs/ex_1.odml
rename to doc/example_odMLs/sample_odml.odml
diff --git a/doc/example_odMLs/ex_1.rdf b/doc/example_odMLs/sample_odml.rdf
similarity index 100%
rename from doc/example_odMLs/ex_1.rdf
rename to doc/example_odMLs/sample_odml.rdf
diff --git a/odml/base.py b/odml/base.py
index a1109e8..7d78c61 100644
--- a/odml/base.py
+++ b/odml/base.py
@@ -29,7 +29,7 @@ class BaseObject(object):
             return False
 
         for key in self._format:
-            if key == "id":
+            if key == "id" or key == "oid":
                 continue
             elif getattr(self, key) != getattr(obj, key):
                 return False
diff --git a/odml/doc.py b/odml/doc.py
index f71217f..103d342 100644
--- a/odml/doc.py
+++ b/odml/doc.py
@@ -19,11 +19,11 @@ class BaseDocument(base.Sectionable):
 
     _format = format.Document
 
-    def __init__(self, author=None, date=None, version=None, repository=None, id=None):
+    def __init__(self, author=None, date=None, version=None, repository=None, oid=None):
         super(BaseDocument, self).__init__()
         try:
-            if id is not None:
-                self._id = str(uuid.UUID(id))
+            if oid is not None:
+                self._id = str(uuid.UUID(oid))
             else:
                 self._id = str(uuid.uuid4())
         except ValueError as e:
@@ -41,6 +41,14 @@ class BaseDocument(base.Sectionable):
         return "<Doc %s by %s (%d sections)>" % (self._version, self._author,
                                                  len(self._sections))
 
+    @property
+    def oid(self):
+        """
+        The uuid for the document. Required for entity creation and comparison,
+        saving and loading.
+        """
+        return self.id
+
     @property
     def id(self):
         """
@@ -48,15 +56,15 @@ class BaseDocument(base.Sectionable):
         """
         return self._id
 
-    def new_id(self, id=None):
+    def new_id(self, oid=None):
         """
         new_id sets the id of the current object to a RFC 4122 compliant UUID.
         If an id was provided, it is assigned if it is RFC 4122 UUID format compliant.
         If no id was provided, a new UUID is generated and assigned.
-        :param id: UUID string as specified in RFC 4122.
+        :param oid: UUID string as specified in RFC 4122.
         """
-        if id is not None:
-            self._id = str(uuid.UUID(id))
+        if oid is not None:
+            self._id = str(uuid.UUID(oid))
         else:
             self._id = str(uuid.uuid4())
 
diff --git a/odml/format.py b/odml/format.py
index 7a0a796..c0ae334 100644
--- a/odml/format.py
+++ b/odml/format.py
@@ -108,7 +108,8 @@ class Property(Format):
     }
     _map = {
         'dependencyvalue': 'dependency_value',
-        'type': 'dtype'
+        'type': 'dtype',
+        'id': 'oid'
     }
     _rdf_map = {
         'id': _ns.hasId,
@@ -142,6 +143,7 @@ class Section(Format):
     _map = {
         'section': 'sections',
         'property': 'properties',
+        'id': 'oid'
     }
     _rdf_map = {
         'id': _ns.hasId,
@@ -168,7 +170,8 @@ class Document(Format):
         'repository': 0,
     }
     _map = {
-        'section': 'sections'
+        'section': 'sections',
+        'id': 'oid'
     }
     _rdf_map = {
         'id': _ns.hasId,
diff --git a/odml/property.py b/odml/property.py
index f6d0211..e6fb3a5 100644
--- a/odml/property.py
+++ b/odml/property.py
@@ -16,7 +16,7 @@ class BaseProperty(base.BaseObject):
     def __init__(self, name=None, value=None, parent=None, unit=None,
                  uncertainty=None, reference=None, definition=None,
                  dependency=None, dependency_value=None, dtype=None,
-                 value_origin=None, id=None):
+                 value_origin=None, oid=None):
         """
         Create a new Property. If a value without an explicitly stated dtype
         has been provided, the method will try to infer the value's dtype.
@@ -45,13 +45,13 @@ class BaseProperty(base.BaseObject):
                       if dtype is not given, the type is deduced from the values.
                       Check odml.DType for supported data types.
         :param value_origin: Reference where the value originated from e.g. a file name.
-        :param id: UUID string as specified in RFC 4122. If no id is provided,
+        :param oid: object id, UUID string as specified in RFC 4122. If no id is provided,
                    an id will be generated and assigned. An id has to be unique
                    within an odML Document.
         """
         try:
-            if id is not None:
-                self._id = str(uuid.UUID(id))
+            if oid is not None:
+                self._id = str(uuid.UUID(oid))
             else:
                 self._id = str(uuid.uuid4())
         except ValueError as e:
@@ -101,19 +101,30 @@ class BaseProperty(base.BaseObject):
             raise ValueError("odml.Property.__setitem__:  passed value cannot be "
                              "converted to data type \'%s\'!" % self._dtype)
 
+    @property
+    def oid(self):
+        """
+        The uuid for the property. Required for entity creation and comparison,
+        saving and loading.
+        """
+        return self.id
+
     @property
     def id(self):
+        """
+        The uuid for the property.
+        """
         return self._id
 
-    def new_id(self, id=None):
+    def new_id(self, oid=None):
         """
-        new_id sets the id of the current object to an RFC 4122 compliant UUID.
+        new_id sets the object id of the current object to an RFC 4122 compliant UUID.
         If an id was provided, it is assigned if it is RFC 4122 UUID format compliant.
         If no id was provided, a new UUID is generated and assigned.
-        :param id: UUID string as specified in RFC 4122.
+        :param oid: UUID string as specified in RFC 4122.
         """
-        if id is not None:
-            self._id = str(uuid.UUID(id))
+        if oid is not None:
+            self._id = str(uuid.UUID(oid))
         else:
             self._id = str(uuid.uuid4())
 
diff --git a/odml/section.py b/odml/section.py
index 4707003..b026043 100644
--- a/odml/section.py
+++ b/odml/section.py
@@ -16,26 +16,24 @@ from .tools.doc_inherit import inherit_docstring, allow_inherit_docstring
 class BaseSection(base.Sectionable):
     """ An odML Section """
     type = None
-    # id = None
+    reference = None  # the *import* property
     _link = None
     _include = None
-    reference = None  # the *import* property
-
     _merged = None
 
     _format = format.Section
 
     def __init__(self, name=None, type=None, parent=None,
                  definition=None, reference=None,
-                 repository=None, link=None, include=None, id=None):
+                 repository=None, link=None, include=None, oid=None):
 
         # Sets _sections Smartlist and _repository to None, so run first.
         super(BaseSection, self).__init__()
         self._props = base.SmartList(BaseProperty)
 
         try:
-            if id is not None:
-                self._id = str(uuid.UUID(id))
+            if oid is not None:
+                self._id = str(uuid.UUID(oid))
             else:
                 self._id = str(uuid.uuid4())
         except ValueError as e:
@@ -76,19 +74,30 @@ class BaseSection(base.Sectionable):
         """
         return len(self._sections) + len(self._props)
 
+    @property
+    def oid(self):
+        """
+        The uuid for the section. Required for entity creation and comparison,
+        saving and loading.
+        """
+        return self.id
+
     @property
     def id(self):
+        """
+        The uuid for the section.
+        """
         return self._id
 
-    def new_id(self, id=None):
+    def new_id(self, oid=None):
         """
         new_id sets the id of the current object to a RFC 4122 compliant UUID.
         If an id was provided, it is assigned if it is RFC 4122 UUID format compliant.
         If no id was provided, a new UUID is generated and assigned.
-        :param id: UUID string as specified in RFC 4122.
+        :param oid: UUID string as specified in RFC 4122.
         """
-        if id is not None:
-            self._id = str(uuid.UUID(id))
+        if oid is not None:
+            self._id = str(uuid.UUID(oid))
         else:
             self._id = str(uuid.uuid4())
 
diff --git a/odml/tools/dict_parser.py b/odml/tools/dict_parser.py
index 03ad0ea..19fe1ff 100644
--- a/odml/tools/dict_parser.py
+++ b/odml/tools/dict_parser.py
@@ -33,7 +33,8 @@ class DictWriter:
                     tag = getattr(odml_document, attr)
 
                     if tag:
-                        parsed_doc[attr] = tag
+                        # Always use the arguments key attribute name when saving
+                        parsed_doc[i] = tag
 
         return parsed_doc
 
@@ -60,7 +61,8 @@ class DictWriter:
                         tag = getattr(section, attr)
 
                         if tag:
-                            section_dict[attr] = tag
+                            # Always use the arguments key attribute name when saving
+                            section_dict[i] = tag
 
             section_seq.append(section_dict)
 
@@ -89,7 +91,8 @@ class DictWriter:
                                 prop.dtype.endswith("-tuple") and len(prop.value) > 0:
                             prop_dict["value"] = "(%s)" % ";".join(prop.value[0])
                         else:
-                            prop_dict[attr] = tag
+                            # Always use the arguments key attribute name when saving
+                            prop_dict[i] = tag
 
             props_seq.append(prop_dict)
 
@@ -128,9 +131,9 @@ class DictReader:
             raise ParserException("Invalid odML document: Could not find odml-version.")
 
         elif self.parsed_doc.get('odml-version') != FORMAT_VERSION:
-            msg = ("Cannot read file: invalid odML document format version '%s'. \n"
-                   "This package supports odML format versions: '%s'."
-                   % (self.parsed_doc.get('odml-version'), FORMAT_VERSION))
+            msg = ("Cannot parse odML document with format version '%s'. \n"
+                   "\tUse the 'tools.VersionConverter' to import previous odML formats."
+                   % self.parsed_doc.get('odml-version'))
             raise InvalidVersionException(msg)
 
         self.parsed_doc = self.parsed_doc['Document']
@@ -143,7 +146,8 @@ class DictReader:
             if attr == 'sections':
                 doc_secs = self.parse_sections(self.parsed_doc['sections'])
             elif attr:
-                doc_attrs[i] = self.parsed_doc[i]
+                # Make sure to always use the correct odml format attribute name
+                doc_attrs[odmlfmt.Document.map(attr)] = self.parsed_doc[i]
 
         doc = odmlfmt.Document.create(**doc_attrs)
         for sec in doc_secs:
@@ -166,7 +170,8 @@ class DictReader:
                 elif attr == 'sections':
                     children_secs = self.parse_sections(section['sections'])
                 elif attr:
-                    sec_attrs[attr] = section[attr]
+                    # Make sure to always use the correct odml format attribute name
+                    sec_attrs[odmlfmt.Section.map(attr)] = section[attr]
 
             sec = odmlfmt.Section.create(**sec_attrs)
             for prop in sec_props:
@@ -188,7 +193,8 @@ class DictReader:
             for i in _property:
                 attr = self.is_valid_attribute(i, odmlfmt.Property)
                 if attr:
-                    prop_attrs[attr] = _property[attr]
+                    # Make sure to always use the correct odml format attribute name
+                    prop_attrs[odmlfmt.Property.map(attr)] = _property[attr]
 
             prop = odmlfmt.Property.create(**prop_attrs)
             odml_props.append(prop)
diff --git a/odml/tools/xmlparser.py b/odml/tools/xmlparser.py
index 1f1552f..1a4f240 100644
--- a/odml/tools/xmlparser.py
+++ b/odml/tools/xmlparser.py
@@ -159,9 +159,9 @@ class XMLReader(object):
             raise ParserException("Could not find format version attribute "
                                   "in <odML> tag.\n")
         elif root.attrib['version'] != FORMAT_VERSION:
-            msg = ("Cannot read file: invalid odML document format version '%s'. \n"
-                   "This package supports odML format versions: '%s'."
-                   % (root.attrib['version'], FORMAT_VERSION))
+            msg = ("Cannot parse odML document with format version '%s'. \n"
+                   "\tUse the 'tools.VersionConverter' to import previous odML formats."
+                   % root.attrib['version'])
             raise InvalidVersionException(msg)
 
     def from_file(self, xml_file):
diff --git a/resources/install_osx_virtualenv.sh b/resources/install_osx_virtualenv.sh
deleted file mode 100644
index c38ed9a..0000000
--- a/resources/install_osx_virtualenv.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/bash
-echo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-echo Running install_osx_virtalenv.sh
-python --version;
-echo travis python version:  $TRAVIS_PYTHON_VERSION
-echo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
-
-    brew update;
-
-    if [[ "$OSXENV" == "2.7" ]]; then
-        echo python 2.7
-        brew install python;
-        virtualenv venv -p python;
-        source venv/bin/activate;
-    else
-        echo some other version 
-        brew install python3;
-        virtualenv venv -p python3;
-        source venv/bin/activate;
-        export PYCMD=python3;
-        export PIPCMD=pip3;
-    fi
-fi
-
-which python

Rename 'id' variables
When setting entity UUIDs we use the name `id` for the argument in the setter. This isn't nice since `id` is a builtin function. This doesn't cause any major issues since the scope of the functions where it's used is rather small. It's also understandable to use the name `id` for the keyword argument in the `set_id()` method and something like `id_` would be ugly.

We could instead use the name `uuid`, or something like `eid` (for entity ID), or `oid` (object ID). Another idea might be `sid` (Section ID) and `pid` (Property ID). This would just be for the keyword argument in the `set_id()` method and anywhere else the word `id` might appear as a non-attribute.

Thoughts and suggestions welcome.
diff --git a/test/test_doc.py b/test/test_doc.py
index d598317..d6379dd 100644
--- a/test/test_doc.py
+++ b/test/test_doc.py
@@ -37,10 +37,10 @@ class TestSection(unittest.TestCase):
         doc = Document()
         self.assertIsNotNone(doc.id)
 
-        doc = Document("D", id="79b613eb-a256-46bf-84f6-207df465b8f7")
+        doc = Document("D", oid="79b613eb-a256-46bf-84f6-207df465b8f7")
         self.assertEqual(doc.id, "79b613eb-a256-46bf-84f6-207df465b8f7")
 
-        doc = Document("D", id="id")
+        doc = Document("D", oid="id")
         self.assertNotEqual(doc.id, "id")
 
         # Make sure id cannot be reset programmatically.
diff --git a/test/test_doc_integration.py b/test/test_doc_integration.py
index aed6dbd..fec4fbd 100644
--- a/test/test_doc_integration.py
+++ b/test/test_doc_integration.py
@@ -62,7 +62,7 @@ class TestDocumentIntegration(unittest.TestCase):
 
         # Test correct save and load of assigned id.
         assigned_id = "79b613eb-a256-46bf-84f6-207df465b8f7"
-        self.doc = odml.Document(id=assigned_id)
+        self.doc = odml.Document(oid=assigned_id)
         jdoc, xdoc, ydoc = self.save_load()
 
         self.assertEqual(jdoc.id, assigned_id)
diff --git a/test/test_parser_json.py b/test/test_parser_json.py
index 8d5808b..469bb7b 100644
--- a/test/test_parser_json.py
+++ b/test/test_parser_json.py
@@ -3,7 +3,7 @@ import os
 import unittest
 
 from odml.tools import dict_parser
-from odml.tools.parser_utils import ParserException
+from odml.tools.parser_utils import ParserException, InvalidVersionException
 
 
 class TestJSONParser(unittest.TestCase):
@@ -40,12 +40,9 @@ class TestJSONParser(unittest.TestCase):
 
     def test_invalid_version(self):
         filename = "invalid_version.json"
-        message = "invalid odML document format version"
 
         with open(os.path.join(self.basepath, filename)) as json_data:
             parsed_doc = json.load(json_data)
 
-        with self.assertRaises(ParserException) as exc:
+        with self.assertRaises(InvalidVersionException):
             _ = self.json_reader.to_odml(parsed_doc)
-
-        self.assertIn(message, str(exc.exception))
diff --git a/test/test_parser_xml.py b/test/test_parser_xml.py
index f998209..c7bbb74 100644
--- a/test/test_parser_xml.py
+++ b/test/test_parser_xml.py
@@ -2,7 +2,7 @@ import os
 import unittest
 
 from odml.tools import xmlparser
-from odml.tools.parser_utils import ParserException
+from odml.tools.parser_utils import ParserException, InvalidVersionException
 
 
 class TestXMLParser(unittest.TestCase):
@@ -33,9 +33,6 @@ class TestXMLParser(unittest.TestCase):
 
     def test_invalid_version(self):
         filename = "invalid_version.xml"
-        message = "invalid odML document format version"
 
-        with self.assertRaises(ParserException) as exc:
+        with self.assertRaises(InvalidVersionException):
             _ = self.xml_reader.from_file(os.path.join(self.basepath, filename))
-
-        self.assertIn(message, str(exc.exception))
diff --git a/test/test_parser_yaml.py b/test/test_parser_yaml.py
index e7333aa..0c77dd1 100644
--- a/test/test_parser_yaml.py
+++ b/test/test_parser_yaml.py
@@ -3,7 +3,7 @@ import unittest
 import yaml
 
 from odml.tools import dict_parser
-from odml.tools.parser_utils import ParserException
+from odml.tools.parser_utils import ParserException, InvalidVersionException
 
 
 class TestYAMLParser(unittest.TestCase):
@@ -40,12 +40,9 @@ class TestYAMLParser(unittest.TestCase):
 
     def test_invalid_version(self):
         filename = "invalid_version.yaml"
-        message = "invalid odML document format version"
 
         with open(os.path.join(self.basepath, filename)) as raw_data:
             parsed_doc = yaml.load(raw_data)
 
-        with self.assertRaises(ParserException) as exc:
+        with self.assertRaises(InvalidVersionException):
             _ = self.yaml_reader.to_odml(parsed_doc)
-
-        self.assertIn(message, str(exc.exception))
diff --git a/test/test_property.py b/test/test_property.py
index 9eafedb..876bc37 100644
--- a/test/test_property.py
+++ b/test/test_property.py
@@ -436,10 +436,10 @@ class TestProperty(unittest.TestCase):
         p = Property(name="P")
         self.assertIsNotNone(p.id)
 
-        p = Property("P", id="79b613eb-a256-46bf-84f6-207df465b8f7")
+        p = Property("P", oid="79b613eb-a256-46bf-84f6-207df465b8f7")
         self.assertEqual(p.id, "79b613eb-a256-46bf-84f6-207df465b8f7")
 
-        p = Property("P", id="id")
+        p = Property("P", oid="id")
         self.assertNotEqual(p.id, "id")
 
         # Make sure id cannot be reset programmatically.
diff --git a/test/test_property_integration.py b/test/test_property_integration.py
index cf30d59..b19766e 100644
--- a/test/test_property_integration.py
+++ b/test/test_property_integration.py
@@ -63,7 +63,7 @@ class TestPropertyIntegration(unittest.TestCase):
         # Test correct save and load of assigned id.
         prop_name = "assigned_id"
         assigned_id = "79b613eb-a256-46bf-84f6-207df465b8f7"
-        _ = odml.Property(name=prop_name, id=assigned_id,
+        _ = odml.Property(name=prop_name, oid=assigned_id,
                           parent=self.doc.sections[0])
 
         jdoc, xdoc, ydoc = self.save_load()
diff --git a/test/test_section.py b/test/test_section.py
index 5581928..6275513 100644
--- a/test/test_section.py
+++ b/test/test_section.py
@@ -207,10 +207,10 @@ class TestSection(unittest.TestCase):
         s = Section(name="S")
         self.assertIsNotNone(s.id)
 
-        s = Section("S", id="79b613eb-a256-46bf-84f6-207df465b8f7")
+        s = Section("S", oid="79b613eb-a256-46bf-84f6-207df465b8f7")
         self.assertEqual(s.id, "79b613eb-a256-46bf-84f6-207df465b8f7")
 
-        s = Section("S", id="id")
+        s = Section("S", oid="id")
         self.assertNotEqual(s.id, "id")
 
         # Make sure id cannot be reset programmatically.
diff --git a/test/test_section_integration.py b/test/test_section_integration.py
index f15246f..f3e667d 100644
--- a/test/test_section_integration.py
+++ b/test/test_section_integration.py
@@ -55,20 +55,20 @@ class TestSectionIntegration(unittest.TestCase):
 
         jdoc, xdoc, ydoc = self.save_load()
 
-        self.assertEqual(jdoc.sections[sec_name].id, sec.id)
-        self.assertEqual(xdoc.sections[sec_name].id, sec.id)
-        self.assertEqual(ydoc.sections[sec_name].id, sec.id)
+        self.assertEqual(jdoc.sections[sec_name].oid, sec.oid)
+        self.assertEqual(xdoc.sections[sec_name].oid, sec.oid)
+        self.assertEqual(ydoc.sections[sec_name].oid, sec.oid)
 
         # Test correct save and load of assigned id.
         sec_name = "assigned_id"
         assigned_id = "79b613eb-a256-46bf-84f6-207df465b8f7"
-        _ = odml.Section(name=sec_name, id=assigned_id, parent=self.doc)
+        _ = odml.Section(name=sec_name, oid=assigned_id, parent=self.doc)
 
         jdoc, xdoc, ydoc = self.save_load()
 
-        self.assertEqual(jdoc.sections[sec_name].id, assigned_id)
-        self.assertEqual(xdoc.sections[sec_name].id, assigned_id)
-        self.assertEqual(ydoc.sections[sec_name].id, assigned_id)
+        self.assertEqual(jdoc.sections[sec_name].oid, assigned_id)
+        self.assertEqual(xdoc.sections[sec_name].oid, assigned_id)
+        self.assertEqual(ydoc.sections[sec_name].oid, assigned_id)
 
     def test_simple_attributes(self):
         """

pip install -e .
parse_log_pytest
requirements.txt
pytest
apt-get update apt-get install -y gcc libxml2-dev libxslt1-dev lib32z1-dev
3.9
requirements/base.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
exceptiongroup==1.2.2
iniconfig==2.1.0
isodate==0.7.2
lxml==5.3.1
-e git+https://github.com/G-Node/python-odml.git@eeff5922987b064681d1328f81af317d8171808f#egg=odML
packaging==24.2
pluggy==1.5.0
pyparsing==3.2.3
pytest==8.3.5
PyYAML==6.0.2
rdflib==7.1.4
tomli==2.2.1

name: python-odml
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - exceptiongroup==1.2.2
      - iniconfig==2.1.0
      - isodate==0.7.2
      - lxml==5.3.1
      - packaging==24.2
      - pluggy==1.5.0
      - pyparsing==3.2.3
      - pytest==8.3.5
      - pyyaml==6.0.2
      - rdflib==7.1.4
      - tomli==2.2.1
prefix: /opt/conda/envs/python-odml

test/test_doc.py::TestSection::test_id test/test_property.py::TestProperty::test_id test/test_section.py::TestSection::test_id
test/test_doc_integration.py::TestDocumentIntegration::test_children test/test_doc_integration.py::TestDocumentIntegration::test_id test/test_doc_integration.py::TestDocumentIntegration::test_simple_attributes test/test_parser_yaml.py::TestYAMLParser::test_invalid_version test/test_parser_yaml.py::TestYAMLParser::test_missing_root test/test_parser_yaml.py::TestYAMLParser::test_missing_version test/test_property_integration.py::TestPropertyIntegration::test_id test/test_property_integration.py::TestPropertyIntegration::test_simple_attributes test/test_section_integration.py::TestSectionIntegration::test_children test/test_section_integration.py::TestSectionIntegration::test_id test/test_section_integration.py::TestSectionIntegration::test_simple_attributes
test/test_doc.py::TestSection::test_append test/test_doc.py::TestSection::test_date test/test_doc.py::TestSection::test_extend test/test_doc.py::TestSection::test_get_terminology_equivalent test/test_doc.py::TestSection::test_insert test/test_doc.py::TestSection::test_new_id test/test_doc.py::TestSection::test_simple_attributes test/test_parser_json.py::TestJSONParser::test_invalid_version test/test_parser_json.py::TestJSONParser::test_missing_root test/test_parser_json.py::TestJSONParser::test_missing_version test/test_parser_xml.py::TestXMLParser::test_invalid_root test/test_parser_xml.py::TestXMLParser::test_invalid_version test/test_parser_xml.py::TestXMLParser::test_missing_version test/test_property.py::TestProperty::test_bool_conversion test/test_property.py::TestProperty::test_clone test/test_property.py::TestProperty::test_dtype test/test_property.py::TestProperty::test_get_merged_equivalent test/test_property.py::TestProperty::test_get_path test/test_property.py::TestProperty::test_get_set_value test/test_property.py::TestProperty::test_merge test/test_property.py::TestProperty::test_merge_check test/test_property.py::TestProperty::test_name test/test_property.py::TestProperty::test_new_id test/test_property.py::TestProperty::test_parent test/test_property.py::TestProperty::test_simple_attributes test/test_property.py::TestProperty::test_str_to_int_convert test/test_property.py::TestProperty::test_value test/test_property.py::TestProperty::test_value_append test/test_property.py::TestProperty::test_value_extend test/test_section.py::TestSection::test_append test/test_section.py::TestSection::test_children test/test_section.py::TestSection::test_clone test/test_section.py::TestSection::test_contains test/test_section.py::TestSection::test_extend test/test_section.py::TestSection::test_include test/test_section.py::TestSection::test_insert test/test_section.py::TestSection::test_link test/test_section.py::TestSection::test_merge test/test_section.py::TestSection::test_merge_check test/test_section.py::TestSection::test_name test/test_section.py::TestSection::test_new_id test/test_section.py::TestSection::test_parent test/test_section.py::TestSection::test_path test/test_section.py::TestSection::test_remove test/test_section.py::TestSection::test_reorder test/test_section.py::TestSection::test_repository test/test_section.py::TestSection::test_simple_attributes test/test_section.py::TestSection::test_unmerge test/test_section_integration.py::TestSectionIntegration::test_include test/test_section_integration.py::TestSectionIntegration::test_link
odml/base.py odml/format.py odml/tools/dict_parser.py odml/doc.py doc/example_odMLs/ex_1.rdf doc/example_odMLs/odml_ex_1_generator.py odml/tools/xmlparser.py doc/example_odMLs/ex_1.odml resources/install_osx_virtualenv.sh odml/section.py odml/property.py doc/example_odMLs/ex_2.odml
doc/example_odMLs/sample_odml.odml odml/base.py odml/format.py odml/tools/dict_parser.py odml/doc.py doc/example_odMLs/odml_ex_1_generator.py odml/tools/xmlparser.py resources/install_osx_virtualenv.sh odml/section.py doc/example_odMLs/sample_odml.rdf odml/property.py doc/example_odMLs/ex_2.odml